pax_global_header00006660000000000000000000000064144622260670014523gustar00rootroot0000000000000052 comment=6d4c2fb50df13bc32a19ef83f3d8811e380cf4c9 quickroute-linux-upstream-2.5/000077500000000000000000000000001446222606700165575ustar00rootroot00000000000000quickroute-linux-upstream-2.5/.gitignore000066400000000000000000000001261446222606700205460ustar00rootroot00000000000000*.pidb *.resources *.mdb *.dll *.dll.config *~ bin obj /tmp.* /QuickRoute.userprefs quickroute-linux-upstream-2.5/3rdparty/000077500000000000000000000000001446222606700203275ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/000077500000000000000000000000001446222606700225475ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/BitConverterEx.cs000066400000000000000000000333441446222606700260100ustar00rootroot00000000000000using System; namespace ExifLibrary { /// /// An endian-aware converter for converting between base data types /// and an array of bytes. /// public class BitConverterEx { #region Public Enums /// /// Represents the byte order. /// public enum ByteOrder { LittleEndian = 1, BigEndian = 2, } #endregion #region Member Variables private ByteOrder mFrom, mTo; #endregion #region Constructors public BitConverterEx(ByteOrder from, ByteOrder to) { mFrom = from; mTo = to; } #endregion #region Properties /// /// Indicates the byte order in which data is stored in this platform. /// public static ByteOrder SystemByteOrder { get { return (BitConverter.IsLittleEndian ? ByteOrder.LittleEndian : ByteOrder.BigEndian); } } #endregion #region Predefined Values /// /// Returns a bit converter that converts between little-endian and system byte-order. /// public static BitConverterEx LittleEndian { get { return new BitConverterEx(ByteOrder.LittleEndian, BitConverterEx.SystemByteOrder); } } /// /// Returns a bit converter that converts between big-endian and system byte-order. /// public static BitConverterEx BigEndian { get { return new BitConverterEx(ByteOrder.BigEndian, BitConverterEx.SystemByteOrder); } } /// /// Returns a bit converter that does not do any byte-order conversion. /// public static BitConverterEx SystemEndian { get { return new BitConverterEx(BitConverterEx.SystemByteOrder, BitConverterEx.SystemByteOrder); } } #endregion #region Static Methods /// /// Converts the given array of bytes to a Unicode character. /// public static char ToChar(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 2, from, to); return BitConverter.ToChar(data, 0); } /// /// Converts the given array of bytes to a 16-bit unsigned integer. /// public static ushort ToUInt16(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 2, from, to); return BitConverter.ToUInt16(data, 0); } /// /// Converts the given array of bytes to a 32-bit unsigned integer. /// public static uint ToUInt32(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 4, from, to); return BitConverter.ToUInt32(data, 0); } /// /// Converts the given array of bytes to a 64-bit unsigned integer. /// public static ulong ToUInt64(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 8, from, to); return BitConverter.ToUInt64(data, 0); } /// /// Converts the given array of bytes to a 16-bit signed integer. /// public static short ToInt16(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 2, from, to); return BitConverter.ToInt16(data, 0); } /// /// Converts the given array of bytes to a 32-bit signed integer. /// public static int ToInt32(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 4, from, to); return BitConverter.ToInt32(data, 0); } /// /// Converts the given array of bytes to a 64-bit signed integer. /// public static long ToInt64(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 8, from, to); return BitConverter.ToInt64(data, 0); } /// /// Converts the given array of bytes to a single precision floating number. /// public static float ToSingle(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 4, from, to); return BitConverter.ToSingle(data, 0); } /// /// Converts the given array of bytes to a double precision floating number. /// public static double ToDouble(byte[] value, long startIndex, ByteOrder from, ByteOrder to) { byte[] data = CheckData(value, startIndex, 8, from, to); return BitConverter.ToDouble(data, 0); } /// /// Converts the given 16-bit unsigned integer to an array of bytes. /// public static byte[] GetBytes(ushort value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given 32-bit unsigned integer to an array of bytes. /// public static byte[] GetBytes(uint value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given 64-bit unsigned integer to an array of bytes. /// public static byte[] GetBytes(ulong value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given 16-bit signed integer to an array of bytes. /// public static byte[] GetBytes(short value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given 32-bit signed integer to an array of bytes. /// public static byte[] GetBytes(int value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given 64-bit signed integer to an array of bytes. /// public static byte[] GetBytes(long value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given single precision floating-point number to an array of bytes. /// public static byte[] GetBytes(float value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } /// /// Converts the given double precision floating-point number to an array of bytes. /// public static byte[] GetBytes(double value, ByteOrder from, ByteOrder to) { byte[] data = BitConverter.GetBytes(value); data = CheckData(data, from, to); return data; } #endregion #region Instance Methods /// /// Converts the given array of bytes to a 16-bit unsigned integer. /// public char ToChar(byte[] value, long startIndex) { return BitConverterEx.ToChar(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a 16-bit unsigned integer. /// public ushort ToUInt16(byte[] value, long startIndex) { return BitConverterEx.ToUInt16(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a 32-bit unsigned integer. /// public uint ToUInt32(byte[] value, long startIndex) { return BitConverterEx.ToUInt32(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a 64-bit unsigned integer. /// public ulong ToUInt64(byte[] value, long startIndex) { return BitConverterEx.ToUInt64(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a 16-bit signed integer. /// public short ToInt16(byte[] value, long startIndex) { return BitConverterEx.ToInt16(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a 32-bit signed integer. /// public int ToInt32(byte[] value, long startIndex) { return BitConverterEx.ToInt32(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a 64-bit signed integer. /// public long ToInt64(byte[] value, long startIndex) { return BitConverterEx.ToInt64(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a single precision floating number. /// public float ToSingle(byte[] value, long startIndex) { return BitConverterEx.ToSingle(value, startIndex, mFrom, mTo); } /// /// Converts the given array of bytes to a double precision floating number. /// public double ToDouble(byte[] value, long startIndex) { return BitConverterEx.ToDouble(value, startIndex, mFrom, mTo); } /// /// Converts the given 16-bit unsigned integer to an array of bytes. /// public byte[] GetBytes(ushort value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given 32-bit unsigned integer to an array of bytes. /// public byte[] GetBytes(uint value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given 64-bit unsigned integer to an array of bytes. /// public byte[] GetBytes(ulong value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given 16-bit signed integer to an array of bytes. /// public byte[] GetBytes(short value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given 32-bit signed integer to an array of bytes. /// public byte[] GetBytes(int value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given 64-bit signed integer to an array of bytes. /// public byte[] GetBytes(long value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given single precision floating-point number to an array of bytes. /// public byte[] GetBytes(float value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } /// /// Converts the given double precision floating-point number to an array of bytes. /// public byte[] GetBytes(double value) { return BitConverterEx.GetBytes(value, mFrom, mTo); } #endregion #region Private Helpers /// /// Reverse the array of bytes as needed. /// private static byte[] CheckData(byte[] value, long startIndex, long length, ByteOrder from, ByteOrder to) { byte[] data = new byte[length]; Array.Copy(value, startIndex, data, 0, length); if (from != to) Array.Reverse(data); return data; } /// /// Reverse the array of bytes as needed. /// private static byte[] CheckData(byte[] value, ByteOrder from, ByteOrder to) { return CheckData(value, 0, value.Length, from, to); } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifBitConverter.cs000066400000000000000000000351651446222606700263320ustar00rootroot00000000000000using System; using System.Text; namespace ExifLibrary { /// /// Converts between exif data types and array of bytes. /// public class ExifBitConverter : BitConverterEx { #region Constructors public ExifBitConverter(ByteOrder from, ByteOrder to) : base(from, to) { ; } #endregion #region Static Methods /// /// Returns an ASCII string converted from the given byte array. /// public static string ToAscii(byte[] data, bool endatfirstnull, Encoding encoding) { int len = data.Length; if (endatfirstnull) { len = Array.IndexOf(data, (byte)0); if (len == -1) len = data.Length; } return encoding.GetString(data, 0, len); } /// /// Returns an ASCII string converted from the given byte array. /// public static string ToAscii(byte[] data, Encoding encoding) { return ToAscii(data, true, encoding); } /// /// Returns a string converted from the given byte array. /// from the numeric value of each byte. /// public static string ToString(byte[] data) { StringBuilder sb = new StringBuilder(); foreach (byte b in data) sb.Append(b); return sb.ToString(); } /// /// Returns a DateTime object converted from the given byte array. /// public static DateTime ToDateTime(byte[] data, bool hastime) { string str = ToAscii(data, Encoding.ASCII); string[] parts = str.Split(new char[] { ':', ' ' }); try { if (hastime && parts.Length == 6) { // yyyy:MM:dd HH:mm:ss // This is the expected format though some cameras // can use single digits. See Issue 21. return new DateTime(int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2]), int.Parse(parts[3]), int.Parse(parts[4]), int.Parse(parts[5])); } else if (!hastime && parts.Length == 3) { // yyyy:MM:dd return new DateTime(int.Parse(parts[0]), int.Parse(parts[1]), int.Parse(parts[2])); } else { return DateTime.MinValue; } } catch (ArgumentOutOfRangeException) { return DateTime.MinValue; } catch (ArgumentException) { return DateTime.MinValue; } } /// /// Returns a DateTime object converted from the given byte array. /// public static DateTime ToDateTime(byte[] data) { return ToDateTime(data, true); } /// /// Returns an unsigned rational number converted from the first /// eight bytes of the given byte array. The first four bytes are /// assumed to be the numerator and the next four bytes are the /// denumerator. /// Numbers are converted from the given byte-order to platform byte-order. /// public static MathEx.UFraction32 ToURational(byte[] data, ByteOrder frombyteorder) { byte[] num = new byte[4]; byte[] den = new byte[4]; Array.Copy(data, 0, num, 0, 4); Array.Copy(data, 4, den, 0, 4); return new MathEx.UFraction32(ToUInt32(num, 0, frombyteorder, BitConverterEx.SystemByteOrder), ToUInt32(den, 0, frombyteorder, BitConverterEx.SystemByteOrder)); } /// /// Returns a signed rational number converted from the first /// eight bytes of the given byte array. The first four bytes are /// assumed to be the numerator and the next four bytes are the /// denumerator. /// Numbers are converted from the given byte-order to platform byte-order. /// public static MathEx.Fraction32 ToSRational(byte[] data, ByteOrder frombyteorder) { byte[] num = new byte[4]; byte[] den = new byte[4]; Array.Copy(data, 0, num, 0, 4); Array.Copy(data, 4, den, 0, 4); return new MathEx.Fraction32(ToInt32(num, 0, frombyteorder, BitConverterEx.SystemByteOrder), ToInt32(den, 0, frombyteorder, BitConverterEx.SystemByteOrder)); } /// /// Returns an array of 16-bit unsigned integers converted from /// the given byte array. /// Numbers are converted from the given byte-order to platform byte-order. /// public static ushort[] ToUShortArray(byte[] data, int count, ByteOrder frombyteorder) { ushort[] numbers = new ushort[count]; for (uint i = 0; i < count; i++) { byte[] num = new byte[2]; Array.Copy(data, i * 2, num, 0, 2); numbers[i] = ToUInt16(num, 0, frombyteorder, BitConverterEx.SystemByteOrder); } return numbers; } /// /// Returns an array of 32-bit unsigned integers converted from /// the given byte array. /// Numbers are converted from the given byte-order to platform byte-order. /// public static uint[] ToUIntArray(byte[] data, int count, ByteOrder frombyteorder) { uint[] numbers = new uint[count]; for (uint i = 0; i < count; i++) { byte[] num = new byte[4]; Array.Copy(data, i * 4, num, 0, 4); numbers[i] = ToUInt32(num, 0, frombyteorder, BitConverterEx.SystemByteOrder); } return numbers; } /// /// Returns an array of 32-bit signed integers converted from /// the given byte array. /// Numbers are converted from the given byte-order to platform byte-order. /// public static int[] ToSIntArray(byte[] data, int count, ByteOrder byteorder) { int[] numbers = new int[count]; for (uint i = 0; i < count; i++) { byte[] num = new byte[4]; Array.Copy(data, i * 4, num, 0, 4); numbers[i] = ToInt32(num, 0, byteorder, BitConverterEx.SystemByteOrder); } return numbers; } /// /// Returns an array of unsigned rational numbers converted from /// the given byte array. /// Numbers are converted from the given byte-order to platform byte-order. /// public static MathEx.UFraction32[] ToURationalArray(byte[] data, int count, ByteOrder frombyteorder) { MathEx.UFraction32[] numbers = new MathEx.UFraction32[count]; for (uint i = 0; i < count; i++) { byte[] num = new byte[4]; byte[] den = new byte[4]; Array.Copy(data, i * 8, num, 0, 4); Array.Copy(data, i * 8 + 4, den, 0, 4); numbers[i].Set(ToUInt32(num, 0, frombyteorder, BitConverterEx.SystemByteOrder), ToUInt32(den, 0, frombyteorder, BitConverterEx.SystemByteOrder)); } return numbers; } /// /// Returns an array of signed rational numbers converted from /// the given byte array. /// Numbers are converted from the given byte-order to platform byte-order. /// public static MathEx.Fraction32[] ToSRationalArray(byte[] data, int count, ByteOrder frombyteorder) { MathEx.Fraction32[] numbers = new MathEx.Fraction32[count]; for (uint i = 0; i < count; i++) { byte[] num = new byte[4]; byte[] den = new byte[4]; Array.Copy(data, i * 8, num, 0, 4); Array.Copy(data, i * 8 + 4, den, 0, 4); numbers[i].Set(ToInt32(num, 0, frombyteorder, BitConverterEx.SystemByteOrder), ToInt32(den, 0, frombyteorder, BitConverterEx.SystemByteOrder)); } return numbers; } /// /// Converts the given ascii string to an array of bytes optionally adding a null terminator. /// public static byte[] GetBytes(string value, bool addnull, Encoding encoding) { if (addnull) value += '\0'; return encoding.GetBytes(value); } /// /// Converts the given ascii string to an array of bytes without adding a null terminator. /// public static byte[] GetBytes(string value, Encoding encoding) { return GetBytes(value, false, encoding); } /// /// Converts the given datetime to an array of bytes with a null terminator. /// public static byte[] GetBytes(DateTime value, bool hastime) { string str = ""; if (hastime) str = value.ToString("yyyy:MM:dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); else str = value.ToString("yyyy:MM:dd", System.Globalization.CultureInfo.InvariantCulture); return GetBytes(str, true, Encoding.ASCII); } /// /// Converts the given unsigned rational number to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(MathEx.UFraction32 value, ByteOrder tobyteorder) { byte[] num = GetBytes(value.Numerator, BitConverterEx.SystemByteOrder, tobyteorder); byte[] den = GetBytes(value.Denominator, BitConverterEx.SystemByteOrder, tobyteorder); byte[] data = new byte[8]; Array.Copy(num, 0, data, 0, 4); Array.Copy(den, 0, data, 4, 4); return data; } /// /// Converts the given signed rational number to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(MathEx.Fraction32 value, ByteOrder tobyteorder) { byte[] num = GetBytes(value.Numerator, BitConverterEx.SystemByteOrder, tobyteorder); byte[] den = GetBytes(value.Denominator, BitConverterEx.SystemByteOrder, tobyteorder); byte[] data = new byte[8]; Array.Copy(num, 0, data, 0, 4); Array.Copy(den, 0, data, 4, 4); return data; } /// /// Converts the given array of 16-bit unsigned integers to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(ushort[] value, ByteOrder tobyteorder) { byte[] data = new byte[2 * value.Length]; for (int i = 0; i < value.Length; i++) { byte[] num = GetBytes(value[i], BitConverterEx.SystemByteOrder, tobyteorder); Array.Copy(num, 0, data, i * 2, 2); } return data; } /// /// Converts the given array of 32-bit unsigned integers to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(uint[] value, ByteOrder tobyteorder) { byte[] data = new byte[4 * value.Length]; for (int i = 0; i < value.Length; i++) { byte[] num = GetBytes(value[i], BitConverterEx.SystemByteOrder, tobyteorder); Array.Copy(num, 0, data, i * 4, 4); } return data; } /// /// Converts the given array of 32-bit signed integers to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(int[] value, ByteOrder tobyteorder) { byte[] data = new byte[4 * value.Length]; for (int i = 0; i < value.Length; i++) { byte[] num = GetBytes(value[i], BitConverterEx.SystemByteOrder, tobyteorder); Array.Copy(num, 0, data, i * 4, 4); } return data; } /// /// Converts the given array of unsigned rationals to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(MathEx.UFraction32[] value, ByteOrder tobyteorder) { byte[] data = new byte[8 * value.Length]; for (int i = 0; i < value.Length; i++) { byte[] num = GetBytes(value[i].Numerator, BitConverterEx.SystemByteOrder, tobyteorder); byte[] den = GetBytes(value[i].Denominator, BitConverterEx.SystemByteOrder, tobyteorder); Array.Copy(num, 0, data, i * 8, 4); Array.Copy(den, 0, data, i * 8 + 4, 4); } return data; } /// /// Converts the given array of signed rationals to an array of bytes. /// Numbers are converted from the platform byte-order to the given byte-order. /// public static byte[] GetBytes(MathEx.Fraction32[] value, ByteOrder tobyteorder) { byte[] data = new byte[8 * value.Length]; for (int i = 0; i < value.Length; i++) { byte[] num = GetBytes(value[i].Numerator, BitConverterEx.SystemByteOrder, tobyteorder); byte[] den = GetBytes(value[i].Denominator, BitConverterEx.SystemByteOrder, tobyteorder); Array.Copy(num, 0, data, i * 8, 4); Array.Copy(den, 0, data, i * 8 + 4, 4); } return data; } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifEnums.cs000066400000000000000000000364541446222606700250150ustar00rootroot00000000000000using System; namespace ExifLibrary { /// /// Represents a general indication of the kind of data contained in this subfile. /// [Flags] public enum NewSubfileType : uint { /// /// This image is a reduced resolution version of another image in the file. /// ReducedResolution = 1, /// /// The image is a single page of a multi-page image. /// MultiPage = 2, /// /// This image defines a transparency mask for another image in this file. /// TransparencyMask = 4, /// /// The IFD containing this tag is Mixed Raster Content (MRC) specific. /// MRCSpecific = 16 } /// /// Represents a general indication of the kind of data contained in this subfile. /// public enum SubfileType : ushort { /// /// This image is a full resolution image. /// FullResolution = 1, /// /// This image is a reduced resolution version of another image in the file. /// ReducedResolution = 2, /// /// The image is a single page of a multi-page image. /// MultiPage = 3 } /// /// Represenst the compression scheme used for the image data. /// public enum Compression : ushort { /// /// No compression. /// Uncompressed = 1, /// /// CCITT modified Huffman RLE compression. /// CCITT1D = 2, /// /// CCITT Group 3 fax encoding. /// Group3Fax = 3, /// /// CCITT Group 4 fax encoding. /// Group4Fax = 4, /// /// LZW compression. /// LZW = 5, /// /// JPEG compression. /// JPEG = 6, /// /// PackBits compression, aka Macintosh RLE. /// PackBits = 32773 } /// /// Represents the pixel composition. /// public enum PhotometricInterpretation : ushort { /// /// For bilevel and grayscale images: 0 is imaged as white. /// WhiteIsZero = 0, /// /// For bilevel and grayscale images: 0 is imaged as black. /// BlackIsZero = 1, /// /// RGB value of (0,0,0) represents black, and (255,255,255) represents white, /// assuming 8-bit components. The components are stored in the indicated order: /// first Red, then Green, then Blue. /// RGB = 2, /// /// Palette color. In this model, a color is described with a single component. /// The value of the component is used as an index into the red, green and blue /// curves in the ColorMap field to retrieve an RGB triplet that defines the color. /// With a palette, ColorMap must be present and SamplesPerPixel must be 1. /// RGBPalette = 3, /// /// The image is used to define an irregularly shaped region of another image /// in the same file. SamplesPerPixel and BitsPerSample must be 1. /// PackBits compression is recommended. The 1-bits define the interior /// of the region; the 0-bits define the exterior of the region. /// TransparencyMask = 4, /// /// Seperated, usually CMYK. /// Seperated = 5, /// /// YCbCr color space. /// YCbCr = 6, /// /// CIE (L*, a*, b*) color space. /// CIELab = 8, /// /// ICC (L*, a*, b*) color space. /// ICCLab = 9, /// /// ITU (L*, a*, b*) color space. /// ITULab = 10, /// /// Color Filter Array color space. /// CFA = 32803, /// /// Linear Raw color space. /// LinearRaw = 34892, /// /// Pixar LogL color space. /// Pixar_LOGL = 32844, /// /// Pixar LogLUV color space. /// PixarLOGLUV = 32845 } /// /// Represents the technique used to convert from gray to black and white pixels. /// public enum Threshholding : ushort { /// /// No dithering or halftoning has been applied to the image data. /// BiLevel = 1, /// /// An ordered dither or halftone technique has been applied to the image data. /// HalfTone = 2, /// /// A randomized process such as error diffusion has been applied to the image data. /// ErrorDiffuse = 3 } /// /// Represents the logical order of bits within a byte. /// public enum FillOrder : ushort { /// /// Pixels with lower column values are stored in the higher-order bits of the byte. /// MSB2LSB = 1, /// /// Pixels with lower column values are stored in the lower-order bits of the byte. /// LSB2MSB = 2 } /// /// Represents the image orientation. /// public enum Orientation : ushort { /// /// The 0th row is at the visual top of the image, and the 0th column is the /// visual left-hand side. /// Normal = 1, /// /// The 0th row is at the visual top of the image, and the 0th column is /// the visual right-hand side. /// MirroredVertically = 2, /// /// The 0th row is at the visual bottom of the image, and the 0th column is /// the visual right-hand side. /// Rotated180 = 3, /// /// The 0th row is at the visual bottom of the image, and the 0th column is /// the visual left-hand side. /// MirroredHorizontally = 4, /// /// The 0th row is the visual left-hand side of the image, and the 0th column /// is the visual top. /// RotatedLeftAndMirroredVertically = 5, /// /// The 0th row is the visual right-hand side of the image, and the 0th column /// is the visual top. /// RotatedRight = 6, /// /// The 0th row is the visual right-hand side of the image, and the 0th column /// is the visual bottom. /// RotatedLeft = 7, /// /// The 0th row is the visual left-hand side of the image, and the 0th column /// is the visual bottom. /// RotatedRightAndMirroredVertically = 8 } /// /// Represents the recording format of pixel components. /// public enum PlanarConfiguration : ushort { /// /// Pixels are recorded in chunky format. /// ChunkyFormat = 1, /// /// Pixels are recorded in planar format. /// PlanarFormat = 2 } /// /// Represents the precision of the information contained in the gray response curve. /// public enum GrayResponseUnit : ushort { /// /// Number represents tenths of a unit. /// Tenth = 1, /// /// Number represents hundredths of a unit. /// Hundreth = 2, /// /// Number represents thousandths of a unit. /// Thousandth = 3, /// /// Number represents ten-thousandths of a unit. /// TenThousandth = 4, /// /// Number represents hundred-thousandths of a unit. /// HundredThousandth = 5 } /// /// Represents the options for Group 3 Fax compression. /// [Flags] public enum T4Options : uint { /// /// 2-dimensional coding (otherwise 1-dimensional is assumed). /// TwoDimensionalEncoding = 1, /// /// Uncompressed mode is used. /// Uncompressed = 2, /// /// Fill bits have been added before EOL codes such that EOL always /// ends on a byte boundary. /// FillBits = 4 } /// /// Represents the options for Group 4 Fax compression. /// [Flags] public enum T6Options : uint { /// /// Uncompressed mode is used. /// Uncompressed = 2 } /// /// The unit for measuring XResolution and YResolution. /// public enum ResolutionUnit : ushort { Inches = 2, Centimeters = 3 } public enum YCbCrPositioning : ushort { Centered = 1, CoSited = 2 } public enum ColorSpace : ushort { sRGB = 1, Uncalibrated = 0xfff } public enum ExposureProgram : ushort { NotDefined = 0, Manual = 1, Normal = 2, AperturePriority = 3, ShutterPriority = 4, /// /// Biased toward depth of field. /// Creative = 5, /// /// Biased toward fast shutter speed. /// Action = 6, /// /// For closeup photos with the background out of focus. /// Portrait = 7, /// /// For landscape photos with the background in focus. /// Landscape = 8 } public enum MeteringMode : ushort { Unknown = 0, Average = 1, CenterWeightedAverage = 2, Spot = 3, MultiSpot = 4, Pattern = 5, Partial = 6, Other = 255 } public enum LightSource : ushort { Unknown = 0, Daylight = 1, Fluorescent = 2, Tungsten = 3, Flash = 4, FineWeather = 9, CloudyWeather = 10, Shade = 11, /// /// D 5700 – 7100K /// DaylightFluorescent = 12, /// /// N 4600 – 5400K /// DayWhiteFluorescent = 13, /// /// W 3900 – 4500K /// CoolWhiteFluorescent = 14, /// /// WW 3200 – 3700K /// WhiteFluorescent = 15, StandardLightA = 17, StandardLightB = 18, StandardLightC = 19, D55 = 20, D65 = 21, D75 = 22, D50 = 23, ISOStudioTungsten = 24, OtherLightSource = 255 } [Flags] public enum Flash : ushort { FlashDidNotFire = 0, StrobeReturnLightNotDetected = 4, StrobeReturnLightDetected = 2, FlashFired = 1, CompulsoryFlashMode = 8, AutoMode = 16, NoFlashFunction = 32, RedEyeReductionMode = 64 } public enum SensingMethod : ushort { NotDefined = 1, OneChipColorAreaSensor = 2, TwoChipColorAreaSensor = 3, ThreeChipColorAreaSensor = 4, ColorSequentialAreaSensor = 5, TriLinearSensor = 7, ColorSequentialLinearSensor = 8 } public enum FileSource : byte { // UNDEFINED DSC = 3 } public enum SceneType : byte { // UNDEFINED DirectlyPhotographedImage = 1 } public enum CustomRendered : ushort { NormalProcess = 0, CustomProcess = 1 } public enum ExposureMode : ushort { Auto = 0, Manual = 1, AutoBracket = 2 } public enum WhiteBalance : ushort { Auto = 0, Manual = 1 } public enum SceneCaptureType : ushort { Standard = 0, Landscape = 1, Portrait = 2, NightScene = 3 } public enum GainControl : ushort { None = 0, LowGainUp = 1, HighGainUp = 2, LowGainDown = 3, HighGainDown = 4 } public enum Contrast : ushort { Normal = 0, Soft = 1, Hard = 2 } public enum Saturation : ushort { Normal = 0, Low = 1, High = 2 } public enum Sharpness : ushort { Normal = 0, Soft = 1, Hard = 2 } public enum SubjectDistanceRange : ushort { Unknown = 0, Macro = 1, CloseView = 2, DistantView = 3 } public enum GPSLatitudeRef : byte { // ASCII North = 78, // 'N' South = 83 // 'S' } public enum GPSLongitudeRef : byte { // ASCII West = 87, // 'W' East = 69 // 'E' } public enum GPSAltitudeRef : byte { AboveSeaLevel = 0, BelowSeaLevel = 1 } public enum GPSStatus : byte { // ASCII MeasurementInProgress = 65, // 'A' MeasurementInteroperability = 86 // 'V' } public enum GPSMeasureMode : byte { // ASCII TwoDimensional = 50, // '2' ThreeDimensional = 51 // '3' } public enum GPSSpeedRef : byte { // ASCII KilometersPerHour = 75, // 'K' MilesPerHour = 77, // 'M' Knots = 78 // 'N' } public enum GPSDirectionRef : byte { // ASCII TrueDirection = 84, // 'T' MagneticDirection = 77 // 'M' } public enum GPSDistanceRef : byte { // ASCII Kilometers = 75, // 'K' Miles = 77, // 'M' Knots = 78 // 'N' } public enum GPSDifferential : ushort { MeasurementWithoutDifferentialCorrection = 0, DifferentialCorrectionApplied = 1 } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifExceptions.cs000066400000000000000000000035451446222606700260420ustar00rootroot00000000000000using System; namespace ExifLibrary { /// /// The exception that is thrown when the format of the JPEG/Exif file /// could not be understood. /// public class NotValidExifFileException : Exception { public NotValidExifFileException() : base("Not a valid JPEG/Exif file.") { ; } public NotValidExifFileException(string message) : base(message) { ; } } /// /// The exception that is thrown when the IFD section ID could not be understood. /// public class UnknownIFDSectionException : Exception { public UnknownIFDSectionException() : base("Unknown IFD section.") { ; } public UnknownIFDSectionException(string message) : base(message) { ; } } /// /// The exception that is thrown when an invalid enum type is given to an /// ExifEnumProperty. /// public class UnknownEnumTypeException : Exception { public UnknownEnumTypeException() : base("Unknown enum type.") { ; } public UnknownEnumTypeException(string message) : base(message) { ; } } /// /// The exception that is thrown when the 0th IFD section does not contain any fields. /// public class IFD0IsEmptyException : Exception { public IFD0IsEmptyException() : base("0th IFD section cannot be empty.") { ; } public IFD0IsEmptyException(string message) : base(message) { ; } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifExtendedProperty.cs000066400000000000000000000340161446222606700272230ustar00rootroot00000000000000using System; using System.Text; namespace ExifLibrary { /// /// Represents an enumerated value. /// public class ExifEnumProperty : ExifProperty { protected T mValue; protected bool mIsBitField; protected override object _Value { get { return Value; } set { Value = (T)value; } } public new T Value { get { return mValue; } set { mValue = value; } } public bool IsBitField { get { return mIsBitField; } } static public implicit operator T(ExifEnumProperty obj) { return (T)obj.mValue; } public override string ToString() { return mValue.ToString(); } public ExifEnumProperty(ExifTag tag, T value, bool isbitfield) : base(tag) { mValue = value; mIsBitField = isbitfield; } public ExifEnumProperty(ExifTag tag, T value) : this(tag, value, false) { ; } public override ExifInterOperability Interoperability { get { ushort tagid = ExifTagFactory.GetTagID(mTag); Type type = typeof(T); Type basetype = Enum.GetUnderlyingType(type); if (type == typeof(FileSource) || type == typeof(SceneType)) { // UNDEFINED return new ExifInterOperability(tagid, 7, 1, new byte[] { (byte)((object)mValue) }); } else if (type == typeof(GPSLatitudeRef) || type == typeof(GPSLongitudeRef) || type == typeof(GPSStatus) || type == typeof(GPSMeasureMode) || type == typeof(GPSSpeedRef) || type == typeof(GPSDirectionRef) || type == typeof(GPSDistanceRef)) { // ASCII return new ExifInterOperability(tagid, 2, 2, new byte[] { (byte)((object)mValue), 0 }); } else if (basetype == typeof(byte)) { // BYTE return new ExifInterOperability(tagid, 1, 1, new byte[] { (byte)((object)mValue) }); } else if (basetype == typeof(ushort)) { // SHORT return new ExifInterOperability(tagid, 3, 1, ExifBitConverter.GetBytes((ushort)((object)mValue), BitConverterEx.SystemByteOrder, BitConverterEx.SystemByteOrder)); } else throw new UnknownEnumTypeException(); } } } /// /// Represents an ASCII string. (EXIF Specification: UNDEFINED) Used for the UserComment field. /// public class ExifEncodedString : ExifProperty { protected string mValue; private Encoding mEncoding; protected override object _Value { get { return Value; } set { Value = (string)value; } } public new string Value { get { return mValue; } set { mValue = value; } } public Encoding Encoding { get { return mEncoding; } set { mEncoding = value; } } static public implicit operator string(ExifEncodedString obj) { return obj.mValue; } public override string ToString() { return mValue; } public ExifEncodedString(ExifTag tag, string value, Encoding encoding) : base(tag) { mValue = value; mEncoding = encoding; } public override ExifInterOperability Interoperability { get { string enc = ""; if (mEncoding == null) enc = "\0\0\0\0\0\0\0\0"; else if (mEncoding.EncodingName == "US-ASCII") enc = "ASCII\0\0\0"; else if (mEncoding.EncodingName == "Japanese (JIS 0208-1990 and 0212-1990)") enc = "JIS\0\0\0\0\0"; else if (mEncoding.EncodingName == "Unicode") enc = "Unicode\0"; else enc = "\0\0\0\0\0\0\0\0"; byte[] benc = Encoding.ASCII.GetBytes(enc); byte[] bstr = (mEncoding == null ? Encoding.ASCII.GetBytes(mValue) : mEncoding.GetBytes(mValue)); byte[] data = new byte[benc.Length + bstr.Length]; Array.Copy(benc, 0, data, 0, benc.Length); Array.Copy(bstr, 0, data, benc.Length, bstr.Length); return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 7, (uint)data.Length, data); } } } /// /// Represents an ASCII string formatted as DateTime. (EXIF Specification: ASCII) Used for the date time fields. /// public class ExifDateTime : ExifProperty { protected DateTime mValue; protected override object _Value { get { return Value; } set { Value = (DateTime)value; } } public new DateTime Value { get { return mValue; } set { mValue = value; } } static public implicit operator DateTime(ExifDateTime obj) { return obj.mValue; } public override string ToString() { return mValue.ToString("yyyy.MM.dd HH:mm:ss"); } public ExifDateTime(ExifTag tag, DateTime value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 2, (uint)20, ExifBitConverter.GetBytes(mValue, true)); } } } /// /// Represents the exif version as a 4 byte ASCII string. (EXIF Specification: UNDEFINED) /// Used for the ExifVersion, FlashpixVersion, InteroperabilityVersion and GPSVersionID fields. /// public class ExifVersion : ExifProperty { protected string mValue; protected override object _Value { get { return Value; } set { Value = (string)value; } } public new string Value { get { return mValue; } set { mValue = value.Substring(0, 4); } } public ExifVersion(ExifTag tag, string value) : base(tag) { if (value.Length > 4) mValue = value.Substring(0, 4); else if (value.Length < 4) mValue = value + new string(' ', 4 - value.Length); else mValue = value; } public override string ToString() { return mValue; } public override ExifInterOperability Interoperability { get { if (mTag == ExifTag.ExifVersion || mTag == ExifTag.FlashpixVersion || mTag == ExifTag.InteroperabilityVersion) return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 7, 4, Encoding.ASCII.GetBytes(mValue)); else { byte[] data = new byte[4]; for (int i = 0; i < 4; i++) data[i] = byte.Parse(mValue[0].ToString()); return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 7, 4, data); } } } } /// /// Represents the location and area of the subject (EXIF Specification: 2xSHORT) /// The coordinate values, width, and height are expressed in relation to the /// upper left as origin, prior to rotation processing as per the Rotation tag. /// public class ExifPointSubjectArea : ExifUShortArray { protected new ushort[] Value { get { return mValue; } set { mValue = value; } } public ushort X { get { return mValue[0]; } set { mValue[0] = value; } } public ushort Y { get { return mValue[1]; } set { mValue[1] = value; } } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendFormat("({0:d}, {1:d})", mValue[0], mValue[1]); return sb.ToString(); } public ExifPointSubjectArea(ExifTag tag, ushort[] value) : base(tag, value) { ; } public ExifPointSubjectArea(ExifTag tag, ushort x, ushort y) : base(tag, new ushort[] { x, y }) { ; } } /// /// Represents the location and area of the subject (EXIF Specification: 3xSHORT) /// The coordinate values, width, and height are expressed in relation to the /// upper left as origin, prior to rotation processing as per the Rotation tag. /// public class ExifCircularSubjectArea : ExifPointSubjectArea { public ushort Diamater { get { return mValue[2]; } set { mValue[2] = value; } } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendFormat("({0:d}, {1:d}) {2:d}", mValue[0], mValue[1], mValue[2]); return sb.ToString(); } public ExifCircularSubjectArea(ExifTag tag, ushort[] value) : base(tag, value) { ; } public ExifCircularSubjectArea(ExifTag tag, ushort x, ushort y, ushort d) : base(tag, new ushort[] { x, y, d }) { ; } } /// /// Represents the location and area of the subject (EXIF Specification: 4xSHORT) /// The coordinate values, width, and height are expressed in relation to the /// upper left as origin, prior to rotation processing as per the Rotation tag. /// public class ExifRectangularSubjectArea : ExifPointSubjectArea { public ushort Width { get { return mValue[2]; } set { mValue[2] = value; } } public ushort Height { get { return mValue[3]; } set { mValue[3] = value; } } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.AppendFormat("({0:d}, {1:d}) ({2:d} x {3:d})", mValue[0], mValue[1], mValue[2], mValue[3]); return sb.ToString(); } public ExifRectangularSubjectArea(ExifTag tag, ushort[] value) : base(tag, value) { ; } public ExifRectangularSubjectArea(ExifTag tag, ushort x, ushort y, ushort w, ushort h) : base(tag, new ushort[] { x, y, w, h }) { ; } } /// /// Represents GPS latitudes and longitudes (EXIF Specification: 3xRATIONAL) /// public class GPSLatitudeLongitude : ExifURationalArray { protected new MathEx.UFraction32[] Value { get { return mValue; } set { mValue = value; } } public MathEx.UFraction32 Degrees { get { return mValue[0]; } set { mValue[0] = value; } } public MathEx.UFraction32 Minutes { get { return mValue[1]; } set { mValue[1] = value; } } public MathEx.UFraction32 Seconds { get { return mValue[2]; } set { mValue[2] = value; } } public static explicit operator float(GPSLatitudeLongitude obj) { return obj.ToFloat(); } public float ToFloat() { return (float)Degrees + ((float)Minutes) / 60.0f + ((float)Seconds) / 3600.0f; } public override string ToString() { return string.Format("{0:F2}°{1:F2}'{2:F2}\"", (float)Degrees, (float)Minutes, (float)Seconds); } public GPSLatitudeLongitude(ExifTag tag, MathEx.UFraction32[] value) : base(tag, value) { ; } public GPSLatitudeLongitude(ExifTag tag, float d, float m, float s) : base(tag, new MathEx.UFraction32[] { new MathEx.UFraction32(d), new MathEx.UFraction32(m), new MathEx.UFraction32(s) }) { ; } } /// /// Represents a GPS time stamp as UTC (EXIF Specification: 3xRATIONAL) /// public class GPSTimeStamp : ExifURationalArray { protected new MathEx.UFraction32[] Value { get { return mValue; } set { mValue = value; } } public MathEx.UFraction32 Hour { get { return mValue[0]; } set { mValue[0] = value; } } public MathEx.UFraction32 Minute { get { return mValue[1]; } set { mValue[1] = value; } } public MathEx.UFraction32 Second { get { return mValue[2]; } set { mValue[2] = value; } } public override string ToString() { return string.Format("{0:F2}:{1:F2}:{2:F2}\"", (float)Hour, (float)Minute, (float)Second); } public GPSTimeStamp(ExifTag tag, MathEx.UFraction32[] value) : base(tag, value) { ; } public GPSTimeStamp(ExifTag tag, float h, float m, float s) : base(tag, new MathEx.UFraction32[] { new MathEx.UFraction32(h), new MathEx.UFraction32(m), new MathEx.UFraction32(s) }) { ; } } /// /// Represents an ASCII string. (EXIF Specification: BYTE) /// Used by Windows XP. /// public class WindowsByteString : ExifProperty { protected string mValue; protected override object _Value { get { return Value; } set { Value = (string)value; } } public new string Value { get { return mValue; } set { mValue = value; } } static public implicit operator string(WindowsByteString obj) { return obj.mValue; } public override string ToString() { return mValue; } public WindowsByteString(ExifTag tag, string value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { byte[] data = Encoding.Unicode.GetBytes(mValue); return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 1, (uint)data.Length, data); } } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifFileTypeDescriptor.cs000066400000000000000000000104731446222606700274770ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace ExifLibrary { /// /// Provides a custom type descriptor for an ExifFile instance. /// internal sealed class ExifFileTypeDescriptionProvider : TypeDescriptionProvider { public ExifFileTypeDescriptionProvider() : this(TypeDescriptor.GetProvider(typeof(ImageFile))) { } public ExifFileTypeDescriptionProvider(TypeDescriptionProvider parent) : base(parent) { } /// /// Gets a custom type descriptor for the given type and object. /// /// The type of object for which to retrieve the type descriptor. /// An instance of the type. Can be null if no instance was passed to the . /// /// An that can provide metadata for the type. /// public override ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance) { return new ExifFileTypeDescriptor(base.GetTypeDescriptor(objectType, instance), instance); } } /// /// Expands ExifProperty objects contained in an ExifFile as seperate properties. /// internal sealed class ExifFileTypeDescriptor : CustomTypeDescriptor { ImageFile owner; public ExifFileTypeDescriptor(ICustomTypeDescriptor parent, object instance) : base(parent) { owner = (ImageFile)instance; } public override PropertyDescriptorCollection GetProperties(Attribute[] attributes) { return GetProperties(); } /// /// Returns a collection of property descriptors for the object represented by this type descriptor. /// /// /// A containing the property descriptions for the object represented by this type descriptor. The default is . /// public override PropertyDescriptorCollection GetProperties() { // Enumerate the original set of properties and create our new set with it List properties = new List(); foreach (ExifProperty prop in owner.Properties) { ExifPropertyDescriptor pd = new ExifPropertyDescriptor(prop); properties.Add(pd); } // Finally return the list return new PropertyDescriptorCollection(properties.ToArray(), true); } } internal sealed class ExifPropertyDescriptor : PropertyDescriptor { object originalValue; ExifProperty linkedProperty; public ExifPropertyDescriptor(ExifProperty property) : base(property.Name, new Attribute[] { new BrowsableAttribute(true) }) { linkedProperty = property; originalValue = property.Value; } public override bool CanResetValue(object component) { return true; } public override Type ComponentType { get { return typeof(JPEGFile); } } public override object GetValue(object component) { return linkedProperty.Value; } public override bool IsReadOnly { get { return false; } } public override Type PropertyType { get { return linkedProperty.Value.GetType(); } } public override void ResetValue(object component) { linkedProperty.Value = originalValue; } public override void SetValue(object component, object value) { linkedProperty.Value = value; } public override bool ShouldSerializeValue(object component) { return false; } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifInterOperability.cs000066400000000000000000000043511446222606700272020ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents interoperability data for an exif tag in the platform byte order. /// public struct ExifInterOperability { private ushort mTagID; private ushort mTypeID; private uint mCount; private byte[] mData; /// /// Gets the tag ID defined in the Exif standard. /// public ushort TagID { get { return mTagID; } } /// /// Gets the type code defined in the Exif standard. /// /// 1 = BYTE (byte) /// 2 = ASCII (byte array) /// 3 = SHORT (ushort) /// 4 = LONG (uint) /// 5 = RATIONAL (2 x uint: numerator, denominator) /// 6 = BYTE (sbyte) /// 7 = UNDEFINED (byte array) /// 8 = SSHORT (short) /// 9 = SLONG (int) /// 10 = SRATIONAL (2 x int: numerator, denominator) /// 11 = FLOAT (float) /// 12 = DOUBLE (double) /// /// public ushort TypeID { get { return mTypeID; } } /// /// Gets the byte count or number of components. /// public uint Count { get { return mCount; } } /// /// Gets the field value as an array of bytes. /// public byte[] Data { get { return mData; } } /// /// Returns the string representation of this instance. /// /// public override string ToString() { return string.Format("Tag: {0}, Type: {1}, Count: {2}, Data Length: {3}", mTagID, mTypeID, mCount, mData.Length); } public ExifInterOperability(ushort tagid, ushort typeid, uint count, byte[] data) { mTagID = tagid; mTypeID = typeid; mCount = count; mData = data; } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifLibrary.csproj000066400000000000000000000075741446222606700262260ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E} Library Properties ExifLibrary ExifLibrary 512 false Manina.snk 2.0 v2.0 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifProperty.cs000066400000000000000000000461151446222606700255450ustar00rootroot00000000000000using System; using System.Text; namespace ExifLibrary { /// /// Represents the abstract base class for an Exif property. /// public abstract class ExifProperty { protected ExifTag mTag; protected IFD mIFD; protected string mName; /// /// Gets the Exif tag associated with this property. /// public ExifTag Tag { get { return mTag; } } /// /// Gets the IFD section contaning this property. /// public IFD IFD { get { return mIFD; } } /// /// Gets or sets the name of this property. /// public string Name { get { if (mName == null || mName.Length == 0) return ExifTagFactory.GetTagName(mTag); else return mName; } set { mName = value; } } protected abstract object _Value { get; set; } /// /// Gets or sets the value of this property. /// public object Value { get { return _Value; } set { _Value = value; } } /// /// Gets interoperability data for this property. /// public abstract ExifInterOperability Interoperability { get; } public ExifProperty(ExifTag tag) { mTag = tag; mIFD = ExifTagFactory.GetTagIFD(tag); } } /// /// Represents an 8-bit unsigned integer. (EXIF Specification: BYTE) /// public class ExifByte : ExifProperty { protected byte mValue; protected override object _Value { get { return Value; } set { Value = Convert.ToByte(value); } } public new byte Value { get { return mValue; } set { mValue = value; } } static public implicit operator byte(ExifByte obj) { return obj.mValue; } public override string ToString() { return mValue.ToString(); } public ExifByte(ExifTag tag, byte value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 1, 1, new byte[] { mValue }); } } } /// /// Represents an array of 8-bit unsigned integers. (EXIF Specification: BYTE with count > 1) /// public class ExifByteArray : ExifProperty { protected byte[] mValue; protected override object _Value { get { return Value; } set { Value = (byte[])value; } } public new byte[] Value { get { return mValue; } set { mValue = value; } } static public implicit operator byte[](ExifByteArray obj) { return obj.mValue; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (byte b in mValue) { sb.Append(b); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } public ExifByteArray(ExifTag tag, byte[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 1, (uint)mValue.Length, mValue); } } } /// /// Represents an ASCII string. (EXIF Specification: ASCII) /// public class ExifAscii : ExifProperty { protected string mValue; protected override object _Value { get { return Value; } set { Value = (string)value; } } public new string Value { get { return mValue; } set { mValue = value; } } public Encoding Encoding { get; private set; } static public implicit operator string(ExifAscii obj) { return obj.mValue; } public override string ToString() { return mValue; } public ExifAscii(ExifTag tag, string value, Encoding encoding) : base(tag) { mValue = value; Encoding = encoding; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 2, (uint)mValue.Length + 1, ExifBitConverter.GetBytes(mValue, true, Encoding)); } } } /// /// Represents a 16-bit unsigned integer. (EXIF Specification: SHORT) /// public class ExifUShort : ExifProperty { protected ushort mValue; protected override object _Value { get { return Value; } set { Value = Convert.ToUInt16(value); } } public new ushort Value { get { return mValue; } set { mValue = value; } } static public implicit operator ushort(ExifUShort obj) { return obj.mValue; } public override string ToString() { return mValue.ToString(); } public ExifUShort(ExifTag tag, ushort value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 3, 1, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder, BitConverterEx.SystemByteOrder)); } } } /// /// Represents an array of 16-bit unsigned integers. /// (EXIF Specification: SHORT with count > 1) /// public class ExifUShortArray : ExifProperty { protected ushort[] mValue; protected override object _Value { get { return Value; } set { Value = (ushort[])value; } } public new ushort[] Value { get { return mValue; } set { mValue = value; } } static public implicit operator ushort[](ExifUShortArray obj) { return obj.mValue; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (ushort b in mValue) { sb.Append(b); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } public ExifUShortArray(ExifTag tag, ushort[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 3, (uint)mValue.Length, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } /// /// Represents a 32-bit unsigned integer. (EXIF Specification: LONG) /// public class ExifUInt : ExifProperty { protected uint mValue; protected override object _Value { get { return Value; } set { Value = Convert.ToUInt32(value); } } public new uint Value { get { return mValue; } set { mValue = value; } } static public implicit operator uint(ExifUInt obj) { return obj.mValue; } public override string ToString() { return mValue.ToString(); } public ExifUInt(ExifTag tag, uint value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 4, 1, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder, BitConverterEx.SystemByteOrder)); } } } /// /// Represents an array of 16-bit unsigned integers. /// (EXIF Specification: LONG with count > 1) /// public class ExifUIntArray : ExifProperty { protected uint[] mValue; protected override object _Value { get { return Value; } set { Value = (uint[])value; } } public new uint[] Value { get { return mValue; } set { mValue = value; } } static public implicit operator uint[](ExifUIntArray obj) { return obj.mValue; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (uint b in mValue) { sb.Append(b); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } public ExifUIntArray(ExifTag tag, uint[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 3, (uint)mValue.Length, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } /// /// Represents a rational number defined with a 32-bit unsigned numerator /// and denominator. (EXIF Specification: RATIONAL) /// public class ExifURational : ExifProperty { protected MathEx.UFraction32 mValue; protected override object _Value { get { return Value; } set { Value = (MathEx.UFraction32)value; } } public new MathEx.UFraction32 Value { get { return mValue; } set { mValue = value; } } public override string ToString() { return mValue.ToString(); } public float ToFloat() { return (float)mValue; } static public explicit operator float(ExifURational obj) { return (float)obj.mValue; } public uint[] ToArray() { return new uint[] { mValue.Numerator, mValue.Denominator }; } public ExifURational(ExifTag tag, uint numerator, uint denominator) : base(tag) { mValue = new MathEx.UFraction32(numerator, denominator); } public ExifURational(ExifTag tag, MathEx.UFraction32 value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 5, 1, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } /// /// Represents an array of unsigned rational numbers. /// (EXIF Specification: RATIONAL with count > 1) /// public class ExifURationalArray : ExifProperty { protected MathEx.UFraction32[] mValue; protected override object _Value { get { return Value; } set { Value = (MathEx.UFraction32[])value; } } public new MathEx.UFraction32[] Value { get { return mValue; } set { mValue = value; } } static public explicit operator float[](ExifURationalArray obj) { float[] result = new float[obj.mValue.Length]; for (int i = 0; i < obj.mValue.Length; i++) result[i] = (float)obj.mValue[i]; return result; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (MathEx.UFraction32 b in mValue) { sb.Append(b.ToString()); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } public ExifURationalArray(ExifTag tag, MathEx.UFraction32[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 5, (uint)mValue.Length, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } /// /// Represents a byte array that can take any value. (EXIF Specification: UNDEFINED) /// public class ExifUndefined : ExifProperty { protected byte[] mValue; protected override object _Value { get { return Value; } set { Value = (byte[])value; } } public new byte[] Value { get { return mValue; } set { mValue = value; } } static public implicit operator byte[](ExifUndefined obj) { return obj.mValue; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (byte b in mValue) { sb.Append(b); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } public ExifUndefined(ExifTag tag, byte[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 7, (uint)mValue.Length, mValue); } } } /// /// Represents a 32-bit signed integer. (EXIF Specification: SLONG) /// public class ExifSInt : ExifProperty { protected int mValue; protected override object _Value { get { return Value; } set { Value = Convert.ToInt32(value); } } public new int Value { get { return mValue; } set { mValue = value; } } public override string ToString() { return mValue.ToString(); } static public implicit operator int(ExifSInt obj) { return obj.mValue; } public ExifSInt(ExifTag tag, int value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 9, 1, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder, BitConverterEx.SystemByteOrder)); } } } /// /// Represents an array of 32-bit signed integers. /// (EXIF Specification: SLONG with count > 1) /// public class ExifSIntArray : ExifProperty { protected int[] mValue; protected override object _Value { get { return Value; } set { Value = (int[])value; } } public new int[] Value { get { return mValue; } set { mValue = value; } } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (int b in mValue) { sb.Append(b); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } static public implicit operator int[](ExifSIntArray obj) { return obj.mValue; } public ExifSIntArray(ExifTag tag, int[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 9, (uint)mValue.Length, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } /// /// Represents a rational number defined with a 32-bit signed numerator /// and denominator. (EXIF Specification: SRATIONAL) /// public class ExifSRational : ExifProperty { protected MathEx.Fraction32 mValue; protected override object _Value { get { return Value; } set { Value = (MathEx.Fraction32)value; } } public new MathEx.Fraction32 Value { get { return mValue; } set { mValue = value; } } public override string ToString() { return mValue.ToString(); } public float ToFloat() { return (float)mValue; } static public explicit operator float(ExifSRational obj) { return (float)obj.mValue; } public int[] ToArray() { return new int[] { mValue.Numerator, mValue.Denominator }; } public ExifSRational(ExifTag tag, int numerator, int denominator) : base(tag) { mValue = new MathEx.Fraction32(numerator, denominator); } public ExifSRational(ExifTag tag, MathEx.Fraction32 value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 10, 1, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } /// /// Represents an array of signed rational numbers. /// (EXIF Specification: SRATIONAL with count > 1) /// public class ExifSRationalArray : ExifProperty { protected MathEx.Fraction32[] mValue; protected override object _Value { get { return Value; } set { Value = (MathEx.Fraction32[])value; } } public new MathEx.Fraction32[] Value { get { return mValue; } set { mValue = value; } } static public explicit operator float[](ExifSRationalArray obj) { float[] result = new float[obj.mValue.Length]; for (int i = 0; i < obj.mValue.Length; i++) result[i] = (float)obj.mValue[i]; return result; } public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append('['); foreach (MathEx.Fraction32 b in mValue) { sb.Append(b.ToString()); sb.Append(' '); } sb.Remove(sb.Length - 1, 1); sb.Append(']'); return sb.ToString(); } public ExifSRationalArray(ExifTag tag, MathEx.Fraction32[] value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 10, (uint)mValue.Length, ExifBitConverter.GetBytes(mValue, BitConverterEx.SystemByteOrder)); } } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifPropertyCollection.cs000066400000000000000000000241361446222606700275600ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents a collection of objects. /// public class ExifPropertyCollection : IList { #region Member Variables private List items; #endregion #region Constructor internal ExifPropertyCollection() { items = new List(); } #endregion #region Properties /// /// Gets the number of elements contained in the collection. /// public int Count { get { return items.Count; } } /// /// Gets or sets the with the specified index. /// public ExifProperty this[int index] { get { return items[index]; } set { items[index] = value; } } #endregion #region ExifProperty Collection Setters /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, byte value) { items.Add(new ExifByte(key, value)); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, string value, Encoding encoding) { if (key == ExifTag.WindowsTitle || key == ExifTag.WindowsTitle || key == ExifTag.WindowsComment || key == ExifTag.WindowsAuthor || key == ExifTag.WindowsKeywords || key == ExifTag.WindowsSubject) { items.Add(new WindowsByteString(key, value)); } else if (key == ExifTag.UserComment) { items.Add(new ExifEncodedString(key, value, encoding)); } else { items.Add(new ExifAscii(key, value, encoding)); } } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, string value) { Add(key, value, Encoding.Default); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, ushort value) { items.Add(new ExifUShort(key, value)); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, int value) { items.Add(new ExifSInt(key, value)); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, uint value) { items.Add(new ExifUInt(key, value)); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, float value) { items.Add(new ExifURational(key, new MathEx.UFraction32(value))); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, double value) { items.Add(new ExifURational(key, new MathEx.UFraction32(value))); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, object value) { Type type = value.GetType(); if (type.IsEnum) { Type etype = typeof(ExifEnumProperty<>).MakeGenericType(new Type[] { type }); object prop = Activator.CreateInstance(etype, new object[] { key, value }); items.Add((ExifProperty)prop); } else throw new ArgumentException("No exif property exists for this tag.", "value"); } /// /// Sets the with the specified key. /// /// The tag to set. /// The value of tag. public void Add(ExifTag key, DateTime value) { items.Add(new ExifDateTime(key, value)); } /// /// Sets the with the specified key. /// /// The tag to set. /// Angular degrees (or clock hours for a timestamp). /// Angular minutes (or clock minutes for a timestamp). /// Angular seconds (or clock seconds for a timestamp). public void Add(ExifTag key, float d, float m, float s) { items.Add(new ExifURationalArray(key, new MathEx.UFraction32[] { new MathEx.UFraction32(d), new MathEx.UFraction32(m), new MathEx.UFraction32(s) })); } #endregion #region Instance Methods /// /// Adds the specified item to the collection. /// /// The to add to the collection. public void Add(ExifProperty item) { items.Add(item); } /// /// Removes all items from the collection. /// public void Clear() { items.Clear(); } /// /// Determines whether the collection contains an element with the specified key. /// /// The key to locate in the collection. /// /// true if the collection contains an element with the key; otherwise, false. /// /// /// is null. public bool Contains(ExifProperty key) { return items.Contains(key); } /// /// Removes the element with the specified key from the collection. /// /// The key of the element to remove. /// /// true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original collection. /// /// /// is null. public bool Remove(ExifProperty key) { return items.Remove(key); } /// /// Removes the item at the given index. /// /// The index of the item to remove. public void RemoveAt(int index) { items.RemoveAt(index); } /// /// Removes all items with the given IFD from the collection. /// /// The IFD section to remove. public void Remove(IFD ifd) { List toRemove = new List(); foreach (ExifProperty item in items) { if (item.IFD == ifd) toRemove.Add(item); } foreach (ExifProperty tag in toRemove) items.Remove(tag); } /// /// Returns the index of the given item. /// /// The item to look for in the collection. /// public int IndexOf(ExifProperty item) { return items.IndexOf(item); } /// /// Returns an enumerator to iterate the collection. /// public IEnumerator GetEnumerator() { return items.GetEnumerator(); } #endregion #region Hidden Interface void IList.Insert(int index, ExifProperty item) { items.Insert(index, item); } void ICollection.CopyTo(ExifProperty[] array, int arrayIndex) { items.CopyTo(array, arrayIndex); } bool ICollection.IsReadOnly { get { return false; } } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifPropertyFactory.cs000066400000000000000000000423601446222606700270730ustar00rootroot00000000000000using System; using System.Text; namespace ExifLibrary { /// /// Creates exif properties from interoperability parameters. /// public static class ExifPropertyFactory { #region Static Methods /// /// Creates an ExifProperty from the given interoperability parameters. /// /// The tag id of the exif property. /// The type id of the exif property. /// Byte or component count. /// Field data as an array of bytes. /// Byte order of value. /// IFD section containing this propery. /// The encoding to be used for text metadata when the source encoding is unknown. /// an ExifProperty initialized from the interoperability parameters. public static ExifProperty Get(ushort tag, ushort type, uint count, byte[] value, BitConverterEx.ByteOrder byteOrder, IFD ifd, Encoding encoding) { BitConverterEx conv = new BitConverterEx(byteOrder, BitConverterEx.SystemByteOrder); // Find the exif tag corresponding to given tag id ExifTag etag = ExifTagFactory.GetExifTag(ifd, tag); if (ifd == IFD.Zeroth) { if (tag == 0x103) // Compression return new ExifEnumProperty(ExifTag.Compression, (Compression)conv.ToUInt16(value, 0)); else if (tag == 0x106) // PhotometricInterpretation return new ExifEnumProperty(ExifTag.PhotometricInterpretation, (PhotometricInterpretation)conv.ToUInt16(value, 0)); else if (tag == 0x112) // Orientation return new ExifEnumProperty(ExifTag.Orientation, (Orientation)conv.ToUInt16(value, 0)); else if (tag == 0x11c) // PlanarConfiguration return new ExifEnumProperty(ExifTag.PlanarConfiguration, (PlanarConfiguration)conv.ToUInt16(value, 0)); else if (tag == 0x213) // YCbCrPositioning return new ExifEnumProperty(ExifTag.YCbCrPositioning, (YCbCrPositioning)conv.ToUInt16(value, 0)); else if (tag == 0x128) // ResolutionUnit return new ExifEnumProperty(ExifTag.ResolutionUnit, (ResolutionUnit)conv.ToUInt16(value, 0)); else if (tag == 0x132) // DateTime return new ExifDateTime(ExifTag.DateTime, ExifBitConverter.ToDateTime(value)); else if (tag == 0x9c9b || tag == 0x9c9c || // Windows tags tag == 0x9c9d || tag == 0x9c9e || tag == 0x9c9f) return new WindowsByteString(etag, Encoding.Unicode.GetString(value).TrimEnd('\0')); } else if (ifd == IFD.EXIF) { if (tag == 0x9000) // ExifVersion return new ExifVersion(ExifTag.ExifVersion, ExifBitConverter.ToAscii(value, Encoding.ASCII)); else if (tag == 0xa000) // FlashpixVersion return new ExifVersion(ExifTag.FlashpixVersion, ExifBitConverter.ToAscii(value, Encoding.ASCII)); else if (tag == 0xa001) // ColorSpace return new ExifEnumProperty(ExifTag.ColorSpace, (ColorSpace)conv.ToUInt16(value, 0)); else if (tag == 0x9286) // UserComment { // Default to ASCII Encoding enc = Encoding.ASCII; bool hasenc; if (value.Length < 8) hasenc = false; else { hasenc = true; string encstr = enc.GetString(value, 0, 8); if (string.Compare(encstr, "ASCII\0\0\0", StringComparison.OrdinalIgnoreCase) == 0) enc = Encoding.ASCII; else if (string.Compare(encstr, "JIS\0\0\0\0\0", StringComparison.OrdinalIgnoreCase) == 0) enc = Encoding.GetEncoding("Japanese (JIS 0208-1990 and 0212-1990)"); else if (string.Compare(encstr, "Unicode\0", StringComparison.OrdinalIgnoreCase) == 0) enc = Encoding.Unicode; else hasenc = false; } string val = (hasenc ? enc.GetString(value, 8, value.Length - 8) : enc.GetString(value)).Trim('\0'); return new ExifEncodedString(ExifTag.UserComment, val, enc); } else if (tag == 0x9003) // DateTimeOriginal return new ExifDateTime(ExifTag.DateTimeOriginal, ExifBitConverter.ToDateTime(value)); else if (tag == 0x9004) // DateTimeDigitized return new ExifDateTime(ExifTag.DateTimeDigitized, ExifBitConverter.ToDateTime(value)); else if (tag == 0x8822) // ExposureProgram return new ExifEnumProperty(ExifTag.ExposureProgram, (ExposureProgram)conv.ToUInt16(value, 0)); else if (tag == 0x9207) // MeteringMode return new ExifEnumProperty(ExifTag.MeteringMode, (MeteringMode)conv.ToUInt16(value, 0)); else if (tag == 0x9208) // LightSource return new ExifEnumProperty(ExifTag.LightSource, (LightSource)conv.ToUInt16(value, 0)); else if (tag == 0x9209) // Flash return new ExifEnumProperty(ExifTag.Flash, (Flash)conv.ToUInt16(value, 0), true); else if (tag == 0x9214) // SubjectArea { if (count == 3) return new ExifCircularSubjectArea(ExifTag.SubjectArea, ExifBitConverter.ToUShortArray(value, (int)count, byteOrder)); else if (count == 4) return new ExifRectangularSubjectArea(ExifTag.SubjectArea, ExifBitConverter.ToUShortArray(value, (int)count, byteOrder)); else // count == 2 return new ExifPointSubjectArea(ExifTag.SubjectArea, ExifBitConverter.ToUShortArray(value, (int)count, byteOrder)); } else if (tag == 0xa210) // FocalPlaneResolutionUnit return new ExifEnumProperty(ExifTag.FocalPlaneResolutionUnit, (ResolutionUnit)conv.ToUInt16(value, 0), true); else if (tag == 0xa214) // SubjectLocation return new ExifPointSubjectArea(ExifTag.SubjectLocation, ExifBitConverter.ToUShortArray(value, (int)count, byteOrder)); else if (tag == 0xa217) // SensingMethod return new ExifEnumProperty(ExifTag.SensingMethod, (SensingMethod)conv.ToUInt16(value, 0), true); else if (tag == 0xa300) // FileSource return new ExifEnumProperty(ExifTag.FileSource, (FileSource)conv.ToUInt16(value, 0), true); else if (tag == 0xa301) // SceneType return new ExifEnumProperty(ExifTag.SceneType, (SceneType)conv.ToUInt16(value, 0), true); else if (tag == 0xa401) // CustomRendered return new ExifEnumProperty(ExifTag.CustomRendered, (CustomRendered)conv.ToUInt16(value, 0), true); else if (tag == 0xa402) // ExposureMode return new ExifEnumProperty(ExifTag.ExposureMode, (ExposureMode)conv.ToUInt16(value, 0), true); else if (tag == 0xa403) // WhiteBalance return new ExifEnumProperty(ExifTag.WhiteBalance, (WhiteBalance)conv.ToUInt16(value, 0), true); else if (tag == 0xa406) // SceneCaptureType return new ExifEnumProperty(ExifTag.SceneCaptureType, (SceneCaptureType)conv.ToUInt16(value, 0), true); else if (tag == 0xa407) // GainControl return new ExifEnumProperty(ExifTag.GainControl, (GainControl)conv.ToUInt16(value, 0), true); else if (tag == 0xa408) // Contrast return new ExifEnumProperty(ExifTag.Contrast, (Contrast)conv.ToUInt16(value, 0), true); else if (tag == 0xa409) // Saturation return new ExifEnumProperty(ExifTag.Saturation, (Saturation)conv.ToUInt16(value, 0), true); else if (tag == 0xa40a) // Sharpness return new ExifEnumProperty(ExifTag.Sharpness, (Sharpness)conv.ToUInt16(value, 0), true); else if (tag == 0xa40c) // SubjectDistanceRange return new ExifEnumProperty(ExifTag.SubjectDistanceRange, (SubjectDistanceRange)conv.ToUInt16(value, 0), true); } else if (ifd == IFD.GPS) { if (tag == 0) // GPSVersionID return new ExifVersion(ExifTag.GPSVersionID, ExifBitConverter.ToString(value)); else if (tag == 1) // GPSLatitudeRef return new ExifEnumProperty(ExifTag.GPSLatitudeRef, (GPSLatitudeRef)value[0]); else if (tag == 2) // GPSLatitude return new GPSLatitudeLongitude(ExifTag.GPSLatitude, ExifBitConverter.ToURationalArray(value, (int)count, byteOrder)); else if (tag == 3) // GPSLongitudeRef return new ExifEnumProperty(ExifTag.GPSLongitudeRef, (GPSLongitudeRef)value[0]); else if (tag == 4) // GPSLongitude return new GPSLatitudeLongitude(ExifTag.GPSLongitude, ExifBitConverter.ToURationalArray(value, (int)count, byteOrder)); else if (tag == 5) // GPSAltitudeRef return new ExifEnumProperty(ExifTag.GPSAltitudeRef, (GPSAltitudeRef)value[0]); else if (tag == 7) // GPSTimeStamp return new GPSTimeStamp(ExifTag.GPSTimeStamp, ExifBitConverter.ToURationalArray(value, (int)count, byteOrder)); else if (tag == 9) // GPSStatus return new ExifEnumProperty(ExifTag.GPSStatus, (GPSStatus)value[0]); else if (tag == 10) // GPSMeasureMode return new ExifEnumProperty(ExifTag.GPSMeasureMode, (GPSMeasureMode)value[0]); else if (tag == 12) // GPSSpeedRef return new ExifEnumProperty(ExifTag.GPSSpeedRef, (GPSSpeedRef)value[0]); else if (tag == 14) // GPSTrackRef return new ExifEnumProperty(ExifTag.GPSTrackRef, (GPSDirectionRef)value[0]); else if (tag == 16) // GPSImgDirectionRef return new ExifEnumProperty(ExifTag.GPSImgDirectionRef, (GPSDirectionRef)value[0]); else if (tag == 19) // GPSDestLatitudeRef return new ExifEnumProperty(ExifTag.GPSDestLatitudeRef, (GPSLatitudeRef)value[0]); else if (tag == 20) // GPSDestLatitude return new GPSLatitudeLongitude(ExifTag.GPSDestLatitude, ExifBitConverter.ToURationalArray(value, (int)count, byteOrder)); else if (tag == 21) // GPSDestLongitudeRef return new ExifEnumProperty(ExifTag.GPSDestLongitudeRef, (GPSLongitudeRef)value[0]); else if (tag == 22) // GPSDestLongitude return new GPSLatitudeLongitude(ExifTag.GPSDestLongitude, ExifBitConverter.ToURationalArray(value, (int)count, byteOrder)); else if (tag == 23) // GPSDestBearingRef return new ExifEnumProperty(ExifTag.GPSDestBearingRef, (GPSDirectionRef)value[0]); else if (tag == 25) // GPSDestDistanceRef return new ExifEnumProperty(ExifTag.GPSDestDistanceRef, (GPSDistanceRef)value[0]); else if (tag == 29) // GPSDate return new ExifDateTime(ExifTag.GPSDateStamp, ExifBitConverter.ToDateTime(value, false)); else if (tag == 30) // GPSDifferential return new ExifEnumProperty(ExifTag.GPSDifferential, (GPSDifferential)conv.ToUInt16(value, 0)); } else if (ifd == IFD.Interop) { if (tag == 1) // InteroperabilityIndex return new ExifAscii(ExifTag.InteroperabilityIndex, ExifBitConverter.ToAscii(value, Encoding.ASCII), Encoding.ASCII); else if (tag == 2) // InteroperabilityVersion return new ExifVersion(ExifTag.InteroperabilityVersion, ExifBitConverter.ToAscii(value, Encoding.ASCII)); } else if (ifd == IFD.First) { if (tag == 0x103) // Compression return new ExifEnumProperty(ExifTag.ThumbnailCompression, (Compression)conv.ToUInt16(value, 0)); else if (tag == 0x106) // PhotometricInterpretation return new ExifEnumProperty(ExifTag.ThumbnailPhotometricInterpretation, (PhotometricInterpretation)conv.ToUInt16(value, 0)); else if (tag == 0x112) // Orientation return new ExifEnumProperty(ExifTag.ThumbnailOrientation, (Orientation)conv.ToUInt16(value, 0)); else if (tag == 0x11c) // PlanarConfiguration return new ExifEnumProperty(ExifTag.ThumbnailPlanarConfiguration, (PlanarConfiguration)conv.ToUInt16(value, 0)); else if (tag == 0x213) // YCbCrPositioning return new ExifEnumProperty(ExifTag.ThumbnailYCbCrPositioning, (YCbCrPositioning)conv.ToUInt16(value, 0)); else if (tag == 0x128) // ResolutionUnit return new ExifEnumProperty(ExifTag.ThumbnailResolutionUnit, (ResolutionUnit)conv.ToUInt16(value, 0)); else if (tag == 0x132) // DateTime return new ExifDateTime(ExifTag.ThumbnailDateTime, ExifBitConverter.ToDateTime(value)); } if (type == 1) // 1 = BYTE An 8-bit unsigned integer. { if (count == 1) return new ExifByte(etag, value[0]); else return new ExifByteArray(etag, value); } else if (type == 2) // 2 = ASCII An 8-bit byte containing one 7-bit ASCII code. { return new ExifAscii(etag, ExifBitConverter.ToAscii(value, encoding), encoding); } else if (type == 3) // 3 = SHORT A 16-bit (2-byte) unsigned integer. { if (count == 1) return new ExifUShort(etag, conv.ToUInt16(value, 0)); else return new ExifUShortArray(etag, ExifBitConverter.ToUShortArray(value, (int)count, byteOrder)); } else if (type == 4) // 4 = LONG A 32-bit (4-byte) unsigned integer. { if (count == 1) return new ExifUInt(etag, conv.ToUInt32(value, 0)); else return new ExifUIntArray(etag, ExifBitConverter.ToUIntArray(value, (int)count, byteOrder)); } else if (type == 5) // 5 = RATIONAL Two LONGs. The first LONG is the numerator and the second LONG expresses the denominator. { if (count == 1) return new ExifURational(etag, ExifBitConverter.ToURational(value, byteOrder)); else return new ExifURationalArray(etag, ExifBitConverter.ToURationalArray(value, (int)count, byteOrder)); } else if (type == 7) // 7 = UNDEFINED An 8-bit byte that can take any value depending on the field definition. return new ExifUndefined(etag, value); else if (type == 9) // 9 = SLONG A 32-bit (4-byte) signed integer (2's complement notation). { if (count == 1) return new ExifSInt(etag, conv.ToInt32(value, 0)); else return new ExifSIntArray(etag, ExifBitConverter.ToSIntArray(value, (int)count, byteOrder)); } else if (type == 10) // 10 = SRATIONAL Two SLONGs. The first SLONG is the numerator and the second SLONG is the denominator. { if (count == 1) return new ExifSRational(etag, ExifBitConverter.ToSRational(value, byteOrder)); else return new ExifSRationalArray(etag, ExifBitConverter.ToSRationalArray(value, (int)count, byteOrder)); } else throw new ArgumentException("Unknown property type."); } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifTag.cs000066400000000000000000000322421446222606700244300ustar00rootroot00000000000000 namespace ExifLibrary { /// /// Represents the tags associated with exif fields. /// public enum ExifTag : int { // **************************** // Zeroth IFD // **************************** NewSubfileType = IFD.Zeroth + 254, SubfileType = IFD.Zeroth + 255, ImageWidth = IFD.Zeroth + 256, ImageLength = IFD.Zeroth + 257, BitsPerSample = IFD.Zeroth + 258, Compression = IFD.Zeroth + 259, PhotometricInterpretation = IFD.Zeroth + 262, Threshholding = IFD.Zeroth + 263, CellWidth = IFD.Zeroth + 264, CellLength = IFD.Zeroth + 265, FillOrder = IFD.Zeroth + 266, DocumentName = IFD.Zeroth + 269, ImageDescription = IFD.Zeroth + 270, Make = IFD.Zeroth + 271, Model = IFD.Zeroth + 272, StripOffsets = IFD.Zeroth + 273, Orientation = IFD.Zeroth + 274, SamplesPerPixel = IFD.Zeroth + 277, RowsPerStrip = IFD.Zeroth + 278, StripByteCounts = IFD.Zeroth + 279, MinSampleValue = IFD.Zeroth + 280, MaxSampleValue = IFD.Zeroth + 281, XResolution = IFD.Zeroth + 282, YResolution = IFD.Zeroth + 283, PlanarConfiguration = IFD.Zeroth + 284, PageName = IFD.Zeroth + 285, XPosition = IFD.Zeroth + 286, YPosition = IFD.Zeroth + 287, FreeOffsets = IFD.Zeroth + 288, FreeByteCounts = IFD.Zeroth + 289, GrayResponseUnit = IFD.Zeroth + 290, GrayResponseCurve = IFD.Zeroth + 291, T4Options = IFD.Zeroth + 292, T6Options = IFD.Zeroth + 293, ResolutionUnit = IFD.Zeroth + 296, PageNumber = IFD.Zeroth + 297, TransferFunction = IFD.Zeroth + 301, Software = IFD.Zeroth + 305, DateTime = IFD.Zeroth + 306, Artist = IFD.Zeroth + 315, HostComputer = IFD.Zeroth + 316, Predictor = IFD.Zeroth + 317, WhitePoint = IFD.Zeroth + 318, PrimaryChromaticities = IFD.Zeroth + 319, ColorMap = IFD.Zeroth + 320, HalftoneHints = IFD.Zeroth + 321, TileWidth = IFD.Zeroth + 322, TileLength = IFD.Zeroth + 323, TileOffsets = IFD.Zeroth + 324, TileByteCounts = IFD.Zeroth + 325, InkSet = IFD.Zeroth + 332, InkNames = IFD.Zeroth + 333, NumberOfInks = IFD.Zeroth + 334, DotRange = IFD.Zeroth + 336, TargetPrinter = IFD.Zeroth + 337, ExtraSamples = IFD.Zeroth + 338, SampleFormat = IFD.Zeroth + 339, SMinSampleValue = IFD.Zeroth + 340, SMaxSampleValue = IFD.Zeroth + 341, TransferRange = IFD.Zeroth + 342, JPEGProc = IFD.Zeroth + 512, JPEGInterchangeFormat = IFD.Zeroth + 513, JPEGInterchangeFormatLength = IFD.Zeroth + 514, JPEGRestartInterval = IFD.Zeroth + 515, JPEGLosslessPredictors = IFD.Zeroth + 517, JPEGPointTransforms = IFD.Zeroth + 518, JPEGQTables = IFD.Zeroth + 519, JPEGDCTables = IFD.Zeroth + 520, JPEGACTables = IFD.Zeroth + 521, YCbCrCoefficients = IFD.Zeroth + 529, YCbCrSubSampling = IFD.Zeroth + 530, YCbCrPositioning = IFD.Zeroth + 531, ReferenceBlackWhite = IFD.Zeroth + 532, Copyright = IFD.Zeroth + 33432, // Pointers to other IFDs EXIFIFDPointer = IFD.Zeroth + 34665, GPSIFDPointer = IFD.Zeroth + 34853, // Windows Tags WindowsTitle = IFD.Zeroth + 0x9c9b, WindowsComment = IFD.Zeroth + 0x9c9c, WindowsAuthor = IFD.Zeroth + 0x9c9d, WindowsKeywords = IFD.Zeroth + 0x9c9e, WindowsSubject = IFD.Zeroth + 0x9c9f, // Rating Rating = IFD.Zeroth + 0x4746, RatingPercent = IFD.Zeroth + 0x4749, // Microsoft specifing padding and offset tags ZerothIFDPadding = IFD.Zeroth + 0xea1c, // **************************** // EXIF Tags // **************************** ExifVersion = IFD.EXIF + 36864, FlashpixVersion = IFD.EXIF + 40960, ColorSpace = IFD.EXIF + 40961, ComponentsConfiguration = IFD.EXIF + 37121, CompressedBitsPerPixel = IFD.EXIF + 37122, PixelXDimension = IFD.EXIF + 40962, PixelYDimension = IFD.EXIF + 40963, MakerNote = IFD.EXIF + 37500, UserComment = IFD.EXIF + 37510, RelatedSoundFile = IFD.EXIF + 40964, DateTimeOriginal = IFD.EXIF + 36867, DateTimeDigitized = IFD.EXIF + 36868, SubSecTime = IFD.EXIF + 37520, SubSecTimeOriginal = IFD.EXIF + 37521, SubSecTimeDigitized = IFD.EXIF + 37522, ExposureTime = IFD.EXIF + 33434, FNumber = IFD.EXIF + 33437, ExposureProgram = IFD.EXIF + 34850, SpectralSensitivity = IFD.EXIF + 34852, ISOSpeedRatings = IFD.EXIF + 34855, OECF = IFD.EXIF + 34856, ShutterSpeedValue = IFD.EXIF + 37377, ApertureValue = IFD.EXIF + 37378, BrightnessValue = IFD.EXIF + 37379, ExposureBiasValue = IFD.EXIF + 37380, MaxApertureValue = IFD.EXIF + 37381, SubjectDistance = IFD.EXIF + 37382, MeteringMode = IFD.EXIF + 37383, LightSource = IFD.EXIF + 37384, Flash = IFD.EXIF + 37385, FocalLength = IFD.EXIF + 37386, SubjectArea = IFD.EXIF + 37396, FlashEnergy = IFD.EXIF + 41483, SpatialFrequencyResponse = IFD.EXIF + 41484, FocalPlaneXResolution = IFD.EXIF + 41486, FocalPlaneYResolution = IFD.EXIF + 41487, FocalPlaneResolutionUnit = IFD.EXIF + 41488, SubjectLocation = IFD.EXIF + 41492, ExposureIndex = IFD.EXIF + 41493, SensingMethod = IFD.EXIF + 41495, FileSource = IFD.EXIF + 41728, SceneType = IFD.EXIF + 41729, CFAPattern = IFD.EXIF + 41730, CustomRendered = IFD.EXIF + 41985, ExposureMode = IFD.EXIF + 41986, WhiteBalance = IFD.EXIF + 41987, DigitalZoomRatio = IFD.EXIF + 41988, FocalLengthIn35mmFilm = IFD.EXIF + 41989, SceneCaptureType = IFD.EXIF + 41990, GainControl = IFD.EXIF + 41991, Contrast = IFD.EXIF + 41992, Saturation = IFD.EXIF + 41993, Sharpness = IFD.EXIF + 41994, DeviceSettingDescription = IFD.EXIF + 41995, SubjectDistanceRange = IFD.EXIF + 41996, ImageUniqueID = IFD.EXIF + 42016, InteroperabilityIFDPointer = IFD.EXIF + 40965, // Microsoft specifing padding and offset tags ExifIFDPadding = IFD.EXIF + 0xea1c, OffsetSchema = IFD.EXIF + 0xea1d, // **************************** // GPS Tags // **************************** GPSVersionID = IFD.GPS + 0, GPSLatitudeRef = IFD.GPS + 1, GPSLatitude = IFD.GPS + 2, GPSLongitudeRef = IFD.GPS + 3, GPSLongitude = IFD.GPS + 4, GPSAltitudeRef = IFD.GPS + 5, GPSAltitude = IFD.GPS + 6, GPSTimeStamp = IFD.GPS + 7, GPSSatellites = IFD.GPS + 8, GPSStatus = IFD.GPS + 9, GPSMeasureMode = IFD.GPS + 10, GPSDOP = IFD.GPS + 11, GPSSpeedRef = IFD.GPS + 12, GPSSpeed = IFD.GPS + 13, GPSTrackRef = IFD.GPS + 14, GPSTrack = IFD.GPS + 15, GPSImgDirectionRef = IFD.GPS + 16, GPSImgDirection = IFD.GPS + 17, GPSMapDatum = IFD.GPS + 18, GPSDestLatitudeRef = IFD.GPS + 19, GPSDestLatitude = IFD.GPS + 20, GPSDestLongitudeRef = IFD.GPS + 21, GPSDestLongitude = IFD.GPS + 22, GPSDestBearingRef = IFD.GPS + 23, GPSDestBearing = IFD.GPS + 24, GPSDestDistanceRef = IFD.GPS + 25, GPSDestDistance = IFD.GPS + 26, GPSProcessingMethod = IFD.GPS + 27, GPSAreaInformation = IFD.GPS + 28, GPSDateStamp = IFD.GPS + 29, GPSDifferential = IFD.GPS + 30, // **************************** // InterOp Tags // **************************** InteroperabilityIndex = IFD.Interop + 1, InteroperabilityVersion = IFD.Interop + 2, RelatedImageWidth = IFD.Interop + 0x1001, RelatedImageHeight = IFD.Interop + 0x1002, // **************************** // First IFD TIFF Tags // **************************** ThumbnailImageWidth = IFD.First + 256, ThumbnailImageLength = IFD.First + 257, ThumbnailBitsPerSample = IFD.First + 258, ThumbnailCompression = IFD.First + 259, ThumbnailPhotometricInterpretation = IFD.First + 262, ThumbnailOrientation = IFD.First + 274, ThumbnailSamplesPerPixel = IFD.First + 277, ThumbnailPlanarConfiguration = IFD.First + 284, ThumbnailYCbCrSubSampling = IFD.First + 530, ThumbnailYCbCrPositioning = IFD.First + 531, ThumbnailXResolution = IFD.First + 282, ThumbnailYResolution = IFD.First + 283, ThumbnailResolutionUnit = IFD.First + 296, ThumbnailStripOffsets = IFD.First + 273, ThumbnailRowsPerStrip = IFD.First + 278, ThumbnailStripByteCounts = IFD.First + 279, ThumbnailJPEGInterchangeFormat = IFD.First + 513, ThumbnailJPEGInterchangeFormatLength = IFD.First + 514, ThumbnailTransferFunction = IFD.First + 301, ThumbnailWhitePoint = IFD.First + 318, ThumbnailPrimaryChromaticities = IFD.First + 319, ThumbnailYCbCrCoefficients = IFD.First + 529, ThumbnailReferenceBlackWhite = IFD.First + 532, ThumbnailDateTime = IFD.First + 306, ThumbnailImageDescription = IFD.First + 270, ThumbnailMake = IFD.First + 271, ThumbnailModel = IFD.First + 272, ThumbnailSoftware = IFD.First + 305, ThumbnailArtist = IFD.First + 315, ThumbnailCopyright = IFD.First + 33432, // **************************** // JFIF Tags // **************************** /// /// Represents the JFIF version. /// JFIFVersion = IFD.JFIF + 1, /// /// Represents units for X and Y densities. /// JFIFUnits = IFD.JFIF + 101, /// /// Horizontal pixel density. /// XDensity = IFD.JFIF + 102, /// /// Vertical pixel density /// YDensity = IFD.JFIF + 103, /// /// Thumbnail horizontal pixel count. /// JFIFXThumbnail = IFD.JFIF + 201, /// /// Thumbnail vertical pixel count. /// JFIFYThumbnail = IFD.JFIF + 202, /// /// JFIF JPEG thumbnail. /// JFIFThumbnail = IFD.JFIF + 203, /// /// Code which identifies the JFIF extension. /// JFXXExtensionCode = IFD.JFXX + 1, /// /// Thumbnail horizontal pixel count. /// JFXXXThumbnail = IFD.JFXX + 101, /// /// Thumbnail vertical pixel count. /// JFXXYThumbnail = IFD.JFXX + 102, /// /// The 256-Color RGB palette. /// JFXXPalette = IFD.JFXX + 201, /// /// JFIF thumbnail. The thumbnail will be either a JPEG, /// a 256 color palette bitmap, or a 24-bit RGB bitmap. /// JFXXThumbnail = IFD.JFXX + 202, // **************************** // PNG Tags // **************************** /// /// Short (one line) title or caption for image /// PNGTitle = IFD.PNG + 0, /// /// Name of image's creator /// PNGAuthor = IFD.PNG + 1, /// /// Description of image (possibly long) /// PNGDescription = IFD.PNG + 2, /// /// Copyright notice /// PNGCopyright = IFD.PNG + 3, /// /// Time of original image creation /// PNGCreationTime = IFD.PNG + 4, /// /// Software used to create the image /// PNGSoftware = IFD.PNG + 5, /// /// Legal disclaimer /// PNGDisclaimer = IFD.PNG + 6, /// /// Warning of nature of content /// PNGWarning = IFD.PNG + 7, /// /// Device used to create the image /// PNGSource = IFD.PNG + 8, /// /// Miscellaneous comment /// PNGComment = IFD.PNG + 9, /// /// Generic text metadata /// PNGText = IFD.PNG + 100, /// /// The time of the last image modification /// PNGTimeStamp = IFD.PNG + 200, } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ExifTagFactory.cs000066400000000000000000000041371446222606700257620ustar00rootroot00000000000000using System; namespace ExifLibrary { public static class ExifTagFactory { #region Static Methods /// /// Returns the ExifTag corresponding to the given tag id. /// public static ExifTag GetExifTag(IFD ifd, ushort tagid) { return (ExifTag)(ifd + tagid); } /// /// Returns the tag id corresponding to the given ExifTag. /// public static ushort GetTagID(ExifTag exiftag) { IFD ifd = GetTagIFD(exiftag); return (ushort)((int)exiftag - (int)ifd); } /// /// Returns the IFD section containing the given tag. /// public static IFD GetTagIFD(ExifTag tag) { return (IFD)(((int)tag / 100000) * 100000); } /// /// Returns the string representation for the given exif tag. /// public static string GetTagName(ExifTag tag) { string name = Enum.GetName(typeof(ExifTag), tag); if (name == null) return "Unknown"; else return name; } /// /// Returns the string representation for the given tag id. /// public static string GetTagName(IFD ifd, ushort tagid) { return GetTagName(GetExifTag(ifd, tagid)); } /// /// Returns the string representation for the given exif tag including /// IFD section and tag id. /// public static string GetTagLongName(ExifTag tag) { string ifdname = Enum.GetName(typeof(IFD), GetTagIFD(tag)); string name = Enum.GetName(typeof(ExifTag), tag); if (name == null) name = "Unknown"; string tagidname = GetTagID(tag).ToString(); return ifdname + ": " + name + " (" + tagidname + ")"; } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/IFD.cs000066400000000000000000000007441446222606700235050ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents the IFD section containing tags. /// public enum IFD : int { Unknown = 0, Zeroth = 100000, EXIF = 200000, GPS = 300000, Interop = 400000, First = 500000, MakerNote = 600000, JFIF = 700000, JFXX = 800000, PNG = 900000, } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ImageFile.cs000066400000000000000000000132501446222606700247210ustar00rootroot00000000000000using System; using System.Drawing; using System.IO; using System.Collections.Generic; using System.Text; using System.ComponentModel; namespace ExifLibrary { /// /// Represents the base class for image files. /// [TypeDescriptionProvider(typeof(ExifFileTypeDescriptionProvider))] public abstract class ImageFile { #region Constructor /// /// Initializes a new instance of the class. /// protected ImageFile () { Format = ImageFileFormat.Unknown; Properties = new ExifPropertyCollection (); Encoding = Encoding.Default; } #endregion #region Properties /// /// Returns the format of the . /// public ImageFileFormat Format { get; protected set; } /// /// Gets the collection of Exif properties contained in the . /// public ExifPropertyCollection Properties { get; private set; } /// /// Gets or sets the embedded thumbnail image. /// public ImageFile Thumbnail { get; set; } /// /// Gets or sets the Exif property with the given key. /// /// The Exif tag associated with the Exif property. public ExifProperty this[int index] { get { return Properties[index]; } set { Properties[index] = value; } } /// /// Gets the encoding used for text metadata when the source encoding is unknown. /// public Encoding Encoding { get; protected set; } #endregion #region Instance Methods /// /// Converts the to a . /// /// Returns a containing image data. public virtual Image ToImage() { MemoryStream stream = new MemoryStream(); Save(stream); return Image.FromStream(stream); } /// /// Saves the to the specified file. /// /// A string that contains the name of the file. public virtual void Save (string filename) { using (FileStream stream = new FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.None)) { Save (stream); } } /// /// Saves the to the specified stream. /// /// A to save image data to. public abstract void Save (Stream stream); /// /// Decreases file size by removing all metadata. /// public abstract void Crush(); #endregion #region Static Methods /// /// Creates an from the specified file. /// /// A string that contains the name of the file. /// The created from the file. public static ImageFile FromFile (string filename) { return FromFile(filename, Encoding.Default); } /// /// Creates an from the specified file. /// /// A string that contains the name of the file. /// The encoding to be used for text metadata when the source encoding is unknown. /// The created from the file. public static ImageFile FromFile(string filename, Encoding encoding) { using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) { return FromStream(stream, encoding); } } /// /// Creates an from the specified data stream. /// /// A that contains image data. /// The created from the file. public static ImageFile FromStream(Stream stream) { return FromStream(stream, Encoding.Default); } /// /// Creates an from the specified data stream. /// /// A that contains image data. /// The encoding to be used for text metadata when the source encoding is unknown. /// The created from the file. public static ImageFile FromStream(Stream stream, Encoding encoding) { stream.Seek (0, SeekOrigin.Begin); byte[] header = new byte[8]; stream.Seek (0, SeekOrigin.Begin); if (stream.Read (header, 0, header.Length) != header.Length) throw new NotValidImageFileException (); // JPEG if (header[0] == 0xFF && header[1] == 0xD8) return new JPEGFile (stream, encoding); // TIFF string tiffHeader = Encoding.ASCII.GetString (header, 0, 4); if (tiffHeader == "MM\x00\x2a" || tiffHeader == "II\x2a\x00") return new TIFFFile (stream, encoding); // PNG if (header[0] == 0x89 && header[1] == 0x50 && header[2] == 0x4E && header[3] == 0x47 && header[4] == 0x0D && header[5] == 0x0A && header[6] == 0x1A && header[7] == 0x0A) return new PNGFile(stream, encoding); throw new NotValidImageFileException (); } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ImageFileDirectory.cs000066400000000000000000000075751446222606700266230ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents an image file directory. /// public class ImageFileDirectory { /// /// The fields contained in this IFD. /// public List Fields { get; private set; } /// /// Offset to the next IFD. /// public uint NextIFDOffset { get; private set; } /// /// Compressed image data. /// public List Strips { get; private set; } /// /// Initializes a new instance of the class. /// public ImageFileDirectory() { Fields = new List(); Strips = new List(); } /// /// Returns a initialized from the given byte data. /// /// The data. /// The offset into . /// The byte order of . /// A initialized from the given byte data. public static ImageFileDirectory FromBytes(byte[] data, uint offset, BitConverterEx.ByteOrder byteOrder) { ImageFileDirectory ifd = new ImageFileDirectory(); BitConverterEx conv = new BitConverterEx(byteOrder, BitConverterEx.SystemByteOrder); List stripOffsets = new List(); List stripLengths = new List(); // Count ushort fieldcount = conv.ToUInt16(data, offset); // Read fields for (uint i = 0; i < fieldcount; i++) { uint fieldoffset = offset + 2 + 12 * i; ImageFileDirectoryEntry field = ImageFileDirectoryEntry.FromBytes(data, fieldoffset, byteOrder); ifd.Fields.Add(field); // Read strip offsets if (field.Tag == 273) { int baselen = field.Data.Length / (int)field.Count; for (uint j = 0; j < field.Count; j++) { byte[] val = new byte[baselen]; Array.Copy(field.Data, j * baselen, val, 0, baselen); uint stripOffset = (field.Type == 3 ? (uint)BitConverter.ToUInt16(val, 0) : BitConverter.ToUInt32(val, 0)); stripOffsets.Add(stripOffset); } } // Read strip lengths if (field.Tag == 279) { int baselen = field.Data.Length / (int)field.Count; for (uint j = 0; j < field.Count; j++) { byte[] val = new byte[baselen]; Array.Copy(field.Data, j * baselen, val, 0, baselen); uint stripLength = (field.Type == 3 ? (uint)BitConverter.ToUInt16(val, 0) : BitConverter.ToUInt32(val, 0)); stripLengths.Add(stripLength); } } } // Save strips if (stripOffsets.Count != stripLengths.Count) throw new NotValidTIFFileException(); for (int i = 0; i < stripOffsets.Count; i++) ifd.Strips.Add(new TIFFStrip(data, stripOffsets[i], stripLengths[i])); // Offset to next ifd ifd.NextIFDOffset = conv.ToUInt32(data, offset + 2 + 12 * fieldcount); return ifd; } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ImageFileDirectoryEntry.cs000066400000000000000000000107741446222606700276400ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents an entry in the image file directory. /// public struct ImageFileDirectoryEntry { /// /// The tag that identifies the field. /// public ushort Tag; /// /// Field type identifier. /// public ushort Type; /// /// Count of Type. /// public uint Count; /// /// Field data. /// public byte[] Data; /// /// Initializes a new instance of the struct. /// /// The tag that identifies the field. /// Field type identifier. /// Count of Type. /// Field data. public ImageFileDirectoryEntry(ushort tag, ushort type, uint count, byte[] data) { Tag = tag; Type = type; Count = count; Data = data; } /// /// Returns a initialized from the given byte data. /// /// The data. /// The offset into . /// The byte order of . /// A initialized from the given byte data. public static ImageFileDirectoryEntry FromBytes(byte[] data, uint offset, BitConverterEx.ByteOrder byteOrder) { // Tag ID ushort tag = BitConverterEx.ToUInt16(data, offset, byteOrder, BitConverterEx.SystemByteOrder); // Tag Type ushort type = BitConverterEx.ToUInt16(data, offset + 2, byteOrder, BitConverterEx.SystemByteOrder); // Count of Type uint count = BitConverterEx.ToUInt32(data, offset + 4, byteOrder, BitConverterEx.SystemByteOrder); // Field value or offset to field data byte[] value = new byte[4]; Array.Copy(data, offset + 8, value, 0, 4); // Calculate the bytes we need to read uint baselength = GetBaseLength(type); uint totallength = count * baselength; // If field value does not fit in 4 bytes // the value field is an offset to the actual // field value if (totallength > 4) { uint dataoffset = BitConverterEx.ToUInt32(value, 0, byteOrder, BitConverterEx.SystemByteOrder); value = new byte[totallength]; Array.Copy(data, dataoffset, value, 0, totallength); } // Reverse array order if byte orders are different if (byteOrder != BitConverterEx.SystemByteOrder) { for (uint i = 0; i < count; i++) { byte[] val = new byte[baselength]; Array.Copy(value, i * baselength, val, 0, baselength); Array.Reverse(val); Array.Copy(val, 0, value, i * baselength, baselength); } } return new ImageFileDirectoryEntry(tag, type, count, value); } /// /// Gets the base byte length for the given type. /// /// Type identifier. private static uint GetBaseLength(ushort type) { if (type == 1 || type == 6) // BYTE and SBYTE return 1; else if (type == 2 || type == 7) // ASCII and UNDEFINED return 1; else if (type == 3 || type == 8) // SHORT and SSHORT return 2; else if (type == 4 || type == 9) // LONG and SLONG return 4; else if (type == 5 || type == 10) // RATIONAL (2xLONG) and SRATIONAL (2xSLONG) return 8; else if (type == 11) // FLOAT return 4; else if (type == 12) // DOUBLE return 8; throw new ArgumentException("Unknown type identifier.", "type"); } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/ImageFileFormat.cs000066400000000000000000000012431446222606700260710ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents the format of the . /// public enum ImageFileFormat { /// /// The file is not recognized. /// Unknown, /// /// The file is a JPEG/Exif or JPEG/JFIF file. /// JPEG, /// /// The file is a TIFF File. /// TIFF, /// /// The file is a PNG File. /// PNG, } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JFIFEnums.cs000066400000000000000000000023041446222606700246230ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents the units for the X and Y densities /// for a JFIF file. /// public enum JFIFDensityUnit : byte { /// /// No units, XDensity and YDensity specify the pixel aspect ratio. /// None = 0, /// /// XDensity and YDensity are dots per inch. /// DotsPerInch = 1, /// /// XDensity and YDensity are dots per cm. /// DotsPerCm = 2, } /// /// Represents the JFIF extension. /// public enum JFIFExtension : byte { /// /// Thumbnail coded using JPEG. /// ThumbnailJPEG = 0x10, /// /// Thumbnail stored using a 256-Color RGB palette. /// ThumbnailPaletteRGB = 0x11, /// /// Thumbnail stored using 3 bytes/pixel (24-bit) RGB values. /// Thumbnail24BitRGB = 0x13, } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JFIFExtendedProperty.cs000066400000000000000000000052031446222606700270420ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents the JFIF version as a 16 bit unsigned integer. (EXIF Specification: SHORT) /// public class JFIFVersion : ExifUShort { /// /// Gets the major version. /// public byte Major { get { return (byte)(mValue >> 8); } } /// /// Gets the minor version. /// public byte Minor { get { return (byte)(mValue - (mValue >> 8) * 256); } } public JFIFVersion(ExifTag tag, ushort value) : base(tag, value) { ; } public override string ToString() { return string.Format("{0}.{1:00}", Major, Minor); } } /// /// Represents a JFIF thumbnail. (EXIF Specification: BYTE) /// public class JFIFThumbnailProperty : ExifProperty { protected JFIFThumbnail mValue; protected override object _Value { get { return Value; } set { Value = (JFIFThumbnail)value; } } public new JFIFThumbnail Value { get { return mValue; } set { mValue = value; } } public override string ToString() { return mValue.Format.ToString(); } public JFIFThumbnailProperty(ExifTag tag, JFIFThumbnail value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { if (mValue.Format == JFIFThumbnail.ImageFormat.BMP24Bit) return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 1, (uint)mValue.PixelData.Length, mValue.PixelData); else if (mValue.Format == JFIFThumbnail.ImageFormat.BMPPalette) { byte[] data = new byte[mValue.Palette.Length + mValue.PixelData.Length]; Array.Copy(mValue.Palette, data, mValue.Palette.Length); Array.Copy(mValue.PixelData, 0, data, mValue.Palette.Length, mValue.PixelData.Length); return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 1, (uint)data.Length, data); } else if (mValue.Format == JFIFThumbnail.ImageFormat.JPEG) return new ExifInterOperability(ExifTagFactory.GetTagID(mTag), 1, (uint)mValue.PixelData.Length, mValue.PixelData); else throw new InvalidOperationException("Unknown thumbnail type."); } } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JFIFThumbnail.cs000066400000000000000000000026641446222606700254700ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Drawing; namespace ExifLibrary { /// /// Represents a JFIF thumbnail. /// public class JFIFThumbnail { #region Properties /// /// Gets the 256 color RGB palette. /// public byte[] Palette { get; private set; } /// /// Gets raw image data. /// public byte[] PixelData { get; private set; } /// /// Gets the image format. /// public ImageFormat Format { get; private set; } #endregion #region Public Enums public enum ImageFormat { JPEG, BMPPalette, BMP24Bit, } #endregion #region Constructors protected JFIFThumbnail() { Palette = new byte[0]; PixelData = new byte[0]; } public JFIFThumbnail(ImageFormat format, byte[] data) : this() { Format = format; PixelData = data; } public JFIFThumbnail(byte[] palette, byte[] data) : this() { Format = ImageFormat.BMPPalette; Palette = palette; PixelData = data; } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JPEGExceptions.cs000066400000000000000000000064401446222606700256710ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// The exception that is thrown when the format of the image file /// could not be understood. /// public class UnknownImageFormatException : Exception { public UnknownImageFormatException() : base("Unkown image format.") { ; } public UnknownImageFormatException(string message) : base(message) { ; } } /// /// The exception that is thrown when the format of the image file /// could not be understood. /// public class NotValidImageFileException : Exception { public NotValidImageFileException() : base("Not a valid image file.") { ; } public NotValidImageFileException(string message) : base(message) { ; } } /// /// The exception that is thrown when the format of the JPEG file /// could not be understood. /// public class NotValidJPEGFileException : Exception { public NotValidJPEGFileException() : base("Not a valid JPEG file.") { ; } public NotValidJPEGFileException(string message) : base(message) { ; } } /// /// The exception that is thrown when the format of the TIFF file /// could not be understood. /// public class NotValidTIFFileException : Exception { public NotValidTIFFileException() : base("Not a valid TIFF file.") { ; } public NotValidTIFFileException(string message) : base(message) { ; } } /// /// The exception that is thrown when the format of the PNG file /// could not be understood. /// public class NotValidPNGFileException : Exception { public NotValidPNGFileException() : base("Not a valid PNG file.") { ; } public NotValidPNGFileException(string message) : base(message) { ; } } /// /// The exception that is thrown when the format of the TIFF header /// could not be understood. /// public class NotValidTIFFHeader : Exception { public NotValidTIFFHeader() : base("Not a valid TIFF header.") { ; } public NotValidTIFFHeader(string message) : base(message) { ; } } /// /// The exception that is thrown when the length of a section exceeds 64 kB. /// public class SectionExceeds64KBException : Exception { public SectionExceeds64KBException() : base("Section length exceeds 64 kB.") { ; } public SectionExceeds64KBException(string message) : base(message) { ; } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JPEGFile.cs000066400000000000000000001234131446222606700244270ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text; namespace ExifLibrary { /// /// Represents the binary view of a JPEG compressed file. /// public class JPEGFile : ImageFile { #region Member Variables private JPEGSection jfifApp0; private JPEGSection jfxxApp0; private JPEGSection exifApp1; private uint makerNoteOffset; private long exifIFDFieldOffset, gpsIFDFieldOffset, interopIFDFieldOffset, firstIFDFieldOffset; private long thumbOffsetLocation, thumbSizeLocation; private uint thumbOffsetValue, thumbSizeValue; private bool makerNoteProcessed; #endregion #region Properties /// /// Gets or sets the byte-order of the Exif properties. /// public BitConverterEx.ByteOrder ByteOrder { get; set; } /// /// Gets or sets the sections contained in the . /// public List Sections { get; private set; } /// /// Gets or sets non-standard trailing data following the End of Image (EOI) marker. /// public byte[] TrailingData { get; private set; } #endregion #region Constructor /// /// Initializes a new instance of the class. /// /// A that contains image data. /// The encoding to be used for text metadata when the source encoding is unknown. protected internal JPEGFile(Stream stream, Encoding encoding) { Format = ImageFileFormat.JPEG; Sections = new List(); TrailingData = new byte[0]; Encoding = encoding; stream.Seek(0, SeekOrigin.Begin); // Read the Start of Image (SOI) marker. SOI marker is represented // with two bytes: 0xFF, 0xD8. byte[] markerbytes = new byte[2]; if (stream.Read(markerbytes, 0, 2) != 2 || markerbytes[0] != 0xFF || markerbytes[1] != 0xD8) throw new NotValidJPEGFileException(); stream.Seek(0, SeekOrigin.Begin); // Search and read sections until we reach the end of file. while (stream.Position != stream.Length) { // Read the next section marker. Section markers are two bytes // with values 0xFF, 0x?? where ?? must not be 0x00 or 0xFF. if (stream.Read(markerbytes, 0, 2) != 2 || markerbytes[0] != 0xFF || markerbytes[1] == 0x00 || markerbytes[1] == 0xFF) throw new NotValidJPEGFileException(); JPEGMarker marker = (JPEGMarker)markerbytes[1]; byte[] header = new byte[0]; // SOI, EOI and RST markers do not contain any header if (marker != JPEGMarker.SOI && marker != JPEGMarker.EOI && !(marker >= JPEGMarker.RST0 && marker <= JPEGMarker.RST7)) { // Length of the header including the length bytes. // This value is a 16-bit unsigned integer // in big endian byte-order. byte[] lengthbytes = new byte[2]; if (stream.Read(lengthbytes, 0, 2) != 2) throw new NotValidJPEGFileException(); long length = (long)BitConverterEx.BigEndian.ToUInt16(lengthbytes, 0); // Read section header. header = new byte[length - 2]; int bytestoread = header.Length; while (bytestoread > 0) { int count = Math.Min(bytestoread, 4 * 1024); int bytesread = stream.Read(header, header.Length - bytestoread, count); if (bytesread == 0) throw new NotValidJPEGFileException(); bytestoread -= bytesread; } } // Start of Scan (SOS) sections and RST sections are immediately // followed by entropy coded data. For that, we need to read until // the next section marker once we reach a SOS or RST. byte[] entropydata = new byte[0]; if (marker == JPEGMarker.SOS || (marker >= JPEGMarker.RST0 && marker <= JPEGMarker.RST7)) { long position = stream.Position; // Search for the next section marker while (true) { // Search for an 0xFF indicating start of a marker int nextbyte = 0; do { nextbyte = stream.ReadByte(); if (nextbyte == -1) throw new NotValidJPEGFileException(); } while ((byte)nextbyte != 0xFF); // Skip filler bytes (0xFF) do { nextbyte = stream.ReadByte(); if (nextbyte == -1) throw new NotValidJPEGFileException(); } while ((byte)nextbyte == 0xFF); // Looks like a section marker. The next byte must not be 0x00. if ((byte)nextbyte != 0x00) { // We reached a section marker. Calculate the // length of the entropy coded data. stream.Seek(-2, SeekOrigin.Current); long edlength = stream.Position - position; stream.Seek(-edlength, SeekOrigin.Current); // Read entropy coded data entropydata = new byte[edlength]; int bytestoread = entropydata.Length; while (bytestoread > 0) { int count = Math.Min(bytestoread, 4 * 1024); int bytesread = stream.Read(entropydata, entropydata.Length - bytestoread, count); if (bytesread == 0) throw new NotValidJPEGFileException(); bytestoread -= bytesread; } break; } } } // Store section. JPEGSection section = new JPEGSection(marker, header, entropydata); Sections.Add(section); // Some propriety formats store data past the EOI marker if (marker == JPEGMarker.EOI) { int bytestoread = (int)(stream.Length - stream.Position); TrailingData = new byte[bytestoread]; while (bytestoread > 0) { int count = (int)Math.Min(bytestoread, 4 * 1024); int bytesread = stream.Read(TrailingData, TrailingData.Length - bytestoread, count); if (bytesread == 0) throw new NotValidJPEGFileException(); bytestoread -= bytesread; } } } // Read metadata sections ReadJFIFAPP0(); ReadJFXXAPP0(); ReadExifAPP1(); // Process the maker note makerNoteProcessed = false; } #endregion #region Instance Methods /// /// Decreases file size by removing all metadata. /// public override void Crush() { // Keep JFIF Tags List jfifProperties = new List(); foreach (ExifProperty prop in Properties) { if (prop.IFD == IFD.JFIF) { if (prop.Tag == ExifTag.JFIFXThumbnail) prop.Value = 0; if (prop.Tag == ExifTag.JFIFYThumbnail) prop.Value = 0; if (prop.Tag == ExifTag.JFIFThumbnail) prop.Value = new JFIFThumbnail(JFIFThumbnail.ImageFormat.JPEG, new byte[0]); } } Properties.Clear(); foreach (ExifProperty prop in jfifProperties) Properties.Add(prop); // Remove metadata sections. // Keep the sections in this whitelist only: // SOF0 - SOF15 // DHT // DAC // RST0 - RST7 // SOI, EOI // DQT // DNL // DRI // DHP // EXP Sections.RemoveAll((section) => { return (section.Marker < JPEGMarker.SOF0 || section.Marker > JPEGMarker.EXP); }); } /// /// Saves the JPEG/Exif image to the given stream. /// /// The path to the JPEG/Exif file. /// Determines whether the maker note offset of /// the original file will be preserved. public void Save(Stream stream, bool preserveMakerNote) { WriteJFIFApp0(); WriteJFXXApp0(); WriteExifApp1(preserveMakerNote); // Write sections foreach (JPEGSection section in Sections) { // Section header (including length bytes and section marker) // must not exceed 64 kB. if (section.Header.Length + 2 + 2 > 64 * 1024) throw new SectionExceeds64KBException(); // APP sections must have a header. // Otherwise skip the entire section. if (section.Marker >= JPEGMarker.APP0 && section.Marker <= JPEGMarker.APP15 && section.Header.Length == 0) continue; // Write section marker stream.Write(new byte[] { 0xFF, (byte)section.Marker }, 0, 2); // SOI, EOI and RST markers do not contain any header if (section.Marker != JPEGMarker.SOI && section.Marker != JPEGMarker.EOI && !(section.Marker >= JPEGMarker.RST0 && section.Marker <= JPEGMarker.RST7)) { // Header length including the length field itself stream.Write(BitConverterEx.BigEndian.GetBytes((ushort)(section.Header.Length + 2)), 0, 2); // Write section header if (section.Header.Length != 0) stream.Write(section.Header, 0, section.Header.Length); } // Write entropy coded data if (section.EntropyData.Length != 0) stream.Write(section.EntropyData, 0, section.EntropyData.Length); } // Write trailing data, if any if (TrailingData.Length != 0) stream.Write(TrailingData, 0, TrailingData.Length); } /// /// Saves the JPEG/Exif image with the given filename. /// /// The path to the JPEG/Exif file. /// Determines whether the maker note offset of /// the original file will be preserved. public void Save(string filename, bool preserveMakerNote) { using (FileStream stream = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None)) { Save(stream, preserveMakerNote); } } /// /// Saves the JPEG/Exif image with the given filename. /// /// The path to the JPEG/Exif file. public override void Save(string filename) { Save(filename, true); } /// /// Saves the JPEG/Exif image to the given stream. /// /// The path to the JPEG/Exif file. public override void Save(Stream stream) { Save(stream, true); } #endregion #region Private Helper Methods /// /// Reads the APP0 section containing JFIF metadata. /// private void ReadJFIFAPP0() { // Find the APP0 section containing JFIF metadata jfifApp0 = Sections.Find(a => (a.Marker == JPEGMarker.APP0) && a.Header.Length >= 5 && (Encoding.ASCII.GetString(a.Header, 0, 5) == "JFIF\0")); // If there is no APP0 section, return. if (jfifApp0 == null) return; byte[] header = jfifApp0.Header; BitConverterEx jfifConv = BitConverterEx.BigEndian; // Version ushort version = jfifConv.ToUInt16(header, 5); Properties.Add(new JFIFVersion(ExifTag.JFIFVersion, version)); // Units byte unit = header[7]; Properties.Add(new ExifEnumProperty(ExifTag.JFIFUnits, (JFIFDensityUnit)unit)); // X and Y densities ushort xdensity = jfifConv.ToUInt16(header, 8); Properties.Add(new ExifUShort(ExifTag.XDensity, xdensity)); ushort ydensity = jfifConv.ToUInt16(header, 10); Properties.Add(new ExifUShort(ExifTag.YDensity, ydensity)); // Thumbnails pixel count byte xthumbnail = header[12]; Properties.Add(new ExifByte(ExifTag.JFIFXThumbnail, xthumbnail)); byte ythumbnail = header[13]; Properties.Add(new ExifByte(ExifTag.JFIFYThumbnail, ythumbnail)); // Read JFIF thumbnail int n = xthumbnail * ythumbnail; byte[] jfifThumbnail = new byte[n]; Array.Copy(header, 14, jfifThumbnail, 0, n); Properties.Add(new JFIFThumbnailProperty(ExifTag.JFIFThumbnail, new JFIFThumbnail(JFIFThumbnail.ImageFormat.JPEG, jfifThumbnail))); } /// /// Replaces the contents of the APP0 section with the JFIF properties. /// private bool WriteJFIFApp0() { // Which IFD sections do we have? List ifdjfef = new List(); foreach (ExifProperty prop in Properties) { if (prop.IFD == IFD.JFIF) ifdjfef.Add(prop); } if (ifdjfef.Count == 0) { // Nothing to write return false; } // Create a memory stream to write the APP0 section to MemoryStream ms = new MemoryStream(); // JFIF identifer ms.Write(Encoding.ASCII.GetBytes("JFIF\0"), 0, 5); // Write tags foreach (ExifProperty prop in ifdjfef) { ExifInterOperability interop = prop.Interoperability; byte[] data = interop.Data; if (BitConverterEx.SystemByteOrder != BitConverterEx.ByteOrder.BigEndian && interop.TypeID == 3) Array.Reverse(data); ms.Write(data, 0, data.Length); } ms.Close(); // Return APP0 header jfifApp0.Header = ms.ToArray(); return true; } /// /// Reads the APP0 section containing JFIF extension metadata. /// private void ReadJFXXAPP0() { // Find the APP0 section containing JFIF metadata jfxxApp0 = Sections.Find(a => (a.Marker == JPEGMarker.APP0) && a.Header.Length >= 5 && (Encoding.ASCII.GetString(a.Header, 0, 5) == "JFXX\0")); // If there is no APP0 section, return. if (jfxxApp0 == null) return; byte[] header = jfxxApp0.Header; // Version JFIFExtension version = (JFIFExtension)header[5]; Properties.Add(new ExifEnumProperty(ExifTag.JFXXExtensionCode, version)); // Read thumbnail if (version == JFIFExtension.ThumbnailJPEG) { byte[] data = new byte[header.Length - 6]; Array.Copy(header, 6, data, 0, data.Length); Properties.Add(new JFIFThumbnailProperty(ExifTag.JFXXThumbnail, new JFIFThumbnail(JFIFThumbnail.ImageFormat.JPEG, data))); } else if (version == JFIFExtension.Thumbnail24BitRGB) { // Thumbnails pixel count byte xthumbnail = header[6]; Properties.Add(new ExifByte(ExifTag.JFXXXThumbnail, xthumbnail)); byte ythumbnail = header[7]; Properties.Add(new ExifByte(ExifTag.JFXXYThumbnail, ythumbnail)); byte[] data = new byte[3 * xthumbnail * ythumbnail]; Array.Copy(header, 8, data, 0, data.Length); Properties.Add(new JFIFThumbnailProperty(ExifTag.JFXXThumbnail, new JFIFThumbnail(JFIFThumbnail.ImageFormat.BMP24Bit, data))); } else if (version == JFIFExtension.ThumbnailPaletteRGB) { // Thumbnails pixel count byte xthumbnail = header[6]; Properties.Add(new ExifByte(ExifTag.JFXXXThumbnail, xthumbnail)); byte ythumbnail = header[7]; Properties.Add(new ExifByte(ExifTag.JFXXYThumbnail, ythumbnail)); byte[] palette = new byte[768]; Array.Copy(header, 8, palette, 0, palette.Length); byte[] data = new byte[xthumbnail * ythumbnail]; Array.Copy(header, 8 + 768, data, 0, data.Length); Properties.Add(new JFIFThumbnailProperty(ExifTag.JFXXThumbnail, new JFIFThumbnail(palette, data))); } } /// /// Replaces the contents of the APP0 section with the JFIF extension properties. /// private bool WriteJFXXApp0() { // Which IFD sections do we have? List ifdjfef = new List(); foreach (ExifProperty prop in Properties) { if (prop.IFD == IFD.JFXX) ifdjfef.Add(prop); } if (ifdjfef.Count == 0) { // Nothing to write return false; } // Create a memory stream to write the APP0 section to MemoryStream ms = new MemoryStream(); // JFIF identifer ms.Write(Encoding.ASCII.GetBytes("JFXX\0"), 0, 5); // Write tags foreach (ExifProperty prop in ifdjfef) { ExifInterOperability interop = prop.Interoperability; byte[] data = interop.Data; if (BitConverterEx.SystemByteOrder != BitConverterEx.ByteOrder.BigEndian && interop.TypeID == 3) Array.Reverse(data); ms.Write(data, 0, data.Length); } ms.Close(); // Return APP0 header jfxxApp0.Header = ms.ToArray(); return true; } /// /// Reads the APP1 section containing Exif metadata. /// private void ReadExifAPP1() { // Find the APP1 section containing Exif metadata exifApp1 = Sections.Find(a => (a.Marker == JPEGMarker.APP1) && a.Header.Length >= 6 && (Encoding.ASCII.GetString(a.Header, 0, 6) == "Exif\0\0")); // If there is no APP1 section, add a new one after the last APP0 section (if any). if (exifApp1 == null) { int insertionIndex = Sections.FindLastIndex(a => a.Marker == JPEGMarker.APP0); if (insertionIndex == -1) insertionIndex = 0; insertionIndex++; exifApp1 = new JPEGSection(JPEGMarker.APP1); Sections.Insert(insertionIndex, exifApp1); if (BitConverterEx.SystemByteOrder == BitConverterEx.ByteOrder.LittleEndian) ByteOrder = BitConverterEx.ByteOrder.LittleEndian; else ByteOrder = BitConverterEx.ByteOrder.BigEndian; return; } byte[] header = exifApp1.Header; SortedList ifdqueue = new SortedList(); makerNoteOffset = 0; // TIFF header int tiffoffset = 6; if (header[tiffoffset] == 0x49 && header[tiffoffset + 1] == 0x49) ByteOrder = BitConverterEx.ByteOrder.LittleEndian; else if (header[tiffoffset] == 0x4D && header[tiffoffset + 1] == 0x4D) ByteOrder = BitConverterEx.ByteOrder.BigEndian; else throw new NotValidExifFileException(); // TIFF header may have a different byte order BitConverterEx.ByteOrder tiffByteOrder = ByteOrder; if (BitConverterEx.LittleEndian.ToUInt16(header, tiffoffset + 2) == 42) tiffByteOrder = BitConverterEx.ByteOrder.LittleEndian; else if (BitConverterEx.BigEndian.ToUInt16(header, tiffoffset + 2) == 42) tiffByteOrder = BitConverterEx.ByteOrder.BigEndian; else throw new NotValidExifFileException(); // Offset to 0th IFD int ifd0offset = (int)BitConverterEx.ToUInt32(header, tiffoffset + 4, tiffByteOrder, BitConverterEx.SystemByteOrder); ifdqueue.Add(ifd0offset, IFD.Zeroth); BitConverterEx conv = new BitConverterEx(ByteOrder, BitConverterEx.SystemByteOrder); int thumboffset = -1; int thumblength = 0; int thumbtype = -1; // Read IFDs while (ifdqueue.Count != 0) { int ifdoffset = tiffoffset + ifdqueue.Keys[0]; IFD currentifd = ifdqueue.Values[0]; ifdqueue.RemoveAt(0); // Field count ushort fieldcount = conv.ToUInt16(header, ifdoffset); for (short i = 0; i < fieldcount; i++) { // Read field info int fieldoffset = ifdoffset + 2 + 12 * i; ushort tag = conv.ToUInt16(header, fieldoffset); ushort type = conv.ToUInt16(header, fieldoffset + 2); uint count = conv.ToUInt32(header, fieldoffset + 4); byte[] value = new byte[4]; Array.Copy(header, fieldoffset + 8, value, 0, 4); // Fields containing offsets to other IFDs if (currentifd == IFD.Zeroth && tag == 0x8769) { int exififdpointer = (int)conv.ToUInt32(value, 0); ifdqueue.Add(exififdpointer, IFD.EXIF); } else if (currentifd == IFD.Zeroth && tag == 0x8825) { int gpsifdpointer = (int)conv.ToUInt32(value, 0); ifdqueue.Add(gpsifdpointer, IFD.GPS); } else if (currentifd == IFD.EXIF && tag == 0xa005) { int interopifdpointer = (int)conv.ToUInt32(value, 0); ifdqueue.Add(interopifdpointer, IFD.Interop); } // Save the offset to maker note data if (currentifd == IFD.EXIF && tag == 37500) makerNoteOffset = conv.ToUInt32(value, 0); // Calculate the bytes we need to read uint baselength = 0; if (type == 1 || type == 2 || type == 7) baselength = 1; else if (type == 3) baselength = 2; else if (type == 4 || type == 9) baselength = 4; else if (type == 5 || type == 10) baselength = 8; uint totallength = count * baselength; // If field value does not fit in 4 bytes // the value field is an offset to the actual // field value int fieldposition = 0; if (totallength > 4) { fieldposition = tiffoffset + (int)conv.ToUInt32(value, 0); value = new byte[totallength]; Array.Copy(header, fieldposition, value, 0, totallength); } // Compressed thumbnail data if (currentifd == IFD.First && tag == 0x201) { thumbtype = 0; thumboffset = (int)conv.ToUInt32(value, 0); } else if (currentifd == IFD.First && tag == 0x202) thumblength = (int)conv.ToUInt32(value, 0); // Uncompressed thumbnail data if (currentifd == IFD.First && tag == 0x111) { thumbtype = 1; // Offset to first strip if (type == 3) thumboffset = (int)conv.ToUInt16(value, 0); else thumboffset = (int)conv.ToUInt32(value, 0); } else if (currentifd == IFD.First && tag == 0x117) { thumblength = 0; for (int j = 0; j < count; j++) { if (type == 3) thumblength += (int)conv.ToUInt16(value, 0); else thumblength += (int)conv.ToUInt32(value, 0); } } // Create the exif property from the interop data ExifProperty prop = ExifPropertyFactory.Get(tag, type, count, value, ByteOrder, currentifd, Encoding); Properties.Add(prop); } // 1st IFD pointer int firstifdpointer = (int)conv.ToUInt32(header, ifdoffset + 2 + 12 * fieldcount); if (firstifdpointer != 0) ifdqueue.Add(firstifdpointer, IFD.First); // Read thumbnail if (thumboffset != -1 && thumblength != 0 && Thumbnail == null) { if (thumbtype == 0) { using (MemoryStream ts = new MemoryStream(header, tiffoffset + thumboffset, thumblength)) { Thumbnail = ImageFile.FromStream(ts); } } } } } /// /// Replaces the contents of the APP1 section with the Exif properties. /// private bool WriteExifApp1(bool preserveMakerNote) { // Zero out IFD field offsets. We will fill those as we write the IFD sections exifIFDFieldOffset = 0; gpsIFDFieldOffset = 0; interopIFDFieldOffset = 0; firstIFDFieldOffset = 0; // We also do not know the location of the embedded thumbnail yet thumbOffsetLocation = 0; thumbOffsetValue = 0; thumbSizeLocation = 0; thumbSizeValue = 0; // Write thumbnail tags if they are missing, remove otherwise int indexf = -1; int indexl = -1; for (int i = 0; i < Properties.Count; i++) { ExifProperty prop = Properties[i]; if (prop.Tag == ExifTag.ThumbnailJPEGInterchangeFormat) indexf = i; if (prop.Tag == ExifTag.ThumbnailJPEGInterchangeFormatLength) indexl = i; if (indexf != -1 && indexl != -1) break; } if (Thumbnail == null) { if (indexf != -1) Properties.RemoveAt(indexf); if (indexl != -1) Properties.RemoveAt(indexl); } else { if (indexf == -1) Properties.Add(new ExifUInt(ExifTag.ThumbnailJPEGInterchangeFormat, 0)); if (indexl == -1) Properties.Add(new ExifUInt(ExifTag.ThumbnailJPEGInterchangeFormatLength, 0)); } // Which IFD sections do we have? Dictionary ifdzeroth = new Dictionary(); Dictionary ifdexif = new Dictionary(); Dictionary ifdgps = new Dictionary(); Dictionary ifdinterop = new Dictionary(); Dictionary ifdfirst = new Dictionary(); foreach (ExifProperty prop in Properties) { switch (prop.IFD) { case IFD.Zeroth: ifdzeroth.Add(prop.Tag, prop); break; case IFD.EXIF: ifdexif.Add(prop.Tag, prop); break; case IFD.GPS: ifdgps.Add(prop.Tag, prop); break; case IFD.Interop: ifdinterop.Add(prop.Tag, prop); break; case IFD.First: ifdfirst.Add(prop.Tag, prop); break; } } // Add IFD pointers if they are missing // We will write the pointer values later on if (ifdexif.Count != 0 && !ifdzeroth.ContainsKey(ExifTag.EXIFIFDPointer)) ifdzeroth.Add(ExifTag.EXIFIFDPointer, new ExifUInt(ExifTag.EXIFIFDPointer, 0)); if (ifdgps.Count != 0 && !ifdzeroth.ContainsKey(ExifTag.GPSIFDPointer)) ifdzeroth.Add(ExifTag.GPSIFDPointer, new ExifUInt(ExifTag.GPSIFDPointer, 0)); if (ifdinterop.Count != 0 && !ifdexif.ContainsKey(ExifTag.InteroperabilityIFDPointer)) ifdexif.Add(ExifTag.InteroperabilityIFDPointer, new ExifUInt(ExifTag.InteroperabilityIFDPointer, 0)); // Remove IFD pointers if IFD sections are missing if (ifdexif.Count == 0 && ifdzeroth.ContainsKey(ExifTag.EXIFIFDPointer)) ifdzeroth.Remove(ExifTag.EXIFIFDPointer); if (ifdgps.Count == 0 && ifdzeroth.ContainsKey(ExifTag.GPSIFDPointer)) ifdzeroth.Remove(ExifTag.GPSIFDPointer); if (ifdinterop.Count == 0 && ifdexif.ContainsKey(ExifTag.InteroperabilityIFDPointer)) ifdexif.Remove(ExifTag.InteroperabilityIFDPointer); if (ifdzeroth.Count == 0 && ifdgps.Count == 0 && ifdinterop.Count == 0 && ifdfirst.Count == 0 && Thumbnail == null) { // Nothing to write return false; } // We will need these bitconverter to write byte-ordered data BitConverterEx bceExif = new BitConverterEx(BitConverterEx.SystemByteOrder, ByteOrder); // Create a memory stream to write the APP1 section to MemoryStream ms = new MemoryStream(); // Exif identifer ms.Write(Encoding.ASCII.GetBytes("Exif\0\0"), 0, 6); // TIFF header // Byte order long tiffoffset = ms.Position; ms.Write((ByteOrder == BitConverterEx.ByteOrder.LittleEndian ? new byte[] { 0x49, 0x49 } : new byte[] { 0x4D, 0x4D }), 0, 2); // TIFF ID ms.Write(bceExif.GetBytes((ushort)42), 0, 2); // Offset to 0th IFD ms.Write(bceExif.GetBytes((uint)8), 0, 4); // Write IFDs WriteIFD(ms, ifdzeroth, IFD.Zeroth, tiffoffset, preserveMakerNote); uint exififdrelativeoffset = (uint)(ms.Position - tiffoffset); WriteIFD(ms, ifdexif, IFD.EXIF, tiffoffset, preserveMakerNote); uint gpsifdrelativeoffset = (uint)(ms.Position - tiffoffset); WriteIFD(ms, ifdgps, IFD.GPS, tiffoffset, preserveMakerNote); uint interopifdrelativeoffset = (uint)(ms.Position - tiffoffset); WriteIFD(ms, ifdinterop, IFD.Interop, tiffoffset, preserveMakerNote); uint firstifdrelativeoffset = (uint)(ms.Position - tiffoffset); WriteIFD(ms, ifdfirst, IFD.First, tiffoffset, preserveMakerNote); // Now that we now the location of IFDs we can go back and write IFD offsets if (exifIFDFieldOffset != 0) { ms.Seek(exifIFDFieldOffset, SeekOrigin.Begin); ms.Write(bceExif.GetBytes(exififdrelativeoffset), 0, 4); } if (gpsIFDFieldOffset != 0) { ms.Seek(gpsIFDFieldOffset, SeekOrigin.Begin); ms.Write(bceExif.GetBytes(gpsifdrelativeoffset), 0, 4); } if (interopIFDFieldOffset != 0) { ms.Seek(interopIFDFieldOffset, SeekOrigin.Begin); ms.Write(bceExif.GetBytes(interopifdrelativeoffset), 0, 4); } if (firstIFDFieldOffset != 0) { ms.Seek(firstIFDFieldOffset, SeekOrigin.Begin); ms.Write(bceExif.GetBytes(firstifdrelativeoffset), 0, 4); } // We can write thumbnail location now if (thumbOffsetLocation != 0) { ms.Seek(thumbOffsetLocation, SeekOrigin.Begin); ms.Write(bceExif.GetBytes(thumbOffsetValue), 0, 4); } if (thumbSizeLocation != 0) { ms.Seek(thumbSizeLocation, SeekOrigin.Begin); ms.Write(bceExif.GetBytes(thumbSizeValue), 0, 4); } ms.Close(); // Return APP1 header exifApp1.Header = ms.ToArray(); return true; } private void WriteIFD(MemoryStream stream, Dictionary ifd, IFD ifdtype, long tiffoffset, bool preserveMakerNote) { BitConverterEx conv = new BitConverterEx(BitConverterEx.SystemByteOrder, ByteOrder); // Create a queue of fields to write Queue fieldqueue = new Queue(); foreach (ExifProperty prop in ifd.Values) if (prop.Tag != ExifTag.MakerNote) fieldqueue.Enqueue(prop); // Push the maker note data to the end if (ifd.ContainsKey(ExifTag.MakerNote)) fieldqueue.Enqueue(ifd[ExifTag.MakerNote]); // Offset to start of field data from start of TIFF header uint dataoffset = (uint)(2 + ifd.Count * 12 + 4 + stream.Position - tiffoffset); uint currentdataoffset = dataoffset; long absolutedataoffset = stream.Position + (2 + ifd.Count * 12 + 4); bool makernotewritten = false; // Field count stream.Write(conv.GetBytes((ushort)ifd.Count), 0, 2); // Fields while (fieldqueue.Count != 0) { ExifProperty field = fieldqueue.Dequeue(); ExifInterOperability interop = field.Interoperability; uint fillerbytecount = 0; // Try to preserve the makernote data offset if (!makernotewritten && !makerNoteProcessed && makerNoteOffset != 0 && ifdtype == IFD.EXIF && field.Tag != ExifTag.MakerNote && interop.Data.Length > 4 && currentdataoffset + interop.Data.Length > makerNoteOffset && ifd.ContainsKey(ExifTag.MakerNote)) { // Delay writing this field until we write makernote data fieldqueue.Enqueue(field); continue; } else if (field.Tag == ExifTag.MakerNote) { makernotewritten = true; // We may need to write filler bytes to preserve maker note offset if (preserveMakerNote && !makerNoteProcessed && (makerNoteOffset > currentdataoffset)) fillerbytecount = makerNoteOffset - currentdataoffset; else fillerbytecount = 0; } // Tag stream.Write(conv.GetBytes(interop.TagID), 0, 2); // Type stream.Write(conv.GetBytes(interop.TypeID), 0, 2); // Count stream.Write(conv.GetBytes(interop.Count), 0, 4); // Field data byte[] data = interop.Data; if (ByteOrder != BitConverterEx.SystemByteOrder && (interop.TypeID == 3 || interop.TypeID == 4 || interop.TypeID == 9 || interop.TypeID == 5 || interop.TypeID == 10)) { int vlen = 4; if (interop.TypeID == 3) vlen = 2; int n = data.Length / vlen; for (int i = 0; i < n; i++) Array.Reverse(data, i * vlen, vlen); } // Fields containing offsets to other IFDs // Just store their offets, we will write the values later on when we know the lengths of IFDs if (ifdtype == IFD.Zeroth && interop.TagID == 0x8769) exifIFDFieldOffset = stream.Position; else if (ifdtype == IFD.Zeroth && interop.TagID == 0x8825) gpsIFDFieldOffset = stream.Position; else if (ifdtype == IFD.EXIF && interop.TagID == 0xa005) interopIFDFieldOffset = stream.Position; else if (ifdtype == IFD.First && interop.TagID == 0x201) thumbOffsetLocation = stream.Position; else if (ifdtype == IFD.First && interop.TagID == 0x202) thumbSizeLocation = stream.Position; // Write 4 byte field value or field data if (data.Length <= 4) { stream.Write(data, 0, data.Length); for (int i = data.Length; i < 4; i++) stream.WriteByte(0); } else { // Pointer to data area relative to TIFF header stream.Write(conv.GetBytes(currentdataoffset + fillerbytecount), 0, 4); // Actual data long currentoffset = stream.Position; stream.Seek(absolutedataoffset, SeekOrigin.Begin); // Write filler bytes for (int i = 0; i < fillerbytecount; i++) stream.WriteByte(0xFF); stream.Write(data, 0, data.Length); stream.Seek(currentoffset, SeekOrigin.Begin); // Increment pointers currentdataoffset += fillerbytecount + (uint)data.Length; absolutedataoffset += fillerbytecount + data.Length; } } // Offset to 1st IFD // We will write zeros for now. This will be filled after we write all IFDs if (ifdtype == IFD.Zeroth) firstIFDFieldOffset = stream.Position; stream.Write(new byte[] { 0, 0, 0, 0 }, 0, 4); // Seek to end of IFD stream.Seek(absolutedataoffset, SeekOrigin.Begin); // Write thumbnail data if (ifdtype == IFD.First) { if (Thumbnail != null) { MemoryStream ts = new MemoryStream(); Thumbnail.Save(ts); ts.Close(); byte[] thumb = ts.ToArray(); thumbOffsetValue = (uint)(stream.Position - tiffoffset); thumbSizeValue = (uint)thumb.Length; stream.Write(thumb, 0, thumb.Length); ts.Dispose(); } else { thumbOffsetValue = 0; thumbSizeValue = 0; } } } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JPEGMarker.cs000066400000000000000000000042071446222606700247700ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents a JPEG marker byte. /// public enum JPEGMarker : byte { // Start Of Frame markers, non-differential, Huffman coding SOF0 = 0xc0, SOF1 = 0xc1, SOF2 = 0xc2, SOF3 = 0xc3, // Start Of Frame markers, differential, Huffman coding SOF5 = 0xc5, SOF6 = 0xc6, SOF7 = 0xc7, // Start Of Frame markers, non-differential, arithmetic coding JPG = 0xc8, SOF9 = 0xc9, SOF10 = 0xca, SOF11 = 0xcb, // Start Of Frame markers, differential, arithmetic coding SOF13 = 0xcd, SOF14 = 0xce, SOF15 = 0xcf, // Huffman table specification DHT = 0xc4, // Arithmetic coding conditioning specification DAC = 0xcc, // Restart interval termination RST0 = 0xd0, RST1 = 0xd1, RST2 = 0xd2, RST3 = 0xd3, RST4 = 0xd4, RST5 = 0xd5, RST6 = 0xd6, RST7 = 0xd7, // Other markers SOI = 0xd8, EOI = 0xd9, SOS = 0xda, DQT = 0xdb, DNL = 0xdc, DRI = 0xdd, DHP = 0xde, EXP = 0xdf, // application segments APP0 = 0xe0, APP1 = 0xe1, APP2 = 0xe2, APP3 = 0xe3, APP4 = 0xe4, APP5 = 0xe5, APP6 = 0xe6, APP7 = 0xe7, APP8 = 0xe8, APP9 = 0xe9, APP10 = 0xea, APP11 = 0xeb, APP12 = 0xec, APP13 = 0xed, APP14 = 0xee, APP15 = 0xef, // JPEG extensions JPG0 = 0xf0, JPG1 = 0xf1, JPG2 = 0xf2, JPG3 = 0xf3, JPG4 = 0xf4, JPG5 = 0xf5, JPG6 = 0xf6, JPG7 = 0xf7, JPG8 = 0xf8, JPG9 = 0xf9, JPG10 = 0xfa, JPG11 = 0xfb, JP1G2 = 0xfc, JPG13 = 0xfd, // Comment COM = 0xfe, // Temporary TEM = 0x01, } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/JPEGSection.cs000066400000000000000000000045301446222606700251520ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents the memory view of a JPEG section. /// A JPEG section is the data between markers of the JPEG file. /// public class JPEGSection { #region Properties /// /// The marker byte representing the section. /// public JPEGMarker Marker { get; private set; } /// /// Section header as a byte array. This is different from the header /// definition in JPEG specification in that it does not include the /// two byte section length. /// public byte[] Header { get; set; } /// /// For the SOS and RST markers, this contains the entropy coded data. /// public byte[] EntropyData { get; set; } #endregion #region Constructors /// /// Constructs a JPEGSection represented by the marker byte and containing /// the given data. /// /// The marker byte representing the section. /// Section data. /// Entropy coded data. public JPEGSection(JPEGMarker marker, byte[] data, byte[] entropydata) { Marker = marker; Header = data; EntropyData = entropydata; } /// /// Constructs a JPEGSection represented by the marker byte. /// /// The marker byte representing the section. public JPEGSection(JPEGMarker marker) : this(marker, new byte[0], new byte[0]) { ; } #endregion #region Instance Methods /// /// Returns a string representation of the current section. /// /// A System.String that represents the current section. public override string ToString() { return string.Format("{0} => Header: {1} bytes, Entropy Data: {2} bytes", Marker, Header.Length, EntropyData.Length); } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/MathEx.cs000066400000000000000000001502351446222606700242720ustar00rootroot00000000000000using System; using System.Text; namespace ExifLibrary { /// /// Contains extended Math functions. /// public static class MathEx { /// /// Returns the greatest common divisor of two numbers. /// /// First number. /// Second number. public static uint GCD(uint a, uint b) { while (b != 0) { uint rem = a % b; a = b; b = rem; } return a; } /// /// Returns the greatest common divisor of two numbers. /// /// First number. /// Second number. public static ulong GCD(ulong a, ulong b) { while (b != 0) { ulong rem = a % b; a = b; b = rem; } return a; } /// /// Represents a generic rational number represented by 32-bit signed numerator and denominator. /// public struct Fraction32 : IComparable, IFormattable, IComparable, IEquatable { #region Constants private const uint MaximumIterations = 10000000; #endregion #region Member Variables private bool mIsNegative; private int mNumerator; private int mDenominator; private double mError; #endregion #region Properties /// /// Gets or sets the numerator. /// public int Numerator { get { return (mIsNegative ? -1 : 1) * mNumerator; } set { if (value < 0) { mIsNegative = true; mNumerator = -1 * value; } else { mIsNegative = false; mNumerator = value; } Reduce(ref mNumerator, ref mDenominator); } } /// /// Gets or sets the denominator. /// public int Denominator { get { return ((int)mDenominator); } set { mDenominator = System.Math.Abs(value); Reduce(ref mNumerator, ref mDenominator); } } /// /// Gets the error term. /// public double Error { get { return mError; } } /// /// Gets or sets a value determining id the fraction is a negative value. /// public bool IsNegative { get { return mIsNegative; } set { mIsNegative = value; } } #endregion #region Predefined Values public static readonly Fraction32 NaN = new Fraction32(0, 0); public static readonly Fraction32 NegativeInfinity = new Fraction32(-1, 0); public static readonly Fraction32 PositiveInfinity = new Fraction32(1, 0); #endregion #region Static Methods /// /// Returns a value indicating whether the specified number evaluates to a value /// that is not a number. /// /// A fraction. /// true if f evaluates to Fraction.NaN; otherwise, false. public static bool IsNan(Fraction32 f) { return (f.Numerator == 0 && f.Denominator == 0); } /// /// Returns a value indicating whether the specified number evaluates to negative /// infinity. /// /// A fraction. /// true if f evaluates to Fraction.NegativeInfinity; otherwise, false. public static bool IsNegativeInfinity(Fraction32 f) { return (f.Numerator < 0 && f.Denominator == 0); } /// /// Returns a value indicating whether the specified number evaluates to positive /// infinity. /// /// A fraction. /// true if f evaluates to Fraction.PositiveInfinity; otherwise, false. public static bool IsPositiveInfinity(Fraction32 f) { return (f.Numerator > 0 && f.Denominator == 0); } /// /// Returns a value indicating whether the specified number evaluates to negative /// or positive infinity. /// /// A fraction. /// true if f evaluates to Fraction.NegativeInfinity or Fraction.PositiveInfinity; otherwise, false. public static bool IsInfinity(Fraction32 f) { return (f.Denominator == 0); } /// /// Returns the multiplicative inverse of a given value. /// /// A fraction. /// Multiplicative inverse of f. public static Fraction32 Inverse(Fraction32 f) { return new Fraction32(f.Denominator, f.Numerator); } /// /// Converts the string representation of a fraction to a fraction object. /// /// A string formatted as numerator/denominator /// A fraction object converted from s. /// s is null /// s is not in the correct format /// /// s represents a number less than System.UInt32.MinValue or greater than /// System.UInt32.MaxValue. /// public static Fraction32 Parse(string s) { return FromString(s); } /// /// Converts the string representation of a fraction to a fraction object. /// A return value indicates whether the conversion succeeded. /// /// A string formatted as numerator/denominator /// true if s was converted successfully; otherwise, false. public static bool TryParse(string s, out Fraction32 f) { try { f = Parse(s); return true; } catch { f = new Fraction32(); return false; } } #endregion #region Operators #region Arithmetic Operators // Multiplication public static Fraction32 operator *(Fraction32 f, int n) { return new Fraction32(f.Numerator * n, f.Denominator * System.Math.Abs(n)); } public static Fraction32 operator *(int n, Fraction32 f) { return f * n; } public static Fraction32 operator *(Fraction32 f, float n) { return new Fraction32(((float)f) * n); } public static Fraction32 operator *(float n, Fraction32 f) { return f * n; } public static Fraction32 operator *(Fraction32 f, double n) { return new Fraction32(((double)f) * n); } public static Fraction32 operator *(double n, Fraction32 f) { return f * n; } public static Fraction32 operator *(Fraction32 f1, Fraction32 f2) { return new Fraction32(f1.Numerator * f2.Numerator, f1.Denominator * f2.Denominator); } // Divison public static Fraction32 operator /(Fraction32 f, int n) { return new Fraction32(f.Numerator / n, f.Denominator / System.Math.Abs(n)); } public static Fraction32 operator /(Fraction32 f, float n) { return new Fraction32(((float)f) / n); } public static Fraction32 operator /(Fraction32 f, double n) { return new Fraction32(((double)f) / n); } public static Fraction32 operator /(Fraction32 f1, Fraction32 f2) { return f1 * Inverse(f2); } // Addition public static Fraction32 operator +(Fraction32 f, int n) { return f + new Fraction32(n, 1); } public static Fraction32 operator +(int n, Fraction32 f) { return f + n; } public static Fraction32 operator +(Fraction32 f, float n) { return new Fraction32(((float)f) + n); } public static Fraction32 operator +(float n, Fraction32 f) { return f + n; } public static Fraction32 operator +(Fraction32 f, double n) { return new Fraction32(((double)f) + n); } public static Fraction32 operator +(double n, Fraction32 f) { return f + n; } public static Fraction32 operator +(Fraction32 f1, Fraction32 f2) { int n1 = f1.Numerator, d1 = f1.Denominator; int n2 = f2.Numerator, d2 = f2.Denominator; return new Fraction32(n1 * d2 + n2 * d1, d1 * d2); } // Subtraction public static Fraction32 operator -(Fraction32 f, int n) { return f - new Fraction32(n, 1); } public static Fraction32 operator -(int n, Fraction32 f) { return new Fraction32(n, 1) - f; } public static Fraction32 operator -(Fraction32 f, float n) { return new Fraction32(((float)f) - n); } public static Fraction32 operator -(float n, Fraction32 f) { return new Fraction32(n) - f; } public static Fraction32 operator -(Fraction32 f, double n) { return new Fraction32(((double)f) - n); } public static Fraction32 operator -(double n, Fraction32 f) { return new Fraction32(n) - f; } public static Fraction32 operator -(Fraction32 f1, Fraction32 f2) { int n1 = f1.Numerator, d1 = f1.Denominator; int n2 = f2.Numerator, d2 = f2.Denominator; return new Fraction32(n1 * d2 - n2 * d1, d1 * d2); } // Increment public static Fraction32 operator ++(Fraction32 f) { return f + new Fraction32(1, 1); } // Decrement public static Fraction32 operator --(Fraction32 f) { return f - new Fraction32(1, 1); } #endregion #region Casts To Integral Types public static explicit operator int(Fraction32 f) { return f.Numerator / f.Denominator; } public static explicit operator float(Fraction32 f) { return ((float)f.Numerator) / ((float)f.Denominator); } public static explicit operator double(Fraction32 f) { return ((double)f.Numerator) / ((double)f.Denominator); } #endregion #region Comparison Operators public static bool operator ==(Fraction32 f1, Fraction32 f2) { return (f1.Numerator == f2.Numerator) && (f1.Denominator == f2.Denominator); } public static bool operator !=(Fraction32 f1, Fraction32 f2) { return (f1.Numerator != f2.Numerator) || (f1.Denominator != f2.Denominator); } public static bool operator <(Fraction32 f1, Fraction32 f2) { return (f1.Numerator * f2.Denominator) < (f2.Numerator * f1.Denominator); } public static bool operator >(Fraction32 f1, Fraction32 f2) { return (f1.Numerator * f2.Denominator) > (f2.Numerator * f1.Denominator); } #endregion #endregion #region Constructors private Fraction32(int numerator, int denominator, double error) { mIsNegative = false; if (numerator < 0) { numerator = -numerator; mIsNegative = !mIsNegative; } if (denominator < 0) { denominator = -denominator; mIsNegative = !mIsNegative; } mNumerator = numerator; mDenominator = denominator; mError = error; if (mDenominator != 0) Reduce(ref mNumerator, ref mDenominator); } public Fraction32(int numerator, int denominator) : this(numerator, denominator, 0) { ; } public Fraction32(int numerator) : this(numerator, (int)1) { ; } public Fraction32(Fraction32 f) : this(f.Numerator, f.Denominator, f.Error) { ; } public Fraction32(float value) : this((double)value) { ; } public Fraction32(double value) : this(FromDouble(value)) { ; } public Fraction32(string s) : this(FromString(s)) { ; } #endregion #region Instance Methods /// /// Sets the value of this instance to the fraction represented /// by the given numerator and denominator. /// /// The new numerator. /// The new denominator. public void Set(int numerator, int denominator) { mIsNegative = false; if (numerator < 0) { mIsNegative = !mIsNegative; numerator = -numerator; } if (denominator < 0) { mIsNegative = !mIsNegative; denominator = -denominator; } mNumerator = numerator; mDenominator = denominator; if (mDenominator != 0) Reduce(ref mNumerator, ref mDenominator); } /// /// Indicates whether this instance and a specified object are equal value-wise. /// /// Another object to compare to. /// true if obj and this instance are the same type and represent /// the same value; otherwise, false. public override bool Equals(object obj) { if (obj == null) return false; if (obj is Fraction32) return Equals((Fraction32)obj); else return false; } /// /// Indicates whether this instance and a specified object are equal value-wise. /// /// Another fraction object to compare to. /// true if obj and this instance represent the same value; /// otherwise, false. public bool Equals(Fraction32 obj) { return (mIsNegative == obj.IsNegative) && (mNumerator == obj.Numerator) && (mDenominator == obj.Denominator); } /// /// Returns the hash code for this instance. /// /// A 32-bit signed integer that is the hash code for this instance. public override int GetHashCode() { return mDenominator ^ ((mIsNegative ? -1 : 1) * mNumerator); } /// /// Returns a string representation of the fraction. /// /// A numeric format string. /// /// An System.IFormatProvider that supplies culture-specific /// formatting information. /// /// /// The string representation of the value of this instance as /// specified by format and provider. /// /// /// format is invalid or not supported. /// public string ToString(string format, IFormatProvider formatProvider) { StringBuilder sb = new StringBuilder(); sb.Append(((mIsNegative ? -1 : 1) * mNumerator).ToString(format, formatProvider)); sb.Append('/'); sb.Append(mDenominator.ToString(format, formatProvider)); return sb.ToString(); } /// /// Returns a string representation of the fraction. /// /// A numeric format string. /// /// The string representation of the value of this instance as /// specified by format. /// /// /// format is invalid or not supported. /// public string ToString(string format) { StringBuilder sb = new StringBuilder(); sb.Append(((mIsNegative ? -1 : 1) * mNumerator).ToString(format)); sb.Append('/'); sb.Append(mDenominator.ToString(format)); return sb.ToString(); } /// /// Returns a string representation of the fraction. /// /// /// An System.IFormatProvider that supplies culture-specific /// formatting information. /// /// /// The string representation of the value of this instance as /// specified by provider. /// public string ToString(IFormatProvider formatProvider) { StringBuilder sb = new StringBuilder(); sb.Append(((mIsNegative ? -1 : 1) * mNumerator).ToString(formatProvider)); sb.Append('/'); sb.Append(mDenominator.ToString(formatProvider)); return sb.ToString(); } /// /// Returns a string representation of the fraction. /// /// A string formatted as numerator/denominator. public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append(((mIsNegative ? -1 : 1) * mNumerator).ToString()); sb.Append('/'); sb.Append(mDenominator.ToString()); return sb.ToString(); } /// /// Compares this instance to a specified object and returns an indication of /// their relative values. /// /// An object to compare, or null. /// /// A signed number indicating the relative values of this instance and value. /// Less than zero: This instance is less than obj. /// Zero: This instance is equal to obj. /// Greater than zero: This instance is greater than obj or obj is null. /// /// obj is not a Fraction. public int CompareTo(object obj) { if (!(obj is Fraction32)) throw new ArgumentException("obj must be of type Fraction", "obj"); return CompareTo((Fraction32)obj); } /// /// Compares this instance to a specified object and returns an indication of /// their relative values. /// /// An fraction to compare with this instance. /// /// A signed number indicating the relative values of this instance and value. /// Less than zero: This instance is less than obj. /// Zero: This instance is equal to obj. /// Greater than zero: This instance is greater than obj or obj is null. /// public int CompareTo(Fraction32 obj) { if (this < obj) return -1; else if (this > obj) return 1; return 0; } #endregion #region Private Helper Methods /// /// Converts the given floating-point number to its rational representation. /// /// The floating-point number to be converted. /// The rational representation of value. private static Fraction32 FromDouble(double value) { if (double.IsNaN(value)) return Fraction32.NaN; else if (double.IsNegativeInfinity(value)) return Fraction32.NegativeInfinity; else if (double.IsPositiveInfinity(value)) return Fraction32.PositiveInfinity; bool isneg = (value < 0); if (isneg) value = -value; double f = value; double forg = f; int lnum = 0; int lden = 1; int num = 1; int den = 0; double lasterr = 1.0; int a = 0; int currIteration = 0; while (true) { if (++currIteration > MaximumIterations) break; a = (int)Math.Floor(f); f = f - (double)a; if (Math.Abs(f) < double.Epsilon) break; f = 1.0 / f; if (double.IsInfinity(f)) break; int cnum = num * a + lnum; int cden = den * a + lden; if (Math.Abs((double)cnum / (double)cden - forg) < double.Epsilon) break; double err = ((double)cnum / (double)cden - (double)num / (double)den) / ((double)num / (double)den); // Are we converging? if (err >= lasterr) break; lasterr = err; lnum = num; lden = den; num = cnum; den = cden; } if (den > 0) lasterr = value - ((double)num / (double)den); else lasterr = double.PositiveInfinity; return new Fraction32((isneg ? -1 : 1) * num, den, lasterr); } /// Converts the string representation of a fraction to a Fraction type. /// The input string formatted as numerator/denominator. /// s is null. /// s is not formatted as numerator/denominator. /// /// s represents numbers less than System.Int32.MinValue or greater than /// System.Int32.MaxValue. /// private static Fraction32 FromString(string s) { if (s == null) throw new ArgumentNullException("s"); string[] sa = s.Split('/'); int numerator = 1; int denominator = 1; if (sa.Length == 1) { // Try to parse as int if (int.TryParse(sa[0], out numerator)) { denominator = 1; } else { // Parse as double double dval = double.Parse(sa[0]); return FromDouble(dval); } } else if (sa.Length == 2) { numerator = int.Parse(sa[0]); denominator = int.Parse(sa[1]); } else throw new FormatException("The input string must be formatted as n/d where n and d are integers"); return new Fraction32(numerator, denominator); } /// /// Reduces the given numerator and denominator by dividing with their /// greatest common divisor. /// /// numerator to be reduced. /// denominator to be reduced. private static void Reduce(ref int numerator, ref int denominator) { uint gcd = MathEx.GCD((uint)numerator, (uint)denominator); if (gcd == 0) gcd = 1; numerator = numerator / (int)gcd; denominator = denominator / (int)gcd; } #endregion } /// /// Represents a generic rational number represented by 32-bit unsigned numerator and denominator. /// public struct UFraction32 : IComparable, IFormattable, IComparable, IEquatable { #region Constants private const uint MaximumIterations = 10000000; #endregion #region Member Variables private uint mNumerator; private uint mDenominator; private double mError; #endregion #region Properties /// /// Gets or sets the numerator. /// public uint Numerator { get { return mNumerator; } set { mNumerator = value; Reduce(ref mNumerator, ref mDenominator); } } /// /// Gets or sets the denominator. /// public uint Denominator { get { return mDenominator; } set { mDenominator = value; Reduce(ref mNumerator, ref mDenominator); } } /// /// Gets the error term. /// public double Error { get { return mError; } } #endregion #region Predefined Values public static readonly UFraction32 NaN = new UFraction32(0, 0); public static readonly UFraction32 Infinity = new UFraction32(1, 0); #endregion #region Static Methods /// /// Returns a value indicating whether the specified number evaluates to a value /// that is not a number. /// /// A fraction. /// true if f evaluates to Fraction.NaN; otherwise, false. public static bool IsNan(UFraction32 f) { return (f.Numerator == 0 && f.Denominator == 0); } /// /// Returns a value indicating whether the specified number evaluates to infinity. /// /// A fraction. /// true if f evaluates to Fraction.Infinity; otherwise, false. public static bool IsInfinity(UFraction32 f) { return (f.Denominator == 0); } /// /// Converts the string representation of a fraction to a fraction object. /// /// A string formatted as numerator/denominator /// A fraction object converted from s. /// s is null /// s is not in the correct format /// /// s represents a number less than System.UInt32.MinValue or greater than /// System.UInt32.MaxValue. /// public static UFraction32 Parse(string s) { return FromString(s); } /// /// Converts the string representation of a fraction to a fraction object. /// A return value indicates whether the conversion succeeded. /// /// A string formatted as numerator/denominator /// true if s was converted successfully; otherwise, false. public static bool TryParse(string s, out UFraction32 f) { try { f = Parse(s); return true; } catch { f = new UFraction32(); return false; } } #endregion #region Operators #region Arithmetic Operators // Multiplication public static UFraction32 operator *(UFraction32 f, uint n) { return new UFraction32(f.Numerator * n, f.Denominator * n); } public static UFraction32 operator *(uint n, UFraction32 f) { return f * n; } public static UFraction32 operator *(UFraction32 f, float n) { return new UFraction32(((float)f) * n); } public static UFraction32 operator *(float n, UFraction32 f) { return f * n; } public static UFraction32 operator *(UFraction32 f, double n) { return new UFraction32(((double)f) * n); } public static UFraction32 operator *(double n, UFraction32 f) { return f * n; } public static UFraction32 operator *(UFraction32 f1, UFraction32 f2) { return new UFraction32(f1.Numerator * f2.Numerator, f1.Denominator * f2.Denominator); } // Divison public static UFraction32 operator /(UFraction32 f, uint n) { return new UFraction32(f.Numerator / n, f.Denominator / n); } public static UFraction32 operator /(UFraction32 f, float n) { return new UFraction32(((float)f) / n); } public static UFraction32 operator /(UFraction32 f, double n) { return new UFraction32(((double)f) / n); } public static UFraction32 operator /(UFraction32 f1, UFraction32 f2) { return f1 * Inverse(f2); } // Addition public static UFraction32 operator +(UFraction32 f, uint n) { return f + new UFraction32(n, 1); } public static UFraction32 operator +(uint n, UFraction32 f) { return f + n; } public static UFraction32 operator +(UFraction32 f, float n) { return new UFraction32(((float)f) + n); } public static UFraction32 operator +(float n, UFraction32 f) { return f + n; } public static UFraction32 operator +(UFraction32 f, double n) { return new UFraction32(((double)f) + n); } public static UFraction32 operator +(double n, UFraction32 f) { return f + n; } public static UFraction32 operator +(UFraction32 f1, UFraction32 f2) { uint n1 = f1.Numerator, d1 = f1.Denominator; uint n2 = f2.Numerator, d2 = f2.Denominator; return new UFraction32(n1 * d2 + n2 * d1, d1 * d2); } // Subtraction public static UFraction32 operator -(UFraction32 f, uint n) { return f - new UFraction32(n, 1); } public static UFraction32 operator -(uint n, UFraction32 f) { return new UFraction32(n, 1) - f; } public static UFraction32 operator -(UFraction32 f, float n) { return new UFraction32(((float)f) - n); } public static UFraction32 operator -(float n, UFraction32 f) { return new UFraction32(n) - f; } public static UFraction32 operator -(UFraction32 f, double n) { return new UFraction32(((double)f) - n); } public static UFraction32 operator -(double n, UFraction32 f) { return new UFraction32(n) - f; } public static UFraction32 operator -(UFraction32 f1, UFraction32 f2) { uint n1 = f1.Numerator, d1 = f1.Denominator; uint n2 = f2.Numerator, d2 = f2.Denominator; return new UFraction32(n1 * d2 - n2 * d1, d1 * d2); } // Increment public static UFraction32 operator ++(UFraction32 f) { return f + new UFraction32(1, 1); } // Decrement public static UFraction32 operator --(UFraction32 f) { return f - new UFraction32(1, 1); } #endregion #region Casts To Integral Types public static explicit operator uint(UFraction32 f) { return ((uint)f.Numerator) / ((uint)f.Denominator); } public static explicit operator float(UFraction32 f) { return ((float)f.Numerator) / ((float)f.Denominator); } public static explicit operator double(UFraction32 f) { return ((double)f.Numerator) / ((double)f.Denominator); } #endregion #region Comparison Operators public static bool operator ==(UFraction32 f1, UFraction32 f2) { return (f1.Numerator == f2.Numerator) && (f1.Denominator == f2.Denominator); } public static bool operator !=(UFraction32 f1, UFraction32 f2) { return (f1.Numerator != f2.Numerator) || (f1.Denominator != f2.Denominator); } public static bool operator <(UFraction32 f1, UFraction32 f2) { return (f1.Numerator * f2.Denominator) < (f2.Numerator * f1.Denominator); } public static bool operator >(UFraction32 f1, UFraction32 f2) { return (f1.Numerator * f2.Denominator) > (f2.Numerator * f1.Denominator); } #endregion #endregion #region Constructors public UFraction32(uint numerator, uint denominator, double error) { mNumerator = numerator; mDenominator = denominator; mError = error; if (mDenominator != 0) Reduce(ref mNumerator, ref mDenominator); } public UFraction32(uint numerator, uint denominator) : this(numerator, denominator, 0) { ; } public UFraction32(uint numerator) : this(numerator, (uint)1) { ; } public UFraction32(UFraction32 f) : this(f.Numerator, f.Denominator, f.Error) { ; } public UFraction32(float value) : this((double)value) { ; } public UFraction32(double value) : this(FromDouble(value)) { ; } public UFraction32(string s) : this(FromString(s)) { ; } #endregion #region Instance Methods /// /// Sets the value of this instance to the fraction represented /// by the given numerator and denominator. /// /// The new numerator. /// The new denominator. public void Set(uint numerator, uint denominator) { mNumerator = numerator; mDenominator = denominator; if (mDenominator != 0) Reduce(ref mNumerator, ref mDenominator); } /// /// Returns the multiplicative inverse of a given value. /// /// A fraction. /// Multiplicative inverse of f. public static UFraction32 Inverse(UFraction32 f) { return new UFraction32(f.Denominator, f.Numerator); } /// /// Indicates whether this instance and a specified object are equal value-wise. /// /// Another object to compare to. /// true if obj and this instance are the same type and represent /// the same value; otherwise, false. public override bool Equals(object obj) { if (obj == null) return false; if (obj is UFraction32) return Equals((UFraction32)obj); else return false; } /// /// Indicates whether this instance and a specified object are equal value-wise. /// /// Another fraction object to compare to. /// true if obj and this instance represent the same value; /// otherwise, false. public bool Equals(UFraction32 obj) { return (mNumerator == obj.Numerator) && (mDenominator == obj.Denominator); } /// /// Returns the hash code for this instance. /// /// A 32-bit signed integer that is the hash code for this instance. public override int GetHashCode() { return ((int)mDenominator) ^ ((int)mNumerator); } /// /// Returns a string representation of the fraction. /// /// A numeric format string. /// /// An System.IFormatProvider that supplies culture-specific /// formatting information. /// /// /// The string representation of the value of this instance as /// specified by format and provider. /// /// /// format is invalid or not supported. /// public string ToString(string format, IFormatProvider formatProvider) { StringBuilder sb = new StringBuilder(); sb.Append(mNumerator.ToString(format, formatProvider)); sb.Append('/'); sb.Append(mDenominator.ToString(format, formatProvider)); return sb.ToString(); } /// /// Returns a string representation of the fraction. /// /// A numeric format string. /// /// The string representation of the value of this instance as /// specified by format. /// /// /// format is invalid or not supported. /// public string ToString(string format) { StringBuilder sb = new StringBuilder(); sb.Append(mNumerator.ToString(format)); sb.Append('/'); sb.Append(mDenominator.ToString(format)); return sb.ToString(); } /// /// Returns a string representation of the fraction. /// /// /// An System.IFormatProvider that supplies culture-specific /// formatting information. /// /// /// The string representation of the value of this instance as /// specified by provider. /// public string ToString(IFormatProvider formatProvider) { StringBuilder sb = new StringBuilder(); sb.Append(mNumerator.ToString(formatProvider)); sb.Append('/'); sb.Append(mDenominator.ToString(formatProvider)); return sb.ToString(); } /// /// Returns a string representation of the fraction. /// /// A string formatted as numerator/denominator. public override string ToString() { StringBuilder sb = new StringBuilder(); sb.Append(mNumerator.ToString()); sb.Append('/'); sb.Append(mDenominator.ToString()); return sb.ToString(); } /// /// Compares this instance to a specified object and returns an indication of /// their relative values. /// /// An object to compare, or null. /// /// A signed number indicating the relative values of this instance and value. /// Less than zero: This instance is less than obj. /// Zero: This instance is equal to obj. /// Greater than zero: This instance is greater than obj or obj is null. /// /// obj is not a Fraction. public int CompareTo(object obj) { if (!(obj is UFraction32)) throw new ArgumentException("obj must be of type UFraction32", "obj"); return CompareTo((UFraction32)obj); } /// /// Compares this instance to a specified object and returns an indication of /// their relative values. /// /// An fraction to compare with this instance. /// /// A signed number indicating the relative values of this instance and value. /// Less than zero: This instance is less than obj. /// Zero: This instance is equal to obj. /// Greater than zero: This instance is greater than obj or obj is null. /// public int CompareTo(UFraction32 obj) { if (this < obj) return -1; else if (this > obj) return 1; return 0; } #endregion #region Private Helper Methods /// /// Converts the given floating-point number to its rational representation. /// /// The floating-point number to be converted. /// The rational representation of value. private static UFraction32 FromDouble(double value) { if (value < 0) throw new ArgumentException("value cannot be negative.", "value"); if (double.IsNaN(value)) return UFraction32.NaN; else if (double.IsInfinity(value)) return UFraction32.Infinity; double f = value; double forg = f; uint lnum = 0; uint lden = 1; uint num = 1; uint den = 0; double lasterr = 1.0; uint a = 0; int currIteration = 0; while (true) { if (++currIteration > MaximumIterations) break; a = (uint)Math.Floor(f); f = f - (double)a; if (Math.Abs(f) < double.Epsilon) break; f = 1.0 / f; if (double.IsInfinity(f)) break; uint cnum = num * a + lnum; uint cden = den * a + lden; if (Math.Abs((double)cnum / (double)cden - forg) < double.Epsilon) break; double err = ((double)cnum / (double)cden - (double)num / (double)den) / ((double)num / (double)den); // Are we converging? if (err >= lasterr) break; lasterr = err; lnum = num; lden = den; num = cnum; den = cden; } uint fnum = num * a + lnum; uint fden = den * a + lden; if (fden > 0) lasterr = value - ((double)fnum / (double)fden); else lasterr = double.PositiveInfinity; return new UFraction32(fnum, fden, lasterr); } /// Converts the string representation of a fraction to a Fraction type. /// The input string formatted as numerator/denominator. /// s is null. /// s is not formatted as numerator/denominator. /// /// s represents numbers less than System.UInt32.MinValue or greater than /// System.UInt32.MaxValue. /// private static UFraction32 FromString(string s) { if (s == null) throw new ArgumentNullException("s"); string[] sa = s.Split('/'); uint numerator = 1; uint denominator = 1; if (sa.Length == 1) { // Try to parse as uint if (uint.TryParse(sa[0], out numerator)) { denominator = 1; } else { // Parse as double double dval = double.Parse(sa[0]); return FromDouble(dval); } } else if (sa.Length == 2) { numerator = uint.Parse(sa[0]); denominator = uint.Parse(sa[1]); } else throw new FormatException("The input string must be formatted as n/d where n and d are integers"); return new UFraction32(numerator, denominator); } /// /// Reduces the given numerator and denominator by dividing with their /// greatest common divisor. /// /// numerator to be reduced. /// denominator to be reduced. private static void Reduce(ref uint numerator, ref uint denominator) { uint gcd = MathEx.GCD(numerator, denominator); numerator = numerator / gcd; denominator = denominator / gcd; } #endregion } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/PNGChunk.cs000066400000000000000000000047061446222606700245220ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents the memory view of a PNG chunk. /// public class PNGChunk { #region Properties /// /// The four character ASCII chunk name/type. /// public string Type { get; set; } /// /// Chunk data. /// public byte[] Data { get; set; } /// /// The CRC computed over the chunk type and chunk data /// public uint CRC { get; private set; } /// /// Determines if this is a critical chunk. /// public bool IsCritical { get { return (Type[0] >= 'A') && (Type[0] <= 'Z'); } } /// /// Determines if this is a public chunk. /// public bool IsPublic { get { return (Type[1] >= 'A') && (Type[1] <= 'Z'); } } /// /// Determines if the chunk may be safely copied /// regardless of the extent of modifications to the file. /// public bool IsSafeToCopy { get { return (Type[3] >= 'a') && (Type[3] <= 'z'); } } #endregion #region Constructors /// /// Constructs a PNGChunk represented by the type name and containing /// the given data. /// /// The type of chuck. /// Chunk data. public PNGChunk(string type, byte[] data) { Type = type; Data = data; UpdateCRC(); } #endregion #region Instance Methods /// /// Updates the CRC value. /// public void UpdateCRC() { CRC = (uint)Utility.CRC32.Hash(0, Encoding.ASCII.GetBytes(Type)); CRC = (uint)Utility.CRC32.Hash(CRC, Data); } /// /// Returns a string representation of the current chunk. /// /// A System.String that represents the current chunk. public override string ToString() { return string.Format("{0} => Data: {1} bytes, CRC32: {2}", Type, Data.Length, CRC); } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/PNGFile.cs000066400000000000000000000321521446222606700243250ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.IO; using System.ComponentModel; namespace ExifLibrary { /// /// Represents the binary view of a PNG file. /// public class PNGFile : ImageFile { #region Properties /// /// Gets or sets the chunks contained in the . /// public List Chunks { get; private set; } #endregion #region Constructor /// /// Initializes a new instance of the class from the /// specified data stream. /// /// A that contains image data. /// The encoding to be used for text metadata when the source encoding is unknown. protected internal PNGFile(Stream stream, System.Text.Encoding encoding) { Format = ImageFileFormat.PNG; Chunks = new List(); Encoding = encoding; BitConverterEx conv = BitConverterEx.BigEndian; // Skip header stream.Seek(8, SeekOrigin.Begin); // Read chunks in order until we reach the end of file. while (stream.Position != stream.Length) { // Length of chunk data byte[] lengthBytes = new byte[4]; if (stream.Read(lengthBytes, 0, 4) != 4) throw new NotValidPNGFileException(); uint length = conv.ToUInt32(lengthBytes, 0); // Chunk type byte[] typeBytes = new byte[4]; if (stream.Read(typeBytes, 0, 4) != 4) throw new NotValidPNGFileException(); string type = Encoding.ASCII.GetString(typeBytes); // Chunk data byte[] data = Utility.GetStreamBytes(stream, length); // CRC of type name and data byte[] crcBytes = new byte[4]; if (stream.Read(crcBytes, 0, 4) != 4) throw new NotValidPNGFileException(); uint crc = conv.ToUInt32(crcBytes, 0); // Add to chunks list PNGChunk chunk = new PNGChunk(type, data); if (chunk.CRC != crc) throw new NotValidPNGFileException(); Chunks.Add(chunk); } ReadPNGMetadata(); } #endregion #region Instance Methods /// /// Decreases file size by removing all ancillary chunks. /// public override void Crush() { Properties.Clear(); Chunks.RemoveAll(c => !c.IsCritical); } /// /// Saves the to the given stream. /// /// The data stream used to save the image. public override void Save(Stream stream) { // Add end chunk if it does not exist if (Chunks[Chunks.Count - 1].Type != "IEND") { Chunks.Add(new PNGChunk("IEND", new byte[0])); } // Save metadata WritePNGMetadata(); BitConverterEx conv = BitConverterEx.BigEndian; // Write header stream.WriteByte(0x89); stream.WriteByte(0x50); stream.WriteByte(0x4E); stream.WriteByte(0x47); stream.WriteByte(0x0D); stream.WriteByte(0x0A); stream.WriteByte(0x1A); stream.WriteByte(0x0A); // Write chunks in order foreach (PNGChunk chunk in Chunks) { // Length of chunk data stream.Write(conv.GetBytes((uint)chunk.Data.LongLength), 0, 4); // Chunk type stream.Write(Encoding.ASCII.GetBytes(chunk.Type), 0, 4); // Chunk data long rem = chunk.Data.LongLength; long offset = 0; byte[] b = new byte[32768]; while (rem > 0) { int len = (int)Math.Min(rem, b.LongLength); Array.Copy(chunk.Data, offset, b, 0, len); stream.Write(b, 0, len); rem -= len; offset += len; } // CRC of type name and data stream.Write(conv.GetBytes(chunk.CRC), 0, 4); } } #endregion #region Private Helper Methods /// /// Reads the metadata from chunks. /// private void ReadPNGMetadata() { // Find the [ISO-8859-1] encoding (codepage: 28591) Encoding latin1 = Encoding.GetEncoding(28591); // tEXt and zTXt foreach (PNGChunk textChunk in Chunks.FindAll(c => c.Type == "tEXt" || c.Type == "zTXt")) { for (long i = 0; i < textChunk.Data.Length; i++) { if (textChunk.Data[i] == 0) { long sepIndex = i; byte[] keywordBytes = new byte[sepIndex]; Array.Copy(textChunk.Data, 0, keywordBytes, 0, keywordBytes.Length); string keyword = latin1.GetString(keywordBytes); if (textChunk.Type == "tEXt") { byte[] valueBytes = new byte[textChunk.Data.Length - (sepIndex + 1)]; Array.Copy(textChunk.Data, sepIndex + 1, valueBytes, 0, valueBytes.Length); string value = latin1.GetString(valueBytes); Properties.Add(new PNGText(TagFromKeyword(keyword), keyword, value, false)); } else { byte[] valueBytes = new byte[textChunk.Data.Length - (sepIndex + 2)]; Array.Copy(textChunk.Data, sepIndex + 2, valueBytes, 0, valueBytes.Length); string value = Utility.DecompressString(valueBytes, latin1); Properties.Add(new PNGText(TagFromKeyword(keyword), keyword, value, true)); } break; } } } // iTXt foreach (PNGChunk textChunk in Chunks.FindAll(c => c.Type == "iTXt")) { for (long i = 0; i < textChunk.Data.Length; i++) { if (textChunk.Data[i] == 0) { long sepIndex = i; byte[] keywordBytes = new byte[sepIndex]; Array.Copy(textChunk.Data, 0, keywordBytes, 0, keywordBytes.Length); string keyword = latin1.GetString(keywordBytes); bool compressed = (textChunk.Data[sepIndex + 1] == 1); for (long j = sepIndex + 3; j < textChunk.Data.Length; j++) { if (textChunk.Data[j] == 0) { long sepLangIndex = j; byte[] langBytes = new byte[sepLangIndex - (sepIndex + 3)]; Array.Copy(textChunk.Data, sepIndex + 3, langBytes, 0, langBytes.Length); string lang = latin1.GetString(langBytes); for (long k = sepLangIndex + 1; k < textChunk.Data.Length; k++) { if (textChunk.Data[k] == 0) { long sepTransIndex = k; byte[] transBytes = new byte[sepTransIndex - (sepLangIndex + 1)]; Array.Copy(textChunk.Data, sepLangIndex + 1, transBytes, 0, transBytes.Length); string trans = Encoding.UTF8.GetString(transBytes); byte[] valueBytes = new byte[textChunk.Data.Length - (sepTransIndex + 1)]; Array.Copy(textChunk.Data, sepTransIndex + 1, valueBytes, 0, valueBytes.Length); string value = string.Empty; if (compressed) value = Utility.DecompressString(valueBytes, Encoding.UTF8); else value = Encoding.UTF8.GetString(valueBytes); Properties.Add(new PNGInternationalText(TagFromKeyword(keyword), keyword, value, compressed, lang, trans)); break; } } break; } } break; } } } // tIME foreach (PNGChunk timeChunk in Chunks.FindAll(c => c.Type == "tIME")) { ushort year = ExifBitConverter.BigEndian.ToUInt16(timeChunk.Data, 0); DateTime mtime = new DateTime(year, timeChunk.Data[2], timeChunk.Data[3], timeChunk.Data[4], timeChunk.Data[5], timeChunk.Data[6]); Properties.Add(new PNGTimeStamp(ExifTag.PNGTimeStamp, mtime)); } } /// /// Returns the tag corresponding to the given keyword. /// /// The keyword to match. private ExifTag TagFromKeyword(string keyword) { if (string.Compare(keyword, "Title", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGTitle; else if (string.Compare(keyword, "Author", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGAuthor; else if (string.Compare(keyword, "Description", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGDescription; else if (string.Compare(keyword, "Copyright", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGCopyright; else if (string.Compare(keyword, "Creation Time", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGCreationTime; else if (string.Compare(keyword, "Software", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGSoftware; else if (string.Compare(keyword, "Disclaimer", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGDisclaimer; else if (string.Compare(keyword, "Warning", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGWarning; else if (string.Compare(keyword, "Source", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGSource; else if (string.Compare(keyword, "Comment", StringComparison.InvariantCultureIgnoreCase) == 0) return ExifTag.PNGComment; else return ExifTag.PNGText; } /// /// Writes metadata back into PNG chunks. /// private void WritePNGMetadata() { // Remove old chunks Chunks.RemoveAll(c => c.Type == "tEXt" || c.Type == "zTXt" || c.Type == "iTXt" || c.Type == "tIME"); // Add chunks foreach (ExifProperty prop in Properties) { if (prop is PNGText) { PNGText exprop = prop as PNGText; if (!exprop.Compressed) Chunks.Insert(Chunks.Count - 1, new PNGChunk("tEXt", prop.Interoperability.Data)); else Chunks.Insert(Chunks.Count - 1, new PNGChunk("zTXt", prop.Interoperability.Data)); } else if (prop is PNGInternationalText) { PNGInternationalText exprop = prop as PNGInternationalText; Chunks.Insert(Chunks.Count - 1, new PNGChunk("iTXt", prop.Interoperability.Data)); } else if (prop is PNGTimeStamp) { PNGTimeStamp exprop = prop as PNGTimeStamp; Chunks.Insert(Chunks.Count - 1, new PNGChunk("tIME", prop.Interoperability.Data)); } } } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/PNGProperty.cs000066400000000000000000000151061446222606700252720ustar00rootroot00000000000000using System; using System.Text; namespace ExifLibrary { /// /// Represents an Latin-1 [ISO-8859-1] string. (PNG Specification: tEXt, zTXt) /// public class PNGText : ExifProperty { protected string mValue; protected override object _Value { get { return Value; } set { Value = (string)value; } } public new string Value { get { return mValue; } set { mValue = value; } } public string Keyword { get; private set; } public bool Compressed { get; private set; } static public implicit operator string(PNGText obj) { return obj.mValue; } public override string ToString() { return mValue; } public PNGText(ExifTag tag, string keyword, string value, bool compressed) : base(tag) { Keyword = keyword; mValue = value; Compressed = compressed; } public override ExifInterOperability Interoperability { get { Encoding latin1 = Encoding.GetEncoding(28591); if (Compressed) { byte[] keyword = latin1.GetBytes(Keyword); byte[] value = Utility.CompressString(mValue, latin1); byte[] data = new byte[keyword.Length + 2 + value.Length]; Array.Copy(keyword, 0, data, 0, keyword.Length); data[keyword.Length] = 0; // Null separator data[keyword.Length + 1] = 0; // Compression method, 0 for zlib Array.Copy(value, 0, data, keyword.Length + 2, value.Length); return new ExifInterOperability((ushort)mTag, 2, (uint)data.Length, data); } else { byte[] keyword = latin1.GetBytes(Keyword); byte[] value = latin1.GetBytes(mValue); byte[] data = new byte[keyword.Length + 1 + value.Length]; Array.Copy(keyword, 0, data, 0, keyword.Length); data[keyword.Length] = 0; // Null separator Array.Copy(value, 0, data, keyword.Length + 1, value.Length); return new ExifInterOperability((ushort)mTag, 2, (uint)data.Length, data); } } } } /// /// Represents an internationalized Latin-1 [ISO-8859-1] string. (PNG Specification: iTXt) /// public class PNGInternationalText : ExifProperty { protected string mValue; protected override object _Value { get { return Value; } set { Value = (string)value; } } public new string Value { get { return mValue; } set { mValue = value; } } public string Keyword { get; private set; } public string Language { get; private set; } public string TranslatedKeyword { get; private set; } public bool Compressed { get; private set; } static public implicit operator string(PNGInternationalText obj) { return obj.mValue; } public override string ToString() { return mValue; } public PNGInternationalText(ExifTag tag, string keyword, string value, bool compressed, string language, string translatedKeyword) : base(tag) { Keyword = keyword; mValue = value; Compressed = compressed; Language = language; TranslatedKeyword = translatedKeyword; } public override ExifInterOperability Interoperability { get { Encoding latin1 = Encoding.GetEncoding(28591); byte[] keyword = latin1.GetBytes(Keyword); byte[] value = new byte[0]; if (Compressed) value = Utility.CompressString(mValue, Encoding.UTF8); else value = Encoding.UTF8.GetBytes(mValue); byte[] language = latin1.GetBytes(Language); byte[] translatedKeyword = Encoding.UTF8.GetBytes(TranslatedKeyword); byte[] data = new byte[keyword.Length + 3 + language.Length + 1 + translatedKeyword.Length + 1 + value.Length]; Array.Copy(keyword, 0, data, 0, keyword.Length); data[keyword.Length] = 0; // Null separator data[keyword.Length + 1] = (byte)(Compressed ? 1 : 0); // Compressed flag data[keyword.Length + 2] = 0; // Compression method, 0 for zlib Array.Copy(language, 0, data, keyword.Length + 3, language.Length); data[keyword.Length + 3 + language.Length] = 0; // Null separator Array.Copy(translatedKeyword, 0, data, keyword.Length + 3 + language.Length + 1, translatedKeyword.Length); data[keyword.Length + 3 + language.Length + 1 + translatedKeyword.Length] = 0; // Null separator Array.Copy(value, 0, data, keyword.Length + 3 + language.Length + 1 + translatedKeyword.Length + 1, value.Length); return new ExifInterOperability((ushort)mTag, 2, (uint)data.Length, data); } } } /// /// Represents time stamp information. (PNG Specification: tIME) /// public class PNGTimeStamp : ExifProperty { protected DateTime mValue; protected override object _Value { get { return Value; } set { Value = (DateTime)value; } } public new DateTime Value { get { return mValue; } set { mValue = value; } } static public implicit operator DateTime(PNGTimeStamp obj) { return obj.mValue; } public override string ToString() { return mValue.ToString("yyyy.MM.dd HH:mm:ss"); } public PNGTimeStamp(ExifTag tag, DateTime value) : base(tag) { mValue = value; } public override ExifInterOperability Interoperability { get { byte[] valueBytes = new byte[7]; byte[] yearBytes = ExifBitConverter.BigEndian.GetBytes((ushort)mValue.Year); Array.Copy(yearBytes, valueBytes, 2); valueBytes[2] = (byte)mValue.Month; valueBytes[3] = (byte)mValue.Day; valueBytes[4] = (byte)mValue.Hour; valueBytes[5] = (byte)mValue.Minute; valueBytes[6] = (byte)mValue.Second; return new ExifInterOperability((ushort)mTag, 2, (uint)7, valueBytes); } } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/Properties/000077500000000000000000000000001446222606700247035ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/Properties/AssemblyInfo.cs000066400000000000000000000033531446222606700276310ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("ExifLibrary")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ExifLibrary")] [assembly: AssemblyCopyright("Copyright © 2009")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // The AllowPartiallyTrustedCallersAttribute requires the assembly to be signed with a strong name key. // This attribute is necessary since the control is called by either an intranet or Internet // Web page that should be running under restricted permissions. [assembly: AllowPartiallyTrustedCallers()] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("5227932c-ad04-4aad-b584-f7be2902a4e0")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("0.18.0.0")] [assembly: AssemblyFileVersion("0.18.0.0")] quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/TIFFFile.cs000066400000000000000000000245001446222606700244270ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.IO; using System.ComponentModel; namespace ExifLibrary { /// /// Represents the binary view of a TIFF file. /// public class TIFFFile : ImageFile { #region White List /// /// The whitelist of tags to keep. /// private static Dictionary WhiteList = new Dictionary() { { ExifTag.BitsPerSample, false }, { ExifTag.CellLength, false }, { ExifTag.CellWidth, false }, { ExifTag.ColorMap, false }, { ExifTag.Compression, false }, { ExifTag.DotRange, false }, { ExifTag.ExtraSamples, false }, { ExifTag.FillOrder, false }, { ExifTag.FreeByteCounts, false }, { ExifTag.FreeOffsets, false }, { ExifTag.GrayResponseCurve, false }, { ExifTag.GrayResponseUnit, false }, { ExifTag.HalftoneHints, false }, { ExifTag.ImageLength, false }, { ExifTag.ImageWidth, false }, { ExifTag.InkNames, false }, { ExifTag.InkSet, false }, { ExifTag.JPEGACTables, false }, { ExifTag.JPEGDCTables, false }, { ExifTag.JPEGInterchangeFormat, false }, { ExifTag.JPEGInterchangeFormatLength, false }, { ExifTag.JPEGLosslessPredictors, false }, { ExifTag.JPEGPointTransforms, false }, { ExifTag.JPEGProc, false }, { ExifTag.JPEGQTables, false }, { ExifTag.JPEGRestartInterval, false }, { ExifTag.MaxSampleValue, false }, { ExifTag.MinSampleValue, false }, { ExifTag.NewSubfileType, false }, { ExifTag.NumberOfInks, false }, { ExifTag.Orientation, false }, { ExifTag.PhotometricInterpretation, false }, { ExifTag.PlanarConfiguration, false }, { ExifTag.Predictor, false }, { ExifTag.PrimaryChromaticities, false }, { ExifTag.ReferenceBlackWhite, false }, { ExifTag.ResolutionUnit, false }, { ExifTag.RowsPerStrip, false }, { ExifTag.SampleFormat, false }, { ExifTag.SamplesPerPixel, false }, { ExifTag.SMaxSampleValue, false }, { ExifTag.SMinSampleValue, false }, { ExifTag.StripByteCounts, false }, { ExifTag.StripOffsets, false }, { ExifTag.SubfileType, false }, { ExifTag.T4Options, false }, { ExifTag.T6Options, false }, { ExifTag.Threshholding, false }, { ExifTag.TileByteCounts, false }, { ExifTag.TileLength, false }, { ExifTag.TileOffsets, false }, { ExifTag.TileWidth, false }, { ExifTag.TransferFunction, false }, { ExifTag.TransferRange, false }, { ExifTag.WhitePoint, false }, { ExifTag.XPosition, false }, { ExifTag.XResolution, false }, { ExifTag.YCbCrCoefficients, false }, { ExifTag.YCbCrPositioning, false }, { ExifTag.YCbCrSubSampling, false }, { ExifTag.YPosition, false }, { ExifTag.YResolution, false }, }; #endregion #region Properties /// /// Gets the TIFF header. /// public TIFFHeader TIFFHeader { get; private set; } /// /// Gets the image file directories. /// public List IFDs { get; private set; } #endregion #region Constructor /// /// Initializes a new instance of the class from the /// specified data stream. /// /// A that contains image data. /// The encoding to be used for text metadata when the source encoding is unknown. protected internal TIFFFile(Stream stream, System.Text.Encoding encoding) { Format = ImageFileFormat.TIFF; IFDs = new List(); Encoding = encoding; // Read the entire stream byte[] data = Utility.GetStreamBytes(stream); // Read the TIFF header TIFFHeader = TIFFHeader.FromBytes(data, 0); uint nextIFDOffset = TIFFHeader.IFDOffset; if (nextIFDOffset == 0) throw new NotValidTIFFileException("The first IFD offset is zero."); // Read IFDs in order while (nextIFDOffset != 0) { ImageFileDirectory ifd = ImageFileDirectory.FromBytes(data, nextIFDOffset, TIFFHeader.ByteOrder); nextIFDOffset = ifd.NextIFDOffset; IFDs.Add(ifd); } // Process IFDs // TODO: Add support for multiple frames foreach (ImageFileDirectoryEntry field in IFDs[0].Fields) { Properties.Add(ExifPropertyFactory.Get(field.Tag, field.Type, field.Count, field.Data, BitConverterEx.SystemByteOrder, IFD.Zeroth, Encoding)); } } #endregion #region Instance Methods /// /// Decreases file size by removing all metadata. /// public override void Crush() { Properties.Clear(); // Remove tags. foreach (ImageFileDirectory ifd in IFDs) { ifd.Fields.RemoveAll((field) => { return (!WhiteList.ContainsKey((ExifTag)field.Tag)); }); } } /// /// Saves the to the given stream. /// /// The data stream used to save the image. public override void Save(Stream stream) { BitConverterEx conv = BitConverterEx.SystemEndian; // Write TIFF header uint ifdoffset = 8; // Byte order stream.Write((BitConverterEx.SystemByteOrder == BitConverterEx.ByteOrder.LittleEndian ? new byte[] { 0x49, 0x49 } : new byte[] { 0x4D, 0x4D }), 0, 2); // TIFF ID stream.Write(conv.GetBytes((ushort)42), 0, 2); // Offset to 0th IFD, will be corrected below stream.Write(conv.GetBytes(ifdoffset), 0, 4); // Write IFD sections for (int i = 0; i < IFDs.Count; i++) { ImageFileDirectory ifd = IFDs[i]; // Save the location of IFD offset long ifdLocation = stream.Position - 4; // Write strips first byte[] stripOffsets = new byte[4 * ifd.Strips.Count]; byte[] stripLengths = new byte[4 * ifd.Strips.Count]; uint stripOffset = ifdoffset; for (int j = 0; j < ifd.Strips.Count; j++) { byte[] stripData = ifd.Strips[j].Data; byte[] oBytes = BitConverter.GetBytes(stripOffset); byte[] lBytes = BitConverter.GetBytes((uint)stripData.Length); Array.Copy(oBytes, 0, stripOffsets, 4 * j, 4); Array.Copy(lBytes, 0, stripLengths, 4 * j, 4); stream.Write(stripData, 0, stripData.Length); stripOffset += (uint)stripData.Length; } // Remove old strip tags for (int j = ifd.Fields.Count - 1; j > 0; j--) { ushort tag = ifd.Fields[j].Tag; if (tag == 273 || tag == 279) ifd.Fields.RemoveAt(j); } // Write new strip tags ifd.Fields.Add(new ImageFileDirectoryEntry(273, 4, (uint)ifd.Strips.Count, stripOffsets)); ifd.Fields.Add(new ImageFileDirectoryEntry(279, 4, (uint)ifd.Strips.Count, stripLengths)); // Write fields after strips ifdoffset = stripOffset; // Correct IFD offset long currentLocation = stream.Position; stream.Seek(ifdLocation, SeekOrigin.Begin); stream.Write(conv.GetBytes(ifdoffset), 0, 4); stream.Seek(currentLocation, SeekOrigin.Begin); // Offset to field data uint dataOffset = ifdoffset + 2 + (uint)ifd.Fields.Count * 12 + 4; // Field count stream.Write(conv.GetBytes((ushort)ifd.Fields.Count), 0, 2); // Fields foreach (ImageFileDirectoryEntry field in ifd.Fields) { // Tag stream.Write(conv.GetBytes(field.Tag), 0, 2); // Type stream.Write(conv.GetBytes(field.Type), 0, 2); // Count stream.Write(conv.GetBytes(field.Count), 0, 4); // Field data byte[] data = field.Data; if (data.Length <= 4) { stream.Write(data, 0, data.Length); for (int j = data.Length; j < 4; j++) stream.WriteByte(0); } else { stream.Write(conv.GetBytes(dataOffset), 0, 4); long currentOffset = stream.Position; stream.Seek(dataOffset, SeekOrigin.Begin); stream.Write(data, 0, data.Length); dataOffset += (uint)data.Length; stream.Seek(currentOffset, SeekOrigin.Begin); } } // Offset to next IFD ifdoffset = dataOffset; stream.Write(conv.GetBytes(i == IFDs.Count - 1 ? 0 : ifdoffset), 0, 4); } } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/TIFFHeader.cs000066400000000000000000000063141446222606700247430ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents a TIFF Header. /// public struct TIFFHeader { /// /// The byte order of the image file. /// public BitConverterEx.ByteOrder ByteOrder; /// /// TIFF ID. This value should always be 42. /// public byte ID; /// /// The offset to the first IFD section from the /// start of the TIFF header. /// public uint IFDOffset; /// /// The byte order of the TIFF header itself. /// public BitConverterEx.ByteOrder TIFFHeaderByteOrder; /// /// Initializes a new instance of the struct. /// /// The byte order. /// The TIFF ID. This value should always be 42. /// The offset to the first IFD section from the /// start of the TIFF header. /// The byte order of the TIFF header itself. public TIFFHeader(BitConverterEx.ByteOrder byteOrder, byte id, uint ifdOffset, BitConverterEx.ByteOrder headerByteOrder) { if (id != 42) throw new NotValidTIFFHeader(); ByteOrder = byteOrder; ID = id; IFDOffset = ifdOffset; TIFFHeaderByteOrder = headerByteOrder; } /// /// Returns a initialized from the given byte data. /// /// The data. /// The offset into . /// A initialized from the given byte data. public static TIFFHeader FromBytes(byte[] data, int offset) { TIFFHeader header = new TIFFHeader(); // TIFF header if (data[offset] == 0x49 && data[offset + 1] == 0x49) header.ByteOrder = BitConverterEx.ByteOrder.LittleEndian; else if (data[offset] == 0x4D && data[offset + 1] == 0x4D) header.ByteOrder = BitConverterEx.ByteOrder.BigEndian; else throw new NotValidTIFFHeader(); // TIFF header may have a different byte order if (BitConverterEx.LittleEndian.ToUInt16(data, offset + 2) == 42) header.TIFFHeaderByteOrder = BitConverterEx.ByteOrder.LittleEndian; else if (BitConverterEx.BigEndian.ToUInt16(data, offset + 2) == 42) header.TIFFHeaderByteOrder = BitConverterEx.ByteOrder.BigEndian; else throw new NotValidTIFFHeader(); header.ID = 42; // IFD offset header.IFDOffset = BitConverterEx.ToUInt32(data, offset + 4, header.TIFFHeaderByteOrder, BitConverterEx.SystemByteOrder); return header; } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/TIFFStrip.cs000066400000000000000000000016511446222606700246530ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace ExifLibrary { /// /// Represents a strip of compressed image data in a TIFF file. /// public class TIFFStrip { /// /// Compressed image data contained in this strip. /// public byte[] Data { get; private set; } /// /// Initializes a new instance of the class. /// /// The byte array to copy strip from. /// The offset to the beginning of strip. /// The length of strip. public TIFFStrip(byte[] data, uint offset, uint length) { Data = new byte[length]; Array.Copy(data, offset, Data, 0, length); } } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/Utility.cs000066400000000000000000000170131446222606700245430ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; using System.IO.Compression; namespace ExifLibrary { /// /// Contains utility functions. /// public class Utility { #region File I/O /// /// Reads the entire stream and returns its contents as a byte array. /// /// The to read. /// Contents of the as a byte array. public static byte[] GetStreamBytes(Stream stream) { using (MemoryStream mem = new MemoryStream()) { stream.Seek(0, SeekOrigin.Begin); byte[] b = new byte[32768]; int r; while ((r = stream.Read(b, 0, b.Length)) > 0) mem.Write(b, 0, r); return mem.ToArray(); } } /// /// Reads the stream into the given byte array. /// /// The to read. /// The number of bytes to read. /// Contents of the as a byte array. public static byte[] GetStreamBytes(Stream stream, long rem) { using (MemoryStream mem = new MemoryStream()) { byte[] b = new byte[32768]; int r; while (rem > 0 && (r = stream.Read(b, 0, (int)Math.Min(rem, b.LongLength))) > 0) { mem.Write(b, 0, r); rem = rem - r; } return mem.ToArray(); } } #endregion #region Crypto public static class CRC32 { // Table of CRCs of all 8-bit messages. private static ulong[] table = null; /// /// Make the table for a fast CRC. /// private static void Initialize() { table = new ulong[256]; for (int n = 0; n < 256; n++) { ulong c = (ulong)n; for (int k = 0; k < 8; k++) { if ((c & 1) != 0) c = 0xedb88320L ^ (c >> 1); else c = c >> 1; } table[n] = c; } } /// /// Updates a running CRC with the given bytes. The CRC /// should be initialized to all 1's, and the transmitted value /// is the 1's complement of the final running CRC (see the /// CRC routine below). /// /// Initial CRC. /// The bytes to calculate the CRC of. /// Checksum as 1's complement of the final running CRC. private static ulong UpdateCRC(ulong crc, byte[] buffer) { ulong c = crc; if (table == null) Initialize(); for (int n = 0; n < buffer.Length; n++) { c = table[(c ^ buffer[n]) & 0xff] ^ (c >> 8); } return c; } /// /// Return the CRC of the given bytes. /// /// The bytes to calculate the CRC of. /// CRC checksum. public static ulong CRC(byte[] buffer) { return UpdateCRC(0xffffffffL, buffer) ^ 0xffffffffL; } /// /// Return the CRC of the given bytes. /// /// Initial CRC. /// The bytes to calculate the CRC of. /// CRC checksum. public static ulong Hash(ulong crc, byte[] buffer) { crc ^= 0xffffffffL; return UpdateCRC(crc, buffer) ^ 0xffffffffL; } } #endregion #region Compression /// /// Compresses the given string. /// /// Input string. /// Text encoding. /// The compressed bytes. public static byte[] CompressString(String text, Encoding encoding) { using (MemoryStream stream = new MemoryStream()) using (DeflateStream zip = new DeflateStream(stream, CompressionMode.Compress)) using (StreamWriter writer = new StreamWriter(zip, encoding)) { writer.Write(text); return stream.ToArray(); } } /// /// Compresses the given bytes representing a string. /// /// Input data. /// Text encoding. /// The decompressed string. public static string DecompressString(byte[] input, Encoding encoding) { using (MemoryStream stream = new MemoryStream(input)) { //stream.Seek(2, SeekOrigin.Begin); // Skip zlib flags int b1 = stream.ReadByte(); int b2 = stream.ReadByte(); using (DeflateStream zip = new DeflateStream(stream, CompressionMode.Decompress)) using (StreamReader reader = new StreamReader(zip, encoding)) { return reader.ReadToEnd(); } } } #endregion #region Arrays /// /// Splits the given byte array at seperators. /// /// Input array. /// Separator byte. /// Sub arrays splitted at the separator. public static List SplitByteArray(byte[] data, byte seperator) { List output = new List(); long lastSepIndex = -1; long sepIndex = -1; for (long i = 0; i < data.LongLength; i++) { if (data[i] == seperator) { sepIndex = i; byte[] subArray = new byte[sepIndex - (lastSepIndex + 1)]; Array.Copy(data, lastSepIndex + 1, subArray, 0, subArray.LongLength); lastSepIndex = sepIndex; output.Add(subArray); } } if (lastSepIndex < data.LongLength - 1) { sepIndex = data.LongLength - 1; byte[] subArray = new byte[sepIndex - (lastSepIndex + 1)]; Array.Copy(data, lastSepIndex + 1, subArray, 0, subArray.LongLength); lastSepIndex = sepIndex; output.Add(subArray); } return output; } #endregion } } quickroute-linux-upstream-2.5/3rdparty/ExifLibrary/app.config000066400000000000000000000001051446222606700245120ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/3rdparty/PowerCollections/000077500000000000000000000000001446222606700236225ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Algorithms.cs000066400000000000000000010516761446222606700263020ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections; using System.Collections.Generic; #pragma warning disable 419 // Ambigious cref in XML comment // Everything should be CLS compliant. [assembly: CLSCompliant(true)] namespace Wintellect.PowerCollections { /// /// The BinaryPredicate delegate type encapsulates a method that takes two /// items of the same type, and returns a boolean value representating /// some relationship between them. For example, checking whether two /// items are equal or equivalent is one kind of binary predicate. /// /// The first item. /// The second item. /// Whether item1 and item2 satisfy the relationship that the BinaryPredicate defines. public delegate bool BinaryPredicate(T item1, T item2); /// /// Algorithms contains a number of static methods that implement /// algorithms that work on collections. Most of the methods deal with /// the standard generic collection interfaces such as IEnumerable<T>, /// ICollection<T> and IList<T>. /// public static class Algorithms { #region Collection wrappers /// /// The class that is used to implement IList<T> to view a sub-range /// of a list. The object stores a wrapped list, and a start/count indicating /// a sub-range of the list. Insertion/deletions through the sub-range view /// cause the count to change also; insertions and deletions directly on /// the wrapped list do not. /// [Serializable] private class ListRange : ListBase, ICollection { private readonly IList wrappedList; private readonly int start; private int count; /// /// Create a sub-range view object on the indicate part /// of the list. /// /// List to wrap. /// The start index of the view in the wrapped list. /// The number of items in the view. public ListRange(IList wrappedList, int start, int count) { this.wrappedList = wrappedList; this.start = start; this.count = count; } public override int Count { get { return Math.Min(count, wrappedList.Count - start); } } public override void Clear() { if (wrappedList.Count - start < count) count = wrappedList.Count - start; while (count > 0) { wrappedList.RemoveAt(start + count - 1); --count; } } public override void Insert(int index, T item) { if (index < 0 || index > count) throw new ArgumentOutOfRangeException("index"); wrappedList.Insert(start + index, item); ++count; } public override void RemoveAt(int index) { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); wrappedList.RemoveAt(start + index); --count; } public override bool Remove(T item) { if (wrappedList.IsReadOnly) throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, "Range")); else return base.Remove(item); } public override T this[int index] { get { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); return wrappedList[start + index]; } set { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); wrappedList[start + index] = value; } } bool ICollection.IsReadOnly { get { return wrappedList.IsReadOnly; } } } /// /// Returns a view onto a sub-range of a list. Items from are not copied; the /// returned IList<T> is simply a different view onto the same underlying items. Changes to /// are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the /// view, but insertions and deletions in the underlying list do not. /// /// This method can be used to apply an algorithm to a portion of a list. For example: /// Algorithms.ReverseInPlace(Algorithms.Range(list, 3, 6)) /// will reverse the 6 items beginning at index 3. /// The type of the items in the list. /// The list to view. /// The starting index of the view. /// The number of items in the view. /// A list that is a view onto the given sub-list. /// is null. /// or is negative. /// + is greater than the /// size of . public static IList Range(IList list, int start, int count) { if (list == null) throw new ArgumentOutOfRangeException("list"); if (start < 0 || start > list.Count || (start == list.Count && count != 0)) throw new ArgumentOutOfRangeException("start"); if (count < 0 || count > list.Count || count + start > list.Count) throw new ArgumentOutOfRangeException("count"); return new ListRange(list, start, count); } /// /// The class that is used to implement IList<T> to view a sub-range /// of an array. The object stores a wrapped array, and a start/count indicating /// a sub-range of the array. Insertion/deletions through the sub-range view /// cause the count to change up to the size of the underlying array. Elements /// fall off the end of the underlying array. /// [Serializable] private class ArrayRange : ListBase { private readonly T[] wrappedArray; private readonly int start; private int count; /// /// Create a sub-range view object on the indicate part /// of the array. /// /// Array to wrap. /// The start index of the view in the wrapped list. /// The number of items in the view. public ArrayRange(T[] wrappedArray, int start, int count) { this.wrappedArray = wrappedArray; this.start = start; this.count = count; } public override int Count { get { return count; } } public override void Clear() { Array.Copy(wrappedArray, start + count, wrappedArray, start, wrappedArray.Length - (start + count)); Algorithms.FillRange(wrappedArray, wrappedArray.Length - count, count, default(T)); count = 0; } public override void Insert(int index, T item) { if (index < 0 || index > count) throw new ArgumentOutOfRangeException("index"); int i = start + index; if (i + 1 < wrappedArray.Length) Array.Copy(wrappedArray, i, wrappedArray, i + 1, wrappedArray.Length - i - 1); if (i < wrappedArray.Length) wrappedArray[i] = item; if (start + count < wrappedArray.Length) ++count; } public override void RemoveAt(int index) { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); int i = start + index; if (i < wrappedArray.Length - 1) Array.Copy(wrappedArray, i + 1, wrappedArray, i, wrappedArray.Length - i - 1); wrappedArray[wrappedArray.Length - 1] = default(T); --count; } public override T this[int index] { get { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); return wrappedArray[start + index]; } set { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); wrappedArray[start + index] = value; } } } /// /// Returns a view onto a sub-range of an array. Items from are not copied; the /// returned IList<T> is simply a different view onto the same underlying items. Changes to /// are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the /// view. After an insertion, the last item in "falls off the end". After a deletion, the /// last item in array becomes the default value (0 or null). /// /// This method can be used to apply an algorithm to a portion of a array. For example: /// Algorithms.ReverseInPlace(Algorithms.Range(array, 3, 6)) /// will reverse the 6 items beginning at index 3. /// The array to view. /// The starting index of the view. /// The number of items in the view. /// A list that is a view onto the given sub-array. /// is null. /// or is negative. /// + is greater than the /// size of . public static IList Range(T[] array, int start, int count) { if (array == null) throw new ArgumentOutOfRangeException("array"); if (start < 0 || start > array.Length || (start == array.Length && count != 0)) throw new ArgumentOutOfRangeException("start"); if (count < 0 || count > array.Length || count + start > array.Length) throw new ArgumentOutOfRangeException("count"); return new ArrayRange(array, start, count); } /// /// The read-only ICollection<T> implementation that is used by the ReadOnly method. /// Methods that modify the collection throw a NotSupportedException, methods that don't /// modify are fowarded through to the wrapped collection. /// [Serializable] private class ReadOnlyCollection : ICollection { private readonly ICollection wrappedCollection; // The collection we are wrapping (never null). /// /// Create a ReadOnlyCollection wrapped around the given collection. /// /// Collection to wrap. public ReadOnlyCollection(ICollection wrappedCollection) { this.wrappedCollection = wrappedCollection; } /// /// Throws an NotSupportedException stating that this collection cannot be modified. /// private static void MethodModifiesCollection() { throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, "read-only collection")); } public IEnumerator GetEnumerator() { return wrappedCollection.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)wrappedCollection).GetEnumerator(); } public bool Contains(T item) { return wrappedCollection.Contains(item); } public void CopyTo(T[] array, int arrayIndex) { wrappedCollection.CopyTo(array, arrayIndex); } public int Count { get { return wrappedCollection.Count; } } public bool IsReadOnly { get { return true; } } public void Add(T item) { MethodModifiesCollection(); } public void Clear() { MethodModifiesCollection(); } public bool Remove(T item) { MethodModifiesCollection(); return false; } } /// /// Returns a read-only view onto a collection. The returned ICollection<T> interface /// only allows operations that do not change the collection: GetEnumerator, Contains, CopyTo, /// Count. The ReadOnly property returns false, indicating that the collection is read-only. All other /// methods on the interface throw a NotSupportedException. /// /// The data in the underlying collection is not copied. If the underlying /// collection is changed, then the read-only view also changes accordingly. /// The type of items in the collection. /// The collection to wrap. /// A read-only view onto . If is null, then null is returned. public static ICollection ReadOnly(ICollection collection) { if (collection == null) return null; else return new ReadOnlyCollection(collection); } /// /// The read-only IList<T> implementation that is used by the ReadOnly method. /// Methods that modify the list throw a NotSupportedException, methods that don't /// modify are fowarded through to the wrapped list. /// [Serializable] private class ReadOnlyList : IList { private readonly IList wrappedList; // The list we are wrapping (never null). /// /// Create a ReadOnlyList wrapped around the given list. /// /// List to wrap. public ReadOnlyList(IList wrappedList) { this.wrappedList = wrappedList; } /// /// Throws an NotSupportedException stating that this collection cannot be modified. /// private static void MethodModifiesCollection() { throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, "read-only list")); } public IEnumerator GetEnumerator() { return wrappedList.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)wrappedList).GetEnumerator(); } public int IndexOf(T item) { return wrappedList.IndexOf(item); } public bool Contains(T item) { return wrappedList.Contains(item); } public void CopyTo(T[] array, int arrayIndex) { wrappedList.CopyTo(array, arrayIndex); } public int Count { get { return wrappedList.Count; } } public bool IsReadOnly { get { return true; } } public T this[int index] { get { return wrappedList[index]; } set { MethodModifiesCollection(); } } public void Add(T item) { MethodModifiesCollection(); } public void Clear() { MethodModifiesCollection(); } public void Insert(int index, T item) { MethodModifiesCollection(); } public void RemoveAt(int index) { MethodModifiesCollection(); } public bool Remove(T item) { MethodModifiesCollection(); return false; } } /// /// Returns a read-only view onto a list. The returned IList<T> interface /// only allows operations that do not change the list: GetEnumerator, Contains, CopyTo, /// Count, IndexOf, and the get accessor of the indexer. /// The IsReadOnly property returns true, indicating that the list is read-only. All other /// methods on the interface throw a NotSupportedException. /// /// The data in the underlying list is not copied. If the underlying /// list is changed, then the read-only view also changes accordingly. /// The type of items in the list. /// The list to wrap. /// A read-only view onto . Returns null if is null. /// If is already read-only, returns . public static IList ReadOnly(IList list) { if (list == null) return null; else if (list.IsReadOnly) return list; else return new ReadOnlyList(list); } /// /// The private class that implements a read-only wrapped for /// IDictionary <TKey,TValue>. /// [Serializable] private class ReadOnlyDictionary : IDictionary { // The dictionary that is wrapped private readonly IDictionary wrappedDictionary; /// /// Create a read-only dictionary wrapped around the given dictionary. /// /// The IDictionary<TKey,TValue> to wrap. public ReadOnlyDictionary(IDictionary wrappedDictionary) { this.wrappedDictionary = wrappedDictionary; } /// /// Throws an NotSupportedException stating that this collection cannot be modified. /// private static void MethodModifiesCollection() { throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, "read-only dictionary")); } public void Add(TKey key, TValue value) { MethodModifiesCollection(); } public bool ContainsKey(TKey key) { return wrappedDictionary.ContainsKey(key); } public ICollection Keys { get { return ReadOnly(wrappedDictionary.Keys); } } public ICollection Values { get { return ReadOnly(wrappedDictionary.Values); } } public bool Remove(TKey key) { MethodModifiesCollection(); return false; // never reached } public bool TryGetValue(TKey key, out TValue value) { return wrappedDictionary.TryGetValue(key, out value); } public TValue this[TKey key] { get { return wrappedDictionary[key];} set { MethodModifiesCollection(); } } public void Add(KeyValuePair item) { MethodModifiesCollection(); } public void Clear() { MethodModifiesCollection(); } public bool Contains(KeyValuePair item) { return wrappedDictionary.Contains(item); } public void CopyTo(KeyValuePair[] array, int arrayIndex) { wrappedDictionary.CopyTo(array, arrayIndex); } public int Count { get { return wrappedDictionary.Count; } } public bool IsReadOnly { get { return true; } } public bool Remove(KeyValuePair item) { MethodModifiesCollection(); return false; // never reached } public IEnumerator> GetEnumerator() { return wrappedDictionary.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)wrappedDictionary).GetEnumerator(); } } /// /// Returns a read-only view onto a dictionary. The returned IDictionary<TKey,TValue> interface /// only allows operations that do not change the dictionary. /// The IsReadOnly property returns true, indicating that the dictionary is read-only. All other /// methods on the interface throw a NotSupportedException. /// /// The data in the underlying dictionary is not copied. If the underlying /// dictionary is changed, then the read-only view also changes accordingly. /// The dictionary to wrap. /// A read-only view onto . Returns null if is null. /// If is already read-only, returns . public static IDictionary ReadOnly(IDictionary dictionary) { if (dictionary == null) return null; else if (dictionary.IsReadOnly) return dictionary; else return new ReadOnlyDictionary(dictionary); } /// /// The class that provides a typed IEnumerator<T> /// view onto an untyped IEnumerator interface. /// [Serializable] private class TypedEnumerator : IEnumerator { private readonly IEnumerator wrappedEnumerator; /// /// Create a typed IEnumerator<T> /// view onto an untyped IEnumerator interface /// /// IEnumerator to wrap. public TypedEnumerator(IEnumerator wrappedEnumerator) { this.wrappedEnumerator = wrappedEnumerator; } T IEnumerator.Current { get { return (T) wrappedEnumerator.Current; } } void IDisposable.Dispose() { if (wrappedEnumerator is IDisposable) ((IDisposable)wrappedEnumerator).Dispose(); } object IEnumerator.Current { get { return wrappedEnumerator.Current; } } bool IEnumerator.MoveNext() { return wrappedEnumerator.MoveNext(); } void IEnumerator.Reset() { wrappedEnumerator.Reset(); } } /// /// The class that provides a typed IEnumerable<T> view /// onto an untyped IEnumerable interface. /// [Serializable] private class TypedEnumerable : IEnumerable { private readonly IEnumerable wrappedEnumerable; /// /// Create a typed IEnumerable<T> view /// onto an untyped IEnumerable interface. /// /// IEnumerable interface to wrap. public TypedEnumerable(IEnumerable wrappedEnumerable) { this.wrappedEnumerable = wrappedEnumerable; } public IEnumerator GetEnumerator() { return new TypedEnumerator(wrappedEnumerable.GetEnumerator()); } IEnumerator IEnumerable.GetEnumerator() { return wrappedEnumerable.GetEnumerator(); } } /// /// Given a non-generic IEnumerable interface, wrap a generic IEnumerable<T> /// interface around it. The generic interface will enumerate the same objects as the /// underlying non-generic collection, but can be used in places that require a generic interface. /// The underlying non-generic collection must contain only items that /// are of type or a type derived from it. This method is useful /// when interfacing older, non-generic collections to newer code that uses generic interfaces. /// /// Some collections implement both generic and non-generic interfaces. For efficiency, /// this method will first attempt to cast to IEnumerable<T>. /// If that succeeds, it is returned; otherwise, a wrapper object is created. /// The item type of the wrapper collection. /// An untyped collection. This collection should only contain /// items of type or a type derived from it. /// A generic IEnumerable<T> wrapper around . /// If is null, then null is returned. public static IEnumerable TypedAs(IEnumerable untypedCollection) { if (untypedCollection == null) return null; else if (untypedCollection is IEnumerable) return (IEnumerable)untypedCollection; else return new TypedEnumerable(untypedCollection); } /// /// The class that provides a typed ICollection<T> view /// onto an untyped ICollection interface. The ICollection<T> /// is read-only. /// [Serializable] private class TypedCollection : ICollection { private readonly ICollection wrappedCollection; /// /// Create a typed ICollection<T> view /// onto an untyped ICollection interface. /// /// ICollection interface to wrap. public TypedCollection(ICollection wrappedCollection) { this.wrappedCollection = wrappedCollection; } /// /// Throws an NotSupportedException stating that this collection cannot be modified. /// private static void MethodModifiesCollection() { throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, "strongly-typed Collection")); } public void Add(T item) { MethodModifiesCollection(); } public void Clear() { MethodModifiesCollection(); } public bool Remove(T item) { MethodModifiesCollection(); return false; } public bool Contains(T item) { IEqualityComparer equalityComparer = EqualityComparer.Default; foreach (object obj in wrappedCollection) { if (obj is T && equalityComparer.Equals(item, (T)obj)) return true; } return false; } public void CopyTo(T[] array, int arrayIndex) { wrappedCollection.CopyTo(array, arrayIndex); } public int Count { get { return wrappedCollection.Count; } } public bool IsReadOnly { get { return true; } } public IEnumerator GetEnumerator() { return new TypedEnumerator(wrappedCollection.GetEnumerator()); } IEnumerator IEnumerable.GetEnumerator() { return wrappedCollection.GetEnumerator(); } } /// /// Given a non-generic ICollection interface, wrap a generic ICollection<T> /// interface around it. The generic interface will enumerate the same objects as the /// underlying non-generic collection, but can be used in places that require a generic interface. /// The underlying non-generic collection must contain only items that /// are of type or a type derived from it. This method is useful /// when interfacing older, non-generic collections to newer code that uses generic interfaces. /// /// Some collections implement both generic and non-generic interfaces. For efficiency, /// this method will first attempt to cast to ICollection<T>. /// If that succeeds, it is returned; otherwise, a wrapper object is created. /// Unlike the generic interface, the non-generic ICollection interfaces does /// not contain methods for adding or removing items from the collection. For this reason, /// the returned ICollection<T> will be read-only. /// The item type of the wrapper collection. /// An untyped collection. This collection should only contain /// items of type or a type derived from it. /// A generic ICollection<T> wrapper around . /// If is null, then null is returned. public static ICollection TypedAs(ICollection untypedCollection) { if (untypedCollection == null) return null; else if (untypedCollection is ICollection) return (ICollection) untypedCollection; else return new TypedCollection(untypedCollection); } /// /// The class used to create a typed IList<T> view onto /// an untype IList interface. /// [Serializable] private class TypedList : IList { private readonly IList wrappedList; /// /// Create a typed IList<T> view onto /// an untype IList interface. /// /// The IList to wrap. public TypedList(IList wrappedList) { this.wrappedList = wrappedList; } public IEnumerator GetEnumerator() { return new TypedEnumerator(wrappedList.GetEnumerator()); } IEnumerator IEnumerable.GetEnumerator() { return wrappedList.GetEnumerator(); } public int IndexOf(T item) { return wrappedList.IndexOf(item); } public void Insert(int index, T item) { wrappedList.Insert(index, item); } public void RemoveAt(int index) { wrappedList.RemoveAt(index); } public void Add(T item) { wrappedList.Add(item); } public void Clear() { wrappedList.Clear(); } public bool Contains(T item) { return wrappedList.Contains(item); } public void CopyTo(T[] array, int arrayIndex) { wrappedList.CopyTo(array, arrayIndex); } public T this[int index] { get { return (T)wrappedList[index]; } set { wrappedList[index] = value; } } public int Count { get { return wrappedList.Count ; } } public bool IsReadOnly { get { return wrappedList.IsReadOnly; } } public bool Remove(T item) { if (wrappedList.Contains(item)) { wrappedList.Remove(item); return true; } else { return false; } } } /// /// Given a non-generic IList interface, wrap a generic IList<T> /// interface around it. The generic interface will enumerate the same objects as the /// underlying non-generic list, but can be used in places that require a generic interface. /// The underlying non-generic list must contain only items that /// are of type or a type derived from it. This method is useful /// when interfacing older, non-generic lists to newer code that uses generic interfaces. /// /// Some collections implement both generic and non-generic interfaces. For efficiency, /// this method will first attempt to cast to IList<T>. /// If that succeeds, it is returned; otherwise, a wrapper object is created. /// The item type of the wrapper list. /// An untyped list. This list should only contain /// items of type or a type derived from it. /// A generic IList<T> wrapper around . /// If is null, then null is returned. public static IList TypedAs(IList untypedList) { if (untypedList == null) return null; else if (untypedList is IList) return (IList)untypedList; else return new TypedList(untypedList); } /// /// The class that is used to provide an untyped ICollection /// view onto a typed ICollection<T> interface. /// [Serializable] private class UntypedCollection : ICollection { private readonly ICollection wrappedCollection; /// /// Create an untyped ICollection /// view onto a typed ICollection<T> interface. /// /// The ICollection<T> to wrap. public UntypedCollection(ICollection wrappedCollection) { this.wrappedCollection = wrappedCollection; } public void CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); int i = 0; int count = wrappedCollection.Count; if (index < 0) throw new ArgumentOutOfRangeException("index", index, Strings.ArgMustNotBeNegative); if (index >= array.Length || count > array.Length - index) throw new ArgumentException("index", Strings.ArrayTooSmall); foreach (T item in wrappedCollection) { if (i >= count) break; array.SetValue(item, index); ++index; ++i; } } public int Count { get { return wrappedCollection.Count; } } public bool IsSynchronized { get { return false; } } public object SyncRoot { get { return this; } } public IEnumerator GetEnumerator() { return ((IEnumerable)wrappedCollection).GetEnumerator(); } } /// /// Given a generic ICollection<T> interface, wrap a non-generic (untyped) /// ICollection interface around it. The non-generic interface will contain the same objects as the /// underlying generic collection, but can be used in places that require a non-generic interface. /// This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces. /// /// Many generic collections already implement the non-generic interfaces directly. This /// method will first attempt to simply cast to ICollection. If that /// succeeds, it is returned; if it fails, then a wrapper object is created. /// The item type of the underlying collection. /// A typed collection to wrap. /// A non-generic ICollection wrapper around . /// If is null, then null is returned. public static ICollection Untyped(ICollection typedCollection) { if (typedCollection == null) return null; else if (typedCollection is ICollection) return (ICollection)typedCollection; else return new UntypedCollection(typedCollection); } /// /// The class that implements a non-generic IList wrapper /// around a generic IList<T> interface. /// [Serializable] private class UntypedList : IList { private readonly IList wrappedList; /// /// Create a non-generic IList wrapper /// around a generic IList<T> interface. /// /// The IList<T> interface to wrap. public UntypedList(IList wrappedList) { this.wrappedList = wrappedList; } /// /// Convert the given parameter to T. Throw an ArgumentException /// if it isn't. /// /// parameter name /// parameter value private static T ConvertToItemType(string name, object value) { try { return (T)value; } catch (InvalidCastException) { throw new ArgumentException(string.Format(Strings.WrongType, value, typeof(T)), name); } } public int Add(object value) { // We assume that Add always adds to the end. Is this true? wrappedList.Add(ConvertToItemType("value", value)); return wrappedList.Count - 1; } public void Clear() { wrappedList.Clear(); } public bool Contains(object value) { if (value is T) return wrappedList.Contains((T)value); else return false; } public int IndexOf(object value) { if (value is T) return wrappedList.IndexOf((T)value); else return -1; } public void Insert(int index, object value) { wrappedList.Insert(index, ConvertToItemType("value", value)); } public bool IsFixedSize { get { return false; } } public bool IsReadOnly { get { return wrappedList.IsReadOnly; } } public void Remove(object value) { if (value is T) wrappedList.Remove((T)value); } public void RemoveAt(int index) { wrappedList.RemoveAt(index);} public object this[int index] { get { return wrappedList[index]; } set { wrappedList[index] = ConvertToItemType("value", value); } } public void CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); int i = 0; int count = wrappedList.Count; if (index < 0) throw new ArgumentOutOfRangeException("index", index, Strings.ArgMustNotBeNegative); if (index >= array.Length || count > array.Length - index) throw new ArgumentException("index", Strings.ArrayTooSmall); foreach (T item in wrappedList) { if (i >= count) break; array.SetValue(item, index); ++index; ++i; } } public int Count { get { return wrappedList.Count; } } public bool IsSynchronized { get { return false; } } public object SyncRoot { get { return this; } } public IEnumerator GetEnumerator() { return ((IEnumerable)wrappedList).GetEnumerator(); } } /// /// Given a generic IList<T> interface, wrap a non-generic (untyped) /// IList interface around it. The non-generic interface will contain the same objects as the /// underlying generic list, but can be used in places that require a non-generic interface. /// This method is useful when interfacing generic interfaces with older code that uses non-generic interfaces. /// /// Many generic collections already implement the non-generic interfaces directly. This /// method will first attempt to simply cast to IList. If that /// succeeds, it is returned; if it fails, then a wrapper object is created. /// The item type of the underlying list. /// A typed list to wrap. /// A non-generic IList wrapper around . /// If is null, then null is returned. public static IList Untyped(IList typedList) { if (typedList == null) return null; else if (typedList is IList) return (IList)typedList; else return new UntypedList(typedList); } /// /// The class that is used to implement IList<T> to view an array /// in a read-write way. Insertions cause the last item in the array /// to fall off, deletions replace the last item with the default value. /// [Serializable] private class ArrayWrapper : ListBase, IList { private readonly T[] wrappedArray; /// /// Create a list wrapper object on an array. /// /// Array to wrap. public ArrayWrapper(T[] wrappedArray) { this.wrappedArray = wrappedArray; } public override int Count { get { return wrappedArray.Length; } } public override void Clear() { int count = wrappedArray.Length; for (int i = 0; i < count; ++i) wrappedArray[i] = default(T); } public override void Insert(int index, T item) { if (index < 0 || index > wrappedArray.Length) throw new ArgumentOutOfRangeException("index"); if (index + 1 < wrappedArray.Length) Array.Copy(wrappedArray, index, wrappedArray, index + 1, wrappedArray.Length - index - 1); if (index < wrappedArray.Length) wrappedArray[index] = item; } public override void RemoveAt(int index) { if (index < 0 || index >= wrappedArray.Length) throw new ArgumentOutOfRangeException("index"); if (index < wrappedArray.Length - 1) Array.Copy(wrappedArray, index + 1, wrappedArray, index, wrappedArray.Length - index - 1); wrappedArray[wrappedArray.Length - 1] = default(T); } public override T this[int index] { get { if (index < 0 || index >= wrappedArray.Length) throw new ArgumentOutOfRangeException("index"); return wrappedArray[index]; } set { if (index < 0 || index >= wrappedArray.Length) throw new ArgumentOutOfRangeException("index"); wrappedArray[index] = value; } } public override void CopyTo(T[] array, int arrayIndex) { if (array == null) throw new ArgumentNullException("array"); if (array.Length < wrappedArray.Length) throw new ArgumentException("array is too short", "array"); if (arrayIndex < 0 || arrayIndex >= array.Length) throw new ArgumentOutOfRangeException("arrayIndex"); if (array.Length + arrayIndex < wrappedArray.Length) throw new ArgumentOutOfRangeException("arrayIndex"); Array.Copy(wrappedArray, 0, array, arrayIndex, wrappedArray.Length); } public override IEnumerator GetEnumerator() { return ((IList)wrappedArray).GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IList)wrappedArray).GetEnumerator(); } /// /// Return true, to indicate that the list is fixed size. /// bool IList.IsFixedSize { get { return true; } } } /// /// Creates a read-write IList<T> wrapper around an array. When an array is /// implicitely converted to an IList<T>, changes to the items in the array cannot /// be made through the interface. This method creates a read-write IList<T> wrapper /// on an array that can be used to make changes to the array. /// Use this method when you need to pass an array to an algorithms that takes an /// IList<T> and that tries to modify items in the list. Algorithms in this class generally do not /// need this method, since they have been design to operate on arrays even when they /// are passed as an IList<T>. /// /// Since arrays cannot be resized, inserting an item causes the last item in the array to be automatically /// removed. Removing an item causes the last item in the array to be replaced with a default value (0 or null). Clearing /// the list causes all the items to be replaced with a default value. /// The array to wrap. /// An IList<T> wrapper onto . public static IList ReadWriteList(T[] array) { if (array == null) throw new ArgumentNullException("array"); return new ArrayWrapper(array); } #endregion Collection wrappers #region Replacing /// /// Replace all items in a collection equal to a particular value with another values, yielding another collection. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The collection to process. /// The value to find and replace within . /// The new value to replace with. /// An new collection with the items from , in the same order, /// with the appropriate replacements made. public static IEnumerable Replace(IEnumerable collection, T itemFind, T replaceWith) { return Replace(collection, itemFind, replaceWith, EqualityComparer.Default); } /// /// Replace all items in a collection equal to a particular value with another values, yielding another collection. A passed /// IEqualityComparer is used to determine equality. /// /// The collection to process. /// The value to find and replace within . /// The new value to replace with. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// An new collection with the items from , in the same order, /// with the appropriate replacements made. public static IEnumerable Replace(IEnumerable collection, T itemFind, T replaceWith, IEqualityComparer equalityComparer) { if (collection == null) throw new ArgumentNullException("collection"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); foreach (T item in collection) { if (equalityComparer.Equals(item, itemFind)) yield return replaceWith; else yield return item; } } /// /// Replace all items in a collection that a predicate evalues at true with a value, yielding another collection. . /// /// The collection to process. /// The predicate used to evaluate items with the collection. If the predicate returns true for a particular /// item, the item is replaces with . /// The new value to replace with. /// An new collection with the items from , in the same order, /// with the appropriate replacements made. public static IEnumerable Replace(IEnumerable collection, Predicate predicate, T replaceWith) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); foreach (T item in collection) { if (predicate(item)) yield return replaceWith; else yield return item; } } /// /// Replace all items in a list or array equal to a particular value with another value. The replacement is done in-place, changing /// the list. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to process. /// The value to find and replace within . /// The new value to replace with. public static void ReplaceInPlace(IList list, T itemFind, T replaceWith) { ReplaceInPlace(list, itemFind, replaceWith, EqualityComparer.Default); } /// /// Replace all items in a list or array equal to a particular value with another values. /// The replacement is done in-place, changing /// the list. A passed IEqualityComparer is used to determine equality. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to process. /// The value to find and replace within . /// The new value to replace with. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. public static void ReplaceInPlace(IList list, T itemFind, T replaceWith, IEqualityComparer equalityComparer) { if (list == null) throw new ArgumentNullException("list"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int listCount = list.Count; for (int index = 0; index < listCount; ++index) { if (equalityComparer.Equals(list[index], itemFind)) list[index] = replaceWith; } } /// /// Replace all items in a list or array that a predicate evaluates at true with a value. The replacement is done in-place, changing /// the list. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to process. /// The predicate used to evaluate items with the collection. If the predicate returns true for a particular /// item, the item is replaces with . /// The new value to replace with. public static void ReplaceInPlace(IList list, Predicate predicate, T replaceWith) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int listCount = list.Count; for (int index = 0; index < listCount; ++index) { if (predicate(list[index])) list[index] = replaceWith; } } #endregion Replacing #region Consecutive items /// /// Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items /// in the collection, all items after the first item in the run are removed. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The collection to process. /// An new collection with the items from , in the same order, /// with consecutive duplicates removed. /// is null. public static IEnumerable RemoveDuplicates(IEnumerable collection) { return RemoveDuplicates(collection, EqualityComparer.Default); } /// /// Remove consecutive equal items from a collection, yielding another collection. In each run of consecutive equal items /// in the collection, all items after the first item in the run are removed. A passed /// IEqualityComparer is used to determine equality. /// /// The collection to process. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// An new collection with the items from , in the same order, /// with consecutive duplicates removed. /// or is null. public static IEnumerable RemoveDuplicates(IEnumerable collection, IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); return RemoveDuplicates(collection, equalityComparer.Equals); } /// /// Remove consecutive "equal" items from a collection, yielding another collection. In each run of consecutive equal items /// in the collection, all items after the first item in the run are removed. The passed /// BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. /// The collection to process. /// The BinaryPredicate used to compare items for "equality". An item current is removed if predicate(first, current)==true, where /// first is the first item in the group of "duplicate" items. /// An new collection with the items from , in the same order, /// with consecutive "duplicates" removed. public static IEnumerable RemoveDuplicates(IEnumerable collection, BinaryPredicate predicate) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); T current = default(T); bool atBeginning = true; foreach (T item in collection) { // Is the new item different from the current item? if (atBeginning || !predicate(current, item)) { current = item; yield return item; } atBeginning = false; } } /// /// Remove consecutive equal items from a list or array. In each run of consecutive equal items /// in the list, all items after the first item in the run are removed. The removal is done in-place, changing /// the list. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to process. public static void RemoveDuplicatesInPlace(IList list) { RemoveDuplicatesInPlace(list, EqualityComparer.Default); } /// /// Remove subsequent consecutive equal items from a list or array. In each run of consecutive equal items /// in the list, all items after the first item in the run are removed. /// The replacement is done in-place, changing /// the list. A passed IEqualityComparer is used to determine equality. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to process. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. public static void RemoveDuplicatesInPlace(IList list, IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); RemoveDuplicatesInPlace(list, equalityComparer.Equals); } /// /// Remove consecutive "equal" items from a list or array. In each run of consecutive equal items /// in the list, all items after the first item in the run are removed. The replacement is done in-place, changing /// the list. The passed BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to process. /// The BinaryPredicate used to compare items for "equality". public static void RemoveDuplicatesInPlace(IList list, BinaryPredicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); T current = default(T); T item; int i = -1, j = 0; int listCount = list.Count; // Remove duplicates, compressing items to lower in the list. while (j < listCount) { item = list[j]; if (i < 0 || !predicate(current, item)) { current = item; ++i; if (i != j) list[i] = current; } ++j; } ++i; if (i < listCount) { // remove items from the end. if (list is ArrayWrapper || (list is IList && ((IList)list).IsFixedSize)) { // An array or similar. Null out the last elements. while (i < listCount) list[i++] = default(T); } else { // Normal list. while (i < listCount) { list.RemoveAt(listCount - 1); --listCount; } } } } /// /// Finds the first occurence of consecutive equal items in the /// list. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The list to examine. /// The number of consecutive equal items to look for. The count must be at least 1. /// The index of the first item in the first run of consecutive equal items, or -1 if no such run exists.. public static int FirstConsecutiveEqual(IList list, int count) { return FirstConsecutiveEqual(list, count, EqualityComparer.Default); } /// /// Finds the first occurence of consecutive equal items in the /// list. A passed IEqualityComparer is used to determine equality. /// /// The list to examine. /// The number of consecutive equal items to look for. The count must be at least 1. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// The index of the first item in the first run of consecutive equal items, or -1 if no such run exists. public static int FirstConsecutiveEqual(IList list, int count, IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); return FirstConsecutiveEqual(list, count, equalityComparer.Equals); } /// /// Finds the first occurence of consecutive "equal" items in the /// list. The passed BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being tested for need not be true equality. /// The list to examine. /// The number of consecutive equal items to look for. The count must be at least 1. /// The BinaryPredicate used to compare items for "equality". /// The index of the first item in the first run of consecutive equal items, or -1 if no such run exists. public static int FirstConsecutiveEqual(IList list, int count, BinaryPredicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); if (count < 1) throw new ArgumentOutOfRangeException("count"); int listCount = list.Count; if (listCount < count) return -1; // Can't find run longer than the list itself. if (count == 1) return 0; // Run of 1 must be the first item in the list. int start = 0, index = 0; T current = default(T); int runLength = 0; // Go through the list, looking for a run of the given length. foreach (T item in list) { if (index > 0 && predicate(current, item)) { ++runLength; if (runLength >= count) return start; } else { current = item; start = index; runLength = 1; } ++index; } return -1; } /// /// Finds the first occurence of consecutive items in the /// list for which a given predicate returns true. /// /// The list to examine. /// The number of consecutive items to look for. The count must be at least 1. /// The predicate used to test each item. /// The index of the first item in the first run of items where /// returns true for all items in the run, or -1 if no such run exists. public static int FirstConsecutiveWhere(IList list, int count, Predicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); if (count < 1) throw new ArgumentOutOfRangeException("count"); int listCount = list.Count; if (count > listCount) return -1; // Can't find run longer than the list itself. int index = 0, start = -1; int runLength = 0; // Scan the list in order, looking for the number of consecutive true items. foreach (T item in list) { if (predicate(item)) { if (start < 0) start = index; ++runLength; if (runLength >= count) return start; } else { runLength = 0; start = -1; } ++index; } return -1; } #endregion Consecutive items #region Find and SearchForSubsequence /// /// Finds the first item in a collection that satisfies the condition /// defined by . /// /// If the default value for T could be present in the collection, and /// would be matched by the predicate, then this method is inappropriate, because /// you cannot disguish whether the default value for T was actually present in the collection, /// or no items matched the predicate. In this case, use TryFindFirstWhere. /// The collection to search. /// A delegate that defined the condition to check for. /// The first item in the collection that matches the condition, or the default value for T (0 or null) if no /// item that matches the condition is found. /// public static T FindFirstWhere(IEnumerable collection, Predicate predicate) { T retval; if (Algorithms.TryFindFirstWhere(collection, predicate, out retval)) return retval; else return default(T); } /// /// Finds the first item in a collection that satisfies the condition /// defined by . /// /// The collection to search. /// A delegate that defined the condition to check for. /// Outputs the first item in the collection that matches the condition, if the method returns true. /// True if an item satisfying the condition was found. False if no such item exists in the collection. /// public static bool TryFindFirstWhere(IEnumerable collection, Predicate predicate, out T foundItem) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); foreach (T item in collection) { if (predicate(item)) { foundItem = item; return true; } } // didn't find any item that matches. foundItem = default(T); return false; } /// /// Finds the last item in a collection that satisfies the condition /// defined by . /// /// If the collection implements IList<T>, then the list is scanned in reverse until a /// matching item is found. Otherwise, the entire collection is iterated in the forward direction. /// If the default value for T could be present in the collection, and /// would be matched by the predicate, then this method is inappropriate, because /// you cannot disguish whether the default value for T was actually present in the collection, /// or no items matched the predicate. In this case, use TryFindFirstWhere. /// The collection to search. /// A delegate that defined the condition to check for. /// The last item in the collection that matches the condition, or the default value for T (0 or null) if no /// item that matches the condition is found. /// public static T FindLastWhere(IEnumerable collection, Predicate predicate) { T retval; if (Algorithms.TryFindLastWhere(collection, predicate, out retval)) return retval; else return default(T); } /// /// Finds the last item in a collection that satisfies the condition /// defined by . /// /// If the collection implements IList<T>, then the list is scanned in reverse until a /// matching item is found. Otherwise, the entire collection is iterated in the forward direction. /// The collection to search. /// A delegate that defined the condition to check for. /// Outputs the last item in the collection that matches the condition, if the method returns true. /// True if an item satisfying the condition was found. False if no such item exists in the collection. /// public static bool TryFindLastWhere(IEnumerable collection, Predicate predicate, out T foundItem) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); IList list = collection as IList; if (list != null) { // If it's a list, we can iterate in reverse. for (int index = list.Count - 1; index >= 0; --index) { T item = list[index]; if (predicate(item)) { foundItem = item; return true; } } // didn't find any item that matches. foundItem = default(T); return false; } else { // Otherwise, iterate the whole thing and remember the last matching one. bool found = false; foundItem = default(T); foreach (T item in collection) { if (predicate(item)) { foundItem = item; found = true; } } return found; } } /// /// Enumerates all the items in that satisfy the condition defined /// by . /// /// The collection to check all the items in. /// A delegate that defines the condition to check for. /// An IEnumerable<T> that enumerates the items that satisfy the condition. public static IEnumerable FindWhere(IEnumerable collection, Predicate predicate) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); foreach (T item in collection) { if (predicate(item)) { yield return item; } } } /// /// Finds the index of the first item in a list that satisfies the condition /// defined by . /// /// The list to search. /// A delegate that defined the condition to check for. /// The index of the first item satisfying the condition. -1 if no such item exists in the list. public static int FindFirstIndexWhere(IList list, Predicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); int index = 0; foreach (T item in list) { if (predicate(item)) { return index; } ++index; } // didn't find any item that matches. return -1; } /// /// Finds the index of the last item in a list that satisfies the condition /// defined by . /// /// The list to search. /// A delegate that defined the condition to check for. /// The index of the last item satisfying the condition. -1 if no such item exists in the list. public static int FindLastIndexWhere(IList list, Predicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); for (int index = list.Count - 1; index >= 0; --index) { if (predicate(list[index])) { return index; } } // didn't find any item that matches. return -1; } /// /// Enumerates the indices of all the items in that satisfy the condition defined /// by . /// /// The list to check all the items in. /// A delegate that defines the condition to check for. /// An IEnumerable<T> that enumerates the indices of items that satisfy the condition. public static IEnumerable FindIndicesWhere(IList list, Predicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); int index = 0; foreach (T item in list) { if (predicate(item)) { yield return index; } ++index; } } /// /// Finds the index of the first item in a list equal to a given item. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The list to search. /// The item to search for. /// The index of the first item equal to . -1 if no such item exists in the list. public static int FirstIndexOf(IList list, T item) { return FirstIndexOf(list, item, EqualityComparer.Default); } /// /// Finds the index of the first item in a list equal to a given item. A passed /// IEqualityComparer is used to determine equality. /// /// The list to search. /// The item to search for. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// The index of the first item equal to . -1 if no such item exists in the list. public static int FirstIndexOf(IList list, T item, IEqualityComparer equalityComparer) { if (list == null) throw new ArgumentNullException("list"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); int index = 0; foreach (T x in list) { if (equalityComparer.Equals(x, item)) { return index; } ++index; } // didn't find any item that matches. return -1; } /// /// Finds the index of the last item in a list equal to a given item. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The list to search. /// The item to search for. /// The index of the last item equal to . -1 if no such item exists in the list. public static int LastIndexOf(IList list, T item) { return LastIndexOf(list, item, EqualityComparer.Default); } /// /// Finds the index of the last item in a list equal to a given item. A passed /// IEqualityComparer is used to determine equality. /// /// The list to search. /// The item to search for. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// The index of the last item equal to . -1 if no such item exists in the list. public static int LastIndexOf(IList list, T item, IEqualityComparer equalityComparer) { if (list == null) throw new ArgumentNullException("list"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); for (int index = list.Count - 1; index >= 0; --index) { if (equalityComparer.Equals(list[index], item)) { return index; } } // didn't find any item that matches. return -1; } /// /// Enumerates the indices of all the items in a list equal to a given item. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The list to search. /// The item to search for. /// An IEnumerable<T> that enumerates the indices of items equal to . public static IEnumerable IndicesOf(IList list, T item) { return IndicesOf(list, item, EqualityComparer.Default); } /// /// Enumerates the indices of all the items in a list equal to a given item. A passed /// IEqualityComparer is used to determine equality. /// /// The list to search. /// The item to search for. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// An IEnumerable<T> that enumerates the indices of items equal to . public static IEnumerable IndicesOf(IList list, T item, IEqualityComparer equalityComparer) { if (list == null) throw new ArgumentNullException("list"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); int index = 0; foreach (T x in list) { if (equalityComparer.Equals(x, item)) { yield return index; } ++index; } } /// /// Finds the index of the first item in a list "equal" to one of several given items. The passed /// BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds /// first item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in /// The list to search. /// The items to search for. /// The BinaryPredicate used to compare items for "equality". /// The index of the first item "equal" to any of the items in the collection , using /// as the test for equality. /// -1 if no such item exists in the list. public static int FirstIndexOfMany(IList list, IEnumerable itemsToLookFor, BinaryPredicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (itemsToLookFor == null) throw new ArgumentNullException("itemsToLookFor"); if (predicate == null) throw new ArgumentNullException("predicate"); // Scan the list for the items. int index = 0; foreach (T x in list) { foreach (T y in itemsToLookFor) { if (predicate(x, y)) { return index; } } ++index; } // didn't find any item that matches. return -1; } /// /// Finds the index of the last item in a list "equal" to one of several given items. The passed /// BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds /// last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in /// The list to search. /// The items to search for. /// The BinaryPredicate used to compare items for "equality". /// The index of the last item "equal" to any of the items in the collection , using /// as the test for equality. /// -1 if no such item exists in the list. public static int LastIndexOfMany(IList list, IEnumerable itemsToLookFor, BinaryPredicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (itemsToLookFor == null) throw new ArgumentNullException("itemsToLookFor"); if (predicate == null) throw new ArgumentNullException("predicate"); // Scan the list for (int index = list.Count - 1; index >= 0; --index) { foreach (T y in itemsToLookFor) { if (predicate(list[index], y)) { return index; } } } // didn't find any item that matches. return -1; } /// /// Enumerates the indices of all the items in a list equal to one of several given items. The passed /// BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being removed need not be true equality. This methods finds /// last item X which satisfies BinaryPredicate(X,Y), where Y is one of the items in /// The list to search. /// A collection of items to search for. /// The BinaryPredicate used to compare items for "equality". /// An IEnumerable<T> that enumerates the indices of items "equal" to any of the items /// in the collection , using /// as the test for equality. public static IEnumerable IndicesOfMany(IList list, IEnumerable itemsToLookFor, BinaryPredicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (itemsToLookFor == null) throw new ArgumentNullException("itemsToLookFor"); if (predicate == null) throw new ArgumentNullException("predicate"); // Scan the list for the items. int index = 0; foreach (T x in list) { foreach (T y in itemsToLookFor) { if (predicate(x, y)) { yield return index; } } ++index; } } /// /// Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence /// of matches pattern at index i if list[i] is equal to the first item /// in , list[i+1] is equal to the second item in , /// and so forth for all the items in . /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The type of items in the list. /// The list to search. /// The sequence of items to search for. /// The first index with that matches the items in . public static int SearchForSubsequence(IList list, IEnumerable pattern) { return SearchForSubsequence(list, pattern, EqualityComparer.Default); } /// /// Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence /// of matches pattern at index i if list[i] is "equal" to the first item /// in , list[i+1] is "equal" to the second item in , /// and so forth for all the items in . The passed /// BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being tested /// for in the pattern need not be equality. /// The type of items in the list. /// The list to search. /// The sequence of items to search for. /// The BinaryPredicate used to compare items for "equality". /// The first index with that matches the items in . public static int SearchForSubsequence(IList list, IEnumerable pattern, BinaryPredicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (pattern == null) throw new ArgumentNullException("pattern"); if (predicate == null) throw new ArgumentNullException("predicate"); // Put the pattern into an array for performance (don't keep allocating enumerators). T[] patternArray = Algorithms.ToArray(pattern); int listCount = list.Count, patternCount = patternArray.Length; if (patternCount == 0) return 0; // A zero-length pattern occurs anywhere. if (listCount == 0) return -1; // no room for a pattern; for (int start = 0; start <= listCount - patternCount; ++start) { for (int count = 0; count < patternCount; ++count) { if (!predicate(list[start + count], patternArray[count])) goto NOMATCH; } // Got through the whole pattern. We have a match. return start; NOMATCH: /* no match found at start. */ ; } // no match found anywhere. return -1; } /// /// Searchs a list for a sub-sequence of items that match a particular pattern. A subsequence /// of matches pattern at index i if list[i] is equal to the first item /// in , list[i+1] is equal to the second item in , /// and so forth for all the items in . The passed /// instance of IEqualityComparer<T> is used for determining if two items are equal. /// /// The type of items in the list. /// The list to search. /// The sequence of items to search for. /// The IEqualityComparer<T> used to compare items for equality. Only the Equals method will be called. /// The first index with that matches the items in . public static int SearchForSubsequence(IList list, IEnumerable pattern, IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); return SearchForSubsequence(list, pattern, equalityComparer.Equals); } #endregion Find and SearchForSubsequence #region Set operations (coded except EqualSets) /// /// Determines if one collection is a subset of another, considered as sets. The first set is a subset /// of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set, /// it must appear at least X times in the second set. /// /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the IsSubsetOf method on that class. /// /// The first collection. /// The second collection. /// True if is a subset of , considered as sets. /// or is null. public static bool IsSubsetOf(IEnumerable collection1, IEnumerable collection2) { return IsSubsetOf(collection1, collection2, EqualityComparer.Default); } /// /// Determines if one collection is a subset of another, considered as sets. The first set is a subset /// of the second set if every item in the first set also occurs in the second set. If an item appears X times in the first set, /// it must appear at least X times in the second set. /// /// /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the IsSubsetOf method on that class. /// /// The first collection. /// The second collection. /// The IEqualityComparer<T> used to compare items for equality. /// True if is a subset of , considered as sets. /// or is null. public static bool IsSubsetOf(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); return bag2.IsSupersetOf(bag1); } /// /// Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset /// of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than /// the second set. If an item appears X times in the first set, /// it must appear at least X times in the second set. /// /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the IsSubsetOf method on that class. /// /// The first collection. /// The second collection. /// True if is a subset of , considered as sets. /// or is null. public static bool IsProperSubsetOf(IEnumerable collection1, IEnumerable collection2) { return IsProperSubsetOf(collection1, collection2, EqualityComparer.Default); } /// /// Determines if one collection is a proper subset of another, considered as sets. The first set is a proper subset /// of the second set if every item in the first set also occurs in the second set, and the first set is strictly smaller than /// the second set. If an item appears X times in the first set, /// it must appear at least X times in the second set. /// /// /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the IsSubsetOf method on that class. /// /// The first collection. /// The second collection. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals and GetHashCode member functions of this interface are called. /// True if is a proper subset of , considered as sets. /// or is null. public static bool IsProperSubsetOf(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); return bag2.IsProperSupersetOf(bag1); } /// /// Determines if two collections are equal, considered as sets. Two sets are equal if they /// have have the same items, with order not being significant. /// /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the EqualTo method on that class. /// /// The first collection. /// The second collection. /// True if are are equal, considered as sets. /// or is null. public static bool EqualSets(IEnumerable collection1, IEnumerable collection2) { return EqualSets(collection1, collection2, EqualityComparer.Default); } /// /// Determines if two collections are equal, considered as sets. Two sets are equal if they /// have have the same items, with order not being significant. /// /// /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the EqualTo method on that class. /// /// The first collection. /// The second collection. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals and GetHashCode member functions of this interface are called. /// True if are are equal, considered as sets. /// or is null. public static bool EqualSets(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); return bag2.IsEqualTo(bag1); } /// /// Computes the set-theoretic intersection of two collections. The intersection of two sets /// is all items that appear in both of the sets. If an item appears X times in one set, /// and Y times in the other set, the intersection contains the item Minimum(X,Y) times. /// The source collections are not changed. /// A new collection is created with the intersection of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the Intersection or IntersectionWith methods on that class. /// /// The first collection to intersect. /// The second collection to intersect. /// The intersection of the two collections, considered as sets. /// or is null. public static IEnumerable SetIntersection(IEnumerable collection1, IEnumerable collection2) { return SetIntersection(collection1, collection2, EqualityComparer.Default); } /// /// Computes the set-theoretic intersection of two collections. The intersection of two sets /// is all items that appear in both of the sets. If an item appears X times in one set, /// and Y times in the other set, the intersection contains the item Minimum(X,Y) times. /// The source collections are not changed. /// A new collection is created with the intersection of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the Intersection or IntersectionWith methods on that class. /// /// The first collection to intersect. /// The second collection to intersect. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals and GetHashCode member functions of this interface are called. /// The intersection of the two collections, considered as sets. /// or is null. public static IEnumerable SetIntersection(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); return Util.CreateEnumerableWrapper(bag1.Intersection(bag2)); } /// /// Computes the set-theoretic union of two collections. The union of two sets /// is all items that appear in either of the sets. If an item appears X times in one set, /// and Y times in the other set, the union contains the item Maximum(X,Y) times. /// The source collections are not changed. /// A new collection is created with the union of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the Union or UnionWith methods on that class. /// /// The first collection to union. /// The second collection to union. /// The union of the two collections, considered as sets. /// or is null. public static IEnumerable SetUnion(IEnumerable collection1, IEnumerable collection2) { return SetUnion(collection1, collection2, EqualityComparer.Default); } /// /// Computes the set-theoretic union of two collections. The union of two sets /// is all items that appear in either of the sets. If an item appears X times in one set, /// and Y times in the other set, the union contains the item Maximum(X,Y) times. /// The source collections are not changed. /// A new collection is created with the union of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the union or unionWith methods on that class. /// /// The first collection to union. /// The second collection to union. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals and GetHashCode member functions of this interface are called. /// The union of the two collections, considered as sets. /// or is null. public static IEnumerable SetUnion(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); if (bag1.Count > bag2.Count) { bag1.UnionWith(bag2); return Util.CreateEnumerableWrapper(bag1); } else { bag2.UnionWith(bag1); return Util.CreateEnumerableWrapper(bag2); } } /// /// Computes the set-theoretic difference of two collections. The difference of two sets /// is all items that appear in the first set, but not in the second. If an item appears X times in the first set, /// and Y times in the second set, the difference contains the item X - Y times (0 times if X < Y). /// The source collections are not changed. /// A new collection is created with the difference of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the Difference or DifferenceWith methods on that class. /// /// The first collection to difference. /// The second collection to difference. /// The difference of and , considered as sets. /// or is null. public static IEnumerable SetDifference(IEnumerable collection1, IEnumerable collection2) { return SetDifference(collection1, collection2, EqualityComparer.Default); } /// /// Computes the set-theoretic difference of two collections. The difference of two sets /// is all items that appear in the first set, but not in the second. If an item appears X times in the first set, /// and Y times in the second set, the difference contains the item X - Y times (0 times if X < Y). /// The source collections are not changed. /// A new collection is created with the difference of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the difference or differenceWith methods on that class. /// /// The first collection to difference. /// The second collection to difference. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals and GetHashCode member functions of this interface are called. /// The difference of and , considered as sets. /// or is null. public static IEnumerable SetDifference(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); bag1.DifferenceWith(bag2); return Util.CreateEnumerableWrapper(bag1); } /// /// Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets /// is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set, /// and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. /// The source collections are not changed. /// A new collection is created with the symmetric difference of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the SymmetricDifference or SymmetricDifferenceWith methods on that class. /// /// The first collection to symmetric difference. /// The second collection to symmetric difference. /// The symmetric difference of and , considered as sets. /// or is null. public static IEnumerable SetSymmetricDifference(IEnumerable collection1, IEnumerable collection2) { return SetSymmetricDifference(collection1, collection2, EqualityComparer.Default); } /// /// Computes the set-theoretic symmetric difference of two collections. The symmetric difference of two sets /// is all items that appear in the one of the sets, but not in the other. If an item appears X times in the one set, /// and Y times in the other set, the symmetric difference contains the item AbsoluteValue(X - Y) times. /// The source collections are not changed. /// A new collection is created with the symmetric difference of the collections; the order of the /// items in this collection is undefined. /// /// /// When equal items appear in both collections, the returned collection will include an arbitrary choice of one of the /// two equal items. /// If both collections are Set, Bag, OrderedSet, or OrderedBag /// collections, it is more efficient to use the symmetric difference or symmetric differenceWith methods on that class. /// /// The first collection to symmetric difference. /// The second collection to symmetric difference. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals and GetHashCode member functions of this interface are called. /// The symmetric difference of and , considered as sets. /// or is null. public static IEnumerable SetSymmetricDifference(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentException("equalityComparer"); Bag bag1 = new Bag(collection1, equalityComparer); Bag bag2 = new Bag(collection2, equalityComparer); if (bag1.Count > bag2.Count) { bag1.SymmetricDifferenceWith(bag2); return Util.CreateEnumerableWrapper(bag1); } else { bag2.SymmetricDifferenceWith(bag1); return Util.CreateEnumerableWrapper(bag2); } } /// /// Computes the cartestian product of two collections: all possible pairs of items, with the first item taken from the first collection and /// the second item taken from the second collection. If the first collection has N items, and the second collection has M items, the cartesian /// product will have N * M pairs. /// /// The type of items in the first collection. /// The type of items in the second collection. /// The first collection. /// The second collection. /// An IEnumerable<Pair<TFirst, TSecond>> that enumerates the cartesian product of the two collections. public static IEnumerable> CartesianProduct(IEnumerable first, IEnumerable second) { if (first == null) throw new ArgumentNullException("first"); if (second == null) throw new ArgumentNullException("second"); foreach (TFirst itemFirst in first) foreach (TSecond itemSecond in second) yield return new Pair(itemFirst, itemSecond); } #endregion Set operations #region String representations (not yet coded) /// /// Gets a string representation of the elements in the collection. /// The string representation starts with "{", has a list of items separated /// by commas (","), and ends with "}". Each item in the collection is /// converted to a string by calling its ToString method (null is represented by "null"). /// Contained collections (except strings) are recursively converted to strings by this method. /// /// A collection to get the string representation of. /// The string representation of the collection. If is null, then the string "null" is returned. public static string ToString(IEnumerable collection) { return ToString(collection, true, "{", ",", "}"); } /// /// Gets a string representation of the elements in the collection. /// The string to used at the beginning and end, and to separate items, /// and supplied by parameters. Each item in the collection is /// converted to a string by calling its ToString method (null is represented by "null"). /// /// A collection to get the string representation of. /// If true, contained collections (except strings) are converted to strings by a recursive call to this method, instead /// of by calling ToString. /// The string to appear at the beginning of the output string. /// The string to appear between each item in the string. /// The string to appear at the end of the output string. /// The string representation of the collection. If is null, then the string "null" is returned. /// , , or /// is null. public static string ToString(IEnumerable collection, bool recursive, string start, string separator, string end) { if (start == null) throw new ArgumentNullException("start"); if (separator == null) throw new ArgumentNullException("separator"); if (end == null) throw new ArgumentNullException("end"); if (collection == null) return "null"; bool firstItem = true; System.Text.StringBuilder builder = new System.Text.StringBuilder(); builder.Append(start); // Call ToString on each item and put it in. foreach (T item in collection) { if (!firstItem) builder.Append(separator); if (item == null) builder.Append("null"); else if (recursive && item is IEnumerable && !(item is string)) builder.Append(Algorithms.ToString(Algorithms.TypedAs((IEnumerable)item), recursive, start, separator, end)); else builder.Append(item.ToString()); firstItem = false; } builder.Append(end); return builder.ToString(); } /// /// Gets a string representation of the mappings in a dictionary. /// The string representation starts with "{", has a list of mappings separated /// by commas (", "), and ends with "}". Each mapping is represented /// by "key->value". Each key and value in the dictionary is /// converted to a string by calling its ToString method (null is represented by "null"). /// Contained collections (except strings) are recursively converted to strings by this method. /// /// A dictionary to get the string representation of. /// The string representation of the collection, or "null" /// if is null. public static string ToString(IDictionary dictionary) { bool firstItem = true; if (dictionary == null) return "null"; System.Text.StringBuilder builder = new System.Text.StringBuilder(); builder.Append("{"); // Call ToString on each item and put it in. foreach (KeyValuePair pair in dictionary) { if (!firstItem) builder.Append(", "); if (pair.Key == null) builder.Append("null"); else if (pair.Key is IEnumerable && !(pair.Key is string)) builder.Append(Algorithms.ToString(Algorithms.TypedAs((IEnumerable)pair.Key), true, "{", ",", "}")); else builder.Append(pair.Key.ToString()); builder.Append("->"); if (pair.Value == null) builder.Append("null"); else if (pair.Value is IEnumerable && !(pair.Value is string)) builder.Append(Algorithms.ToString(Algorithms.TypedAs((IEnumerable)pair.Value), true, "{", ",", "}")); else builder.Append(pair.Value.ToString()); firstItem = false; } builder.Append("}"); return builder.ToString(); } #endregion String representations #region Shuffles and Permutations private static volatile Random myRandomGenerator; /// /// Return a private random number generator to use if the user /// doesn't supply one. /// /// The private random number generator. Only one is ever created /// and is always returned. private static Random GetRandomGenerator() { if (myRandomGenerator == null) { lock (typeof(Algorithms)) { if (myRandomGenerator == null) myRandomGenerator = new Random(); } } return myRandomGenerator; } /// /// Randomly shuffles the items in a collection, yielding a new collection. /// /// The type of the items in the collection. /// The collection to shuffle. /// An array with the same size and items as , but the items in a randomly chosen order. public static T[] RandomShuffle(IEnumerable collection) { return RandomShuffle(collection, GetRandomGenerator()); } /// /// Randomly shuffles the items in a collection, yielding a new collection. /// /// The type of the items in the collection. /// The collection to shuffle. /// The random number generator to use to select the random order. /// An array with the same size and items as , but the items in a randomly chosen order. public static T[] RandomShuffle(IEnumerable collection, Random randomGenerator) { // We have to copy all items anyway, and there isn't a way to produce the items // on the fly that is linear. So copying to an array and shuffling it is an efficient as we can get. if (collection == null) throw new ArgumentNullException("collection"); if (randomGenerator == null) throw new ArgumentNullException("randomGenerator"); T[] array = Algorithms.ToArray(collection); int count = array.Length; for (int i = count - 1; i >= 1; --i) { // Pick an random number 0 through i inclusive. int j = randomGenerator.Next(i + 1); // Swap array[i] and array[j] T temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; } /// /// Randomly shuffles the items in a list or array, in place. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to shuffle. public static void RandomShuffleInPlace(IList list) { RandomShuffleInPlace(list, GetRandomGenerator()); } /// /// Randomly shuffles the items in a list or array, in place. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to shuffle. /// The random number generator to use to select the random order. public static void RandomShuffleInPlace(IList list, Random randomGenerator) { if (list == null) throw new ArgumentNullException("list"); if (randomGenerator == null) throw new ArgumentNullException("randomGenerator"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int count = list.Count; for (int i = count - 1; i >= 1; --i) { // Pick an random number 0 through i inclusive. int j = randomGenerator.Next(i + 1); // Swap list[i] and list[j] T temp = list[i]; list[i] = list[j]; list[j] = temp; } } /// /// Picks a random subset of items from , and places /// those items into a random order. No item is selected more than once. /// /// If the collection implements IList<T>, then this method takes time O(). /// Otherwise, this method takes time O(N), where N is the number of items in the collection. /// The type of items in the collection. /// The collection of items to select from. This collection is not changed. /// The number of items in the subset to choose. /// An array of items, selected at random from . /// is negative or greater than .Count. public static T[] RandomSubset(IEnumerable collection, int count) { return RandomSubset(collection, count, GetRandomGenerator()); } /// /// Picks a random subset of items from , and places /// those items into a random order. No item is selected more than once. /// /// If the collection implements IList<T>, then this method takes time O(). /// Otherwise, this method takes time O(N), where N is the number of items in the collection. /// The type of items in the collection. /// The collection of items to select from. This collection is not changed. /// The number of items in the subset to choose. /// The random number generates used to make the selection. /// An array of items, selected at random from . /// is negative or greater than .Count. /// is null. public static T[] RandomSubset(IEnumerable collection, int count, Random randomGenerator) { if (collection == null) throw new ArgumentNullException("collection"); if (randomGenerator == null) throw new ArgumentNullException("randomGenerator"); // We need random access to the items in the collection. If it's not already an // IList, copy to a temporary list. IList list = collection as IList; if (list == null) { list = new List(collection); } int listCount = list.Count; if (count < 0 || count > listCount) throw new ArgumentOutOfRangeException("count"); T[] result = new T[count]; // the result array. Dictionary swappedValues = new Dictionary(count); // holds swapped values from the list. for (int i = 0; i < count; ++i) { // Set j to the index of the item to swap with, and value to the value to swap with. T value; int j = randomGenerator.Next(listCount - i) + i; // Swap values of i and j in the list. The list isn't actually changed; instead, // swapped values are stored in the dictionary swappedValues. if (!swappedValues.TryGetValue(j, out value)) value = list[j]; result[i] = value; if (i != j) { if (swappedValues.TryGetValue(i, out value)) swappedValues[j] = value; else swappedValues[j] = list[i]; } } return result; } /// /// Generates all the possible permutations of the items in . If /// has N items, then N factorial permutations will be generated. This method does not compare the items to determine if /// any of them are equal. If some items are equal, the same permutation may be generated more than once. For example, /// if the collections contains the three items A, A, and B, then this method will generate the six permutations, AAB, AAB, /// ABA, ABA, BAA, BAA (not necessarily in that order). To take equal items into account, use the GenerateSortedPermutations /// method. /// /// The type of items to permute. /// The collection of items to permute. /// An IEnumerable<T[]> that enumerations all the possible permutations of the /// items in . Each permutations is returned as an array. The items in the array /// should be copied if they need to be used after the next permutation is generated; each permutation may /// reuse the same array instance. public static IEnumerable GeneratePermutations(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); T[] array = Algorithms.ToArray(collection); if (array.Length == 0) yield break; int[] state = new int[array.Length - 1]; int maxLength = state.Length; yield return array; if (array.Length == 1) yield break; // The following algorithm makes two swaps for each // permutation generated. // This is not optimal in terms of number of swaps, but // is still O(1), and shorter and clearer to understand. int i = 0; T temp; for (; ; ) { if (state[i] < i + 1) { if (state[i] > 0) { temp = array[i + 1]; array[i + 1] = array[state[i] - 1]; array[state[i] - 1] = temp; } temp = array[i + 1]; array[i + 1] = array[state[i]]; array[state[i]] = temp; yield return array; ++state[i]; i = 0; } else { temp = array[i + 1]; array[i + 1] = array[i]; array[i] = temp; state[i] = 0; ++i; if (i >= maxLength) yield break; } } } /// /// Generates all the possible permutations of the items in , in lexicographical order. /// Even if some items are equal, the same permutation will not be generated more than once. For example, /// if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA, /// BAA. /// /// The type of items to permute. /// The collection of items to permute. /// An IEnumerable<T[]> that enumerations all the possible permutations of the /// items in . Each permutations is returned as an array. The items in the array /// should be copied if they need to be used after the next permutation is generated; each permutation may /// reuse the same array instance. public static IEnumerable GenerateSortedPermutations(IEnumerable collection) where T: IComparable { return GenerateSortedPermutations(collection, Comparer.Default); } /// /// Generates all the possible permutations of the items in , in lexicographical order. A /// supplied IComparer<T> instance is used to compare the items. /// Even if some items are equal, the same permutation will not be generated more than once. For example, /// if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA, /// BAA. /// /// The type of items to permute. /// The collection of items to permute. /// The IComparer<T> used to compare the items. /// An IEnumerable<T[]> that enumerations all the possible permutations of the /// items in . Each permutations is returned as an array. The items in the array /// should be copied if they need to be used after the next permutation is generated; each permutation may /// reuse the same array instance. public static IEnumerable GenerateSortedPermutations(IEnumerable collection, IComparer comparer) { if (collection == null) throw new ArgumentNullException("collection"); if (comparer == null) throw new ArgumentNullException("comparer"); T[] array = Algorithms.ToArray(collection); int length = array.Length; if (length == 0) yield break; Array.Sort(array, comparer); yield return array; if (length == 1) yield break; // Keep generating the next permutation until we're done. Algorithm is // due to Jeffrey A. Johnson ("SEPA - a Simple Efficient Permutation Algorithm") int key, swap, i, j; T temp; for (; ; ) { // Find the key point -- where array[key]= 0) { --key; if (key < 0) yield break; } // Find the last item in the tail less than key. swap = length - 1; while (comparer.Compare(array[swap], array[key]) <= 0) --swap; // Swap it with the key. temp = array[key]; array[key] = array[swap]; array[swap] = temp; // Reverse the tail. i = key + 1; j = length - 1; while (i < j) { temp = array[i]; array[i] = array[j]; array[j] = temp; ++i; --j; } yield return array; } } /// /// Generates all the possible permutations of the items in , in lexicographical order. A /// supplied Comparison<T> delegate is used to compare the items. /// Even if some items are equal, the same permutation will not be generated more than once. For example, /// if the collections contains the three items A, A, and B, then this method will generate only the three permutations, AAB, ABA, /// BAA. /// /// The type of items to permute. /// The collection of items to permute. /// The Comparison<T> delegate used to compare the items. /// An IEnumerable<T[]> that enumerations all the possible permutations of the /// items in . Each permutations is returned as an array. The items in the array /// should be copied if they need to be used after the next permutation is generated; each permutation may /// reuse the same array instance. public static IEnumerable GenerateSortedPermutations(IEnumerable collection, Comparison comparison) { return GenerateSortedPermutations(collection, Comparers.ComparerFromComparison(comparison)); } #endregion Shuffles and Permutations #region Minimum and Maximum /// /// Finds the maximum value in a collection. /// /// Values in the collection are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The type of items in the collection. /// The collection to search. /// The largest item in the collection. /// The collection is empty. /// is null. public static T Maximum(IEnumerable collection) where T : IComparable { return Maximum(collection, Comparer.Default); } /// /// Finds the maximum value in a collection. A supplied IComparer<T> is used /// to compare the items in the collection. /// /// The type of items in the collection. /// The collection to search. /// The comparer instance used to compare items in the collection. /// The largest item in the collection. /// The collection is empty. /// or is null. public static T Maximum(IEnumerable collection, IComparer comparer) { if (collection == null) throw new ArgumentNullException("collection"); if (comparer == null) throw new ArgumentNullException("comparer"); T maxSoFar = default(T); bool foundOne = false; // Go through the collection, keeping the maximum found so far. foreach (T item in collection) { if (!foundOne || comparer.Compare(maxSoFar, item) < 0) { maxSoFar = item; } foundOne = true; } // If the collection was empty, throw an exception. if (!foundOne) throw new InvalidOperationException(Strings.CollectionIsEmpty); else return maxSoFar; } /// /// Finds the maximum value in a collection. A supplied Comparison<T> delegate is used /// to compare the items in the collection. /// /// The type of items in the collection. /// The collection to search. /// The comparison used to compare items in the collection. /// The largest item in the collection. /// The collection is empty. /// or is null. public static T Maximum(IEnumerable collection, Comparison comparison) { return Maximum(collection, Comparers.ComparerFromComparison(comparison)); } /// /// Finds the minimum value in a collection. /// /// Values in the collection are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The type of items in the collection. /// The collection to search. /// The smallest item in the collection. /// The collection is empty. /// is null. public static T Minimum(IEnumerable collection) where T : IComparable { return Minimum(collection, Comparer.Default); } /// /// Finds the minimum value in a collection. A supplied IComparer<T> is used /// to compare the items in the collection. /// /// The type of items in the collection. /// The collection to search. /// The comparer instance used to compare items in the collection. /// The smallest item in the collection. /// The collection is empty. /// or is null. public static T Minimum(IEnumerable collection, IComparer comparer) { if (collection == null) throw new ArgumentNullException("collection"); if (comparer == null) throw new ArgumentNullException("comparer"); T minSoFar = default(T); bool foundOne = false; // Go through the collection, keeping the minimum found so far. foreach (T item in collection) { if (!foundOne || comparer.Compare(minSoFar, item) > 0) { minSoFar = item; } foundOne = true; } // If the collection was empty, throw an exception. if (!foundOne) throw new InvalidOperationException(Strings.CollectionIsEmpty); else return minSoFar; } /// /// Finds the minimum value in a collection. A supplied Comparison<T> delegate is used /// to compare the items in the collection. /// /// The type of items in the collection. /// The collection to search. /// The comparison used to compare items in the collection. /// The smallest item in the collection. /// The collection is empty. /// or is null. public static T Minimum(IEnumerable collection, Comparison comparison) { return Minimum(collection, Comparers.ComparerFromComparison(comparison)); } /// /// Finds the index of the maximum value in a list. /// /// Values in the list are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The type of items in the list. /// The list to search. /// The index of the largest item in the list. If the maximum value appears /// multiple times, the index of the first appearance is used. If the list is empty, -1 is returned. /// is null. public static int IndexOfMaximum(IList list) where T : IComparable { return IndexOfMaximum(list, Comparer.Default); } /// /// Finds the index of the maximum value in a list. A supplied IComparer<T> is used /// to compare the items in the collection. /// /// The type of items in the list. /// The list to search. /// The comparer instance used to compare items in the collection. /// The index of the largest item in the list. If the maximum value appears /// multiple times, the index of the first appearance is used. If the list is empty, -1 is returned. /// or is null. public static int IndexOfMaximum(IList list, IComparer comparer) { if (list == null) throw new ArgumentNullException("list"); if (comparer == null) throw new ArgumentNullException("comparer"); T maxSoFar = default(T); int indexSoFar = -1; // Go through the collection, keeping the maximum found so far. int i = 0; foreach (T item in list) { if (indexSoFar < 0 || comparer.Compare(maxSoFar, item) < 0) { maxSoFar = item; indexSoFar = i; } ++i; } return indexSoFar; } /// /// Finds the index of the maximum value in a list. A supplied Comparison<T> delegate is used /// to compare the items in the collection. /// /// The type of items in the list. /// The list to search. /// The comparison used to compare items in the collection. /// The index of the largest item in the list. If the maximum value appears /// multiple times, the index of the first appearance is used. If the list is empty, -1 is returned. /// or is null. public static int IndexOfMaximum(IList list, Comparison comparison) { return IndexOfMaximum(list, Comparers.ComparerFromComparison(comparison)); } /// /// Finds the index of the minimum value in a list. /// /// Values in the list are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The type of items in the list. /// The list to search. /// The index of the smallest item in the list. If the minimum value appears /// multiple times, the index of the first appearance is used. /// The collection is empty. /// is null. public static int IndexOfMinimum(IList list) where T : IComparable { return IndexOfMinimum(list, Comparer.Default); } /// /// Finds the index of the minimum value in a list. A supplied IComparer<T> is used /// to compare the items in the collection. /// /// The type of items in the list. /// The list to search. /// The comparer instance used to compare items in the collection. /// The index of the smallest item in the list. If the minimum value appears /// multiple times, the index of the first appearance is used. /// The collection is empty. /// or is null. public static int IndexOfMinimum(IList list, IComparer comparer) { if (list == null) throw new ArgumentNullException("list"); if (comparer == null) throw new ArgumentNullException("comparer"); T minSoFar = default(T); int indexSoFar = -1; // Go through the collection, keeping the minimum found so far. int i = 0; foreach (T item in list) { if (indexSoFar < 0 || comparer.Compare(minSoFar, item) > 0) { minSoFar = item; indexSoFar = i; } ++i; } return indexSoFar; } /// /// Finds the index of the minimum value in a list. A supplied Comparison<T> delegate is used /// to compare the items in the collection. /// /// The type of items in the list. /// The list to search. /// The comparison delegate used to compare items in the collection. /// The index of the smallest item in the list. If the minimum value appears /// multiple times, the index of the first appearance is used. /// The collection is empty. /// or is null. public static int IndexOfMinimum(IList list, Comparison comparison) { return IndexOfMinimum(list, Comparers.ComparerFromComparison(comparison)); } #endregion Minimum and Maximum #region Sorting and operations on sorted collections /// /// Creates a sorted version of a collection. /// /// Values are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The collection to sort. /// An array containing the sorted version of the collection. public static T[] Sort(IEnumerable collection) where T : IComparable { return Sort(collection, Comparer.Default); } /// /// Creates a sorted version of a collection. A supplied IComparer<T> is used /// to compare the items in the collection. /// /// The collection to sort. /// The comparer instance used to compare items in the collection. Only /// the Compare method is used. /// An array containing the sorted version of the collection. public static T[] Sort(IEnumerable collection, IComparer comparer) { T[] array; if (collection == null) throw new ArgumentNullException("collection"); if (comparer == null) throw new ArgumentNullException("comparer"); array = Algorithms.ToArray(collection); Array.Sort(array, comparer); return array; } /// /// Creates a sorted version of a collection. A supplied Comparison<T> delegate is used /// to compare the items in the collection. /// /// The collection to sort. /// The comparison delegate used to compare items in the collection. /// An array containing the sorted version of the collection. public static T[] Sort(IEnumerable collection, Comparison comparison) { return Sort(collection, Comparers.ComparerFromComparison(comparison)); } /// /// Sorts a list or array in place. /// /// The Quicksort algorithms is used to sort the items. In virtually all cases, /// this takes time O(N log N), where N is the number of items in the list. /// Values are compared by using the IComparable<T> /// interfaces implementation on the type T. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to sort. public static void SortInPlace(IList list) where T : IComparable { SortInPlace(list, Comparer.Default); } /// /// Sorts a list or array in place. A supplied IComparer<T> is used /// to compare the items in the list. /// /// The Quicksort algorithms is used to sort the items. In virtually all cases, /// this takes time O(N log N), where N is the number of items in the list. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to sort. /// The comparer instance used to compare items in the collection. Only /// the Compare method is used. public static void SortInPlace(IList list, IComparer comparer) { if (list == null) throw new ArgumentNullException("list"); if (comparer == null) throw new ArgumentNullException("comparer"); // If we have an array, use the built-in array sort (faster than going through IList accessors // with virtual calls). if (list is T[]) { Array.Sort((T[])list, comparer); return; } if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); // Instead of a recursive procedure, we use an explicit stack to hold // ranges that we still need to sort. int[] leftStack = new int[32], rightStack = new int[32]; int stackPtr = 0; int l = 0; // the inclusive left edge of the current range we are sorting. int r = list.Count - 1; // the inclusive right edge of the current range we are sorting. T partition; // The partition value. // Loop until we have nothing left to sort. On each iteration, l and r contains the bounds // of something to sort (unless r <= l), and leftStack/rightStack have a stack of unsorted // pieces (unles stackPtr == 0). for (; ; ) { if (l == r - 1) { // We have exactly 2 elements to sort. Compare them and swap if needed. T e1, e2; e1 = list[l]; e2 = list[r]; if (comparer.Compare(e1, e2) > 0) { list[r] = e1; list[l] = e2; } l = r; // sort complete, find other work from the stack. } else if (l < r) { // Sort the items in the inclusive range l .. r // Get the left, middle, and right-most elements and sort them, yielding e1=smallest, e2=median, e3=largest int m = l + (r - l) / 2; T e1 = list[l], e2 = list[m], e3 = list[r], temp; if (comparer.Compare(e1, e2) > 0) { temp = e1; e1 = e2; e2 = temp; } if (comparer.Compare(e1, e3) > 0) { temp = e3; e3 = e2; e2 = e1; e1 = temp; } else if (comparer.Compare(e2, e3) > 0) { temp = e2; e2 = e3; e3 = temp; } if (l == r - 2) { // We have exactly 3 elements to sort, and we've done that. Store back and we're done. list[l] = e1; list[m] = e2; list[r] = e3; l = r; // sort complete, find other work from the stack. } else { // Put the smallest at the left, largest in the middle, and the median at the right (which is the partitioning value) list[l] = e1; list[m] = e3; list[r] = partition = e2; // Partition into three parts, items <= partition, items == partition, and items >= partition int i = l, j = r; T item_i, item_j; for (; ; ) { do { ++i; item_i = list[i]; } while (comparer.Compare(item_i, partition) < 0); do { --j; item_j = list[j]; } while (comparer.Compare(item_j, partition) > 0); if (j < i) break; list[i] = item_j; list[j] = item_i; // swap items to continue the partition. } // Move the partition value into place. list[r] = item_i; list[i] = partition; ++i; // We have partitioned the list. // Items in the inclusive range l .. j are <= partition. // Items in the inclusive range i .. r are >= partition. // Items in the inclusive range j+1 .. i - 1 are == partition (and in the correct final position). // We now need to sort l .. j and i .. r. // To do this, we stack one of the lists for later processing, and change l and r to the other list. // If we always stack the larger of the two sub-parts, the stack cannot get greater // than log2(Count) in size; i.e., a 32-element stack is enough for the maximum list size. if ((j - l) > (r - i)) { // The right partition is smaller. Stack the left, and get ready to sort the right. leftStack[stackPtr] = l; rightStack[stackPtr] = j; l = i; } else { // The left partition is smaller. Stack the right, and get ready to sort the left. leftStack[stackPtr] = i; rightStack[stackPtr] = r; r = j; } ++stackPtr; } } else if (stackPtr > 0) { // We have a stacked sub-list to sort. Pop it off and sort it. --stackPtr; l = leftStack[stackPtr]; r = rightStack[stackPtr]; } else { // We have nothing left to sort. break; } } } /// /// Sorts a list or array in place. A supplied Comparison<T> delegate is used /// to compare the items in the list. /// /// The Quicksort algorithms is used to sort the items. In virtually all cases, /// this takes time O(N log N), where N is the number of items in the list. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to sort. /// The comparison delegate used to compare items in the collection. public static void SortInPlace(IList list, Comparison comparison) { SortInPlace(list, Comparers.ComparerFromComparison(comparison)); } /// /// Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal, /// and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. /// /// Values are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The collection to sort. /// An array containing the sorted version of the collection. public static T[] StableSort(IEnumerable collection) where T : IComparable { return StableSort(collection, Comparer.Default); } /// /// Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal, /// and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. A supplied IComparer<T> is used /// to compare the items in the collection. /// /// The collection to sort. /// The comparer instance used to compare items in the collection. Only /// the Compare method is used. /// An array containing the sorted version of the collection. public static T[] StableSort(IEnumerable collection, IComparer comparer) { T[] array; if (collection == null) throw new ArgumentNullException("collection"); if (comparer == null) throw new ArgumentNullException("comparer"); array = Algorithms.ToArray(collection); StableSortInPlace(Algorithms.ReadWriteList(array), comparer); return array; } /// /// Creates a sorted version of a collection. The sort is stable, which means that if items X and Y are equal, /// and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. /// A supplied Comparison<T> delegate is used /// to compare the items in the collection. /// /// Values are compared by using the IComparable<T> /// interfaces implementation on the type T. /// The collection to sort. /// The comparison delegate used to compare items in the collection. /// An array containing the sorted version of the collection. public static T[] StableSort(IEnumerable collection, Comparison comparison) { return StableSort(collection, Comparers.ComparerFromComparison(comparison)); } /// /// Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal, /// and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. /// /// Values are compared by using the IComparable<T> /// interfaces implementation on the type T. /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to sort. public static void StableSortInPlace(IList list) where T : IComparable { StableSortInPlace(list, Comparer.Default); } /// /// Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal, /// and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. /// A supplied IComparer<T> is used /// to compare the items in the list. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to sort. /// The comparer instance used to compare items in the collection. Only /// the Compare method is used. public static void StableSortInPlace(IList list, IComparer comparer) { if (list == null) throw new ArgumentNullException("list"); if (comparer == null) throw new ArgumentNullException("comparer"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); // The stable sort algorithms also uses QuickSort. An additional array of indices (order) is // used to maintain the original order of items in the array, and that array is used // as a secondary compare when the primary compare returns equal. int[] order = new int[list.Count]; for (int x = 0; x < order.Length; ++x) order[x] = x; // Instead of a recursive procedure, we use an explicit stack to hold // ranges that we still need to sort. int[] leftStack = new int[32], rightStack = new int[32]; int stackPtr = 0; int l = 0; // the inclusive left edge of the current range we are sorting. int r = list.Count - 1; // the inclusive right edge of the current range we are sorting. T partition; // The partition value. int order_partition; // The order of the partition value; int c; // holds the result of a comparison temporarily. // Loop until we have nothing left to sort. On each iteration, l and r contains the bounds // of something to sort (unless r <= l), and leftStack/rightStack have a stack of unsorted // pieces (unles stackPtr == 0). for (; ; ) { if (l == r - 1) { // We have exactly 2 elements to sort. Compare them and swap if needed. T e1, e2; int o1, o2; e1 = list[l]; o1 = order[l]; e2 = list[r]; o2 = order[r]; if ((c = comparer.Compare(e1, e2)) > 0 || (c == 0 && o1 > o2)) { list[r] = e1; order[r] = o1; list[l] = e2; order[l] = o2; } l = r; // sort complete, find other work from the stack. } else if (l < r) { // Sort the items in the inclusive range l .. r // Get the left, middle, and right-most elements and sort them, yielding e1=smallest, e2=median, e3=largest int m = l + (r - l) / 2; T e1 = list[l], e2 = list[m], e3 = list[r], temp; int o1 = order[l], o2 = order[m], o3 = order[r], otemp; if ((c = comparer.Compare(e1, e2)) > 0 || (c == 0 && o1 > o2)) { temp = e1; e1 = e2; e2 = temp; otemp = o1; o1 = o2; o2 = otemp; } if ((c = comparer.Compare(e1, e3)) > 0 || (c == 0 && o1 > o3)) { temp = e3; e3 = e2; e2 = e1; e1 = temp; otemp = o3; o3 = o2; o2 = o1; o1 = otemp; } else if ((c = comparer.Compare(e2, e3)) > 0 || (c == 0 && o2 > o3)) { temp = e2; e2 = e3; e3 = temp; otemp = o2; o2 = o3; o3 = otemp; } if (l == r - 2) { // We have exactly 3 elements to sort, and we've done that. Store back and we're done. list[l] = e1; list[m] = e2; list[r] = e3; order[l] = o1; order[m] = o2; order[r] = o3; l = r; // sort complete, find other work from the stack. } else { // Put the smallest at the left, largest in the middle, and the median at the right (which is the partitioning value) list[l] = e1; order[l] = o1; list[m] = e3; order[m] = o3; list[r] = partition = e2; order[r] = order_partition = o2; // Partition into three parts, items <= partition, items == partition, and items >= partition int i = l, j = r; T item_i, item_j; int order_i, order_j; for (; ; ) { do { ++i; item_i = list[i]; order_i = order[i]; } while ((c = comparer.Compare(item_i, partition)) < 0 || (c == 0 && order_i < order_partition)); do { --j; item_j = list[j]; order_j = order[j]; } while ((c = comparer.Compare(item_j, partition)) > 0 || (c == 0 && order_j > order_partition)); if (j < i) break; list[i] = item_j; list[j] = item_i; // swap items to continue the partition. order[i] = order_j; order[j] = order_i; } // Move the partition value into place. list[r] = item_i; order[r] = order_i; list[i] = partition; order[i] = order_partition; ++i; // We have partitioned the list. // Items in the inclusive range l .. j are <= partition. // Items in the inclusive range i .. r are >= partition. // Items in the inclusive range j+1 .. i - 1 are == partition (and in the correct final position). // We now need to sort l .. j and i .. r. // To do this, we stack one of the lists for later processing, and change l and r to the other list. // If we always stack the larger of the two sub-parts, the stack cannot get greater // than log2(Count) in size; i.e., a 32-element stack is enough for the maximum list size. if ((j - l) > (r - i)) { // The right partition is smaller. Stack the left, and get ready to sort the right. leftStack[stackPtr] = l; rightStack[stackPtr] = j; l = i; } else { // The left partition is smaller. Stack the right, and get ready to sort the left. leftStack[stackPtr] = i; rightStack[stackPtr] = r; r = j; } ++stackPtr; } } else if (stackPtr > 0) { // We have a stacked sub-list to sort. Pop it off and sort it. --stackPtr; l = leftStack[stackPtr]; r = rightStack[stackPtr]; } else { // We have nothing left to sort. break; } } } /// /// Sorts a list or array in place. The sort is stable, which means that if items X and Y are equal, /// and X precedes Y in the unsorted collection, X will precede Y is the sorted collection. /// A supplied Comparison<T> delegate is used /// to compare the items in the list. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to sort. /// The comparison delegate used to compare items in the collection. public static void StableSortInPlace(IList list, Comparison comparison) { StableSortInPlace(list, Comparers.ComparerFromComparison(comparison)); } /// /// Searches a sorted list for an item via binary search. The list must be sorted /// by the natural ordering of the type (it's implementation of IComparable<T>). /// /// The sorted list to search. /// The item to search for. /// Returns the first index at which the item can be found. If the return /// value is zero, indicating that was not present in the list, then this /// returns the index at which could be inserted to maintain the sorted /// order of the list. /// The number of items equal to that appear in the list. public static int BinarySearch(IList list, T item, out int index) where T: IComparable { return BinarySearch(list, item, Comparer.Default, out index); } /// /// Searches a sorted list for an item via binary search. The list must be sorted /// by the ordering in the passed instance of IComparer<T>. /// /// The sorted list to search. /// The item to search for. /// The comparer instance used to sort the list. Only /// the Compare method is used. /// Returns the first index at which the item can be found. If the return /// value is zero, indicating that was not present in the list, then this /// returns the index at which could be inserted to maintain the sorted /// order of the list. /// /// The number of items equal to that appear in the list. /// public static int BinarySearch(IList list, T item, IComparer comparer, out int index) { if (list == null) throw new ArgumentNullException("list"); if (comparer == null) throw new ArgumentNullException("comparer"); int l = 0; int r = list.Count; while (r > l) { int m = l + (r - l) / 2; T middleItem = list[m]; int comp = comparer.Compare(middleItem, item); if (comp < 0) { // middleItem < item l = m + 1; } else if (comp > 0) { r = m; } else { // Found something equal to item at m. Now we need to find the start and end of this run of equal items. int lFound = l, rFound = r, found = m; // Find the start of the run. l = lFound; r = found; while (r > l) { m = l + (r - l) / 2; middleItem = list[m]; comp = comparer.Compare(middleItem, item); if (comp < 0) { // middleItem < item l = m + 1; } else { r = m; } } System.Diagnostics.Debug.Assert(l == r, "Left and Right were not equal"); index = l; // Find the end of the run. l = found; r = rFound; while (r > l) { m = l + (r - l) / 2; middleItem = list[m]; comp = comparer.Compare(middleItem, item); if (comp <= 0) { // middleItem <= item l = m + 1; } else { r = m; } } System.Diagnostics.Debug.Assert(l == r, "Left and Right were not equal"); return l - index; } } // We did not find the item. l and r must be equal. System.Diagnostics.Debug.Assert(l == r); index = l; return 0; } /// /// Searches a sorted list for an item via binary search. The list must be sorted /// by the ordering in the passed Comparison<T> delegate. /// /// The sorted list to search. /// The item to search for. /// The comparison delegate used to sort the list. /// Returns the first index at which the item can be found. If the return /// value is zero, indicating that was not present in the list, then this /// returns the index at which could be inserted to maintain the sorted /// order of the list. /// The number of items equal to that appear in the list. public static int BinarySearch(IList list, T item, Comparison comparison, out int index) { return BinarySearch(list, item, Comparers.ComparerFromComparison(comparison), out index); } /// /// Merge several sorted collections into a single sorted collection. Each input collection must be sorted /// by the natural ordering of the type (it's implementation of IComparable<T>). The merging /// is stable; equal items maintain their ordering, and equal items in different collections are placed /// in the order of the collections. /// /// The set of collections to merge. In many languages, this parameter /// can be specified as several individual parameters. /// An IEnumerable<T> that enumerates all the items in all the collections /// in sorted order. public static IEnumerable MergeSorted(params IEnumerable[] collections) where T : IComparable { return MergeSorted(Comparer.Default, collections); } /// /// Merge several sorted collections into a single sorted collection. Each input collection must be sorted /// by the ordering in the passed instance of IComparer<T>. The merging /// is stable; equal items maintain their ordering, and equal items in different collections are placed /// in the order of the collections. /// /// The set of collections to merge. In many languages, this parameter /// can be specified as several individual parameters. /// The comparer instance used to sort the list. Only /// the Compare method is used. /// An IEnumerable<T> that enumerates all the items in all the collections /// in sorted order. public static IEnumerable MergeSorted(IComparer comparer, params IEnumerable[] collections) { if (collections == null) throw new ArgumentNullException("collections"); if (comparer == null) throw new ArgumentNullException("comparer"); IEnumerator[] enumerators = new IEnumerator[collections.Length]; bool[] more = new bool[collections.Length]; T smallestItem = default(T); int smallestItemIndex; try { // Get enumerators from each collection, and advance to the first element. for (int i = 0; i < collections.Length; ++i) { if (collections[i] != null) { enumerators[i] = collections[i].GetEnumerator(); more[i] = enumerators[i].MoveNext(); } } for (; ; ) { // Find the smallest item, and which collection it is in. smallestItemIndex = -1; // -1 indicates no smallest yet. for (int i = 0; i < enumerators.Length; ++i) { if (more[i]) { T item = enumerators[i].Current; if (smallestItemIndex < 0 || comparer.Compare(smallestItem, item) > 0) { smallestItemIndex = i; smallestItem = item; } } } // If no smallest item found, we're done. if (smallestItemIndex == -1) yield break; // Yield the smallest item. yield return smallestItem; // Advance the enumerator it came from. more[smallestItemIndex] = enumerators[smallestItemIndex].MoveNext(); } } finally { // Dispose all enumerators. foreach (IEnumerator e in enumerators) { if (e != null) e.Dispose(); } } } /// /// Merge several sorted collections into a single sorted collection. Each input collection must be sorted /// by the ordering in the passed Comparison<T> delegate. The merging /// is stable; equal items maintain their ordering, and equal items in different collections are placed /// in the order of the collections. /// /// The set of collections to merge. In many languages, this parameter /// can be specified as several individual parameters. /// The comparison delegate used to sort the collections. /// An IEnumerable<T> that enumerates all the items in all the collections /// in sorted order. public static IEnumerable MergeSorted(Comparison comparison, params IEnumerable[] collections) { return MergeSorted(Comparers.ComparerFromComparison(comparison), collections); } /// /// Performs a lexicographical comparison of two sequences of values. A lexicographical comparison compares corresponding /// pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, /// then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence /// are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other, /// but corresponding elements are all equal, then the shorter sequence is considered less than the longer one. /// /// T must implement either IComparable<T> and this implementation is used /// to compare the items. /// Types of items to compare. This type must implement IComparable<T> to allow /// items to be compared. /// The first sequence to compare. /// The second sequence to compare. /// Less than zero if is lexicographically less than . /// Greater than zero if is lexicographically greater than . /// Zero if is equal to . /// T does not implement IComparable<T> or IComparable. public static int LexicographicalCompare(IEnumerable sequence1, IEnumerable sequence2) where T : IComparable { return LexicographicalCompare(sequence1, sequence2, Comparer.Default); } /// /// Performs a lexicographical comparison of two sequences of values, using a supplied comparison delegate. A lexicographical comparison compares corresponding /// pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, /// then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence /// are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other, /// but corresponding elements are all equal, then the shorter sequence is considered less than the longer one. /// /// Types of items to compare. /// The first sequence to compare. /// The second sequence to compare. /// The IComparison<T> delegate to compare items. /// Only the Compare member function of this interface is called. /// Less than zero if is lexicographically less than . /// Greater than zero if is lexicographically greater than . /// Zero if is equal to . public static int LexicographicalCompare(IEnumerable sequence1, IEnumerable sequence2, Comparison comparison) { return LexicographicalCompare(sequence1, sequence2, Comparers.ComparerFromComparison(comparison)); } /// /// Performs a lexicographical comparison of two sequences of values, using a supplied comparer interface. A lexicographical comparison compares corresponding /// pairs of elements from two sequences in order. If the first element of sequence1 is less than the first element of sequence2, /// then the comparison ends and the first sequence is lexicographically less than the second. If the first elements of each sequence /// are equal, then the comparison proceeds to the second element of each sequence. If one sequence is shorter than the other, /// but corresponding elements are all equal, then the shorter sequence is considered less than the longer one. /// /// Types of items to compare. /// The first sequence to compare. /// The second sequence to compare. /// The IComparer<T> used to compare items. /// Only the Compare member function of this interface is called. /// Less than zero if is lexicographically less than . /// Greater than zero if is lexicographically greater than . /// Zero if is equal to . /// , , or /// is null. public static int LexicographicalCompare(IEnumerable sequence1, IEnumerable sequence2, IComparer comparer) { if (sequence1 == null) throw new ArgumentNullException("sequence1"); if (sequence2 == null) throw new ArgumentNullException("sequence2"); if (comparer == null) throw new ArgumentNullException("comparer"); using (IEnumerator enum1 = sequence1.GetEnumerator(), enum2 = sequence2.GetEnumerator()) { bool continue1, continue2; for (; ; ) { continue1 = enum1.MoveNext(); continue2 = enum2.MoveNext(); if (!continue1 || !continue2) break; int compare = comparer.Compare(enum1.Current, enum2.Current); if (compare != 0) return compare; } // If both continue1 and continue2 are false, we reached the end of both sequences at the same // time and the sequences are equal. Otherwise, the shorter sequence is considered first. if (continue1 == continue2) return 0; else if (continue1) return 1; else return -1; } } #endregion Sorting #region Comparers/Comparison utilities /// /// A private class used by the LexicographicalComparer method to compare sequences /// (IEnumerable) of T by there Lexicographical ordering. /// [Serializable] private class LexicographicalComparerClass : IComparer> { readonly IComparer itemComparer; /// /// Creates a new instance that comparer sequences of T by their lexicographical /// ordered. /// /// The IComparer used to compare individual items of type T. public LexicographicalComparerClass(IComparer itemComparer) { this.itemComparer = itemComparer; } public int Compare(IEnumerable x, IEnumerable y) { return LexicographicalCompare(x, y, itemComparer); } // For comparing this comparer to others. public override bool Equals(object obj) { if (obj is LexicographicalComparerClass) return this.itemComparer.Equals(((LexicographicalComparerClass)obj).itemComparer); else return false; } public override int GetHashCode() { return itemComparer.GetHashCode(); } } /// /// Creates an IComparer instance that can be used for comparing ordered /// sequences of type T; that is IEnumerable<Tgt;. This comparer can be used /// for collections or algorithms that use sequences of T as an item type. The Lexicographical /// ordered of sequences is for comparison. /// /// T must implement either IComparable<T> and this implementation is used /// to compare the items. /// At IComparer<IEnumerable<T>> that compares sequences of T. public static IComparer> GetLexicographicalComparer() where T: IComparable { return GetLexicographicalComparer(Comparer.Default); } /// /// Creates an IComparer instance that can be used for comparing ordered /// sequences of type T; that is IEnumerable<Tgt;. This comparer can be uses /// for collections or algorithms that use sequences of T as an item type. The Lexicographics /// ordered of sequences is for comparison. /// /// A comparer instance used to compare individual items of type T. /// At IComparer<IEnumerable<T>> that compares sequences of T. public static IComparer> GetLexicographicalComparer(IComparer comparer) { if (comparer == null) throw new ArgumentNullException("comparer"); return new LexicographicalComparerClass(comparer); } /// /// Creates an IComparer instance that can be used for comparing ordered /// sequences of type T; that is IEnumerable<Tgt;. This comparer can be uses /// for collections or algorithms that use sequences of T as an item type. The Lexicographics /// ordered of sequences is for comparison. /// /// A comparison delegate used to compare individual items of type T. /// At IComparer<IEnumerable<T>> that compares sequences of T. public static IComparer> GetLexicographicalComparer(Comparison comparison) { if (comparison == null) throw new ArgumentNullException("comparison"); return new LexicographicalComparerClass(Comparers.ComparerFromComparison(comparison)); } /// /// An IComparer instance that can be used to reverse the sense of /// a wrapped IComparer instance. /// [Serializable] private class ReverseComparerClass : IComparer { readonly IComparer comparer; /// /// /// The comparer to reverse. public ReverseComparerClass(IComparer comparer) { this.comparer = comparer; } public int Compare(T x, T y) { return - comparer.Compare(x, y); } // For comparing this comparer to others. public override bool Equals(object obj) { if (obj is ReverseComparerClass) return this.comparer.Equals(((ReverseComparerClass)obj).comparer); else return false; } public override int GetHashCode() { return comparer.GetHashCode(); } } /// /// Reverses the order of comparison of an IComparer<T>. The resulting comparer can be used, /// for example, to sort a collection in descending order. Equality and hash codes are unchanged. /// /// The type of items thta are being compared. /// The comparer to reverse. /// An IComparer<T> that compares items in the reverse order of . /// is null. public static IComparer GetReverseComparer(IComparer comparer) { if (comparer == null) throw new ArgumentNullException("comparer"); return new ReverseComparerClass(comparer); } /// /// A class, implementing IEqualityComparer<T>, that compares objects /// for object identity only. Only Equals and GetHashCode can be used; /// this implementation is not appropriate for ordering. /// [Serializable] private class IdentityComparer : IEqualityComparer where T:class { public bool Equals(T x, T y) { return (x == y); } public int GetHashCode(T obj) { return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(obj); } // For comparing two IComparers to see if they compare the same thing. public override bool Equals(object obj) { return (obj != null && obj is IdentityComparer); } // For comparing two IComparers to see if they compare the same thing. public override int GetHashCode() { return 0x7143DDEF; } } /// /// Gets an IEqualityComparer<T> instance that can be used to compare objects /// of type T for object identity only. Two objects compare equal only if they /// are references to the same object. /// /// An IEqualityComparer<T> instance for identity comparison. public static IEqualityComparer GetIdentityComparer() where T : class { return new IdentityComparer(); } /// /// Reverses the order of comparison of an Comparison<T>. The resulting comparison can be used, /// for example, to sort a collection in descending order. /// /// The type of items that are being compared. /// The comparison to reverse. /// A Comparison<T> that compares items in the reverse order of . /// is null. public static Comparison GetReverseComparison(Comparison comparison) { if (comparison == null) throw new ArgumentNullException("comparison"); return delegate(T x, T y) { return -comparison(x, y); }; } /// /// Given a comparison delegate that compares two items of type T, gets an /// IComparer<T> instance that performs the same comparison. /// /// The comparison delegate to use. /// An IComparer<T> that performs the same comparing operation /// as . public static IComparer GetComparerFromComparison(Comparison comparison) { if (comparison == null) throw new ArgumentNullException("comparison"); return Comparers.ComparerFromComparison(comparison); } /// /// Given in IComparer<T> instenace that comparers two items from type T, /// gets a Comparison delegate that performs the same comparison. /// /// The IComparer<T> instance to use. /// A Comparison<T> delegate that performans the same comparing /// operation as . public static Comparison GetComparisonFromComparer(IComparer comparer) { if (comparer == null) throw new ArgumentNullException("comparer"); return comparer.Compare; } /// /// A private class used to implement GetCollectionEqualityComparer(). This /// class implements IEqualityComparer<IEnumerable<T>gt; to compare /// two enumerables for equality, where order is significant. /// [Serializable] private class CollectionEqualityComparer : IEqualityComparer> { private readonly IEqualityComparer equalityComparer; public CollectionEqualityComparer(IEqualityComparer equalityComparer) { this.equalityComparer = equalityComparer; } public bool Equals(IEnumerable x, IEnumerable y) { return Algorithms.EqualCollections(x, y, equalityComparer); } public int GetHashCode(IEnumerable obj) { int hash = 0x374F293E; foreach (T t in obj) { int itemHash = Util.GetHashCode(t, equalityComparer); hash += itemHash; hash = (hash << 9) | (hash >> 23); } return hash & 0x7FFFFFFF; } } /// /// Gets an IEqualityComparer<IEnumerable<T>> implementation /// that can be used to compare collections of elements (of type T). Two collections /// of T's are equal if they have the same number of items, and corresponding /// items are equal, considered in order. This is the same notion of equality as /// in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer<IEnumerable<T>> implementation. /// /// /// The following code creates a Dictionary where the keys are a collection of strings. /// /// Dictionary<IEnumerable<string>, int> = /// new Dictionary<IEnumerable<string>, int>(Algorithms.GetCollectionEqualityComparer<string>()); /// /// /// IEqualityComparer<IEnumerable<T>> implementation suitable for /// comparing collections of T for equality. /// public static IEqualityComparer> GetCollectionEqualityComparer() { return GetCollectionEqualityComparer(EqualityComparer.Default); } /// /// Gets an IEqualityComparer<IEnumerable<T>> implementation /// that can be used to compare collections of elements (of type T). Two collections /// of T's are equal if they have the same number of items, and corresponding /// items are equal, considered in order. This is the same notion of equality as /// in Algorithms.EqualCollections, but encapsulated in an IEqualityComparer<IEnumerable<T>> implementation. /// An IEqualityComparer<T> is used to determine if individual T's are equal /// /// /// The following code creates a Dictionary where the keys are a collection of strings, compared in a case-insensitive way /// /// Dictionary<IEnumerable<string>, int> = /// new Dictionary<IEnumerable<string>, int>(Algorithms.GetCollectionEqualityComparer<string>(StringComparer.CurrentCultureIgnoreCase)); /// /// /// An IEqualityComparer<T> implementation used to compare individual T's. /// IEqualityComparer<IEnumerable<T>> implementation suitable for /// comparing collections of T for equality. /// public static IEqualityComparer> GetCollectionEqualityComparer(IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); return new CollectionEqualityComparer(equalityComparer); } /// /// A private class used to implement GetSetEqualityComparer(). This /// class implements IEqualityComparer<IEnumerable<T>gt; to compare /// two enumerables for equality, where order is not significant. /// [Serializable] private class SetEqualityComparer : IEqualityComparer> { private readonly IEqualityComparer equalityComparer; public SetEqualityComparer(IEqualityComparer equalityComparer) { this.equalityComparer = equalityComparer; } public bool Equals(IEnumerable x, IEnumerable y) { return Algorithms.EqualSets(x, y, equalityComparer); } public int GetHashCode(IEnumerable obj) { int hash = 0x624F273C; foreach (T t in obj) { int itemHash = Util.GetHashCode(t, equalityComparer); hash += itemHash; } return hash & 0x7FFFFFFF; } } /// /// Gets an IEqualityComparer<IEnumerable<T>> implementation /// that can be used to compare collections of elements (of type T). Two collections /// of T's are equal if they have the same number of items, and corresponding /// items are equal, without regard to order. This is the same notion of equality as /// in Algorithms.EqualSets, but encapsulated in an IEqualityComparer<IEnumerable<T>> implementation. /// An IEqualityComparer<T> is used to determine if individual T's are equal /// /// /// The following code creates a Dictionary where the keys are a set of strings, without regard to order /// /// Dictionary<IEnumerable<string>, int> = /// new Dictionary<IEnumerable<string>, int>(Algorithms.GetSetEqualityComparer<string>(StringComparer.CurrentCultureIgnoreCase)); /// /// /// IEqualityComparer<IEnumerable<T>> implementation suitable for /// comparing collections of T for equality, without regard to order. /// public static IEqualityComparer> GetSetEqualityComparer() { return GetSetEqualityComparer(EqualityComparer.Default); } /// /// Gets an IEqualityComparer<IEnumerable<T>> implementation /// that can be used to compare collections of elements (of type T). Two collections /// of T's are equal if they have the same number of items, and corresponding /// items are equal, without regard to order. This is the same notion of equality as /// in Algorithms.EqualSets, but encapsulated in an IEqualityComparer<IEnumerable<T>> implementation. /// /// /// The following code creates a Dictionary where the keys are a set of strings, without regard to order /// /// Dictionary<IEnumerable<string>, int> = /// new Dictionary<IEnumerable<string>, int>(Algorithms.GetSetEqualityComparer<string>()); /// /// /// An IEqualityComparer<T> implementation used to compare individual T's. /// IEqualityComparer<IEnumerable<T>> implementation suitable for /// comparing collections of T for equality, without regard to order. /// public static IEqualityComparer> GetSetEqualityComparer(IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); return new SetEqualityComparer(equalityComparer); } #endregion Sorting #region Predicate operations /// /// Determines if a collection contains any item that satisfies the condition /// defined by . /// /// The collection to check all the items in. /// A delegate that defines the condition to check for. /// True if the collection contains one or more items that satisfy the condition /// defined by . False if the collection does not contain /// an item that satisfies . public static bool Exists(IEnumerable collection, Predicate predicate) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); foreach (T item in collection) { if (predicate(item)) return true; } return false; } /// /// Determines if all of the items in the collection satisfy the condition /// defined by . /// /// The collection to check all the items in. /// A delegate that defines the condition to check for. /// True if all of the items in the collection satisfy the condition /// defined by , or if the collection is empty. False if one or more items /// in the collection do not satisfy . public static bool TrueForAll(IEnumerable collection, Predicate predicate) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); foreach (T item in collection) { if (!predicate(item)) return false; } return true; } /// /// Counts the number of items in the collection that satisfy the condition /// defined by . /// /// The collection to count items in. /// A delegate that defines the condition to check for. /// The number of items in the collection that satisfy . public static int CountWhere(IEnumerable collection, Predicate predicate) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); int count = 0; foreach (T item in collection) { if (predicate(item)) ++count; } return count; } /// /// Removes all the items in the collection that satisfy the condition /// defined by . /// /// If the collection if an array or implements IList<T>, an efficient algorithm that /// compacts items is used. If not, then ICollection<T>.Remove is used /// to remove items from the collection. If the collection is an array or fixed-size list, /// the non-removed elements are placed, in order, at the beginning of /// the list, and the remaining list items are filled with a default value (0 or null). /// The collection to check all the items in. /// A delegate that defines the condition to check for. /// Returns a collection of the items that were removed. This collection contains the /// items in the same order that they orginally appeared in . public static ICollection RemoveWhere(ICollection collection, Predicate predicate) { if (collection == null) throw new ArgumentNullException("collection"); if (predicate == null) throw new ArgumentNullException("predicate"); if (collection is T[]) collection = new ArrayWrapper((T[])collection); if (collection.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "collection"); IList list = collection as IList; if (list != null) { T item; int i = -1, j = 0; int listCount = list.Count; List removed = new List(); // Remove item where predicate is true, compressing items to lower in the list. This is much more // efficient than the naive algorithm that uses IList.Remove(). while (j < listCount) { item = list[j]; if (predicate(item)) { removed.Add(item); } else { ++i; if (i != j) list[i] = item; } ++j; } ++i; if (i < listCount) { // remove items from the end. if (list is IList && ((IList)list).IsFixedSize) { // An array or similar. Null out the last elements. while (i < listCount) list[i++] = default(T); } else { // Normal list. while (i < listCount) { list.RemoveAt(listCount - 1); --listCount; } } } return removed; } else { // We have to copy all the items to remove to a List, because collections can't be modifed // during an enumeration. List removed = new List(); foreach (T item in collection) if (predicate(item)) removed.Add(item); foreach (T item in removed) collection.Remove(item); return removed; } } /// /// Convert a collection of items by applying a delegate to each item in the collection. The resulting collection /// contains the result of applying to each item in , in /// order. /// /// The type of items in the collection to convert. /// The type each item is being converted to. /// The collection of item being converted. /// A delegate to the method to call, passing each item in . /// The resulting collection from applying to each item in , in /// order. /// or is null. public static IEnumerable Convert(IEnumerable sourceCollection, Converter converter) { if (sourceCollection == null) throw new ArgumentNullException("sourceCollection"); if (converter == null) throw new ArgumentNullException("converter"); foreach (TSource sourceItem in sourceCollection) yield return converter(sourceItem); } /// /// Creates a delegate that converts keys to values by used a dictionary to map values. Keys /// that a not present in the dictionary are converted to the default value (zero or null). /// /// This delegate can be used as a parameter in Convert or ConvertAll methods to convert /// entire collections. /// The dictionary used to perform the conversion. /// A delegate to a method that converts keys to values. public static Converter GetDictionaryConverter(IDictionary dictionary) { return GetDictionaryConverter(dictionary, default(TValue)); } /// /// Creates a delegate that converts keys to values by used a dictionary to map values. Keys /// that a not present in the dictionary are converted to a supplied default value. /// /// This delegate can be used as a parameter in Convert or ConvertAll methods to convert /// entire collections. /// The dictionary used to perform the conversion. /// The result of the conversion for keys that are not present in the dictionary. /// A delegate to a method that converts keys to values. /// is null. public static Converter GetDictionaryConverter(IDictionary dictionary, TValue defaultValue) { if (dictionary == null) throw new ArgumentNullException("dictionary"); return delegate(TKey key) { TValue value; if (dictionary.TryGetValue(key, out value)) return value; else return defaultValue; }; } /// /// Performs the specified action on each item in a collection. /// /// The collection to process. /// An Action delegate which is invoked for each item in . public static void ForEach(IEnumerable collection, Action action) { if (collection == null) throw new ArgumentNullException("collection"); if (action == null) throw new ArgumentNullException("action"); foreach (T item in collection) action(item); } /// /// Partition a list or array based on a predicate. After partitioning, all items for which /// the predicate returned true precede all items for which the predicate returned false. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to partition. /// A delegate that defines the partitioning condition. /// The index of the first item in the second half of the partition; i.e., the first item for /// which returned false. If the predicate was true for all items /// in the list, list.Count is returned. public static int Partition(IList list, Predicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); // Move from opposite ends of the list, swapping when necessary. int i = 0, j = list.Count - 1; for (;;) { while (i <= j && predicate(list[i])) ++i; while (i <= j && !predicate(list[j])) --j; if (i > j) break; else { T temp = list[i]; list[i] = list[j]; list[j] = temp; ++i; --j; } } return i; } /// /// Partition a list or array based on a predicate. After partitioning, all items for which /// the predicate returned true precede all items for which the predicate returned false. /// The partition is stable, which means that if items X and Y have the same result from /// the predicate, and X precedes Y in the original list, X will precede Y in the /// partitioned list. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to partition. /// A delegate that defines the partitioning condition. /// The index of the first item in the second half of the partition; i.e., the first item for /// which returned false. If the predicate was true for all items /// in the list, list.Count is returned. public static int StablePartition(IList list, Predicate predicate) { if (list == null) throw new ArgumentNullException("list"); if (predicate == null) throw new ArgumentNullException("predicate"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int listCount = list.Count; if (listCount == 0) return 0; T[] temp = new T[listCount]; // Copy from list to temp buffer, true items at fron, false item (in reverse order) at back. int i = 0, j = listCount - 1; foreach (T item in list) { if (predicate(item)) temp[i++] = item; else temp[j--] = item; } // Copy back to the original list. int index = 0; while (index < i) { list[index] = temp[index]; index++; } j = listCount - 1; while (index < listCount) list[index++] = temp[j--]; return i; } #endregion Predicate operations #region Miscellaneous operations on IEnumerable /// /// Concatenates all the items from several collections. The collections need not be of the same type, but /// must have the same item type. /// /// The set of collections to concatenate. In many languages, this parameter /// can be specified as several individual parameters. /// An IEnumerable that enumerates all the items in each of the collections, in order. public static IEnumerable Concatenate(params IEnumerable[] collections) { if (collections == null) throw new ArgumentNullException("collections"); foreach (IEnumerable coll in collections) { foreach (T item in coll) yield return item; } } /// /// Determines if the two collections contain equal items in the same order. The two collections do not need /// to be of the same type; it is permissible to compare an array and an OrderedBag, for instance. /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The type of items in the collections. /// The first collection to compare. /// The second collection to compare. /// True if the collections have equal items in the same order. If both collections are empty, true is returned. public static bool EqualCollections(IEnumerable collection1, IEnumerable collection2) { return EqualCollections(collection1, collection2, EqualityComparer.Default); } /// /// Determines if the two collections contain equal items in the same order. The passed /// instance of IEqualityComparer<T> is used for determining if two items are equal. /// /// The type of items in the collections. /// The first collection to compare. /// The second collection to compare. /// The IEqualityComparer<T> used to compare items for equality. /// Only the Equals member function of this interface is called. /// True if the collections have equal items in the same order. If both collections are empty, true is returned. /// , , or /// is null. public static bool EqualCollections(IEnumerable collection1, IEnumerable collection2, IEqualityComparer equalityComparer) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); using (IEnumerator enum1 = collection1.GetEnumerator(), enum2 = collection2.GetEnumerator()) { bool continue1, continue2; for (; ; ) { continue1 = enum1.MoveNext(); continue2 = enum2.MoveNext(); if (!continue1 || !continue2) break; if (!equalityComparer.Equals(enum1.Current, enum2.Current)) return false; // the two items are not equal. } // If both continue1 and continue2 are false, we reached the end of both sequences at the same // time and found success. If one is true and one is false, the sequences were of difference lengths -- failure. return (continue1 == continue2); } } /// /// Determines if the two collections contain "equal" items in the same order. The passed /// BinaryPredicate is used to determine if two items are "equal". /// /// Since an arbitrary BinaryPredicate is passed to this function, what is being tested /// for need not be equality. For example, the following code determines if each integer in /// list1 is less than or equal to the corresponding integer in list2. /// /// List<int> list1, list2; /// if (EqualCollections(list1, list2, delegate(int x, int y) { return x <= y; }) { /// // the check is true... /// } /// /// /// The type of items in the collections. /// The first collection to compare. /// The second collection to compare. /// The BinaryPredicate used to compare items for "equality". /// This predicate can compute any relation between two items; it need not represent equality or an equivalence relation. /// True if returns true for each corresponding pair of /// items in the two collections. If both collections are empty, true is returned. /// , , or /// is null. public static bool EqualCollections(IEnumerable collection1, IEnumerable collection2, BinaryPredicate predicate) { if (collection1 == null) throw new ArgumentNullException("collection1"); if (collection2 == null) throw new ArgumentNullException("collection2"); if (predicate == null) throw new ArgumentNullException("predicate"); using (IEnumerator enum1 = collection1.GetEnumerator(), enum2 = collection2.GetEnumerator()) { bool continue1, continue2; for (; ; ) { continue1 = enum1.MoveNext(); continue2 = enum2.MoveNext(); if (!continue1 || !continue2) break; if (!predicate(enum1.Current, enum2.Current)) return false; // the two items are not equal. } // If both continue1 and continue2 are false, we reached the end of both sequences at the same // time and found success. If one is true and one is false, the sequences were of difference lengths -- failure. return (continue1 == continue2); } } /// /// Create an array with the items in a collection. /// /// If implements ICollection<T>T, then /// ICollection<T>.CopyTo() is used to fill the array. Otherwise, the IEnumerable<T>.GetEnumerator() /// is used to fill the array. /// Element type of the collection. /// Collection to create array from. /// An array with the items from the collection, in enumeration order. /// is null. public static T[] ToArray(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); ICollection coll = collection as ICollection; if (coll != null) { // Use ICollection methods to do it more efficiently. T[] array = new T[coll.Count]; coll.CopyTo(array, 0); return array; } else { // We can't allocate the correct size array now, because IEnumerable doesn't // have a Count property. We could enumerate twice, once to count and once // to copy. Or we could enumerate once, copying to a List, then copy the list // to the correct size array. The latter algorithm seems more efficient, although // it allocates extra memory for the list which is then discarded. List list = new List(collection); return list.ToArray(); } } /// /// Count the number of items in an IEnumerable<T> collection. If /// a more specific collection type is being used, it is more efficient to use /// the Count property, if one is provided. /// /// If the collection implements ICollection<T>, this method /// simply returns ICollection<T>.Count. Otherwise, it enumerates all items /// and counts them. /// The collection to count items in. /// The number of items in the collection. /// is null. public static int Count(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); // If it's really an ICollection, use that Count property as it is much faster. if (collection is ICollection) return ((ICollection)collection).Count; // Traverse the collection and count the elements. int count = 0; foreach (T item in collection) ++count; return count; } /// /// Counts the number of items in the collection that are equal to . /// /// The default sense of equality for T is used, as defined by T's /// implementation of IComparable<T>.Equals or object.Equals. /// The collection to count items in. /// The item to compare to. /// The number of items in the collection that are equal to . public static int CountEqual(IEnumerable collection, T find) { return CountEqual(collection, find, EqualityComparer.Default); } /// /// Counts the number of items in the collection that are equal to . /// /// The collection to count items in. /// The item to compare to. /// The comparer to use to determine if two items are equal. Only the Equals /// member function will be called. /// The number of items in the collection that are equal to . /// or /// is null. public static int CountEqual(IEnumerable collection, T find, IEqualityComparer equalityComparer) { if (collection == null) throw new ArgumentException("collection"); if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); int count = 0; foreach (T item in collection) { if (equalityComparer.Equals(item, find)) ++count; } return count; } /// /// Creates an IEnumerator that enumerates a given item times. /// /// /// The following creates a list consisting of 1000 copies of the double 1.0. /// /// List<double> list = new List<double>(Algorithms.NCopiesOf(1000, 1.0)); /// /// The number of times to enumerate the item. /// The item that should occur in the enumeration. /// An IEnumerable<T> that yields copies /// of . /// The argument is less than zero. public static IEnumerable NCopiesOf(int n, T item) { if (n < 0) throw new ArgumentOutOfRangeException("n", n, Strings.ArgMustNotBeNegative); while (n-- > 0) { yield return item; } } #endregion Miscellaneous operations on IEnumerable #region Miscellaneous operations on IList /// /// Replaces each item in a list with a given value. The list does not change in size. /// /// The type of items in the list. /// The list to modify. /// The value to fill with. /// is a read-only list. /// is null. public static void Fill(IList list, T value) { if (list == null) throw new ArgumentNullException("list"); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int count = list.Count; for (int i = 0; i < count; ++i) { list[i] = value; } } /// /// Replaces each item in a array with a given value. /// /// The array to modify. /// The value to fill with. /// is null. public static void Fill(T[] array, T value) { if (array == null) throw new ArgumentNullException("array"); for (int i = 0; i < array.Length; ++i) { array[i] = value; } } /// /// Replaces each item in a part of a list with a given value. /// /// The type of items in the list. /// The list to modify. /// The index at which to start filling. The first index in the list has index 0. /// The number of items to fill. /// The value to fill with. /// is a read-only list. /// or is negative, or /// + is greater than .Count. /// is null. public static void FillRange(IList list, int start, int count, T value) { if (list == null) throw new ArgumentNullException("list"); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); if (count == 0) return; if (start < 0 || start >= list.Count) throw new ArgumentOutOfRangeException("start"); if (count < 0 || count > list.Count || start > list.Count - count) throw new ArgumentOutOfRangeException("count"); for (int i = start; i < count + start; ++i) { list[i] = value; } } /// /// Replaces each item in a part of a array with a given value. /// /// The array to modify. /// The index at which to start filling. The first index in the array has index 0. /// The number of items to fill. /// The value to fill with. /// or is negative, or /// + is greater than .Length. /// is null. public static void FillRange(T[] array, int start, int count, T value) { if (array == null) throw new ArgumentNullException("array"); if (count == 0) return; if (start < 0 || start >= array.Length) throw new ArgumentOutOfRangeException("start"); if (count < 0 || count > array.Length || start > array.Length - count) throw new ArgumentOutOfRangeException("count"); for (int i = start; i < count + start; ++i) { array[i] = value; } } /// /// Copies all of the items from the collection to the list , starting /// at the index . If necessary, the size of the destination list is expanded. /// /// The collection that provide the source items. /// The list to store the items into. /// The index to begin copying items to. /// is negative or /// greater than .Count. /// or is null. public static void Copy(IEnumerable source, IList dest, int destIndex) { Copy(source, dest, destIndex, int.MaxValue); } /// /// Copies all of the items from the collection to the array , starting /// at the index . /// /// The collection that provide the source items. /// The array to store the items into. /// The index to begin copying items to. /// is negative or /// greater than .Length. /// or is null. /// The collection has more items than will fit into the array. In this case, the array /// has been filled with as many items as fit before the exception is thrown. public static void Copy(IEnumerable source, T[] dest, int destIndex) { if (source == null) throw new ArgumentNullException("source"); if (dest == null) throw new ArgumentNullException("dest"); if (destIndex < 0 || destIndex > dest.Length) throw new ArgumentOutOfRangeException("destIndex"); using (IEnumerator sourceEnum = source.GetEnumerator()) { // Overwrite items to the end of the destination array. If we hit the end, throw. while (sourceEnum.MoveNext()) { if (destIndex >= dest.Length) throw new ArgumentException(Strings.ArrayTooSmall, "dest"); dest[destIndex++] = sourceEnum.Current; } } } /// /// Copies at most items from the collection to the list , starting /// at the index . If necessary, the size of the destination list is expanded. The source collection must not be /// the destination list or part thereof. /// /// The collection that provide the source items. /// The list to store the items into. /// The index to begin copying items to. /// The maximum number of items to copy. /// is negative or /// greater than .Count /// is negative. /// or is null. public static void Copy(IEnumerable source, IList dest, int destIndex, int count) { if (source == null) throw new ArgumentNullException("source"); if (dest == null) throw new ArgumentNullException("dest"); if (dest.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "dest"); int destCount = dest.Count; if (destIndex < 0 || destIndex > destCount) throw new ArgumentOutOfRangeException("destIndex"); if (count < 0) throw new ArgumentOutOfRangeException("count"); using (IEnumerator sourceEnum = source.GetEnumerator()) { // First, overwrite items to the end of the destination list. while (destIndex < destCount && count > 0 && sourceEnum.MoveNext()) { dest[destIndex++] = sourceEnum.Current; --count; } // Second, insert items until done. while (count > 0 && sourceEnum.MoveNext()) { dest.Insert(destCount++, sourceEnum.Current); --count; } } } /// /// Copies at most items from the collection to the array , starting /// at the index . The source collection must not be /// the destination array or part thereof. /// /// The collection that provide the source items. /// The array to store the items into. /// The index to begin copying items to. /// The maximum number of items to copy. The array must be large enought to fit this number of items. /// is negative or /// greater than .Length. /// is negative or + /// is greater than .Length. /// or is null. public static void Copy(IEnumerable source, T[] dest, int destIndex, int count) { if (source == null) throw new ArgumentNullException("source"); if (dest == null) throw new ArgumentNullException("dest"); int destCount = dest.Length; if (destIndex < 0 || destIndex > destCount) throw new ArgumentOutOfRangeException("destIndex"); if (count < 0 || destIndex + count > destCount) throw new ArgumentOutOfRangeException("count"); using (IEnumerator sourceEnum = source.GetEnumerator()) { // First, overwrite items to the end of the destination array. while (destIndex < destCount && count > 0 && sourceEnum.MoveNext()) { dest[destIndex++] = sourceEnum.Current; --count; } } } /// /// Copies items from the list , starting at the index , /// to the list , starting at the index . If necessary, the size of the destination list is expanded. /// The source and destination lists may be the same. /// /// The collection that provide the source items. /// The index within to begin copying items from. /// The list to store the items into. /// The index within to begin copying items to. /// The maximum number of items to copy. /// is negative or /// greater than .Count /// is negative or /// greater than .Count /// is negative or too large. /// or is null. public static void Copy(IList source, int sourceIndex, IList dest, int destIndex, int count) { if (source == null) throw new ArgumentNullException("source"); if (dest == null) throw new ArgumentNullException("dest"); if (dest.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "dest"); int sourceCount = source.Count; int destCount = dest.Count; if (sourceIndex < 0 || sourceIndex >= sourceCount) throw new ArgumentOutOfRangeException("sourceIndex"); if (destIndex < 0 || destIndex > destCount) throw new ArgumentOutOfRangeException("destIndex"); if (count < 0) throw new ArgumentOutOfRangeException("count"); if (count > sourceCount - sourceIndex) count = sourceCount - sourceIndex; if (source == dest && sourceIndex > destIndex) { while (count > 0) { dest[destIndex++] = source[sourceIndex++]; --count; } } else { int si, di; // First, insert any items needed at the end if (destIndex + count > destCount) { int numberToInsert = destIndex + count - destCount; si = sourceIndex + (count - numberToInsert); di = destCount; count -= numberToInsert; while (numberToInsert > 0) { dest.Insert(di++, source[si++]); --numberToInsert; } } // Do the copy, from end to beginning in case of overlap. si = sourceIndex + count - 1; di = destIndex + count - 1; while (count > 0) { dest[di--] = source[si--]; --count; } } } /// /// Copies items from the list or array , starting at the index , /// to the array , starting at the index . /// The source may be the same as the destination array. /// /// The list or array that provide the source items. /// The index within to begin copying items from. /// The array to store the items into. /// The index within to begin copying items to. /// The maximum number of items to copy. The destination array must be large enough to hold this many items. /// is negative or /// greater than .Count /// is negative or /// greater than .Length /// is negative or too large. /// or is null. public static void Copy(IList source, int sourceIndex, T[] dest, int destIndex, int count) { if (source == null) throw new ArgumentNullException("source"); if (dest == null) throw new ArgumentNullException("dest"); int sourceCount = source.Count; int destCount = dest.Length; if (sourceIndex < 0 || sourceIndex >= sourceCount) throw new ArgumentOutOfRangeException("sourceIndex"); if (destIndex < 0 || destIndex > destCount) throw new ArgumentOutOfRangeException("destIndex"); if (count < 0 || destIndex + count > destCount) throw new ArgumentOutOfRangeException("count"); if (count > sourceCount - sourceIndex) count = sourceCount - sourceIndex; if (source is T[]) { // Array.Copy is probably faster, and also handles any overlapping issues. Array.Copy((T[])source, sourceIndex, dest, destIndex, count); } else { int si = sourceIndex; int di = destIndex; while (count > 0) { dest[di++] = source[si++]; --count; } } } /// /// Reverses a list and returns the reversed list, without changing the source list. /// /// The list to reverse. /// A collection that contains the items from in reverse order. /// is null. public static IEnumerable Reverse(IList source) { if (source == null) throw new ArgumentNullException("source"); for (int i = source.Count - 1; i >= 0; --i) yield return source[i]; } /// /// Reverses a list or array in place. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to reverse. /// is null. /// is read only. public static void ReverseInPlace(IList list) { if (list == null) throw new ArgumentNullException("list"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int i, j; i = 0; j = list.Count - 1; while (i < j) { T temp = list[i]; list[i] = list[j]; list[j] = temp; i++; j--; } } /// /// Rotates a list and returns the rotated list, without changing the source list. /// /// The list to rotate. /// The number of elements to rotate. This value can be positive or negative. /// For example, rotating by positive 3 means that source[3] is the first item in the returned collection. /// Rotating by negative 3 means that source[source.Count - 3] is the first item in the returned collection. /// A collection that contains the items from in rotated order. /// is null. public static IEnumerable Rotate(IList source, int amountToRotate) { if (source == null) throw new ArgumentNullException("source"); int count = source.Count; if (count != 0) { amountToRotate = amountToRotate % count; if (amountToRotate < 0) amountToRotate += count; // Do it in two parts. for (int i = amountToRotate; i < count; ++i) yield return source[i]; for (int i = 0; i < amountToRotate; ++i) yield return source[i]; } } /// /// Rotates a list or array in place. /// /// Although arrays cast to IList<T> are normally read-only, this method /// will work correctly and modify an array passed as . /// The list or array to rotate. /// The number of elements to rotate. This value can be positive or negative. /// For example, rotating by positive 3 means that list[3] is the first item in the resulting list. /// Rotating by negative 3 means that list[list.Count - 3] is the first item in the resulting list. /// is null. public static void RotateInPlace(IList list, int amountToRotate) { if (list == null) throw new ArgumentNullException("list"); if (list is T[]) list = new ArrayWrapper((T[])list); if (list.IsReadOnly) throw new ArgumentException(Strings.ListIsReadOnly, "list"); int count = list.Count; if (count != 0) { amountToRotate = amountToRotate % count; if (amountToRotate < 0) amountToRotate += count; int itemsLeft = count; int indexStart = 0; while (itemsLeft > 0) { // Rotate an orbit of items through the list. If itemsLeft is relatively prime // to count, this will rotate everything. If not, we need to do this several times until // all items have been moved. int index = indexStart; T itemStart = list[indexStart]; for (;;) { --itemsLeft; int nextIndex = index + amountToRotate; if (nextIndex >= count) nextIndex -= count; if (nextIndex == indexStart) { list[index] = itemStart; break; } else { list[index] = list[nextIndex]; index = nextIndex; } } // Move to the next orbit. ++indexStart; } } } #endregion Miscellaneous operations on IList } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/AssemblyInfo.cs000066400000000000000000000036721446222606700265540ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System.Reflection; using System.Runtime.CompilerServices; // Make internals of this library available to the unit test framework. // NOTE: If you are building the PowerCollections with your own key you will need to change the public key below. [assembly: InternalsVisibleTo("Wintellect.PowerCollections.Tests, PublicKey = " + "0024000004800000940000000602000000240000525341310004000001000100094e056116d23654c58fb4438f80555edc1ba42f47c23ac2cf50585aa5040edda143d88717cc9405293e50e04a8b7ba419a967f7cd7a9d453b23461bbb6dd5a7df6706de63494db86f7607b7b96551f7f494375296678333f4cb606a7a1e32603cd032f369533767e919d07cbc0a3684dd842949660401f623a1d39a8b395ce9")] // // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. // [assembly: AssemblyTitle("Wintellect.PowerCollections")] [assembly: AssemblyDescription("The Power Collections group of collection classes.")] #if DEBUG [assembly: AssemblyConfiguration("DEBUG")] #else [assembly: AssemblyConfiguration("")] #endif [assembly: AssemblyCompany("Wintellect")] [assembly: AssemblyProduct("Power Collections")] [assembly: AssemblyCopyright("Copyright (c) 2004-2007, Wintellect")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.*")] quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Bag.cs000066400000000000000000001350501446222606700246460ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// Bag<T> is a collection that contains items of type T. /// Unlike a Set, duplicate items (items that compare equal to each other) are allowed in an Bag. /// /// ///

The items are compared in one of two ways. If T implements IComparable<T> /// then the Equals method of that interface will be used to compare items, otherwise the Equals /// method from Object will be used. Alternatively, an instance of IComparer<T> can be passed /// to the constructor to use to compare items.

///

Bag is implemented as a hash table. Inserting, deleting, and looking up an /// an element all are done in approximately constant time, regardless of the number of items in the bag.

///

When multiple equal items are stored in the bag, they are stored as a representative item and a count. /// If equal items can be distinguished, this may be noticable. For example, if a case-insensitive /// comparer is used with a Bag<string>, and both "hello", and "HELLO" are added to the bag, then the /// bag will appear to contain two copies of "hello" (the representative item).

///

is similar, but uses comparison instead of hashing, maintain /// the items in sorted order, and stores distinct copies of items that compare equal.

///
/// [Serializable] public class Bag : CollectionBase, ICloneable { // The comparer used to compare KeyValuePairs. Equals and GetHashCode are used. private readonly IEqualityComparer> equalityComparer; // The comparer used to compare items. Kept just for the Comparer property. private readonly IEqualityComparer keyEqualityComparer; // The hash that actually does the work of storing the items. Each item is // stored as a representative item, and a count. private Hash> hash; // The total number of items stored in the bag. private int count; /// /// Helper function to create a new KeyValuePair struct with an item and a count. /// /// The item. /// The number of appearances. /// A new KeyValuePair. private static KeyValuePair NewPair(T item, int count) { KeyValuePair pair = new KeyValuePair(item, count); return pair; } /// /// Helper function to create a new KeyValuePair struct with a count of zero. /// /// The item. /// A new KeyValuePair. private static KeyValuePair NewPair(T item) { KeyValuePair pair = new KeyValuePair(item, 0); return pair; } #region Constructors /// /// Creates a new Bag. /// /// /// Items that are null are permitted. /// public Bag(): this(EqualityComparer.Default) { } /// /// Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object /// will be used to compare items in this bag for equality. /// /// An instance of IEqualityComparer<T> that will be used to compare items. public Bag(IEqualityComparer equalityComparer) { if (equalityComparer == null) throw new ArgumentNullException("equalityComparer"); this.keyEqualityComparer = equalityComparer; this.equalityComparer = Comparers.EqualityComparerKeyValueFromComparerKey(equalityComparer); this.hash = new Hash>(this.equalityComparer); } /// /// Creates a new Bag. The bag is /// initialized with all the items in the given collection. /// /// /// Items that are null are permitted. /// /// A collection with items to be placed into the Bag. public Bag(IEnumerable collection): this(collection, EqualityComparer.Default) { } /// /// Creates a new Bag. The Equals and GetHashCode methods of the passed comparison object /// will be used to compare items in this bag. The bag is /// initialized with all the items in the given collection. /// /// A collection with items to be placed into the Bag. /// An instance of IEqualityComparer<T> that will be used to compare items. public Bag(IEnumerable collection, IEqualityComparer equalityComparer) : this(equalityComparer) { AddMany(collection); } /// /// Creates a new Bag given a comparer and a hash that contains the data. Used /// internally for Clone. /// /// IEqualityComparer for the bag. /// IEqualityComparer for the key. /// Data for the bag. /// Size of the bag. private Bag(IEqualityComparer> equalityComparer, IEqualityComparer keyEqualityComparer, Hash> hash, int count) { this.equalityComparer = equalityComparer; this.keyEqualityComparer = keyEqualityComparer; this.hash = hash; this.count = count; } #endregion Constructors #region Cloning /// /// Makes a shallow clone of this bag; i.e., if items of the /// bag are reference types, then they are not cloned. If T is a value type, /// then each element is copied as if by simple assignment. /// /// Cloning the bag takes time O(N), where N is the number of items in the bag. /// The cloned bag. object ICloneable.Clone() { return this.Clone(); } /// /// Makes a shallow clone of this bag; i.e., if items of the /// bag are reference types, then they are not cloned. If T is a value type, /// then each element is copied as if by simple assignment. /// /// Cloning the bag takes time O(N), where N is the number of unquie items in the bag. /// The cloned bag. public Bag Clone() { Bag newBag = new Bag(equalityComparer, keyEqualityComparer, hash.Clone(null), count); return newBag; } /// /// Makes a deep clone of this bag. A new bag is created with a clone of /// each element of this bag, by calling ICloneable.Clone on each element. If T is /// a value type, then each element is copied as if by simple assignment. /// /// If T is a reference type, it must implement /// ICloneable. Otherwise, an InvalidOperationException is thrown. /// Cloning the bag takes time O(N log N), where N is the number of items in the bag. /// The cloned bag. /// T is a reference type that does not implement ICloneable. public Bag CloneContents() { bool itemIsValueType; if (!Util.IsCloneableType(typeof(T), out itemIsValueType)) throw new InvalidOperationException(string.Format(Strings.TypeNotCloneable, typeof(T).FullName)); Hash> newHash = new Hash>(equalityComparer); // Clone each item, and add it to the new ordered bag. foreach (KeyValuePair pair in hash) { KeyValuePair newPair, dummy; T newKey; if (!itemIsValueType && pair.Key != null) newKey = (T)(((ICloneable)pair.Key).Clone()); else newKey = pair.Key; newPair = NewPair(newKey, pair.Value); newHash.Insert(newPair, true, out dummy); } return new Bag(equalityComparer, keyEqualityComparer, newHash, count); } #endregion Cloning #region Basic collection containment /// /// Returns the IEqualityComparer<T> used to compare items in this bag. /// /// If the bag was created using a comparer, that comparer is returned. Otherwise /// the default comparer for T (EqualityComparer<T>.Default) is returned. public IEqualityComparer Comparer { get { return keyEqualityComparer; } } /// /// Returns the number of items in the bag. /// /// The size of the bag is returned in constant time. /// The number of items in the bag. public sealed override int Count { get { return count; } } /// /// Returns the number of copies of in the bag. /// /// NumberOfCopies() takes approximately constant time, no matter how many items /// are stored in the bag. /// The item to search for in the bag. /// The number of items in the bag that compare equal to . public int NumberOfCopies(T item) { KeyValuePair foundPair; if (hash.Find(NewPair(item), false, out foundPair)) return foundPair.Value; else return 0; } /// /// Returns the representative item stored in the bag that is equal to /// the provided item. Also returns the number of copies of the item in the bag. /// /// Item to find in the bag. /// If one or more items equal to are present in the /// bag, returns the representative item. If no items equal to are stored in the bag, /// returns . /// The number of items equal to stored in the bag. public int GetRepresentativeItem(T item, out T representative) { KeyValuePair foundPair; if (hash.Find(NewPair(item), false, out foundPair)) { representative = foundPair.Key; return foundPair.Value; } else { representative = item; return 0; } } /// /// Returns an enumerator that enumerates all the items in the bag. /// If an item is present multiple times in the bag, the representative item is yielded by the /// enumerator multiple times. The order of enumeration is haphazard and may change. /// /// ///

Typically, this method is not called directly. Instead the "foreach" statement is used /// to enumerate the items, which uses this method implicitly.

///

If an item is added to or deleted from the bag while it is being enumerated, then /// the enumeration will end with an InvalidOperationException.

///

Enumeration all the items in the bag takes time O(N), where N is the number /// of items in the bag.

///
/// An enumerator for enumerating all the items in the Bag. public sealed override IEnumerator GetEnumerator() { foreach (KeyValuePair pair in hash) { for (int i = 0; i < pair.Value; ++i) yield return pair.Key; } } /// /// Determines if this bag contains an item equal to . The bag /// is not changed. /// /// Searching the bag for an item takes time O(log N), where N is the number of items in the bag. /// The item to search for. /// True if the bag contains . False if the bag does not contain . public sealed override bool Contains(T item) { KeyValuePair dummy; return hash.Find(NewPair(item), false, out dummy); } /// /// Enumerates all the items in the bag, but enumerates equal items /// just once, even if they occur multiple times in the bag. /// /// If the bag is changed while items are being enumerated, the /// enumeration will terminate with an InvalidOperationException. /// An IEnumerable<T> that enumerates the unique items. public IEnumerable DistinctItems() { foreach (KeyValuePair pair in hash) { yield return pair.Key; } } #endregion #region Adding elements /// /// Adds a new item to the bag. Since bags can contain duplicate items, the item /// is added even if the bag already contains an item equal to . In /// this case, the count of items for the representative item is increased by one, but the existing /// represetative item is unchanged. /// /// /// Adding an item takes approximately constant time, regardless of the number of items in the bag. /// The item to add to the bag. public sealed override void Add(T item) { KeyValuePair pair = NewPair(item, 1); KeyValuePair existing, newPair; if (! hash.Insert(pair, false, out existing)) { // The item already existed, so update the count instead. newPair = NewPair(existing.Key, existing.Value + 1); hash.Insert(newPair, true, out pair); } ++count; } // CONSIDER: add an example to the documentation below. /// /// Adds a new item to the bag. Since bags can contain duplicate items, the item /// is added even if the bag already contains an item equal to . In /// this case (unlike Add), the new item becomes the representative item. /// /// /// Adding an item takes approximately constant time, regardless of the number of items in the bag. /// The item to add to the bag. public void AddRepresentative(T item) { KeyValuePair pair = NewPair(item, 1); KeyValuePair existing, newPair; if (!hash.Insert(pair, false, out existing)) { // The item already existed, so update the count instead. newPair = NewPair(pair.Key, existing.Value + 1); hash.Insert(newPair, true, out pair); } ++count; } /// /// Changes the number of copies of an existing item in the bag, or adds the indicated number /// of copies of the item to the bag. /// /// /// Changing the number of copies takes approximately constant time, regardless of the number of items in the bag. /// The item to change the number of copies of. This may or may not already be present in the bag. /// The new number of copies of the item. public void ChangeNumberOfCopies(T item, int numCopies) { if (numCopies == 0) RemoveAllCopies(item); else { KeyValuePair dummy, existing, newPair; if (hash.Find(NewPair(item), false, out existing)) { count += numCopies - existing.Value; newPair = NewPair(existing.Key, numCopies); } else { count += numCopies; newPair = NewPair(item, numCopies); } hash.Insert(newPair, true, out dummy); } } /// /// Adds all the items in to the bag. /// /// /// Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the /// number of items in . /// A collection of items to add to the bag. public void AddMany(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); // If we're adding ourselves, we need to copy to a separate array to avoid modification // during enumeration. if (this == collection) collection = this.ToArray(); foreach (T item in collection) Add(item); } #endregion Adding elements #region Removing elements /// /// Searches the bag for one item equal to , and if found, /// removes it from the bag. If not found, the bag is unchanged. /// /// /// Equality between items is determined by the comparison instance or delegate used /// to create the bag. /// Removing an item from the bag takes approximated constant time, /// regardless of the number of items in the bag. /// The item to remove. /// True if was found and removed. False if was not in the bag. public sealed override bool Remove(T item) { KeyValuePair removed, newPair; if (hash.Delete(NewPair(item), out removed)) { if (removed.Value > 1) { // Only want to remove one copied, so add back in with a reduced count. KeyValuePair dummy; newPair = NewPair(removed.Key, removed.Value - 1); hash.Insert(newPair, true, out dummy); } --count; return true; } else return false; } /// /// Searches the bag for all items equal to , and /// removes all of them from the bag. If not found, the bag is unchanged. /// /// /// Equality between items is determined by the comparer instance used /// to create the bag. /// RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is /// the number of items equal to . /// The item to remove. /// The number of copies of that were found and removed. public int RemoveAllCopies(T item) { KeyValuePair removed; if (hash.Delete(NewPair(item), out removed)) { count -= removed.Value; return removed.Value; } else return 0; } /// /// Removes all the items in from the bag. Items that /// are not present in the bag are ignored. /// /// /// Equality between items is determined by the comparer instance used /// to create the bag. /// Removing the collection takes time O(M), where M is the /// number of items in . /// A collection of items to remove from the bag. /// The number of items removed from the bag. /// is null. public int RemoveMany(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); int removeCount = 0; if (collection == this) { removeCount = Count; Clear(); // special case, otherwise we will throw. } else { foreach (T item in collection) { if (Remove(item)) ++removeCount; } } return removeCount; } /// /// Removes all items from the bag. /// /// Clearing the bag takes a constant amount of time, regardless of the number of items in it. public sealed override void Clear() { hash.StopEnumerations(); // Invalidate any enumerations. // The simplest and fastest way is simply to throw away the old hash and create a new one. hash = new Hash>(equalityComparer); count = 0; } #endregion Removing elements #region Set operations /// /// Check that this bag and another bag were created with the same comparison /// mechanism. Throws exception if not compatible. /// /// Other bag to check comparision mechanism. /// If otherBag and this bag don't use the same method for comparing items. private void CheckConsistentComparison(Bag otherBag) { if (otherBag == null) throw new ArgumentNullException("otherBag"); if (!object.Equals(equalityComparer, otherBag.equalityComparer)) throw new InvalidOperationException(Strings.InconsistentComparisons); } /// /// Determines if this bag is equal to another bag. This bag is equal to /// if they contain the same number of /// of copies of equal elements. /// /// IsSupersetOf is computed in time O(N), where N is the number of unique items in /// this bag. /// Bag to compare to /// True if this bag is equal to , false otherwise. /// This bag and don't use the same method for comparing items. public bool IsEqualTo(Bag otherBag) { CheckConsistentComparison(otherBag); // Must be the same size. if (otherBag.Count != this.Count) return false; // Check each item to make sure it is in this set the same number of times. foreach (T item in otherBag.DistinctItems()) { if (this.NumberOfCopies(item) != otherBag.NumberOfCopies(item)) return false; } return true; } /// /// Determines if this bag is a superset of another bag. Neither bag is modified. /// This bag is a superset of if every element in /// is also in this bag, at least the same number of /// times. /// /// IsSupersetOf is computed in time O(M), where M is the number of unique items in /// . /// Bag to compare to. /// True if this is a superset of . /// This bag and don't use the same method for comparing items. public bool IsSupersetOf(Bag otherBag) { CheckConsistentComparison(otherBag); if (otherBag.Count > this.Count) return false; // Can't be a superset of a bigger set // Check each item in the other set to make sure it is in this set. foreach (T item in otherBag.DistinctItems()) { if (this.NumberOfCopies(item) < otherBag.NumberOfCopies(item)) return false; } return true; } /// /// Determines if this bag is a proper superset of another bag. Neither bag is modified. /// This bag is a proper superset of if every element in /// is also in this bag, at least the same number of /// times. Additional, this bag must have strictly more items than . /// /// IsProperSupersetOf is computed in time O(M), where M is the number of unique items in /// . /// Set to compare to. /// True if this is a proper superset of . /// This bag and don't use the same method for comparing items. public bool IsProperSupersetOf(Bag otherBag) { CheckConsistentComparison(otherBag); if (otherBag.Count >= this.Count) return false; // Can't be a proper superset of a bigger or equal set return IsSupersetOf(otherBag); } /// /// Determines if this bag is a subset of another ba11 items in this bag. /// /// Bag to compare to. /// True if this is a subset of . /// This bag and don't use the same method for comparing items. public bool IsSubsetOf(Bag otherBag) { return otherBag.IsSupersetOf(this); } /// /// Determines if this bag is a proper subset of another bag. Neither bag is modified. /// This bag is a subset of if every element in this bag /// is also in , at least the same number of /// times. Additional, this bag must have strictly fewer items than . /// /// IsProperSubsetOf is computed in time O(N), where N is the number of unique items in this bag. /// Bag to compare to. /// True if this is a proper subset of . /// This bag and don't use the same method for comparing items. public bool IsProperSubsetOf(Bag otherBag) { return otherBag.IsProperSupersetOf(this); } /// /// Determines if this bag is disjoint from another bag. Two bags are disjoint /// if no item from one set is equal to any item in the other bag. /// /// /// The answer is computed in time O(N), where N is the size of the smaller set. /// /// Bag to check disjointness with. /// True if the two bags are disjoint, false otherwise. /// This bag and don't use the same method for comparing items. public bool IsDisjointFrom(Bag otherBag) { CheckConsistentComparison(otherBag); Bag smaller, larger; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } foreach (T item in smaller.DistinctItems()) { if (larger.Contains(item)) return false; } return true; } /// /// Computes the union of this bag with another bag. The union of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives /// the union of the two bags, the other bag is unchanged. /// /// /// The union of two bags is computed in time O(M+N), where M and N are the size of the /// two bags. /// /// Bag to union with. /// This bag and don't use the same method for comparing items. public void UnionWith(Bag otherBag) { CheckConsistentComparison(otherBag); if (otherBag == this) return; // Nothing to do int copiesInThis, copiesInOther; // Enumerate each of the items in the other bag. Add items that need to be // added to this bag. foreach (T item in otherBag.DistinctItems()) { copiesInThis = this.NumberOfCopies(item); copiesInOther = otherBag.NumberOfCopies(item); if (copiesInOther > copiesInThis) ChangeNumberOfCopies(item, copiesInOther); } } /// /// Computes the union of this bag with another bag. The union of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is /// created with the union of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The union of two bags is computed in time O(M+N), where M and N are the size of the two bags. /// /// Bag to union with. /// The union of the two bags. /// This bag and don't use the same method for comparing items. public Bag Union(Bag otherBag) { CheckConsistentComparison(otherBag); Bag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } result = larger.Clone(); result.UnionWith(smaller); return result; } /// /// Computes the sum of this bag with another bag. The sum of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives /// the sum of the two bags, the other bag is unchanged. /// /// /// The sum of two bags is computed in time O(M), where M is the size of the /// other bag.. /// /// Bag to sum with. /// This bag and don't use the same method for comparing items. public void SumWith(Bag otherBag) { CheckConsistentComparison(otherBag); if (this == otherBag) { // Not very efficient, but an uncommon case. AddMany(otherBag); return; } int copiesInThis, copiesInOther; // Enumerate each of the items in the other bag. Add items that need to be // added to this bag. foreach (T item in otherBag.DistinctItems()) { copiesInThis = this.NumberOfCopies(item); copiesInOther = otherBag.NumberOfCopies(item); ChangeNumberOfCopies(item, copiesInThis + copiesInOther); } } /// /// Computes the sum of this bag with another bag. he sum of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is /// created with the sum of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The sum of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to sum with. /// The sum of the two bags. /// This bag and don't use the same method for comparing items. public Bag Sum(Bag otherBag) { CheckConsistentComparison(otherBag); Bag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } result = larger.Clone(); result.SumWith(smaller); return result; } /// /// Computes the intersection of this bag with another bag. The intersection of two bags /// is all items that appear in both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives /// the intersection of the two bags, the other bag is unchanged. /// /// /// When equal items appear in both bags, the intersection will include an arbitrary choice of one of the /// two equal items. /// The intersection of two bags is computed in time O(N), where N is the size of the smaller bag. /// /// Bag to intersection with. /// This bag and don't use the same method for comparing items. public void IntersectionWith(Bag otherBag) { CheckConsistentComparison(otherBag); hash.StopEnumerations(); Bag smaller, larger; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } KeyValuePair dummy; Hash> newHash = new Hash>(equalityComparer); int newCount = 0; int copiesInSmaller, copiesInLarger, copies; // Enumerate each of the items in the smaller bag. Add items that need to be // added to the intersection. foreach (T item in smaller.DistinctItems()) { copiesInLarger = larger.NumberOfCopies(item); copiesInSmaller = smaller.NumberOfCopies(item); copies = Math.Min(copiesInLarger, copiesInSmaller); if (copies > 0) { newHash.Insert(NewPair(item, copies), true, out dummy); newCount += copies; } } hash = newHash; count = newCount; } /// /// Computes the intersection of this bag with another bag. The intersection of two bags /// is all items that appear in both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the intersection contains the item Minimum(X,Y) times. A new bag is /// created with the intersection of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// When equal items appear in both bags, the intersection will include an arbitrary choice of one of the /// two equal items. /// The intersection of two bags is computed in time O(N), where N is the size of the smaller bag. /// /// Bag to intersection with. /// The intersection of the two bags. /// This bag and don't use the same method for comparing items. public Bag Intersection(Bag otherBag) { CheckConsistentComparison(otherBag); Bag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } int copiesInSmaller, copiesInLarger, copies; // Enumerate each of the items in the smaller bag. Add items that need to be // added to the intersection. result = new Bag(keyEqualityComparer); foreach (T item in smaller.DistinctItems()) { copiesInLarger = larger.NumberOfCopies(item); copiesInSmaller = smaller.NumberOfCopies(item); copies = Math.Min(copiesInLarger, copiesInSmaller); if (copies > 0) result.ChangeNumberOfCopies(item, copies); } return result; } /// /// Computes the difference of this bag with another bag. The difference of these two bags /// is all items that appear in this bag, but not in . If an item appears X times in this bag, /// and Y times in the other bag, the difference contains the item X - Y times (zero times if Y >= X). This bag receives /// the difference of the two bags; the other bag is unchanged. /// /// /// The difference of two bags is computed in time O(M), where M is the size of the /// other bag. /// /// Bag to difference with. /// This bag and don't use the same method for comparing items. public void DifferenceWith(Bag otherBag) { CheckConsistentComparison(otherBag); if (this == otherBag) { Clear(); return; } int copiesInThis, copiesInOther, copies; // Enumerate each of the items in the other bag. Remove items that need to be // removed from this bag. foreach (T item in otherBag.DistinctItems()) { copiesInThis = this.NumberOfCopies(item); copiesInOther = otherBag.NumberOfCopies(item); copies = copiesInThis - copiesInOther; if (copies < 0) copies = 0; ChangeNumberOfCopies(item, copies); } } /// /// Computes the difference of this bag with another bag. The difference of these two bags /// is all items that appear in this bag, but not in . If an item appears X times in this bag, /// and Y times in the other bag, the difference contains the item X - Y times (zero times if Y >= X). A new bag is /// created with the difference of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The difference of two bags is computed in time O(M + N), where M and N are the size /// of the two bags. /// /// Bag to difference with. /// The difference of the two bags. /// This bag and don't use the same method for comparing items. public Bag Difference(Bag otherBag) { Bag result; CheckConsistentComparison(otherBag); result = this.Clone(); result.DifferenceWith(otherBag); return result; } /// /// Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags /// is all items that appear in either of the bags, but not both. If an item appears X times in one bag, /// and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. This bag receives /// the symmetric difference of the two bags; the other bag is unchanged. /// /// /// The symmetric difference of two bags is computed in time O(M + N), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to symmetric difference with. /// This bag and don't use the same method for comparing items. public void SymmetricDifferenceWith(Bag otherBag) { CheckConsistentComparison(otherBag); if (this == otherBag) { Clear(); return; } int copiesInThis, copiesInOther, copies; // Enumerate each of the items in the other bag. Add items that need to be // added to this bag. foreach (T item in otherBag.DistinctItems()) { copiesInThis = this.NumberOfCopies(item); copiesInOther = otherBag.NumberOfCopies(item); copies = Math.Abs(copiesInThis - copiesInOther); if (copies != copiesInThis) ChangeNumberOfCopies(item, copies); } } /// /// Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags /// is all items that appear in either of the bags, but not both. If an item appears X times in one bag, /// and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y) times. A new bag is /// created with the symmetric difference of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The symmetric difference of two bags is computed in time O(M + N), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to symmetric difference with. /// The symmetric difference of the two bags. /// This bag and don't use the same method for comparing items. public Bag SymmetricDifference(Bag otherBag) { CheckConsistentComparison(otherBag); Bag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } result = larger.Clone(); result.SymmetricDifferenceWith(smaller); return result; } #endregion Set operations } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/CollectionBase.cs000066400000000000000000000414751446222606700270520ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; namespace Wintellect.PowerCollections { /// /// CollectionBase is a base class that can be used to more easily implement the /// generic ICollection<T> and non-generic ICollection interfaces. /// /// /// To use CollectionBase as a base class, the derived class must override /// the Count, GetEnumerator, Add, Clear, and Remove methods. /// ICollection<T>.Contains need not be implemented by the /// derived class, but it should be strongly considered, because the CollectionBase implementation /// may not be very efficient. /// /// The item type of the collection. [Serializable] [DebuggerDisplay("{DebuggerDisplayString()}")] public abstract class CollectionBase : ICollection, ICollection { /// /// Shows the string representation of the collection. The string representation contains /// a list of the items in the collection. Contained collections (except string) are expanded /// recursively. /// /// The string representation of the collection. public override string ToString() { return Algorithms.ToString(this); } #region ICollection Members /// /// Must be overridden to allow adding items to this collection. /// ///

This method is not abstract, although derived classes should always /// override it. It is not abstract because some derived classes may wish to reimplement /// Add with a different return type (typically bool). In C#, this can be accomplished /// with code like the following:

/// /// public class MyCollection<T>: CollectionBase<T>, ICollection<T> /// { /// public new bool Add(T item) { /// /* Add the item */ /// } /// /// void ICollection<T>.Add(T item) { /// Add(item); /// } /// } /// ///
/// Item to be added to the collection. /// Always throws this exception to indicated /// that the method must be overridden or re-implemented in the derived class. public virtual void Add(T item) { throw new NotImplementedException(Strings.MustOverrideOrReimplement); } /// /// Must be overridden to allow clearing this collection. /// public abstract void Clear(); /// /// Must be overridden to allow removing items from this collection. /// /// True if existed in the collection and /// was removed. False if did not exist in the collection. public abstract bool Remove(T item); /// /// Determines if the collection contains a particular item. This default implementation /// iterates all of the items in the collection via GetEnumerator, testing each item /// against using IComparable<T>.Equals or /// Object.Equals. /// /// You should strongly consider overriding this method to provide /// a more efficient implementation, or if the default equality comparison /// is inappropriate. /// The item to check for in the collection. /// True if the collection contains , false otherwise. public virtual bool Contains(T item) { IEqualityComparer equalityComparer = EqualityComparer.Default; foreach (T i in this) { if (equalityComparer.Equals(i, item)) return true; } return false; } /// /// Copies all the items in the collection into an array. Implemented by /// using the enumerator returned from GetEnumerator to get all the items /// and copy them to the provided array. /// /// Array to copy to. /// Starting index in to copy to. public virtual void CopyTo(T[] array, int arrayIndex) { int count = this.Count; if (count == 0) return; if (array == null) throw new ArgumentNullException("array"); if (count < 0) throw new IndexOutOfRangeException(Strings.ArgMustNotBeNegative); if (arrayIndex < 0) throw new ArgumentOutOfRangeException("arrayIndex", arrayIndex, Strings.ArgMustNotBeNegative); if (arrayIndex >= array.Length || count > array.Length - arrayIndex) throw new ArgumentException("arrayIndex", Strings.ArrayTooSmall); int index = arrayIndex, i = 0; foreach (T item in this) { if (i >= count) break; array[index] = item; ++index; ++i; } } /// /// Creates an array of the correct size, and copies all the items in the /// collection into the array, by calling CopyTo. /// /// An array containing all the elements in the collection, in order. public virtual T[] ToArray() { int count = this.Count; T[] array = new T[count]; CopyTo(array, 0); return array; } /// /// Must be overridden to provide the number of items in the collection. /// /// The number of items in the collection. public abstract int Count { get; } /// /// Indicates whether the collection is read-only. Always returns false. /// /// Always returns false. bool ICollection.IsReadOnly { get { return false; } } /// /// Provides a read-only view of this collection. The returned ICollection<T> provides /// a view of the collection that prevents modifications to the collection. Use the method to provide /// access to the collection without allowing changes. Since the returned object is just a view, /// changes to the collection will be reflected in the view. /// /// An ICollection<T> that provides read-only access to the collection. public virtual ICollection AsReadOnly() { return Algorithms.ReadOnly(this); } #endregion #region Delegate operations /// /// Determines if the collection contains any item that satisfies the condition /// defined by . /// /// A delegate that defines the condition to check for. /// True if the collection contains one or more items that satisfy the condition /// defined by . False if the collection does not contain /// an item that satisfies . public virtual bool Exists(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.Exists(this, predicate); } /// /// Determines if all of the items in the collection satisfy the condition /// defined by . /// /// A delegate that defines the condition to check for. /// True if all of the items in the collection satisfy the condition /// defined by , or if the collection is empty. False if one or more items /// in the collection do not satisfy . public virtual bool TrueForAll(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.TrueForAll(this, predicate); } /// /// Counts the number of items in the collection that satisfy the condition /// defined by . /// /// A delegate that defines the condition to check for. /// The number of items in the collection that satisfy . public virtual int CountWhere(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.CountWhere(this, predicate); } /// /// Enumerates the items in the collection that satisfy the condition defined /// by . /// /// A delegate that defines the condition to check for. /// An IEnumerable<T> that enumerates the items that satisfy the condition. public virtual IEnumerable FindAll(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.FindWhere(this, predicate); } /// /// Removes all the items in the collection that satisfy the condition /// defined by . /// /// A delegate that defines the condition to check for. /// Returns a collection of the items that were removed, in sorted order. public virtual ICollection RemoveAll(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.RemoveWhere(this, predicate); } /// /// Performs the specified action on each item in this collection. /// /// An Action delegate which is invoked for each item in this collection. public virtual void ForEach(Action action) { if (action == null) throw new ArgumentNullException("action"); Algorithms.ForEach(this, action); } /// /// Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration /// contains the result of applying to each item in this collection, in /// order. /// /// The type each item is being converted to. /// A delegate to the method to call, passing each item in this collection. /// An IEnumerable<TOutput^gt; that enumerates the resulting collection from applying to each item in this collection in /// order. /// is null. public virtual IEnumerable ConvertAll(Converter converter) { if (converter == null) throw new ArgumentNullException("converter"); return Algorithms.Convert(this, converter); } #endregion #region IEnumerable Members /// /// Must be overridden to enumerate all the members of the collection. /// /// A generic IEnumerator<T> that can be used /// to enumerate all the items in the collection. public abstract IEnumerator GetEnumerator(); #endregion #region ICollection Members /// /// Copies all the items in the collection into an array. Implemented by /// using the enumerator returned from GetEnumerator to get all the items /// and copy them to the provided array. /// /// Array to copy to. /// Starting index in to copy to. void ICollection.CopyTo(Array array, int index) { int count = this.Count; if (count == 0) return; if (array == null) throw new ArgumentNullException("array"); if (index < 0) throw new ArgumentOutOfRangeException("index", index, Strings.ArgMustNotBeNegative); if (index >= array.Length || count > array.Length - index) throw new ArgumentException("index", Strings.ArrayTooSmall); int i = 0; //TODO: Look into this foreach (object o in (ICollection) this) { if (i >= count) break; array.SetValue(o, index); ++index; ++i; } } /// /// Indicates whether the collection is synchronized. /// /// Always returns false, indicating that the collection is not synchronized. bool ICollection.IsSynchronized { get { return false; } } /// /// Indicates the synchronization object for this collection. /// /// Always returns this. object ICollection.SyncRoot { get { return this; } } #endregion #region IEnumerable Members /// /// Provides an IEnumerator that can be used to iterate all the members of the /// collection. This implementation uses the IEnumerator<T> that was overridden /// by the derived classes to enumerate the members of the collection. /// /// An IEnumerator that can be used to iterate the collection. IEnumerator IEnumerable.GetEnumerator() { foreach (T item in this) { yield return item; } } #endregion /// /// Display the contents of the collection in the debugger. This is intentionally private, it is called /// only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar /// format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger. /// /// The string representation of the items in the collection, similar in format to ToString(). internal string DebuggerDisplayString() { const int MAXLENGTH = 250; System.Text.StringBuilder builder = new System.Text.StringBuilder(); builder.Append('{'); // Call ToString on each item and put it in. bool firstItem = true; foreach (T item in this) { if (builder.Length >= MAXLENGTH) { builder.Append(",..."); break; } if (!firstItem) builder.Append(','); if (item == null) builder.Append("null"); else builder.Append(item.ToString()); firstItem = false; } builder.Append('}'); return builder.ToString(); } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Comparers.cs000066400000000000000000000301251446222606700261050ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// A collection of methods to create IComparer and IEqualityComparer instances in various ways. /// internal static class Comparers { /// /// Class to change an IEqualityComparer<TKey> to an IEqualityComparer<KeyValuePair<TKey, TValue>> /// Only the keys are compared. /// [Serializable] class KeyValueEqualityComparer : IEqualityComparer> { private readonly IEqualityComparer keyEqualityComparer; public KeyValueEqualityComparer(IEqualityComparer keyEqualityComparer) { this.keyEqualityComparer = keyEqualityComparer; } public bool Equals(KeyValuePair x, KeyValuePair y) { return keyEqualityComparer.Equals(x.Key, y.Key); } public int GetHashCode(KeyValuePair obj) { return Util.GetHashCode(obj.Key, keyEqualityComparer); } public override bool Equals(object obj) { if (obj is KeyValueEqualityComparer) return object.Equals(keyEqualityComparer, ((KeyValueEqualityComparer)obj).keyEqualityComparer); else return false; } public override int GetHashCode() { return keyEqualityComparer.GetHashCode(); } } /// /// Class to change an IComparer<TKey> to an IComparer<KeyValuePair<TKey, TValue>> /// Only the keys are compared. /// [Serializable] class KeyValueComparer : IComparer> { private readonly IComparer keyComparer; public KeyValueComparer(IComparer keyComparer) { this.keyComparer = keyComparer; } public int Compare(KeyValuePair x, KeyValuePair y) { return keyComparer.Compare(x.Key, y.Key); } public override bool Equals(object obj) { if (obj is KeyValueComparer) return object.Equals(keyComparer, ((KeyValueComparer)obj).keyComparer); else return false; } public override int GetHashCode() { return keyComparer.GetHashCode(); } } /// /// Class to change an IComparer<TKey> and IComparer<TValue> to an IComparer<KeyValuePair<TKey, TValue>> /// Keys are compared, followed by values. /// [Serializable] class PairComparer : IComparer> { private readonly IComparer keyComparer; private readonly IComparer valueComparer; public PairComparer(IComparer keyComparer, IComparer valueComparer) { this.keyComparer = keyComparer; this.valueComparer = valueComparer; } public int Compare(KeyValuePair x, KeyValuePair y) { int keyCompare = keyComparer.Compare(x.Key, y.Key); if (keyCompare == 0) return valueComparer.Compare(x.Value, y.Value); else return keyCompare; } public override bool Equals(object obj) { if (obj is PairComparer) return object.Equals(keyComparer, ((PairComparer)obj).keyComparer) && object.Equals(valueComparer, ((PairComparer)obj).valueComparer); else return false; } public override int GetHashCode() { return keyComparer.GetHashCode() ^ valueComparer.GetHashCode(); } } /// /// Class to change an Comparison<T> to an IComparer<T>. /// [Serializable] class ComparisonComparer : IComparer { private readonly Comparison comparison; public ComparisonComparer(Comparison comparison) { this.comparison = comparison; } public int Compare(T x, T y) { return comparison(x, y); } public override bool Equals(object obj) { if (obj is ComparisonComparer) return comparison.Equals(((ComparisonComparer)obj).comparison); else return false; } public override int GetHashCode() { return comparison.GetHashCode(); } } /// /// Class to change an Comparison<TKey> to an IComparer<KeyValuePair<TKey, TValue>>. /// GetHashCode cannot be used on this class. /// [Serializable] class ComparisonKeyValueComparer : IComparer> { private readonly Comparison comparison; public ComparisonKeyValueComparer(Comparison comparison) { this.comparison = comparison; } public int Compare(KeyValuePair x, KeyValuePair y) { return comparison(x.Key, y.Key); } public override bool Equals(object obj) { if (obj is ComparisonKeyValueComparer) return comparison.Equals(((ComparisonKeyValueComparer)obj).comparison); else return false; } public override int GetHashCode() { return comparison.GetHashCode(); } } /// /// Given an Comparison on a type, returns an IComparer on that type. /// /// T to compare. /// Comparison delegate on T /// IComparer that uses the comparison. public static IComparer ComparerFromComparison(Comparison comparison) { if (comparison == null) throw new ArgumentNullException("comparison"); return new ComparisonComparer(comparison); } /// /// Given an IComparer on TKey, returns an IComparer on /// key-value Pairs. /// /// TKey of the pairs /// TValue of the apris /// IComparer on TKey /// IComparer for comparing key-value pairs. public static IComparer> ComparerKeyValueFromComparerKey(IComparer keyComparer) { if (keyComparer == null) throw new ArgumentNullException("keyComparer"); return new KeyValueComparer(keyComparer); } /// /// Given an IEqualityComparer on TKey, returns an IEqualityComparer on /// key-value Pairs. /// /// TKey of the pairs /// TValue of the apris /// IComparer on TKey /// IEqualityComparer for comparing key-value pairs. public static IEqualityComparer> EqualityComparerKeyValueFromComparerKey(IEqualityComparer keyEqualityComparer) { if (keyEqualityComparer == null) throw new ArgumentNullException("keyEqualityComparer"); return new KeyValueEqualityComparer(keyEqualityComparer); } /// /// Given an IComparer on TKey and TValue, returns an IComparer on /// key-value Pairs of TKey and TValue, comparing first keys, then values. /// /// TKey of the pairs /// TValue of the apris /// IComparer on TKey /// IComparer on TValue /// IComparer for comparing key-value pairs. public static IComparer> ComparerPairFromKeyValueComparers(IComparer keyComparer, IComparer valueComparer) { if (keyComparer == null) throw new ArgumentNullException("keyComparer"); if (valueComparer == null) throw new ArgumentNullException("valueComparer"); return new PairComparer(keyComparer, valueComparer); } /// /// Given an Comparison on TKey, returns an IComparer on /// key-value Pairs. /// /// TKey of the pairs /// TValue of the apris /// Comparison delegate on TKey /// IComparer for comparing key-value pairs. public static IComparer> ComparerKeyValueFromComparisonKey(Comparison keyComparison) { if (keyComparison == null) throw new ArgumentNullException("keyComparison"); return new ComparisonKeyValueComparer(keyComparison); } /// /// Given an element type, check that it implements IComparable<T> or IComparable, then returns /// a IComparer that can be used to compare elements of that type. /// /// The IComparer<T> instance. /// T does not implement IComparable<T>. public static IComparer DefaultComparer() { if (typeof(IComparable).IsAssignableFrom(typeof(T)) || typeof(System.IComparable).IsAssignableFrom(typeof(T))) { return Comparer.Default; } else { throw new InvalidOperationException(string.Format(Strings.UncomparableType, typeof(T).FullName)); } } /// /// Given an key and value type, check that TKey implements IComparable<T> or IComparable, then returns /// a IComparer that can be used to compare KeyValuePairs of those types. /// /// The IComparer<KeyValuePair<TKey, TValue>> instance. /// TKey does not implement IComparable<T>. public static IComparer> DefaultKeyValueComparer() { IComparer keyComparer = DefaultComparer(); return ComparerKeyValueFromComparerKey(keyComparer); } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Hash.cs000066400000000000000000000734331446222606700250460ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Diagnostics; using System.Collections.Generic; using System.Runtime.Serialization; namespace Wintellect.PowerCollections { /// /// The base implementation for various collections classes that use hash tables /// as part of their implementation. This class should not (and can not) be /// used directly by end users; it's only for internal use by the collections package. The Hash /// does not handle duplicate values. /// /// /// The Hash manages items of type T, and uses a IComparer<ItemTYpe> that /// hashes compares items to hash items into the table. /// [Serializable] internal class Hash : IEnumerable, ISerializable, IDeserializationCallback { // NOTE: If you add new member variables, you very well may need to change the serialization // code to serialize that member. private IEqualityComparer equalityComparer; // interface for comparing elements private int count; // The count of elements in the table. private int usedSlots; // Includes real elements and deleted elements with the collision bit on. Used to determine // when we need to resize. private int totalSlots; // Size of the table. Always a power of two. private float loadFactor; // maximal load factor for the table. private int thresholdGrow; // floor(totalSlots * loadFactor); private int thresholdShrink; // thresholdGrow / 3. private int hashMask; // Mask to convert hash values to the size of the table. private int secondaryShift; // Shift to get the secondary skip value. private Slot[] table; // The hash table. private int changeStamp; // An integer that is changed every time the table structurally changes. // Used so that enumerations throw an exception if the tree is changed // during enumeration. private const int MINSIZE = 16; // minimum number of slots. private SerializationInfo serializationInfo; // Info used during deserialization. /// /// The structure that has each slot in the hash table. Each slot has three parts: /// 1. The collision bit. Indicates whether some item visited this slot but had to /// keep looking because the slot was full. /// 2. 31-bit full hash value of the item. If zero, the slot is empty. /// 3. The item itself. /// struct Slot { private uint hash_collision; // Lower 31 bits: the hash value. Top bit: the collision bit. public T item; // The item. /// /// The full hash value associated with the value in this slot, or zero /// if the slot is empty. /// public int HashValue { get { return (int) (hash_collision & 0x7FFFFFFF); } set { Debug.Assert((value & 0x80000000) == 0); // make sure sign bit isn't set. hash_collision = (uint)value | (hash_collision & 0x80000000); } } /// /// Is this slot empty? /// public bool Empty { get { return HashValue == 0; } } /// /// Clear this slot, leaving the collision bit alone. /// public void Clear() { HashValue = 0; item = default(T); // Done to avoid keeping things alive that shouldn't be. } /// /// The "Collision" bit indicates that some value hit this slot and /// collided, so had to try another slot. /// public bool Collision { get { return (hash_collision & 0x80000000) != 0; } set { if (value) hash_collision |= 0x80000000; else hash_collision &= 0x7FFFFFFF; } } } /// /// Constructor. Create a new hash table. /// /// The comparer to use to compare items. public Hash(IEqualityComparer equalityComparer) { this.equalityComparer = equalityComparer; this.loadFactor = 0.70F; // default load factor. } /// /// Gets the current enumeration stamp. Call CheckEnumerationStamp later /// with this value to throw an exception if the hash table is changed. /// /// The current enumeration stamp. internal int GetEnumerationStamp() { return changeStamp; } /// /// Must be called whenever there is a structural change in the tree. Causes /// changeStamp to be changed, which causes any in-progress enumerations /// to throw exceptions. /// internal void StopEnumerations() { ++changeStamp; } /// /// Checks the given stamp against the current change stamp. If different, the /// collection has changed during enumeration and an InvalidOperationException /// must be thrown /// /// changeStamp at the start of the enumeration. internal void CheckEnumerationStamp(int startStamp) { if (startStamp != changeStamp) { throw new InvalidOperationException(Strings.ChangeDuringEnumeration); } } /// /// Gets the full hash code for an item. /// /// Item to get hash code for. /// The full hash code. It is never zero. private int GetFullHash(T item) { uint hash; hash = (uint)Util.GetHashCode(item, equalityComparer); // The .NET framework tends to produce pretty bad hash codes. // Scramble them up to be much more random! hash += ~(hash << 15); hash ^= (hash >> 10); hash += (hash << 3); hash ^= (hash >> 6); hash += ~(hash << 11); hash ^= (hash >> 16); hash &= 0x7FFFFFFF; if (hash == 0) hash = 0x7FFFFFFF; // Make sure it isn't zero. return (int)hash; } /// /// Get the initial bucket number and skip amount from the full hash value. /// /// The full hash value. /// Returns the initial bucket. Always in the range 0..(totalSlots - 1). /// Returns the skip values. Always odd in the range 0..(totalSlots - 1). private void GetHashValuesFromFullHash(int hash, out int initialBucket, out int skip) { initialBucket = hash & hashMask; // The skip value must be relatively prime to the table size. Since the table size is a // power of two, any odd number is relatively prime, so oring in 1 will do it. skip = ((hash >> secondaryShift) & hashMask) | 1; } /// /// Gets the full hash value, initial bucket number, and skip amount for an item. /// /// Item to get hash value of. /// Returns the initial bucket. Always in the range 0..(totalSlots - 1). /// Returns the skip values. Always odd in the range 0..(totalSlots - 1). /// The full hash value. This is never zero. private int GetHashValues(T item, out int initialBucket, out int skip) { int hash = GetFullHash(item); GetHashValuesFromFullHash(hash, out initialBucket, out skip); return hash; } /// /// Make sure there are enough slots in the hash table that /// items can be inserted into the table. /// /// Number of additional items we are inserting. private void EnsureEnoughSlots(int additionalItems) { StopEnumerations(); if (usedSlots + additionalItems > thresholdGrow) { // We need to expand the table. Figure out to what size. int newSize; newSize = Math.Max(totalSlots, MINSIZE); while ((int)(newSize * loadFactor) < usedSlots + additionalItems) { newSize *= 2; if (newSize <= 0) { // Must have overflowed the size of an int. Hard to believe we didn't run out of memory first. throw new InvalidOperationException(Strings.CollectionTooLarge); } } ResizeTable(newSize); } } /// /// Check if the number of items in the table is small enough that /// we should shrink the table again. /// private void ShrinkIfNeeded() { if (count < thresholdShrink) { int newSize; if (count > 0) { newSize = MINSIZE; while ((int)(newSize * loadFactor) < count) newSize *= 2; } else { // We've removed all the elements. Shrink to zero. newSize = 0; } ResizeTable(newSize); } } /// /// Given the size of a hash table, compute the "secondary shift" value -- the shift /// that is used to determine the skip amount for collision resolution. /// /// The new size of the table. /// The secondary skip amount. private static int GetSecondaryShift(int newSize) { int x = newSize - 2; // x is of the form 0000111110 -- a single string of 1's followed by a single zero. int secondaryShift = 0; // Keep shifting x until it is the set of bits we want to extract: it be the highest bits possible, // but can't overflow into the sign bit. while ((x & 0x40000000) == 0) { x <<= 1; ++secondaryShift; } return secondaryShift; } /// /// Resize the hash table to the given new size, moving all items into the /// new hash table. /// /// The new size of the hash table. Must be a power /// of two. private void ResizeTable(int newSize) { Slot[] oldTable = table; // Move all the items from this table to the new table. Debug.Assert((newSize & (newSize - 1)) == 0); // Check newSize is a power of two. totalSlots = newSize; thresholdGrow = (int)(totalSlots * loadFactor); thresholdShrink = thresholdGrow / 3; if (thresholdShrink <= MINSIZE) thresholdShrink = 1; hashMask = newSize - 1; secondaryShift = GetSecondaryShift(newSize); if (totalSlots > 0) table = new Slot[totalSlots]; else table = null; if (oldTable != null && table != null) { foreach (Slot oldSlot in oldTable) { int hash, bucket, skip; hash = oldSlot.HashValue; GetHashValuesFromFullHash(hash, out bucket, out skip); // Find an empty bucket. while (! table[bucket].Empty) { // The slot is used, but isn't our item. Set the collision bit and keep looking. table[bucket].Collision = true; bucket = (bucket + skip) & hashMask; } // We found an empty bucket. table[bucket].HashValue = hash; table[bucket].item = oldSlot.item; } } usedSlots = count; // no deleted elements have the collision bit on now. } /// /// Get the number of items in the hash table. /// /// The number of items stored in the hash table. public int ElementCount { get { return count; } } /// /// Get the number of slots in the hash table. Exposed internally /// for testing purposes. /// /// The number of slots in the hash table. internal int SlotCount { get { return totalSlots; } } /// /// Get or change the load factor. Changing the load factor may cause /// the size of the table to grow or shrink accordingly. /// /// public float LoadFactor { get { return loadFactor; } set { // Don't allow hopelessly inefficient load factors. if (value < 0.25 || value > 0.95) throw new ArgumentOutOfRangeException("value", value, Strings.InvalidLoadFactor); StopEnumerations(); bool maybeExpand = value < loadFactor; // May need to expand or shrink the table -- which? // Update loadFactor and thresholds. loadFactor = value; thresholdGrow = (int)(totalSlots * loadFactor); thresholdShrink = thresholdGrow / 3; if (thresholdShrink <= MINSIZE) thresholdShrink = 1; // Possibly expand or shrink the table. if (maybeExpand) EnsureEnoughSlots(0); else ShrinkIfNeeded(); } } /// /// Insert a new item into the hash table. If a duplicate item exists, can replace or /// do nothing. /// /// The item to insert. /// If true, duplicate items are replaced. If false, nothing /// is done if a duplicate already exists. /// If a duplicate was found, returns it (whether replaced or not). /// True if no duplicate existed, false if a duplicate was found. public bool Insert(T item, bool replaceOnDuplicate, out T previous) { int hash, bucket, skip; int emptyBucket = -1; // If >= 0, an empty bucket we can use for a true insert bool duplicateMightExist = true; // If true, still the possibility that a duplicate exists. EnsureEnoughSlots(1); // Ensure enough room to insert. Also stops enumerations. hash = GetHashValues(item, out bucket, out skip); for (;;) { if (table[bucket].Empty) { // Record the location of the first empty bucket seen. This is where the item will // go if no duplicate exists. if (emptyBucket == -1) emptyBucket = bucket; if (!duplicateMightExist || !table[bucket].Collision) { // There can't be a duplicate further on, because a bucket with the collision bit // clear was found (here or earlier). We have the place to insert. break; } } else if (table[bucket].HashValue == hash && equalityComparer.Equals(table[bucket].item, item)) { // We found a duplicate item. Replace it if requested to. previous = table[bucket].item; if (replaceOnDuplicate) table[bucket].item = item; return false; } else { // The slot is used, but isn't our item. if (!table[bucket].Collision) { // Since the collision bit is off, we can't have a duplicate. if (emptyBucket >= 0) { // We already have an empty bucket to use. break; } else { // Keep searching for an empty bucket to place the item. table[bucket].Collision = true; duplicateMightExist = false; } } } bucket = (bucket + skip) & hashMask; } // We found an empty bucket. Insert the new item. table[emptyBucket].HashValue = hash; table[emptyBucket].item = item; ++count; if (!table[emptyBucket].Collision) ++usedSlots; previous = default(T); return true; } /// /// Deletes an item from the hash table. /// /// Item to search for and delete. /// If true returned, the actual item stored in the hash table (must be /// equal to , but may not be identical. /// True if item was found and deleted, false if item wasn't found. public bool Delete(T item, out T itemDeleted) { int hash, bucket, skip; StopEnumerations(); if (count == 0) { itemDeleted = default(T); return false; } hash = GetHashValues(item, out bucket, out skip); for (; ; ) { if (table[bucket].HashValue == hash && equalityComparer.Equals(table[bucket].item, item)) { // Found the item. Remove it. itemDeleted = table[bucket].item; table[bucket].Clear(); --count; if (!table[bucket].Collision) --usedSlots; ShrinkIfNeeded(); return true; } else if (!table[bucket].Collision) { // No collision bit, so we can stop searching. No such element. itemDeleted = default(T); return false; } bucket = (bucket + skip) & hashMask; } } /// /// Find an item in the hash table. If found, optionally replace it with the /// finding item. /// /// Item to find. /// If true, replaces the equal item in the hash table /// with . /// Returns the equal item found in the table, if true was returned. /// True if the item was found, false otherwise. public bool Find(T find, bool replace, out T item) { int hash, bucket, skip; if (count == 0) { item = default(T); return false; } hash = GetHashValues(find, out bucket, out skip); for (; ; ) { if (table[bucket].HashValue == hash && equalityComparer.Equals(table[bucket].item, find)) { // Found the item. item = table[bucket].item; if (replace) table[bucket].item = find; return true; } else if (!table[bucket].Collision) { // No collision bit, so we can stop searching. No such element. item = default(T); return false; } bucket = (bucket + skip) & hashMask; } } /// /// Enumerate all of the items in the hash table. The items /// are enumerated in a haphazard, unpredictable order. /// /// An IEnumerator<T> that enumerates the items /// in the hash table. public IEnumerator GetEnumerator() { if (count > 0) { int startStamp = changeStamp; foreach (Slot slot in table) { if (!slot.Empty) { yield return slot.item; CheckEnumerationStamp(startStamp); } } } } /// /// Enumerate all of the items in the hash table. The items /// are enumerated in a haphazard, unpredictable order. /// /// An IEnumerator that enumerates the items /// in the hash table. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } /// /// Creates a clone of this hash table. /// /// If non-null, this function is applied to each item when cloning. It must be the /// case that this function does not modify the hash code or equality function. /// A shallow clone that contains the same items. public Hash Clone(Converter cloneItem) { Hash clone = new Hash(equalityComparer); clone.count = this.count; clone.usedSlots = this.usedSlots; clone.totalSlots = this.totalSlots; clone.loadFactor = this.loadFactor; clone.thresholdGrow = this.thresholdGrow; clone.thresholdShrink = this.thresholdShrink; clone.hashMask = this.hashMask; clone.secondaryShift = this.secondaryShift; if (table != null) { clone.table = (Slot[])table.Clone(); if (cloneItem != null) { for (int i = 0; i < table.Length; ++i) { if (!table[i].Empty) table[i].item = cloneItem(table[i].item); } } } return clone; } #region Serialization /// /// Serialize the hash table. Called from the serialization infrastructure. /// void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { if (info == null) throw new ArgumentNullException("info"); info.AddValue("equalityComparer", equalityComparer, typeof(IEqualityComparer)); info.AddValue("loadFactor", loadFactor, typeof(float)); T[] items = new T[count]; int i = 0; foreach (Slot slot in table) if (! slot.Empty) items[i++] = slot.item; info.AddValue("items", items, typeof(T[])); } /// /// Called on deserialization. We cannot deserialize now, because hash codes /// might not be correct now. We do real deserialization in the OnDeserialization call. /// protected Hash(SerializationInfo serInfo, StreamingContext context) { // Save away the serialization info for use later. We can't be sure of hash codes // being stable until the entire object graph is deserialized, so we wait until then // to deserialize. serializationInfo = serInfo; } /// /// Deserialize the hash table. Called from the serialization infrastructure when /// the object graph has finished deserializing. /// void IDeserializationCallback.OnDeserialization(object sender) { if (serializationInfo == null) return; loadFactor = serializationInfo.GetSingle("loadFactor"); equalityComparer = (IEqualityComparer) serializationInfo.GetValue("equalityComparer", typeof(IEqualityComparer)); T[] items = (T[])serializationInfo.GetValue("items", typeof(T[])); T dummy; EnsureEnoughSlots(items.Length); foreach (T item in items) Insert(item, true, out dummy); serializationInfo = null; } #endregion Serialization #if DEBUG /// /// Print out basic stats about the hash table. /// internal void PrintStats() { Console.WriteLine("count={0} usedSlots={1} totalSlots={2}", count, usedSlots, totalSlots); Console.WriteLine("loadFactor={0} thresholdGrow={1} thresholdShrink={2}", loadFactor, thresholdGrow, thresholdShrink); Console.WriteLine("hashMask={0:X} secondaryShift={1}", hashMask, secondaryShift); Console.WriteLine(); } /// /// Print out the state of the hash table and each of the slots. Each slot looks like: /// Slot 4: C 4513e41e hello /// where the "C" indicates the collision bit is on /// the next hex number is the hash value /// followed by ToString() on the item. /// internal void Print() { PrintStats(); for (int i = 0; i < totalSlots; ++i) Console.WriteLine("Slot {0,4:X}: {1} {2,8:X} {3}", i, table[i].Collision ? "C" : " ", table[i].HashValue, table[i].Empty ? "" : table[i].item.ToString()); Console.WriteLine(); } /// /// Check that everything appears to be OK in the hash table. /// internal void Validate() { Debug.Assert(count <= usedSlots); Debug.Assert(count <= totalSlots); Debug.Assert(usedSlots <= totalSlots); Debug.Assert(usedSlots <= thresholdGrow); Debug.Assert((int)(totalSlots * loadFactor) == thresholdGrow); if (thresholdShrink > 1) Debug.Assert(thresholdGrow / 3 == thresholdShrink); else Debug.Assert(thresholdGrow / 3 <= MINSIZE); if (totalSlots > 0) { Debug.Assert((totalSlots & (totalSlots - 1)) == 0); // totalSlots is a power of two. Debug.Assert(totalSlots - 1 == hashMask); Debug.Assert(GetSecondaryShift(totalSlots) == secondaryShift); Debug.Assert(totalSlots == table.Length); } // Traverse the table. Make sure that count and usedSlots are right, and that // each slot looks reasonable. int expectedCount = 0, expectedUsed = 0, initialBucket, skip; if (table != null) { for (int i = 0; i < totalSlots; ++i) { Slot slot = table[i]; if (slot.Empty) { // Empty slot if (slot.Collision) ++expectedUsed; Debug.Assert(object.Equals(default(T), slot.item)); } else { // not empty. ++expectedCount; ++expectedUsed; Debug.Assert(slot.HashValue != 0); Debug.Assert(GetHashValues(slot.item, out initialBucket, out skip) == slot.HashValue); if (initialBucket != i) Debug.Assert(table[initialBucket].Collision); } } } Debug.Assert(expectedCount == count); Debug.Assert(expectedUsed == usedSlots); } #endif //DEBUG } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/License.txt000066400000000000000000000261431446222606700257530ustar00rootroot00000000000000Shared Source License for Wintellect Power Collections THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. quickroute-linux-upstream-2.5/3rdparty/PowerCollections/ListBase.cs000066400000000000000000000764221446222606700256720ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// ListBase is an abstract class that can be used as a base class for a read-write collection that needs /// to implement the generic IList<T> and non-generic IList collections. The derived class needs /// to override the following methods: Count, Clear, Insert, RemoveAt, and the indexer. The implementation /// of all the other methods in IList<T> and IList are handled by ListBase. /// /// [Serializable] public abstract class ListBase : CollectionBase, IList, IList { /// /// The property must be overridden by the derived class to return the number of /// items in the list. /// /// The number of items in the list. public abstract override int Count { get;} /// /// This method must be overridden by the derived class to empty the list /// of all items. /// public abstract override void Clear(); /// /// The indexer must be overridden by the derived class to get and set /// values of the list at a particular index. /// /// The index in the list to get or set an item at. The /// first item in the list has index 0, and the last has index Count-1. /// The item at the given index. /// is /// less than zero or greater than or equal to Count. public abstract T this[int index] { get; set; } /// /// This method must be overridden by the derived class to insert a new /// item at the given index. /// /// The index in the list to insert the item at. After the /// insertion, the inserted item is located at this index. The /// first item in the list has index 0. /// The item to insert at the given index. /// is /// less than zero or greater than Count. public abstract void Insert(int index, T item); /// /// This method must be overridden by the derived class to remove the /// item at the given index. /// /// The index in the list to remove the item at. The /// first item in the list has index 0. /// is /// less than zero or greater than or equal to Count. public abstract void RemoveAt(int index); /// /// Enumerates all of the items in the list, in order. The item at index 0 /// is enumerated first, then the item at index 1, and so on. /// /// The enumerator does not check for changes made /// to the structure of the list. Thus, changes to the list during /// enumeration may cause incorrect enumeration or out of range /// exceptions. Consider overriding this method and adding checks /// for structural changes. /// An IEnumerator<T> that enumerates all the /// items in the list. public override IEnumerator GetEnumerator() { int count = Count; for (int i = 0; i < count; ++i) { yield return this[i]; } } /// /// Determines if the list contains any item that compares equal to . /// The implementation simply checks whether IndexOf(item) returns a non-negative value. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to search for. /// True if the list contains an item that compares equal to . public override bool Contains(T item) { return (IndexOf(item) >= 0); } /// /// Adds an item to the end of the list. This method is equivalent to calling: /// Insert(Count, item) /// /// The item to add to the list. public override void Add(T item) { Insert(Count, item); } /// /// Searches the list for the first item that compares equal to . /// If one is found, it is removed. Otherwise, the list is unchanged. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to remove from the list. /// True if an item was found and removed that compared equal to /// . False if no such item was in the list. public override bool Remove(T item) { int index = IndexOf(item); if (index >= 0) { RemoveAt(index); return true; } else { return false; } } /// /// Copies all the items in the list, in order, to , /// starting at index 0. /// /// The array to copy to. This array must have a size /// that is greater than or equal to Count. public virtual void CopyTo(T[] array) { this.CopyTo(array, 0); } /// /// Copies a range of elements from the list to , /// starting at . /// /// The starting index in the source list of the range to copy. /// The array to copy to. This array must have a size /// that is greater than or equal to Count + arrayIndex. /// The starting index in /// to copy to. /// The number of items to copy. public virtual void CopyTo(int index, T[] array, int arrayIndex, int count) { Range(index, count).CopyTo(array, arrayIndex); } /// /// Provides a read-only view of this list. The returned IList<T> provides /// a view of the list that prevents modifications to the list. Use the method to provide /// access to the list without allowing changes. Since the returned object is just a view, /// changes to the list will be reflected in the view. /// /// An IList<T> that provides read-only access to the list. public virtual new IList AsReadOnly() { return Algorithms.ReadOnly(this); } /// /// Finds the first item in the list that satisfies the condition /// defined by . If no item matches the condition, than /// the default value for T (null or all-zero) is returned. /// /// If the default value for T (null or all-zero) matches the condition defined by , /// and the list might contain the default value, then it is impossible to distinguish the different between finding /// the default value and not finding any item. To distinguish these cases, use . /// A delegate that defined the condition to check for. /// The first item that satisfies the condition . If no item satisfies that /// condition, the default value for T is returned. /// public virtual T Find(Predicate predicate) { return Algorithms.FindFirstWhere(this, predicate); } /// /// Finds the first item in the list that satisfies the condition /// defined by . /// /// A delegate that defines the condition to check for. /// If true is returned, this parameter receives the first item in the list /// that satifies the condition defined by . /// True if an item that satisfies the condition was found. False /// if no item in the list satisfies that condition. public virtual bool TryFind(Predicate predicate, out T foundItem) { return Algorithms.TryFindFirstWhere(this, predicate, out foundItem); } /// /// Finds the last item in the list that satisfies the condition /// defined by . If no item matches the condition, than /// the default value for T (null or all-zero) is returned. /// /// If the default value for T (null or all-zero) matches the condition defined by , /// and the list might contain the default value, then it is impossible to distinguish the different between finding /// the default value and not finding any item. To distinguish these cases, use . /// A delegate that defined the condition to check for. /// The last item that satisfies the condition . If no item satisfies that /// condition, the default value for T is returned. /// public virtual T FindLast(Predicate predicate) { return Algorithms.FindLastWhere(this, predicate); } /// /// Finds the last item in the list that satisfies the condition /// defined by . /// /// A delegate that defines the condition to check for. /// If true is returned, this parameter receives the last item in the list /// that satifies the condition defined by . /// True if an item that satisfies the condition was found. False /// if no item in the list satisfies that condition. public virtual bool TryFindLast(Predicate predicate, out T foundItem) { return Algorithms.TryFindLastWhere(this, predicate, out foundItem); } /// /// Finds the index of the first item in the list that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The index of the first item that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindIndex(Predicate predicate) { return Algorithms.FindFirstIndexWhere(this, predicate); } /// /// Finds the index of the first item, in the range of items extending from to the end, that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The starting index of the range to check. /// The index of the first item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindIndex(int index, Predicate predicate) { int foundIndex = Algorithms.FindFirstIndexWhere(Range(index, Count - index), predicate); if (foundIndex < 0) return -1; else return foundIndex + index; } /// /// Finds the index of the first item, in the range of items starting from , that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The starting index of the range to check. /// The number of items in range to check. /// The index of the first item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindIndex(int index, int count, Predicate predicate) { int foundIndex = Algorithms.FindFirstIndexWhere(Range(index, count), predicate); if (foundIndex < 0) return -1; else return foundIndex + index; } /// /// Finds the index of the last item in the list that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The index of the last item that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindLastIndex(Predicate predicate) { return Algorithms.FindLastIndexWhere(this, predicate); } /// /// Finds the index of the last item, in the range of items extending from the beginning /// of the list to , that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The ending index of the range to check. /// The index of the last item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindLastIndex(int index, Predicate predicate) { return Algorithms.FindLastIndexWhere(Range(0, index + 1), predicate); } /// /// Finds the index of the last item, in the range of items ending at , that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The ending index of the range to check. /// The number of items in range to check. /// The index of the last item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindLastIndex(int index, int count, Predicate predicate) { int foundIndex = Algorithms.FindLastIndexWhere(Range(index - count + 1, count), predicate); if (foundIndex >= 0) return foundIndex + index - count + 1; else return -1; } /// /// Finds the index of the first item in the list that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The index of the first item in the list that that is equal to . If no item is equal /// to , -1 is returned. public virtual int IndexOf(T item) { return Algorithms.FirstIndexOf(this, item, EqualityComparer.Default); } /// /// Finds the index of the first item, in the range of items extending from to the end, /// that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The starting index of the range to check. /// The index of the first item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int IndexOf(T item, int index) { int foundIndex = Algorithms.FirstIndexOf(Range(index, Count - index), item, EqualityComparer.Default); if (foundIndex >= 0) return foundIndex + index; else return -1; } /// /// Finds the index of the first item, in the range of items starting from , /// that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The starting index of the range to check. /// The number of items in range to check. /// The index of the first item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int IndexOf(T item, int index, int count) { int foundIndex = Algorithms.FirstIndexOf(Range(index, count), item, EqualityComparer.Default); if (foundIndex >= 0) return foundIndex + index; else return -1; } /// /// Finds the index of the last item in the list that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The index of the last item in the list that that is equal to . If no item is equal /// to , -1 is returned. public virtual int LastIndexOf(T item) { return Algorithms.LastIndexOf(this, item, EqualityComparer.Default); } /// /// Finds the index of the last item, in the range of items extending from the beginning /// of the list to , that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The ending index of the range to check. /// The index of the last item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int LastIndexOf(T item, int index) { int foundIndex = Algorithms.LastIndexOf(Range(0, index + 1), item, EqualityComparer.Default); return foundIndex; } /// /// Finds the index of the last item, in the range of items ending at , /// that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search for. /// The ending index of the range to check. /// The number of items in range to check. /// The index of the last item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int LastIndexOf(T item, int index, int count) { int foundIndex = Algorithms.LastIndexOf(Range(index - count + 1, count), item, EqualityComparer.Default); if (foundIndex >= 0) return foundIndex + index - count + 1; else return -1; } /// /// Returns a view onto a sub-range of this list. Items are not copied; the /// returned IList<T> is simply a different view onto the same underlying items. Changes to this list /// are reflected in the view, and vice versa. Insertions and deletions in the view change the size of the /// view, but insertions and deletions in the underlying list do not. /// /// /// This method can be used to apply an algorithm to a portion of a list. For example: /// Algorithms.ReverseInPlace(deque.Range(3, 6)) /// will reverse the 6 items beginning at index 3. /// The starting index of the view. /// The number of items in the view. /// A list that is a view onto the given sub-part of this list. /// or is negative. /// + is greater than the /// size of the list. public virtual IList Range(int start, int count) { return Algorithms.Range(this, start, count); } /// /// Convert the given parameter to T. Throw an ArgumentException /// if it isn't. /// /// parameter name /// parameter value private static T ConvertToItemType(string name, object value) { try { return (T)value; } catch (InvalidCastException) { throw new ArgumentException(string.Format(Strings.WrongType, value, typeof(T)), name); } } /// /// Adds an item to the end of the list. This method is equivalent to calling: /// Insert(Count, item) /// /// The item to add to the list. /// cannot be converted to T. int IList.Add(object value) { int count = Count; Insert(count, ConvertToItemType("value", value)); return count; } /// /// Removes all the items from the list, resulting in an empty list. /// void IList.Clear() { Clear(); } /// /// Determines if the list contains any item that compares equal to . /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to search for. bool IList.Contains(object value) { if (value is T || value == null) return Contains((T)value); else return false; } /// /// Find the first occurrence of an item equal to /// in the list, and returns the index of that item. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to search for. /// The index of , or -1 if no item in the /// list compares equal to . int IList.IndexOf(object value) { if (value is T || value == null) return IndexOf((T)value); else return -1; } /// /// Insert a new /// item at the given index. /// /// The index in the list to insert the item at. After the /// insertion, the inserted item is located at this index. The /// first item in the list has index 0. /// The item to insert at the given index. /// is /// less than zero or greater than Count. /// cannot be converted to T. void IList.Insert(int index, object value) { Insert(index, ConvertToItemType("value", value)); } /// /// Returns whether the list is a fixed size. This implementation always returns false. /// /// Alway false, indicating that the list is not fixed size. bool IList.IsFixedSize { get { return false; } } /// /// Returns whether the list is read only. This implementation returns the value /// from ICollection<T>.IsReadOnly, which is by default, false. /// /// By default, false, indicating that the list is not read only. bool IList.IsReadOnly { get { return ((ICollection)this).IsReadOnly; } } /// /// Searches the list for the first item that compares equal to . /// If one is found, it is removed. Otherwise, the list is unchanged. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to remove from the list. /// cannot be converted to T. void IList.Remove(object value) { if (value is T || value == null) Remove((T)value); } /// /// Removes the /// item at the given index. /// /// The index in the list to remove the item at. The /// first item in the list has index 0. /// is /// less than zero or greater than or equal to Count. void IList.RemoveAt(int index) { RemoveAt(index); } /// /// Gets or sets the /// value at a particular index in the list. /// /// The index in the list to get or set an item at. The /// first item in the list has index 0, and the last has index Count-1. /// The item at the given index. /// is /// less than zero or greater than or equal to Count. /// cannot be converted to T. object IList.this[int index] { get { return this[index]; } set { this[index] = ConvertToItemType("value", value); } } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/OrderedBag.cs000066400000000000000000002405001446222606700261500ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections.Generic; // CONSIDER: RemoveIdentical to remove an identical item only. Can this be done with current RedBlack tree implementation? How // CONSIDER: useful is it? namespace Wintellect.PowerCollections { /// /// OrderedBag<T> is a collection that contains items of type T. /// The item are maintained in a sorted order. Unlike a OrderedSet, duplicate items (items that /// compare equal to each other) are allows in an OrderedBag. /// /// ///

The items are compared in one of three ways. If T implements IComparable<TKey> or IComparable, /// then the CompareTo method of that interface will be used to compare items. Alternatively, a comparison /// function can be passed in either as a delegate, or as an instance of IComparer<TKey>.

///

OrderedBag is implemented as a balanced binary tree. Inserting, deleting, and looking up an /// an element all are done in log(N) + M time, where N is the number of keys in the tree, and M is the current number /// of copies of the element being handled.

///

is similar, but uses hashing instead of comparison, and does not maintain /// the keys in sorted order.

///
/// [Serializable] public class OrderedBag : CollectionBase, ICloneable { // The comparer used to compare items. private readonly IComparer comparer; // The red-black tree that actually does the work of storing the items. private RedBlackTree tree; #region Constructors /// /// Creates a new OrderedBag. The T must implement IComparable<T> /// or IComparable. /// The CompareTo method of this interface will be used to compare items in this bag. /// /// /// Items that are null are permitted, and will be sorted before all other items. /// /// T does not implement IComparable<TKey>. public OrderedBag(): this(Comparers.DefaultComparer()) { } /// /// Creates a new OrderedBag. The passed delegate will be used to compare items in this bag. /// /// A delegate to a method that will be used to compare items. public OrderedBag(Comparison comparison) : this(Comparers.ComparerFromComparison(comparison)) { } /// /// Creates a new OrderedBag. The Compare method of the passed comparison object /// will be used to compare items in this bag. /// /// /// The GetHashCode and Equals methods of the provided IComparer<T> will never /// be called, and need not be implemented. /// /// An instance of IComparer<T> that will be used to compare items. public OrderedBag(IComparer comparer) { if (comparer == null) throw new ArgumentNullException("comparer"); this.comparer = comparer; tree = new RedBlackTree(comparer); } /// /// Creates a new OrderedBag. The T must implement IComparable<T> /// or IComparable. /// The CompareTo method of this interface will be used to compare items in this bag. The bag is /// initialized with all the items in the given collection. /// /// /// Items that are null are permitted, and will be sorted before all other items. /// /// A collection with items to be placed into the OrderedBag. /// T does not implement IComparable<TKey>. public OrderedBag(IEnumerable collection): this(collection, Comparers.DefaultComparer()) { } /// /// Creates a new OrderedBag. The passed delegate will be used to compare items in this bag. /// The bag is initialized with all the items in the given collection. /// /// A collection with items to be placed into the OrderedBag. /// A delegate to a method that will be used to compare items. public OrderedBag(IEnumerable collection, Comparison comparison): this(collection, Comparers.ComparerFromComparison(comparison)) { } /// /// Creates a new OrderedBag. The Compare method of the passed comparison object /// will be used to compare items in this bag. The bag is /// initialized with all the items in the given collection. /// /// /// The GetHashCode and Equals methods of the provided IComparer<T> will never /// be called, and need not be implemented. /// /// A collection with items to be placed into the OrderedBag. /// An instance of IComparer<T> that will be used to compare items. public OrderedBag(IEnumerable collection, IComparer comparer): this(comparer) { AddMany(collection); } /// /// Creates a new OrderedBag given a comparer and a tree that contains the data. Used /// internally for Clone. /// /// Comparer for the bag. /// Data for the bag. private OrderedBag(IComparer comparer, RedBlackTree tree) { this.comparer = comparer; this.tree = tree; } #endregion Constructors #region Cloning /// /// Makes a shallow clone of this bag; i.e., if items of the /// bag are reference types, then they are not cloned. If T is a value type, /// then each element is copied as if by simple assignment. /// /// Cloning the bag takes time O(N), where N is the number of items in the bag. /// The cloned bag. object ICloneable.Clone() { return this.Clone(); } /// /// Makes a shallow clone of this bag; i.e., if items of the /// bag are reference types, then they are not cloned. If T is a value type, /// then each element is copied as if by simple assignment. /// /// Cloning the bag takes time O(N), where N is the number of items in the bag. /// The cloned bag. public OrderedBag Clone() { OrderedBag newBag = new OrderedBag(comparer, tree.Clone()); return newBag; } /// /// Makes a deep clone of this bag. A new bag is created with a clone of /// each element of this bag, by calling ICloneable.Clone on each element. If T is /// a value type, then each element is copied as if by simple assignment. /// /// If T is a reference type, it must implement /// ICloneable. Otherwise, an InvalidOperationException is thrown. /// Cloning the bag takes time O(N log N), where N is the number of items in the bag. /// The cloned bag. /// T is a reference type that does not implement ICloneable. public OrderedBag CloneContents() { bool itemIsValueType; if (!Util.IsCloneableType(typeof(T), out itemIsValueType)) throw new InvalidOperationException(string.Format(Strings.TypeNotCloneable, typeof(T).FullName)); OrderedBag clone = new OrderedBag(comparer); // Clone each item, and add it to the new ordered bag. foreach (T item in this) { T itemClone; if (itemIsValueType) itemClone = item; else { if (item == null) itemClone = default(T); // Really null, because we know T is a reference type else itemClone = (T)(((ICloneable)item).Clone()); } clone.Add(itemClone); } return clone; } #endregion Cloning #region Basic collection containment /// /// Returns the IComparer<T> used to compare items in this bag. /// /// If the bag was created using a comparer, that comparer is returned. If the bag was /// created using a comparison delegate, then a comparer equivalent to that delegate /// is returned. Otherwise /// the default comparer for T (Comparer<T>.Default) is returned. public IComparer Comparer { get { return this.comparer; } } /// /// Returns the number of items in the bag. /// /// The size of the bag is returned in constant time. /// The number of items in the bag. public sealed override int Count { get { return tree.ElementCount; } } /// /// Returns the number of copies of in the bag. More precisely, returns /// the number of items in the bag that compare equal to . /// /// NumberOfCopies() takes time O(log N + M), where N is the total number of items in the /// bag, and M is the number of copies of in the bag. /// The item to search for in the bag. /// The number of items in the bag that compare equal to . public int NumberOfCopies(T item) { return tree.CountRange(tree.EqualRangeTester(item)); } /// /// Returns an enumerator that enumerates all the items in the bag. /// The items are enumerated in sorted order. /// /// ///

Typically, this method is not called directly. Instead the "foreach" statement is used /// to enumerate the items, which uses this method implicitly.

///

If an item is added to or deleted from the bag while it is being enumerated, then /// the enumeration will end with an InvalidOperationException.

///

Enumeration all the items in the bag takes time O(N), where N is the number /// of items in the bag.

///
/// An enumerator for enumerating all the items in the OrderedBag. public sealed override IEnumerator GetEnumerator() { return tree.GetEnumerator(); } /// /// Determines if this bag contains an item equal to . The bag /// is not changed. /// /// Searching the bag for an item takes time O(log N), where N is the number of items in the bag. /// The item to search for. /// True if the bag contains . False if the bag does not contain . public sealed override bool Contains(T item) { T dummy; return tree.Find(item, false, false, out dummy); } /// /// Enumerates all of the items in this bag that are equal to , according to the /// comparison mechanism that was used when the bag was created. The bag /// is not changed. /// If the bag does contain an item equal to , then the enumeration contains /// no items. /// /// Enumeration the items in the bag equal to takes time O(log N + M), where N /// is the total number of items in the bag, and M is the number of items equal to . /// The item to search for. /// An IEnumerable<T> that enumerates all the items in the bag equal to . public IEnumerable GetEqualItems(T item) { return tree.EnumerateRange(tree.EqualRangeTester(item)); } /// /// Enumerates all the items in the bag, but enumerates equal items /// just once, even if they occur multiple times in the bag. /// /// If the bag is changed while items are being enumerated, the /// enumeration will terminate with an InvalidOperationException. /// An IEnumerable<T> that enumerates the unique items. public IEnumerable DistinctItems() { T previous = default(T); bool atBeginning = true; // Enumerate the items, but only yield ones not equal to the previous one. foreach (T item in this) { if (atBeginning || comparer.Compare(item, previous) != 0) yield return item; previous = item; atBeginning = false; } } #endregion #region Index by sorted order /// /// Get the item by its index in the sorted order. The smallest item has index 0, /// the next smallest item has index 1, and the largest item has index Count-1. /// /// The indexer takes time O(log N), which N is the number of items in /// the set. /// The index to get the item by. /// The item at the given index. /// is /// less than zero or greater than or equal to Count. public T this[int index] { get { if (index < 0 || index >= Count) throw new ArgumentOutOfRangeException("index"); return tree.GetItemByIndex(index); } } /// /// Get the index of the given item in the sorted order. The smallest item has index 0, /// the next smallest item has index 1, and the largest item has index Count-1. If multiple /// equal items exist, the largest index of the equal items is returned. /// /// Finding the index takes time O(log N), which N is the number of items in /// the set. /// The item to get the index of. /// The index of the last item in the sorted bag equal to , or -1 if the item is not present /// in the set. public int LastIndexOf(T item) { return tree.FindIndex(item, false); } /// /// Get the index of the given item in the sorted order. The smallest item has index 0, /// the next smallest item has index 1, and the largest item has index Count-1. If multiple /// equal items exist, the smallest index of the equal items is returned. /// /// Finding the index takes time O(log N), which N is the number of items in /// the set. /// The item to get the index of. /// The index of the first item in the sorted bag equal to , or -1 if the item is not present /// in the set. public int IndexOf(T item) { return tree.FindIndex(item, true); } #endregion #region Adding elements /// /// Adds a new item to the bag. Since bags can contain duplicate items, the item /// is added even if the bag already contains an item equal to . In /// this case, the new item is placed after all equal items already present in the bag. /// /// /// Adding an item takes time O(log N), where N is the number of items in the bag. /// The item to add to the bag. public sealed override void Add(T item) { T dummy; tree.Insert(item, DuplicatePolicy.InsertLast, out dummy); } /// /// Adds all the items in to the bag. /// /// /// Adding the collection takes time O(M log N), where N is the number of items in the bag, and M is the /// number of items in . /// A collection of items to add to the bag. /// is null. public void AddMany(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); // If we're adding ourselves, we need to copy to a separate array to avoid modification // during enumeration. if (this == collection) collection = this.ToArray(); foreach (T item in collection) Add(item); } #endregion Adding elements #region Removing elements /// /// Searches the bag for one item equal to , and if found, /// removes it from the bag. If not found, the bag is unchanged. If more than one item /// equal to , the item that was last inserted is removed. /// /// /// Equality between items is determined by the comparison instance or delegate used /// to create the bag. /// Removing an item from the bag takes time O(log N), where N is the number of items in the bag. /// The item to remove. /// True if was found and removed. False if was not in the bag. public sealed override bool Remove(T item) { T dummy; return tree.Delete(item, false, out dummy); } /// /// Searches the bag for all items equal to , and /// removes all of them from the bag. If not found, the bag is unchanged. /// /// /// Equality between items is determined by the comparison instance or delegate used /// to create the bag. /// RemoveAllCopies() takes time O(M log N), where N is the total number of items in the bag, and M is /// the number of items equal to . /// The item to remove. /// The number of copies of that were found and removed. public int RemoveAllCopies(T item) { return tree.DeleteRange(tree.EqualRangeTester(item)); } /// /// Removes all the items in from the bag. Items not /// present in the bag are ignored. /// /// /// Equality between items is determined by the comparison instance or delegate used /// to create the bag. /// Removing the collection takes time O(M log N), where N is the number of items in the bag, and M is the /// number of items in . /// A collection of items to remove from the bag. /// The number of items removed from the bag. /// is null. public int RemoveMany(IEnumerable collection) { if (collection == null) throw new ArgumentNullException("collection"); int count = 0; if (collection == this) { count = Count; Clear(); // special case, otherwise we will throw. } else { foreach (T item in collection) { if (Remove(item)) ++count; } } return count; } /// /// Removes all items from the bag. /// /// Clearing the bag takes a constant amount of time, regardless of the number of items in it. public sealed override void Clear() { tree.StopEnumerations(); // Invalidate any enumerations. // The simplest and fastest way is simply to throw away the old tree and create a new one. tree = new RedBlackTree(comparer); } #endregion Removing elements #region First/last items /// /// If the collection is empty, throw an invalid operation exception. /// /// The bag is empty. private void CheckEmpty() { if (Count == 0) throw new InvalidOperationException(Strings.CollectionIsEmpty); } /// /// Returns the first item in the bag: the item /// that would appear first if the bag was enumerated. This is also /// the smallest item in the bag. /// /// GetFirst() takes time O(log N), where N is the number of items in the bag. /// The first item in the bag. If more than one item /// is smallest, the first one added is returned. /// The bag is empty. public T GetFirst() { T item; CheckEmpty(); tree.FirstItemInRange(tree.EntireRangeTester, out item); return item; } /// /// Returns the last item in the bag: the item /// that would appear last if the bag was enumerated. This is also the largest /// item in the bag. /// /// GetLast() takes time O(log N), where N is the number of items in the bag. /// The last item in the bag. If more than one item /// is largest, the last one added is returned. /// The bag is empty. public T GetLast() { T item; CheckEmpty(); tree.LastItemInRange(tree.EntireRangeTester, out item); return item; } /// /// Removes the first item in the bag. This is also the smallest /// item in the bag. /// /// RemoveFirst() takes time O(log N), where N is the number of items in the bag. /// The item that was removed, which was the smallest item in the bag. /// The bag is empty. public T RemoveFirst() { CheckEmpty(); T item; tree.DeleteItemFromRange(tree.EntireRangeTester, true, out item); return item; } /// /// Removes the last item in the bag. This is also the largest item in the bag. /// /// RemoveLast() takes time O(log N), where N is the number of items in the bag. /// The item that was removed, which was the largest item in the bag. /// The bag is empty. public T RemoveLast() { CheckEmpty(); T item; tree.DeleteItemFromRange(tree.EntireRangeTester, false, out item); return item; } #endregion #region Set operations /// /// Check that this bag and another bag were created with the same comparison /// mechanism. Throws exception if not compatible. /// /// Other bag to check comparision mechanism. /// If otherBag and this bag don't use the same method for comparing items. /// is null. private void CheckConsistentComparison(OrderedBag otherBag) { if (otherBag == null) throw new ArgumentNullException("otherBag"); if (!object.Equals(comparer, otherBag.comparer)) throw new InvalidOperationException(Strings.InconsistentComparisons); } /// /// Determines if this bag is a superset of another bag. Neither bag is modified. /// This bag is a superset of if every element in /// is also in this bag, at least the same number of /// times. /// /// IsSupersetOf is computed in time O(M log N), where M is the size of the /// , and N is the size of the this set. /// OrderedBag to compare to. /// True if this is a superset of . /// This bag and don't use the same method for comparing items. /// is null. public bool IsSupersetOf(OrderedBag otherBag) { CheckConsistentComparison(otherBag); if (otherBag.Count > this.Count) return false; // Can't be a superset of a bigger bag // Check each item in the other bag to make sure it is in this bag. foreach (T item in otherBag.DistinctItems()) { if (this.NumberOfCopies(item) < otherBag.NumberOfCopies(item)) return false; } return true; } /// /// Determines if this bag is a proper superset of another bag. Neither bag is modified. /// This bag is a proper superset of if every element in /// is also in this bag, at least the same number of /// times. Additional, this bag must have strictly more items than . /// /// IsProperSupersetOf is computed in time O(M log N), where M is the number of unique items in /// . /// OrderedBag to compare to. /// True if this is a proper superset of . /// This bag and don't use the same method for comparing items. /// is null. public bool IsProperSupersetOf(OrderedBag otherBag) { CheckConsistentComparison(otherBag); if (otherBag.Count >= this.Count) return false; // Can't be a proper superset of a bigger or equal set return IsSupersetOf(otherBag); } /// /// Determines if this bag is a subset of another bag. Neither bag is modified. /// This bag is a subset of if every element in this bag /// is also in , at least the same number of /// times. /// /// IsSubsetOf is computed in time O(N log M), where M is the size of the /// , and N is the size of the this bag. /// OrderedBag to compare to. /// True if this is a subset of . /// This bag and don't use the same method for comparing items. /// is null. public bool IsSubsetOf(OrderedBag otherBag) { return otherBag.IsSupersetOf(this); } /// /// Determines if this bag is a proper subset of another bag. Neither bag is modified. /// This bag is a subset of if every element in this bag /// is also in , at least the same number of /// times. Additional, this bag must have strictly fewer items than . /// /// IsSubsetOf is computed in time O(N log M), where M is the size of the /// , and N is the size of the this bag. /// OrderedBag to compare to. /// True if this is a proper subset of . /// This bag and don't use the same method for comparing items. /// is null. public bool IsProperSubsetOf(OrderedBag otherBag) { return otherBag.IsProperSupersetOf(this); } /// /// Determines if this bag is disjoint from another bag. Two bags are disjoint /// if no item from one set is equal to any item in the other bag. /// /// /// The answer is computed in time O(N), where N is the size of the smaller set. /// /// Bag to check disjointness with. /// True if the two bags are disjoint, false otherwise. /// This bag and don't use the same method for comparing items. public bool IsDisjointFrom(OrderedBag otherBag) { CheckConsistentComparison(otherBag); OrderedBag smaller, larger; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } foreach (T item in smaller) { if (larger.Contains(item)) return false; } return true; } /// /// Determines if this bag is equal to another bag. This bag is equal to /// if they contain the same items, each the /// same number of times. /// /// IsEqualTo is computed in time O(N), where N is the number of items in /// this bag. /// OrderedBag to compare to /// True if this bag is equal to , false otherwise. /// This bag and don't use the same method for comparing items. public bool IsEqualTo(OrderedBag otherBag) { CheckConsistentComparison(otherBag); // Must be the same size. if (otherBag.Count != this.Count) return false; // Since both bags are ordered, we can simply compare items in order. using (IEnumerator enum1 = this.GetEnumerator(), enum2 = otherBag.GetEnumerator()) { bool continue1, continue2; for (; ; ) { continue1 = enum1.MoveNext(); continue2 = enum2.MoveNext(); if (!continue1 || !continue2) break; if (comparer.Compare(enum1.Current, enum2.Current) != 0) return false; // the two items are not equal. } // If both continue1 and continue2 are false, we reached the end of both sequences at the same // time and found success. If one is true and one is false, the sequences were of difference lengths -- failure. return (continue1 == continue2); } } /// /// Computes the union of this bag with another bag. The union of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the union contains the item Maximum(X,Y) times. This bag receives /// the union of the two bags, the other bag is unchanged. /// /// /// The union of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to union with. /// This bag and don't use the same method for comparing items. /// is null. public void UnionWith(OrderedBag otherBag) { CheckConsistentComparison(otherBag); T previous = default(T); bool atBeginning = true; int copiesInThis = 0, copiesInOther = 0; // Enumerate each of the items in the other bag. Add items that need to be // added to this bag. // CONSIDER: may be able to improve this algorithm if otherBag is larger than this bag. foreach (T item in otherBag) { if (atBeginning || comparer.Compare(item, previous) != 0) { copiesInThis = this.NumberOfCopies(item); copiesInOther = 1; } else { ++copiesInOther; } if (copiesInOther > copiesInThis) this.Add(item); previous = item; atBeginning = false; } } /// /// Computes the union of this bag with another bag. The union of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the union contains the item Maximum(X,Y) times. A new bag is /// created with the union of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The union of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to union with. /// The union of the two bags. /// This bag and don't use the same method for comparing items. /// is null. public OrderedBag Union(OrderedBag otherBag) { CheckConsistentComparison(otherBag); OrderedBag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } result = larger.Clone(); result.UnionWith(smaller); return result; } /// /// Computes the sum of this bag with another bag. The sum of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item (X+Y) times. This bag receives /// the sum of the two bags, the other bag is unchanged. /// /// /// The sum of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to sum with. /// This bag and don't use the same method for comparing items. /// is null. public void SumWith(OrderedBag otherBag) { CheckConsistentComparison(otherBag); AddMany(otherBag); // CONSIDER: if otherBag is much larger, maybe better to clone it, // add all of the current into it, and replace. } /// /// Computes the sum of this bag with another bag. he sum of two bags /// is all items from both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item (X+Y) times. A new bag is /// created with the sum of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The sum of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to sum with. /// The sum of the two bags. /// This bag and don't use the same method for comparing items. /// is null. public OrderedBag Sum(OrderedBag otherBag) { CheckConsistentComparison(otherBag); OrderedBag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } result = larger.Clone(); result.AddMany(smaller); return result; } /// /// Computes the intersection of this bag with another bag. The intersection of two bags /// is all items that appear in both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item Minimum(X,Y) times. This bag receives /// the intersection of the two bags, the other bag is unchanged. /// /// /// When equal items appear in both bags, the intersection will include an arbitrary choice of one of the /// two equal items. /// The intersection of two bags is computed in time O(N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to intersection with. /// This bag and don't use the same method for comparing items. /// is null. public void IntersectionWith(OrderedBag otherBag) { CheckConsistentComparison(otherBag); tree.StopEnumerations(); OrderedBag smaller, larger; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } T dummy; RedBlackTree newTree = new RedBlackTree(comparer); T previous = default(T); bool atBeginning = true; int copiesInSmaller = 0, copiesInLarger = 0; // Enumerate each of the items in the smaller bag. Add items that need to be // added to the intersection. foreach (T item in smaller) { if (atBeginning || comparer.Compare(item, previous) != 0) { copiesInLarger = larger.NumberOfCopies(item); copiesInSmaller = 1; } else { ++copiesInSmaller; } if (copiesInSmaller <= copiesInLarger) newTree.Insert(item, DuplicatePolicy.InsertLast, out dummy); previous = item; atBeginning = false; } tree = newTree; } /// /// Computes the intersection of this bag with another bag. The intersection of two bags /// is all items that appear in both of the bags. If an item appears X times in one bag, /// and Y times in the other bag, the sum contains the item Minimum(X,Y) times. A new bag is /// created with the intersection of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// When equal items appear in both bags, the intersection will include an arbitrary choice of one of the /// two equal items. /// The intersection of two bags is computed in time O(N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to intersection with. /// The intersection of the two bags. /// This bag and don't use the same method for comparing items. /// is null. public OrderedBag Intersection(OrderedBag otherBag) { CheckConsistentComparison(otherBag); OrderedBag smaller, larger, result; if (otherBag.Count > this.Count) { smaller = this; larger = otherBag; } else { smaller = otherBag; larger = this; } T previous = default(T); bool atBeginning = true; int copiesInSmaller = 0, copiesInLarger = 0; // Enumerate each of the items in the smaller bag. Add items that need to be // added to the intersection. result = new OrderedBag(comparer); foreach (T item in smaller) { if (atBeginning || comparer.Compare(item, previous) != 0) { copiesInLarger = larger.NumberOfCopies(item); copiesInSmaller = 1; } else { ++copiesInSmaller; } if (copiesInSmaller <= copiesInLarger) result.Add(item); previous = item; atBeginning = false; } return result; } /// /// Computes the difference of this bag with another bag. The difference of these two bags /// is all items that appear in this bag, but not in . If an item appears X times in this bag, /// and Y times in the other bag, the difference contains the item X - Y times (zero times if Y >= X). This bag receives /// the difference of the two bags; the other bag is unchanged. /// /// /// The difference of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to difference with. /// This bag and don't use the same method for comparing items. /// is null. public void DifferenceWith(OrderedBag otherBag) { // Difference with myself is nothing. This check is needed because the // main algorithm doesn't work correctly otherwise. if (this == otherBag) Clear(); CheckConsistentComparison(otherBag); T previous = default(T); bool atBeginning = true; int copiesInThis = 0, copiesInOther = 0; // Enumerate each of the items in the other bag. Remove items that need to be // removed from this bag. // CONSIDER: should be able to improve this algorithm if otherBag is larger than this bag. foreach (T item in otherBag) { if (atBeginning || comparer.Compare(item, previous) != 0) { copiesInThis = this.NumberOfCopies(item); copiesInOther = 1; } else { ++copiesInOther; } if (copiesInOther <= copiesInThis) this.Remove(item); previous = item; atBeginning = false; } } /// /// Computes the difference of this bag with another bag. The difference of these two bags /// is all items that appear in this bag, but not in . If an item appears X times in this bag, /// and Y times in the other bag, the difference contains the item X - Y times (zero times if Y >= X). A new bag is /// created with the difference of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The difference of two bags is computed in time O(M + N log M), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to difference with. /// The difference of the two bags. /// This bag and don't use the same method for comparing items. /// is null. public OrderedBag Difference(OrderedBag otherBag) { CheckConsistentComparison(otherBag); OrderedBag result = this.Clone(); result.DifferenceWith(otherBag); return result; } /// /// Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags /// is all items that appear in either of the bags, but not both. If an item appears X times in one bag, /// and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). This bag receives /// the symmetric difference of the two bags; the other bag is unchanged. /// /// /// The symmetric difference of two bags is computed in time O(M + N), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to symmetric difference with. /// This bag and don't use the same method for comparing items. /// is null. public void SymmetricDifferenceWith(OrderedBag otherBag) { tree = SymmetricDifference(otherBag).tree; } /// /// Computes the symmetric difference of this bag with another bag. The symmetric difference of two bags /// is all items that appear in either of the bags, but not both. If an item appears X times in one bag, /// and Y times in the other bag, the symmetric difference contains the item AbsoluteValue(X - Y times). A new bag is /// created with the symmetric difference of the bags and is returned. This bag and the other bag /// are unchanged. /// /// /// The symmetric difference of two bags is computed in time O(M + N), where M is the size of the /// larger bag, and N is the size of the smaller bag. /// /// Bag to symmetric difference with. /// The symmetric difference of the two bags. /// This bag and don't use the same method for comparing items. /// is null. public OrderedBag SymmetricDifference(OrderedBag otherBag) { CheckConsistentComparison(otherBag); OrderedBag result = new OrderedBag(comparer); IEnumerator enum1 = this.GetEnumerator(), enum2 = otherBag.GetEnumerator(); bool valid1 = enum1.MoveNext(); bool valid2 = enum2.MoveNext(); int compare; for (;;) { // Which item is smaller? The end (!valid) is considered larger than any item. if (! valid1) { if (! valid2) break; compare = 1; } else if (! valid2) compare = -1; else compare = comparer.Compare(enum1.Current, enum2.Current); // If equal, move through both bags without adding. Otherwise, add the smaller item and advance // just through that bag. if (compare == 0) { valid1 = enum1.MoveNext(); valid2 = enum2.MoveNext(); } else if (compare < 0) { result.Add(enum1.Current); valid1 = enum1.MoveNext(); } else { // compare > 0 result.Add(enum2.Current); valid2 = enum2.MoveNext(); } } return result; } #endregion Set operations #region Read-only list view /// /// Get a read-only list view of the items in this ordered bag. The /// items in the list are in sorted order, with the smallest item /// at index 0. This view does not copy any data, and reflects any /// changes to the underlying OrderedBag. /// /// A read-only IList<T> view onto this OrderedBag. public IList AsList() { return new ListView(this, tree.EntireRangeTester, true, false); } /// /// The nested class that provides a read-only list view /// of all or part of the collection. /// [Serializable] private class ListView : ReadOnlyListBase { private readonly OrderedBag myBag; private readonly RedBlackTree.RangeTester rangeTester; // range tester for the range being used. private readonly bool entireTree; // is the view the whole tree? private readonly bool reversed; // is the view reversed? /// /// Create a new list view wrapped the given set. /// /// The ordered bag to wrap. /// Range tester that defines the range being used. /// If true, then rangeTester defines the entire tree. Used to optimize some operations. /// Is the view enuemerated in reverse order? public ListView(OrderedBag myBag, RedBlackTree.RangeTester rangeTester, bool entireTree, bool reversed) { this.myBag = myBag; this.rangeTester = rangeTester; this.entireTree = entireTree; this.reversed = reversed; } public sealed override int Count { get { if (entireTree) return myBag.Count; else { // Note: we can't cache the result of this call because the underlying // set can change, which would make the cached value incorrect. return myBag.tree.CountRange(rangeTester); } } } public sealed override T this[int index] { get { if (entireTree) { if (reversed) return myBag[myBag.Count - 1 - index]; else return myBag[index]; } else { T dummy; int firstIndex = myBag.tree.FirstItemInRange(rangeTester, out dummy); int lastIndex = myBag.tree.LastItemInRange(rangeTester, out dummy); if (firstIndex < 0 || lastIndex < 0 || index < 0 || index >= (lastIndex - firstIndex + 1)) throw new ArgumentOutOfRangeException("index"); if (reversed) return myBag[lastIndex - index]; else return myBag[firstIndex + index]; } } } public sealed override int IndexOf(T item) { if (entireTree) { if (reversed) return myBag.Count - 1 - myBag.LastIndexOf(item); else return myBag.IndexOf(item); } else { T dummy; if (rangeTester(item) != 0) return -1; if (reversed) { int indexInSet = myBag.tree.FindIndex(item, false); if (indexInSet < 0) return -1; int indexOfEnd = myBag.tree.LastItemInRange(rangeTester, out dummy); return indexOfEnd - indexInSet; } else { int indexInSet = myBag.tree.FindIndex(item, true); if (indexInSet < 0) return -1; int indexOfStart = myBag.tree.FirstItemInRange(rangeTester, out dummy); return indexInSet - indexOfStart; } } } } #endregion Read-only list view #region Sub-views /// /// Returns a View collection that can be used for enumerating the items in the bag in /// reversed order. /// /// ///

Typically, this method is used in conjunction with a foreach statement. For example: /// /// foreach(T item in bag.Reversed()) { /// // process item /// } ///

///

If an item is added to or deleted from the bag while the View is being enumerated, then /// the enumeration will end with an InvalidOperationException.

///

Calling Reverse does not copy the data in the tree, and the operation takes constant time.

///
/// An OrderedBag.View of items in reverse order. public View Reversed() // A reversed view that can be enumerated { return new View(this, tree.EntireRangeTester, true, true); } /// /// Returns a View collection that can be used for enumerating a range of the items in the bag. /// Only items that are greater than and /// less than are included. The items are enumerated in sorted order. /// Items equal to the end points of the range can be included or excluded depending on the /// and parameters. /// /// ///

If is greater than or equal to , the returned collection is empty.

///

Typically, this method is used in conjunction with a foreach statement. For example: /// /// foreach(T item in bag.Range(from, true, to, false)) { /// // process item /// } ///

///

If an item is added to or deleted from the bag while the View is being enumerated, then /// the enumeration will end with an InvalidOperationException.

///

Calling Range does not copy the data in the tree, and the operation takes constant time.

///
/// The lower bound of the range. /// If true, the lower bound is inclusive--items equal to the lower bound will /// be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not /// be included in the range. /// The upper bound of the range. /// If true, the upper bound is inclusive--items equal to the upper bound will /// be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not /// be included in the range. /// An OrderedBag.View of items in the given range. public View Range(T from, bool fromInclusive, T to, bool toInclusive) // A partial view that can be enumerated { return new View(this, tree.DoubleBoundedRangeTester(from, fromInclusive, to, toInclusive), false, false); } /// /// Returns a View collection that can be used for enumerating a range of the items in the bag. /// Only items that are greater than (and optionally, equal to) are included. /// The items are enumerated in sorted order. Items equal to can be included /// or excluded depending on the parameter. /// /// ///

Typically, this method is used in conjunction with a foreach statement. For example: /// /// foreach(T item in bag.RangeFrom(from, true)) { /// // process item /// } ///

///

If an item is added to or deleted from the bag while the View is being enumerated, then /// the enumeration will end with an InvalidOperationException.

///

Calling RangeFrom does not copy the data in the tree, and the operation takes constant time.

///
/// The lower bound of the range. /// If true, the lower bound is inclusive--items equal to the lower bound will /// be included in the range. If false, the lower bound is exclusive--items equal to the lower bound will not /// be included in the range. /// An OrderedBag.View of items in the given range. public View RangeFrom(T from, bool fromInclusive) // A partial view that can be enumerated { return new View(this, tree.LowerBoundedRangeTester(from, fromInclusive), false, false); } /// /// Returns a View collection that can be used for enumerating a range of the items in the bag. /// Only items that are less than (and optionally, equal to) are included. /// The items are enumerated in sorted order. Items equal to can be included /// or excluded depending on the parameter. /// /// ///

Typically, this method is used in conjunction with a foreach statement. For example: /// /// foreach(T item in bag.RangeTo(to, false)) { /// // process item /// } ///

///

If an item is added to or deleted from the bag while the View is being enumerated, then /// the enumeration will end with an InvalidOperationException.

///

Calling RangeTo does not copy the data in the tree, and the operation takes constant time.

///
/// The upper bound of the range. /// If true, the upper bound is inclusive--items equal to the upper bound will /// be included in the range. If false, the upper bound is exclusive--items equal to the upper bound will not /// be included in the range. /// An OrderedBag.View of items in the given range. public View RangeTo(T to, bool toInclusive) // A partial view that can be enumerated { return new View(this, tree.UpperBoundedRangeTester(to, toInclusive), false, false); } #endregion #region View nested class /// /// The OrderedBag<T>.View class is used to look at a subset of the items /// inside an ordered bag. It is returned from the Range, RangeTo, RangeFrom, and Reversed methods. /// /// ///

Views are dynamic. If the underlying bag changes, the view changes in sync. If a change is made /// to the view, the underlying bag changes accordingly.

///

Typically, this class is used in conjunction with a foreach statement to enumerate the items /// in a subset of the OrderedBag. For example:

/// /// foreach(T item in bag.Range(from, to)) { /// // process item /// } /// ///
[Serializable] public class View : CollectionBase { private readonly OrderedBag myBag; private readonly RedBlackTree.RangeTester rangeTester; // range tester for the range being used. private readonly bool entireTree; // is the view the whole tree? private readonly bool reversed; // is the view reversed? /// /// Initialize the view. /// /// OrderedBag being viewed /// Range tester that defines the range being used. /// If true, then rangeTester defines the entire tree. /// Is the view enuemerated in reverse order? internal View(OrderedBag myBag, RedBlackTree.RangeTester rangeTester, bool entireTree, bool reversed) { this.myBag = myBag; this.rangeTester = rangeTester; this.entireTree = entireTree; this.reversed = reversed; } /// /// Determine if the given item lies within the bounds of this view. /// /// Item to test. /// True if the item is within the bounds of this view. private bool ItemInView(T item) { return rangeTester(item) == 0; } /// /// Enumerate all the items in this view. /// /// An IEnumerator<T> with the items in this view. public sealed override IEnumerator GetEnumerator() { if (reversed) return myBag.tree.EnumerateRangeReversed(rangeTester).GetEnumerator(); else return myBag.tree.EnumerateRange(rangeTester).GetEnumerator(); } /// /// Number of items in this view. /// /// Number of items that lie within the bounds the view. public sealed override int Count { get { if (entireTree) return myBag.Count; else { // Note: we can't cache the result of this call because the underlying // set can change, which would make the cached value incorrect. return myBag.tree.CountRange(rangeTester); } } } /// /// Removes all the items within this view from the underlying bag. /// /// The following removes all the items that start with "A" from an OrderedBag. /// /// bag.Range("A", "B").Clear(); /// /// public sealed override void Clear() { if (entireTree) { myBag.Clear(); } else { myBag.tree.DeleteRange(rangeTester); } } /// /// Adds a new item to the bag underlying this View. If the bag already contains an item equal to /// , that item is replaces with . If /// is outside the range of this view, an InvalidOperationException /// is thrown. /// /// /// Equality between items is determined by the comparison instance or delegate used /// to create the bag. /// Adding an item takes time O(log N), where N is the number of items in the bag. /// The item to add. /// True if the bag already contained an item equal to (which was replaced), false /// otherwise. public sealed override void Add(T item) { if (!ItemInView(item)) throw new ArgumentException(Strings.OutOfViewRange, "item"); else myBag.Add(item); } /// /// Searches the underlying bag for an item equal to , and if found, /// removes it from the bag. If not found, the bag is unchanged. If the item is outside /// the range of this view, the bag is unchanged. /// /// /// Equality between items is determined by the comparison instance or delegate used /// to create the bag. /// Removing an item from the bag takes time O(log N), where N is the number of items in the bag. /// The item to remove. /// True if was found and removed. False if was not in the bag, or /// was outside the range of this view. public sealed override bool Remove(T item) { if (!ItemInView(item)) return false; else return myBag.Remove(item); } /// /// Determines if this view of the bag contains an item equal to . The bag /// is not changed. If /// /// Searching the bag for an item takes time O(log N), where N is the number of items in the bag. /// The item to search for. /// True if the bag contains , and is within /// the range of this view. False otherwise. public sealed override bool Contains(T item) { if (!ItemInView(item)) return false; else return myBag.Contains(item); } /// /// Get the first index of the given item in the view. The smallest item in the view has index 0, /// the next smallest item has index 1, and the largest item has index Count-1. /// /// Finding the index takes time O(log N), which N is the number of items in /// the set. /// The item to get the index of. /// The index of the first item in the view equal to , or -1 if the item is not present /// in the view. public int IndexOf(T item) { if (entireTree) { if (reversed) { int indexInSet = myBag.tree.FindIndex(item, false); if (indexInSet < 0) return -1; return myBag.Count - 1 - indexInSet; } else { return myBag.tree.FindIndex(item, true); } } else { T dummy; if (!ItemInView(item)) return -1; if (reversed) { int indexInSet = myBag.tree.FindIndex(item, false); if (indexInSet < 0) return -1; int indexOfEnd = myBag.tree.LastItemInRange(rangeTester, out dummy); return indexOfEnd - indexInSet; } else { int indexInSet = myBag.tree.FindIndex(item, true); if (indexInSet < 0) return -1; int indexOfStart = myBag.tree.FirstItemInRange(rangeTester, out dummy); return indexInSet - indexOfStart; } } } /// /// Get the last index of the given item in the view. The smallest item in the view has index 0, /// the next smallest item has index 1, and the largest item has index Count-1. /// /// Finding the index takes time O(log N), which N is the number of items in /// the set. /// The item to get the index of. /// The index of the last item in the view equal to , or -1 if the item is not present /// in the view. public int LastIndexOf(T item) { if (entireTree) { if (reversed) { int indexInSet = myBag.tree.FindIndex(item, true); if (indexInSet < 0) return -1; return myBag.Count - 1 - indexInSet; } else { return myBag.tree.FindIndex(item, false); } } else { T dummy; if (!ItemInView(item)) return -1; if (reversed) { int indexInSet = myBag.tree.FindIndex(item, true); if (indexInSet < 0) return -1; int indexOfEnd = myBag.tree.LastItemInRange(rangeTester, out dummy); return indexOfEnd - indexInSet; } else { int indexInSet = myBag.tree.FindIndex(item, false); if (indexInSet < 0) return -1; int indexOfStart = myBag.tree.FirstItemInRange(rangeTester, out dummy); return indexInSet - indexOfStart; } } } /// /// Get the item by its index in the sorted order. The smallest item in the view has index 0, /// the next smallest item has index 1, and the largest item has index Count-1. /// /// The indexer takes time O(log N), which N is the number of items in /// the set. /// The index to get the item by. /// The item at the given index. /// is /// less than zero or greater than or equal to Count. public T this[int index] { get { if (entireTree) { if (reversed) { return myBag[myBag.Count - 1 - index]; } else { return myBag[index]; } } else { T dummy; int firstIndex = myBag.tree.FirstItemInRange(rangeTester, out dummy); int lastIndex = myBag.tree.LastItemInRange(rangeTester, out dummy); if (firstIndex < 0 || lastIndex < 0 || index < 0 || index >= (lastIndex - firstIndex + 1)) throw new ArgumentOutOfRangeException("index"); if (reversed) return myBag[lastIndex - index]; else return myBag[firstIndex + index]; } } } /// /// Get a read-only list view of the items in this view. The /// items in the list are in sorted order, with the smallest item /// at index 0. This view does not copy any data, and reflects any /// changes to the underlying OrderedSet. /// /// A read-only IList<T> view onto this view. public IList AsList() { return new ListView(myBag, rangeTester, entireTree, reversed); } /// /// Creates a new View that has the same items as this view, in the reversed order. /// /// A new View that has the reversed order of this view, with the same upper /// and lower bounds. public View Reversed() { return new View(myBag, rangeTester, entireTree, !reversed); } /// /// Returns the first item in this view: the item /// that would appear first if the view was enumerated. /// /// GetFirst() takes time O(log N), where N is the number of items in the bag. /// The first item in the view. /// The view has no items in it. public T GetFirst() { T item; int found; if (reversed) found = myBag.tree.LastItemInRange(rangeTester, out item); else found = myBag.tree.FirstItemInRange(rangeTester, out item); if (found < 0) throw new InvalidOperationException(Strings.CollectionIsEmpty); return item; } /// /// Returns the last item in the view: the item /// that would appear last if the view was enumerated. /// /// GetLast() takes time O(log N), where N is the number of items in the bag. /// The last item in the view. /// The view has no items in it. public T GetLast() { T item; int found; if (reversed) found = myBag.tree.FirstItemInRange(rangeTester, out item); else found = myBag.tree.LastItemInRange(rangeTester, out item); if (found < 0) throw new InvalidOperationException(Strings.CollectionIsEmpty); return item; } } #endregion } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Pair.cs000066400000000000000000000300321446222606700250420ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// Stores a pair of objects within a single struct. This struct is useful to use as the /// T of a collection, or as the TKey or TValue of a dictionary. /// [Serializable] public struct Pair : IComparable, IComparable> { /// /// Comparers for the first and second type that are used to compare /// values. /// private static readonly IComparer firstComparer = Comparer.Default; private static readonly IComparer secondComparer = Comparer.Default; private static readonly IEqualityComparer firstEqualityComparer = EqualityComparer.Default; private static readonly IEqualityComparer secondEqualityComparer = EqualityComparer.Default; /// /// The first element of the pair. /// public TFirst First; /// /// The second element of the pair. /// public TSecond Second; /// /// Creates a new pair with given first and second elements. /// /// The first element of the pair. /// The second element of the pair. public Pair(TFirst first, TSecond second) { this.First = first; this.Second = second; } /// /// Creates a new pair using elements from a KeyValuePair structure. The /// First element gets the Key, and the Second elements gets the Value. /// /// The KeyValuePair to initialize the Pair with . public Pair(KeyValuePair keyAndValue) { this.First = keyAndValue.Key; this.Second = keyAndValue.Value; } /// /// Determines if this pair is equal to another object. The pair is equal to another object /// if that object is a Pair, both element types are the same, and the first and second elements /// both compare equal using object.Equals. /// /// Object to compare for equality. /// True if the objects are equal. False if the objects are not equal. public override bool Equals(object obj) { if (obj != null && obj is Pair) { Pair other = (Pair)obj; return Equals(other); } else { return false; } } /// /// Determines if this pair is equal to another pair. The pair is equal if the first and second elements /// both compare equal using IComparable<T>.Equals or object.Equals. /// /// Pair to compare with for equality. /// True if the pairs are equal. False if the pairs are not equal. public bool Equals(Pair other) { return firstEqualityComparer.Equals(First, other.First) && secondEqualityComparer.Equals(Second, other.Second); } /// /// Returns a hash code for the pair, suitable for use in a hash-table or other hashed collection. /// Two pairs that compare equal (using Equals) will have the same hash code. The hash code for /// the pair is derived by combining the hash codes for each of the two elements of the pair. /// /// The hash code. public override int GetHashCode() { // Build the hash code from the hash codes of First and Second. int hashFirst = (First == null) ? 0x61E04917 : First.GetHashCode(); int hashSecond = (Second == null) ? 0x198ED6A3 : Second.GetHashCode(); return hashFirst ^ hashSecond; } /// /// Compares this pair to another pair of the some type. The pairs are compared by using /// the IComparable<T> or IComparable interface on TFirst and TSecond. The pairs /// are compared by their first elements first, if their first elements are equal, then they /// are compared by their second elements. /// If either TFirst or TSecond does not implement IComparable<T> or IComparable, then /// an NotSupportedException is thrown, because the pairs cannot be compared. /// /// The pair to compare to. /// An integer indicating how this pair compares to . Less /// than zero indicates this pair is less than . Zero indicate this pair is /// equals to . Greater than zero indicates this pair is greater than /// . /// Either FirstSecond or TSecond is not comparable /// via the IComparable<T> or IComparable interfaces. public int CompareTo(Pair other) { try { int firstCompare = firstComparer.Compare(First, other.First); if (firstCompare != 0) return firstCompare; else return secondComparer.Compare(Second, other.Second); } catch (ArgumentException) { // Determine which type caused the problem for a better error message. if (!typeof(IComparable).IsAssignableFrom(typeof(TFirst)) && !typeof(System.IComparable).IsAssignableFrom(typeof(TFirst))) { throw new NotSupportedException(string.Format(Strings.UncomparableType, typeof(TFirst).FullName)); } else if (!typeof(IComparable).IsAssignableFrom(typeof(TSecond)) && !typeof(System.IComparable).IsAssignableFrom(typeof(TSecond))) { throw new NotSupportedException(string.Format(Strings.UncomparableType, typeof(TSecond).FullName)); } else throw; // Hmmm. Unclear why we got the ArgumentException. } } /// /// Compares this pair to another pair of the some type. The pairs are compared by using /// the IComparable<T> or IComparable interface on TFirst and TSecond. The pairs /// are compared by their first elements first, if their first elements are equal, then they /// are compared by their second elements. /// If either TFirst or TSecond does not implement IComparable<T> or IComparable, then /// an NotSupportedException is thrown, because the pairs cannot be compared. /// /// The pair to compare to. /// An integer indicating how this pair compares to . Less /// than zero indicates this pair is less than . Zero indicate this pair is /// equals to . Greater than zero indicates this pair is greater than /// . /// is not of the correct type. /// Either FirstSecond or TSecond is not comparable /// via the IComparable<T> or IComparable interfaces. int IComparable.CompareTo(object obj) { if (obj is Pair) return CompareTo((Pair)obj); else throw new ArgumentException(Strings.BadComparandType, "obj"); } /// /// Returns a string representation of the pair. The string representation of the pair is /// of the form: /// First: {0}, Second: {1} /// where {0} is the result of First.ToString(), and {1} is the result of Second.ToString() (or /// "null" if they are null.) /// /// The string representation of the pair. public override string ToString() { return string.Format("First: {0}, Second: {1}", (First == null) ? "null" : First.ToString(), (Second == null) ? "null" : Second.ToString()); } /// /// Determines if two pairs are equal. Two pairs are equal if the first and second elements /// both compare equal using IComparable<T>.Equals or object.Equals. /// /// First pair to compare. /// Second pair to compare. /// True if the pairs are equal. False if the pairs are not equal. public static bool operator ==(Pair pair1, Pair pair2) { return firstEqualityComparer.Equals(pair1.First, pair2.First) && secondEqualityComparer.Equals(pair1.Second, pair2.Second); } /// /// Determines if two pairs are not equal. Two pairs are equal if the first and second elements /// both compare equal using IComparable<T>.Equals or object.Equals. /// /// First pair to compare. /// Second pair to compare. /// True if the pairs are not equal. False if the pairs are equal. public static bool operator !=(Pair pair1, Pair pair2) { return !(pair1 == pair2); } /// /// Converts a Pair to a KeyValuePair. The Key part of the KeyValuePair gets /// the First element, and the Value part of the KeyValuePair gets the Second /// elements. /// /// Pair to convert. /// The KeyValuePair created from . public static explicit operator KeyValuePair(Pair pair) { return new KeyValuePair(pair.First, pair.Second); } /// /// Converts this Pair to a KeyValuePair. The Key part of the KeyValuePair gets /// the First element, and the Value part of the KeyValuePair gets the Second /// elements. /// /// The KeyValuePair created from this Pair. public KeyValuePair ToKeyValuePair() { return new KeyValuePair(this.First, this.Second); } /// /// Converts a KeyValuePair structure into a Pair. The /// First element gets the Key, and the Second element gets the Value. /// /// The KeyValuePair to convert. /// The Pair created by converted the KeyValuePair into a Pair. public static explicit operator Pair(KeyValuePair keyAndValue) { return new Pair(keyAndValue); } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/ReadOnlyCollectionBase.cs000066400000000000000000000366551446222606700305140ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; namespace Wintellect.PowerCollections { /// /// ReadOnlyCollectionBase is a base class that can be used to more easily implement the /// generic ICollection<T> and non-generic ICollection interfaces for a read-only collection: /// a collection that does not allow adding or removing elements. /// /// /// To use ReadOnlyCollectionBase as a base class, the derived class must override /// the Count and GetEnumerator methods. /// ICollection<T>.Contains need not be implemented by the /// derived class, but it should be strongly considered, because the ReadOnlyCollectionBase implementation /// may not be very efficient. /// /// The item type of the collection. [Serializable] [DebuggerDisplay("{DebuggerDisplayString()}")] public abstract class ReadOnlyCollectionBase : ICollection, ICollection { /// /// Throws an NotSupportedException stating that this collection cannot be modified. /// private void MethodModifiesCollection() { throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, Util.SimpleClassName(this.GetType()))); } #region Delegate operations /// /// Shows the string representation of the collection. The string representation contains /// a list of the items in the collection. /// /// The string representation of the collection. public override string ToString() { return Algorithms.ToString(this); } /// /// Determines if the collection contains any item that satisfies the condition /// defined by . /// /// A delegate that defines the condition to check for. /// True if the collection contains one or more items that satisfy the condition /// defined by . False if the collection does not contain /// an item that satisfies . public virtual bool Exists(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.Exists(this, predicate); } /// /// Determines if all of the items in the collection satisfy the condition /// defined by . /// /// A delegate that defines the condition to check for. /// True if all of the items in the collection satisfy the condition /// defined by , or if the collection is empty. False if one or more items /// in the collection do not satisfy . public virtual bool TrueForAll(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.TrueForAll(this, predicate); } /// /// Counts the number of items in the collection that satisfy the condition /// defined by . /// /// A delegate that defines the condition to check for. /// The number of items in the collection that satisfy . public virtual int CountWhere(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.CountWhere(this, predicate); } /// /// Enumerates the items in the collection that satisfy the condition defined /// by . /// /// A delegate that defines the condition to check for. /// An IEnumerable<T> that enumerates the items that satisfy the condition. public IEnumerable FindAll(Predicate predicate) { if (predicate == null) throw new ArgumentNullException("predicate"); return Algorithms.FindWhere(this, predicate); } /// /// Performs the specified action on each item in this collection. /// /// An Action delegate which is invoked for each item in this collection. public virtual void ForEach(Action action) { if (action == null) throw new ArgumentNullException("action"); Algorithms.ForEach(this, action); } /// /// Convert this collection of items by applying a delegate to each item in the collection. The resulting enumeration /// contains the result of applying to each item in this collection, in /// order. /// /// The type each item is being converted to. /// A delegate to the method to call, passing each item in this collection. /// An IEnumerable<TOutput^gt; that enumerates the resulting collection from applying to each item in this collection in /// order. /// is null. public virtual IEnumerable ConvertAll(Converter converter) { if (converter == null) throw new ArgumentNullException("converter"); return Algorithms.Convert(this, converter); } #endregion Delegate operations #region ICollection Members /// /// This method throws an NotSupportedException /// stating the collection is read-only. /// /// Item to be added to the collection. /// Always thrown. void ICollection.Add(T item) { MethodModifiesCollection(); } /// /// This method throws an NotSupportedException /// stating the collection is read-only. /// /// Always thrown. void ICollection.Clear() { MethodModifiesCollection(); } /// /// This method throws an NotSupportedException /// stating the collection is read-only. /// /// Item to be removed from the collection. /// Always thrown. bool ICollection.Remove(T item) { MethodModifiesCollection(); return false; } /// /// Determines if the collection contains a particular item. This default implementation /// iterates all of the items in the collection via GetEnumerator, testing each item /// against using IComparable<T>.Equals or /// Object.Equals. /// /// You should strongly consider overriding this method to provide /// a more efficient implementation. /// The item to check for in the collection. /// True if the collection contains , false otherwise. public virtual bool Contains(T item) { IEqualityComparer equalityComparer = EqualityComparer.Default; foreach (T i in this) { if (equalityComparer.Equals(i, item)) return true; } return false; } /// /// Copies all the items in the collection into an array. Implemented by /// using the enumerator returned from GetEnumerator to get all the items /// and copy them to the provided array. /// /// Array to copy to. /// Starting index in to copy to. public virtual void CopyTo(T[] array, int arrayIndex) { int count = this.Count; if (count == 0) return; if (array == null) throw new ArgumentNullException("array"); if (count < 0) throw new IndexOutOfRangeException(Strings.ArgMustNotBeNegative); if (arrayIndex < 0) throw new ArgumentOutOfRangeException("arrayIndex", arrayIndex, Strings.ArgMustNotBeNegative); if (arrayIndex >= array.Length || count > array.Length - arrayIndex) throw new ArgumentException("arrayIndex", Strings.ArrayTooSmall); int index = arrayIndex, i = 0; //TODO: Look into this foreach (T item in (ICollection)this) { if (i >= count) break; array[index] = item; ++index; ++i; } } /// /// Creates an array of the correct size, and copies all the items in the /// collection into the array, by calling CopyTo. /// /// An array containing all the elements in the collection, in order. public virtual T[] ToArray() { int count = this.Count; T[] array = new T[count]; CopyTo(array, 0); return array; } /// /// Must be overridden to provide the number of items in the collection. /// /// The number of items in the collection. public abstract int Count { get; } /// /// Indicates whether the collection is read-only. Returns the value /// of readOnly that was provided to the constructor. /// /// Always true. bool ICollection.IsReadOnly { get { return true; } } #endregion #region IEnumerable Members /// /// Must be overridden to enumerate all the members of the collection. /// /// A generic IEnumerator<T> that can be used /// to enumerate all the items in the collection. public abstract IEnumerator GetEnumerator(); #endregion #region ICollection Members /// /// Copies all the items in the collection into an array. Implemented by /// using the enumerator returned from GetEnumerator to get all the items /// and copy them to the provided array. /// /// Array to copy to. /// Starting index in to copy to. void ICollection.CopyTo(Array array, int index) { int count = this.Count; if (count == 0) return; if (array == null) throw new ArgumentNullException("array"); if (count < 0) throw new IndexOutOfRangeException(Strings.ArgMustNotBeNegative); if (index < 0) throw new ArgumentOutOfRangeException("index", index, Strings.ArgMustNotBeNegative); if (index >= array.Length || count > array.Length - index) throw new ArgumentException("index", Strings.ArrayTooSmall); int i = 0; //TODO: Look into this foreach (object o in (ICollection)this) { if (i >= count) break; array.SetValue(o, index); ++index; ++i; } } /// /// Indicates whether the collection is synchronized. /// /// Always returns false, indicating that the collection is not synchronized. bool ICollection.IsSynchronized { get { return false; } } /// /// Indicates the synchronization object for this collection. /// /// Always returns this. object ICollection.SyncRoot { get { return this; } } #endregion #region IEnumerable Members /// /// Provides an IEnumerator that can be used to iterate all the members of the /// collection. This implementation uses the IEnumerator<T> that was overridden /// by the derived classes to enumerate the members of the collection. /// /// An IEnumerator that can be used to iterate the collection. IEnumerator IEnumerable.GetEnumerator() { foreach (T item in this) { yield return item; } } #endregion /// /// Display the contents of the collection in the debugger. This is intentionally private, it is called /// only from the debugger due to the presence of the DebuggerDisplay attribute. It is similar /// format to ToString(), but is limited to 250-300 characters or so, so as not to overload the debugger. /// /// The string representation of the items in the collection, similar in format to ToString(). internal string DebuggerDisplayString() { const int MAXLENGTH = 250; System.Text.StringBuilder builder = new System.Text.StringBuilder(); builder.Append('{'); // Call ToString on each item and put it in. bool firstItem = true; foreach (T item in this) { if (builder.Length >= MAXLENGTH) { builder.Append(",..."); break; } if (!firstItem) builder.Append(','); if (item == null) builder.Append("null"); else builder.Append(item.ToString()); firstItem = false; } builder.Append('}'); return builder.ToString(); } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/ReadOnlyListBase.cs000066400000000000000000000711371446222606700273260ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// ReadOnlyListBase is an abstract class that can be used as a base class for a read-only collection that needs /// to implement the generic IList<T> and non-generic IList collections. The derived class needs /// to override the Count property and the get part of the indexer. The implementation /// of all the other methods in IList<T> and IList are handled by ListBase. /// /// [Serializable] public abstract class ReadOnlyListBase : ReadOnlyCollectionBase, IList, IList { /// /// Throws an NotSupportedException stating that this collection cannot be modified. /// private void MethodModifiesCollection() { throw new NotSupportedException(string.Format(Strings.CannotModifyCollection, Util.SimpleClassName(this.GetType()))); } /// /// The property must be overridden by the derived class to return the number of /// items in the list. /// /// The number of items in the list. public abstract override int Count { get;} /// /// The get part of the indexer must be overridden by the derived class to get /// values of the list at a particular index. /// /// The index in the list to get or set an item at. The /// first item in the list has index 0, and the last has index Count-1. /// The item at the given index. /// is /// less than zero or greater than or equal to Count. public virtual T this[int index] { get { throw new NotImplementedException(Strings.MustOverrideIndexerGet); } set { MethodModifiesCollection(); } } /// /// Enumerates all of the items in the list, in order. The item at index 0 /// is enumerated first, then the item at index 1, and so on. /// /// An IEnumerator<T> that enumerates all the /// items in the list. public override IEnumerator GetEnumerator() { int count = Count; for (int i = 0; i < count; ++i) { yield return this[i]; } } /// /// Determines if the list contains any item that compares equal to . /// The implementation simply checks whether IndexOf(item) returns a non-negative value. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to search for. /// True if the list contains an item that compares equal to . public override bool Contains(T item) { return (IndexOf(item) >= 0); } /// /// Copies all the items in the list, in order, to , /// starting at index 0. /// /// The array to copy to. This array must have a size /// that is greater than or equal to Count. public virtual void CopyTo(T[] array) { this.CopyTo(array, 0); } /// /// Copies a range of elements from the list to , /// starting at . /// /// The starting index in the source list of the range to copy. /// The array to copy to. This array must have a size /// that is greater than or equal to Count + arrayIndex. /// The starting index in /// to copy to. /// The number of items to copy. public virtual void CopyTo(int index, T[] array, int arrayIndex, int count) { Range(index, count).CopyTo(array, arrayIndex); } /// /// Finds the first item in the list that satisfies the condition /// defined by . If no item matches the condition, than /// the default value for T (null or all-zero) is returned. /// /// If the default value for T (null or all-zero) matches the condition defined by , /// and the list might contain the default value, then it is impossible to distinguish the different between finding /// the default value and not finding any item. To distinguish these cases, use . /// A delegate that defined the condition to check for. /// The first item that satisfies the condition . If no item satisfies that /// condition, the default value for T is returned. /// public virtual T Find(Predicate predicate) { return Algorithms.FindFirstWhere(this, predicate); } /// /// Finds the first item in the list that satisfies the condition /// defined by . /// /// A delegate that defines the condition to check for. /// If true is returned, this parameter receives the first item in the list /// that satifies the condition defined by . /// True if an item that satisfies the condition was found. False /// if no item in the list satisfies that condition. public virtual bool TryFind(Predicate predicate, out T foundItem) { return Algorithms.TryFindFirstWhere(this, predicate, out foundItem); } /// /// Finds the last item in the list that satisfies the condition /// defined by . If no item matches the condition, than /// the default value for T (null or all-zero) is returned. /// /// If the default value for T (null or all-zero) matches the condition defined by , /// and the list might contain the default value, then it is impossible to distinguish the different between finding /// the default value and not finding any item. To distinguish these cases, use . /// A delegate that defined the condition to check for. /// The last item that satisfies the condition . If no item satisfies that /// condition, the default value for T is returned. /// public virtual T FindLast(Predicate predicate) { return Algorithms.FindLastWhere(this, predicate); } /// /// Finds the last item in the list that satisfies the condition /// defined by . /// /// A delegate that defines the condition to check for. /// If true is returned, this parameter receives the last item in the list /// that satifies the condition defined by . /// True if an item that satisfies the condition was found. False /// if no item in the list satisfies that condition. public virtual bool TryFindLast(Predicate predicate, out T foundItem) { return Algorithms.TryFindLastWhere(this, predicate, out foundItem); } /// /// Finds the index of the first item in the list that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The index of the first item that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindIndex(Predicate predicate) { return Algorithms.FindFirstIndexWhere(this, predicate); } /// /// Finds the index of the first item, in the range of items extending from to the end, that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The starting index of the range to check. /// The index of the first item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindIndex(int index, Predicate predicate) { int foundIndex = Algorithms.FindFirstIndexWhere(Range(index, Count - index), predicate); if (foundIndex < 0) return -1; else return foundIndex + index; } /// /// Finds the index of the first item, in the range of items starting from , that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The starting index of the range to check. /// The number of items in range to check. /// The index of the first item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindIndex(int index, int count, Predicate predicate) { int foundIndex = Algorithms.FindFirstIndexWhere(Range(index, count), predicate); if (foundIndex < 0) return -1; else return foundIndex + index; } /// /// Finds the index of the last item in the list that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The index of the last item that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindLastIndex(Predicate predicate) { return Algorithms.FindLastIndexWhere(this, predicate); } /// /// Finds the index of the last item, in the range of items extending from the beginning /// of the list to , that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The ending index of the range to check. /// The index of the last item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindLastIndex(int index, Predicate predicate) { return Algorithms.FindLastIndexWhere(Range(0, index + 1), predicate); } /// /// Finds the index of the last item, in the range of items ending at , that satisfies the condition /// defined by . If no item matches the condition, -1 is returned. /// /// A delegate that defined the condition to check for. /// The ending index of the range to check. /// The number of items in range to check. /// The index of the last item in the given range that satisfies the condition . If no item satisfies that /// condition, -1 is returned. public virtual int FindLastIndex(int index, int count, Predicate predicate) { int foundIndex = Algorithms.FindLastIndexWhere(Range(index - count + 1, count), predicate); if (foundIndex >= 0) return foundIndex + index - count + 1; else return -1; } /// /// Finds the index of the first item in the list that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The index of the first item in the list that that is equal to . If no item is equal /// to , -1 is returned. public virtual int IndexOf(T item) { return Algorithms.FirstIndexOf(this, item, EqualityComparer.Default); } /// /// Finds the index of the first item, in the range of items extending from to the end, /// that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The starting index of the range to check. /// The index of the first item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int IndexOf(T item, int index) { int foundIndex = Algorithms.FirstIndexOf(Range(index, Count - index), item, EqualityComparer.Default); if (foundIndex >= 0) return foundIndex + index; else return -1; } /// /// Finds the index of the first item, in the range of items starting from , /// that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The starting index of the range to check. /// The number of items in range to check. /// The index of the first item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int IndexOf(T item, int index, int count) { int foundIndex = Algorithms.FirstIndexOf(Range(index, count), item, EqualityComparer.Default); if (foundIndex >= 0) return foundIndex + index; else return -1; } /// /// Finds the index of the last item in the list that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The index of the last item in the list that that is equal to . If no item is equal /// to , -1 is returned. public virtual int LastIndexOf(T item) { return Algorithms.LastIndexOf(this, item, EqualityComparer.Default); } /// /// Finds the index of the last item, in the range of items extending from the beginning /// of the list to , that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search fror. /// The ending index of the range to check. /// The index of the last item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int LastIndexOf(T item, int index) { int foundIndex = Algorithms.LastIndexOf(Range(0, index + 1), item, EqualityComparer.Default); return foundIndex; } /// /// Finds the index of the last item, in the range of items ending at , /// that is equal to . /// /// The default implementation of equality for type T is used in the search. This is the /// equality defined by IComparable<T> or object.Equals. /// The item to search for. /// The ending index of the range to check. /// The number of items in range to check. /// The index of the last item in the given range that that is equal to . If no item is equal /// to , -1 is returned. public virtual int LastIndexOf(T item, int index, int count) { int foundIndex = Algorithms.LastIndexOf(Range(index - count + 1, count), item, EqualityComparer.Default); if (foundIndex >= 0) return foundIndex + index - count + 1; else return -1; } /// /// Returns a view onto a sub-range of this list. Items are not copied; the /// returned IList<T> is simply a different view onto the same underlying items. /// /// /// This method can be used to apply an algorithm to a portion of a list. For example: /// Algorithms.Reverse(deque.Range(3, 6)) /// will return the reverse opf the 6 items beginning at index 3. /// The starting index of the view. /// The number of items in the view. /// A list that is a view onto the given sub-part of this list. /// or is negative. /// + is greater than the /// size of the list. public virtual IList Range(int start, int count) { return Algorithms.Range(this, start, count); } /// /// Inserts a new item at the given index. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// The index in the list to insert the item at. After the /// insertion, the inserted item is located at this index. The /// first item in the list has index 0. /// The item to insert at the given index. /// Always thrown. void IList.Insert(int index, T item) { MethodModifiesCollection(); } /// /// Removes the item at the given index. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// The index in the list to remove the item at. The /// first item in the list has index 0. /// Always thrown. void IList.RemoveAt(int index) { MethodModifiesCollection(); } /// /// Adds an item to the end of the list. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// The item to add to the list. /// Always thrown. int IList.Add(object value) { MethodModifiesCollection(); return -1; } /// /// Removes all the items from the list, resulting in an empty list. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// Always thrown. void IList.Clear() { MethodModifiesCollection(); } /// /// Determines if the list contains any item that compares equal to . /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to search for. bool IList.Contains(object value) { if (value is T || value == null) return Contains((T)value); else return false; } /// /// Find the first occurrence of an item equal to /// in the list, and returns the index of that item. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to search for. /// The index of , or -1 if no item in the /// list compares equal to . int IList.IndexOf(object value) { if (value is T || value == null) return IndexOf((T)value); else return -1; } /// /// Insert a new item at the given index. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// The index in the list to insert the item at. After the /// insertion, the inserted item is located at this index. The /// first item in the list has index 0. /// The item to insert at the given index. /// Always thrown. void IList.Insert(int index, object value) { MethodModifiesCollection(); } /// /// Returns whether the list is a fixed size. This implementation always returns true. /// /// Alway true, indicating that the list is fixed size. bool IList.IsFixedSize { get { return true; } } /// /// Returns whether the list is read only. This implementation always returns true. /// /// Alway true, indicating that the list is read-only. bool IList.IsReadOnly { get { return true; } } /// /// Searches the list for the first item that compares equal to . /// If one is found, it is removed. Otherwise, the list is unchanged. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// Equality in the list is determined by the default sense of /// equality for T. If T implements IComparable<T>, the /// Equals method of that interface is used to determine equality. Otherwise, /// Object.Equals is used to determine equality. /// The item to remove from the list. /// Always thrown. void IList.Remove(object value) { MethodModifiesCollection(); } /// /// Removes the item at the given index. This implementation throws a NotSupportedException /// indicating that the list is read-only. /// /// The index in the list to remove the item at. The /// first item in the list has index 0. /// Always thrown. void IList.RemoveAt(int index) { MethodModifiesCollection(); } /// /// Gets or sets the value at a particular index in the list. /// /// The index in the list to get or set an item at. The /// first item in the list has index 0, and the last has index Count-1. /// The item at the given index. /// is /// less than zero or greater than or equal to Count. /// cannot be converted to T. /// Always thrown from the setter, indicating that the list /// is read-only. object IList.this[int index] { get { return this[index]; } set { MethodModifiesCollection(); } } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/RedBlack.cs000066400000000000000000001413621446222606700256270ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Diagnostics; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// Describes what to do if a key is already in the tree when doing an /// insertion. /// internal enum DuplicatePolicy { InsertFirst, // Insert a new node before duplicates InsertLast, // Insert a new node after duplicates ReplaceFirst, // Replace the first of the duplicate nodes ReplaceLast, // Replace the last of the duplicate nodes DoNothing // Do nothing to the tree }; /// /// The base implementation for various collections classes that use Red-Black trees /// as part of their implementation. This class should not (and can not) be /// used directly by end users; it's only for internal use by the collections package. /// /// /// The Red-Black tree manages items of type T, and uses a IComparer<T> that /// compares items to sort the tree. Multiple items can compare equal and be stored /// in the tree. Insert, Delete, and Find operations are provided in their full generality; /// all operations allow dealing with either the first or last of items that compare equal. /// [Serializable] internal class RedBlackTree: IEnumerable { private readonly IComparer comparer; // interface for comparing elements, only Compare is used. private Node root; // The root of the tree. Can be null when tree is empty. private int count; // The count of elements in the tree. private int changeStamp; // An integer that is changed every time the tree structurally changes. // Used so that enumerations throw an exception if the tree is changed // during enumeration. private Node[] stack; // A stack of nodes. This is cached locally to avoid constant re-allocated it. /// /// Create an array of Nodes big enough for any path from top /// to bottom. This is cached, and reused from call-to-call, so only one /// can be around at a time per tree. /// /// The node stack. private Node[] GetNodeStack() { // Maximum depth needed is 2 * lg count + 1. int maxDepth; if (count < 0x400) maxDepth = 21; else if (count < 0x10000) maxDepth = 41; else maxDepth = 65; if (stack == null || stack.Length < maxDepth) stack = new Node[maxDepth]; return stack; } /// /// The class that is each node in the red-black tree. /// [Serializable] private class Node { public Node left, right; public T item; private const uint REDMASK = 0x80000000; private uint count; /// /// Is this a red node? /// public bool IsRed { get { return (count & REDMASK) != 0; } set { if (value) count |= REDMASK; else count &= ~REDMASK; } } /// /// Get or set the Count field -- a 31-bit field /// that holds the number of nodes at or below this /// level. /// public int Count { get { return (int)(count & ~REDMASK); } set { count = (count & REDMASK) | (uint)value; } } /// /// Add one to the Count. /// public void IncrementCount() { ++count; } /// /// Subtract one from the Count. The current /// Count must be non-zero. /// public void DecrementCount() { Debug.Assert(Count != 0); --count; } /// /// Clones a node and all its descendants. /// /// The cloned node. public Node Clone() { Node newNode = new Node(); newNode.item = item; newNode.count = count; if (left != null) newNode.left = left.Clone(); if (right != null) newNode.right = right.Clone(); return newNode; } } /// /// Must be called whenever there is a structural change in the tree. Causes /// changeStamp to be changed, which causes any in-progress enumerations /// to throw exceptions. /// internal void StopEnumerations() { ++changeStamp; } /// /// Checks the given stamp against the current change stamp. If different, the /// collection has changed during enumeration and an InvalidOperationException /// must be thrown /// /// changeStamp at the start of the enumeration. private void CheckEnumerationStamp(int startStamp) { if (startStamp != changeStamp) { throw new InvalidOperationException(Strings.ChangeDuringEnumeration); } } /// /// Initialize a red-black tree, using the given interface instance to compare elements. Only /// Compare is used on the IComparer interface. /// /// The IComparer<T> used to sort keys. public RedBlackTree(IComparer comparer) { this.comparer = comparer; this.count = 0; this.root = null; } /// /// Returns the number of elements in the tree. /// public int ElementCount { get { return count; } } /// /// Clone the tree, returning a new tree containing the same items. Should /// take O(N) take. /// /// Clone version of this tree. public RedBlackTree Clone() { RedBlackTree newTree = new RedBlackTree(comparer); newTree.count = this.count; if (this.root != null) newTree.root = this.root.Clone(); return newTree; } /// /// Finds the key in the tree. If multiple items in the tree have /// compare equal to the key, finds the first or last one. Optionally replaces the item /// with the one searched for. /// /// Key to search for. /// If true, find the first of duplicates, else finds the last of duplicates. /// If true, replaces the item with key (if function returns true) /// Returns the found item, before replacing (if function returns true). /// True if the key was found. public bool Find(T key, bool findFirst, bool replace, out T item) { Node current = root; // current search location in the tree Node found = null; // last node found with the key, or null if none. while (current != null) { int compare = comparer.Compare(key, current.item); if (compare < 0) { current = current.left; } else if (compare > 0) { current = current.right; } else { // Go left/right on equality to find first/last of elements with this key. Debug.Assert(compare == 0); found = current; if (findFirst) current = current.left; else current = current.right; } } if (found != null) { item = found.item; if (replace) found.item = key; return true; } else { item = default(T); return false; } } /// /// Finds the index of the key in the tree. If multiple items in the tree have /// compare equal to the key, finds the first or last one. /// /// Key to search for. /// If true, find the first of duplicates, else finds the last of duplicates. /// Index of the item found if the key was found, -1 if not found. public int FindIndex(T key, bool findFirst) { T dummy; if (findFirst) return FirstItemInRange(EqualRangeTester(key), out dummy); else return LastItemInRange(EqualRangeTester(key), out dummy); } /// /// Find the item at a particular index in the tree. /// /// The zero-based index of the item. Must be >= 0 and < Count. /// The item at the particular index. public T GetItemByIndex(int index) { if (index < 0 || index >= count) throw new ArgumentOutOfRangeException("index"); Node current = root; // current search location in the tree for (; ; ) { int leftCount; if (current.left != null) leftCount = current.left.Count; else leftCount = 0; if (leftCount > index) current = current.left; else if (leftCount == index) return current.item; else { index -= leftCount + 1; current = current.right; } } } /// /// Insert a new node into the tree, maintaining the red-black invariants. /// /// Algorithm from Sedgewick, "Algorithms". /// The new item to insert /// What to do if equal item is already present. /// If false, returned, the previous item. /// false if duplicate exists, otherwise true. public bool Insert(T item, DuplicatePolicy dupPolicy, out T previous) { Node node = root; Node parent = null, gparent = null, ggparent = null; // parent, grand, a great-grantparent of node. bool wentLeft = false, wentRight = false; // direction from parent to node. bool rotated; Node duplicateFound = null; // The tree may be changed. StopEnumerations(); // We increment counts on the way down the tree. If we end up not inserting an items due // to a duplicate, we need a stack to adjust the counts back. We don't need the stack if the duplicate // policy means that we will always do an insertion. bool needStack = !((dupPolicy == DuplicatePolicy.InsertFirst) || (dupPolicy == DuplicatePolicy.InsertLast)); Node[] nodeStack = null; int nodeStackPtr = 0; // first free item on the stack. if (needStack) nodeStack = GetNodeStack(); while (node != null) { // If we find a node with two red children, split it so it doesn't cause problems // when inserting a node. if (node.left != null && node.left.IsRed && node.right != null && node.right.IsRed) { node = InsertSplit(ggparent, gparent, parent, node, out rotated); if (needStack && rotated) { nodeStackPtr -= 2; if (nodeStackPtr < 0) nodeStackPtr = 0; } } // Keep track of parent, grandparent, great-grand parent. ggparent = gparent; gparent = parent; parent = node; // Compare the key and the node. int compare = comparer.Compare(item, node.item); if (compare == 0) { // Found a node with the data already. Check duplicate policy. if (dupPolicy == DuplicatePolicy.DoNothing) { previous = node.item; // Didn't insert after all. Return counts back to their previous value. for (int i = 0; i < nodeStackPtr; ++i) nodeStack[i].DecrementCount(); return false; } else if (dupPolicy == DuplicatePolicy.InsertFirst || dupPolicy == DuplicatePolicy.ReplaceFirst) { // Insert first by treating the key as less than nodes in the tree. duplicateFound = node; compare = -1; } else { Debug.Assert(dupPolicy == DuplicatePolicy.InsertLast || dupPolicy == DuplicatePolicy.ReplaceLast); // Insert last by treating the key as greater than nodes in the tree. duplicateFound = node; compare = 1; } } Debug.Assert(compare != 0); node.IncrementCount(); if (needStack) nodeStack[nodeStackPtr++] = node; // Move to the left or right as needed to find the insertion point. if (compare < 0) { node = node.left; wentLeft = true; wentRight = false; } else { node = node.right; wentRight = true; wentLeft = false; } } if (duplicateFound != null) { previous = duplicateFound.item; // Are we replacing instread of inserting? if (dupPolicy == DuplicatePolicy.ReplaceFirst || dupPolicy == DuplicatePolicy.ReplaceLast) { duplicateFound.item = item; // Didn't insert after all. Return counts back to their previous value. for (int i = 0; i < nodeStackPtr; ++i) nodeStack[i].DecrementCount(); return false; } } else { previous = default(T); } // Create a new node. node = new Node(); node.item = item; node.Count = 1; // Link the node into the tree. if (wentLeft) parent.left = node; else if (wentRight) parent.right = node; else { Debug.Assert(root == null); root = node; } // Maintain the red-black policy. InsertSplit(ggparent, gparent, parent, node, out rotated); // We've added a node to the tree, so update the count. count += 1; return (duplicateFound == null); } /// /// Split a node with two red children (a 4-node in the 2-3-4 tree formalism), as /// part of an insert operation. /// /// great grand-parent of "node", can be null near root /// grand-parent of "node", can be null near root /// parent of "node", can be null near root /// Node to split, can't be null /// Indicates that rotation(s) occurred in the tree. /// Node to continue searching from. private Node InsertSplit(Node ggparent, Node gparent, Node parent, Node node, out bool rotated) { if (node != root) node.IsRed = true; if (node.left != null) node.left.IsRed = false; if (node.right != null) node.right.IsRed = false; if (parent != null && parent.IsRed) { // Since parent is red, gparent can't be null (root is always black). ggparent // might be null, however. Debug.Assert(gparent != null); // if links from gparent and parent are opposite (left/right or right/left), // then rotate. if ((gparent.left == parent) != (parent.left == node)) { Rotate(gparent, parent, node); parent = node; } gparent.IsRed = true; // Do a rotate to prevent two red links in a row. Rotate(ggparent, gparent, parent); parent.IsRed = false; rotated = true; return parent; } else { rotated = false; return node; } } /// /// Performs a rotation involving the node, it's child and grandchild. The counts of /// childs and grand-child are set the correct values from their children; this is important /// if they have been adjusted on the way down the try as part of an insert/delete. /// /// Top node of the rotation. Can be null if child==root. /// One child of "node". Not null. /// One child of "child". Not null. private void Rotate(Node node, Node child, Node gchild) { if (gchild == child.left) { child.left = gchild.right; gchild.right = child; } else { Debug.Assert(gchild == child.right); child.right = gchild.left; gchild.left = child; } // Restore the counts. child.Count = (child.left != null ? child.left.Count : 0) + (child.right != null ? child.right.Count : 0) + 1; gchild.Count = (gchild.left != null ? gchild.left.Count : 0) + (gchild.right != null ? gchild.right.Count : 0) + 1; if (node == null) { Debug.Assert(child == root); root = gchild; } else if (child == node.left) { node.left = gchild; } else { Debug.Assert(child == node.right); node.right = gchild; } } /// /// Deletes a key from the tree. If multiple elements are equal to key, /// deletes the first or last. If no element is equal to the key, /// returns false. /// /// Top-down algorithm from Weiss. Basic plan is to move down in the tree, /// rotating and recoloring along the way to always keep the current node red, which /// ensures that the node we delete is red. The details are quite complex, however! /// Key to delete. /// Which item to delete if multiple are equal to key. True to delete the first, false to delete last. /// Returns the item that was deleted, if true returned. /// True if an element was deleted, false if no element had /// specified key. public bool Delete(T key, bool deleteFirst, out T item) { return DeleteItemFromRange(EqualRangeTester(key), deleteFirst, out item); } /// /// /// Enumerate all the items in-order /// /// An enumerator for all the items, in order. /// The tree has an item added or deleted during the enumeration. public IEnumerator GetEnumerator() { return EnumerateRange(EntireRangeTester).GetEnumerator(); } /// /// Enumerate all the items in-order /// /// An enumerator for all the items, in order. /// The tree has an item added or deleted during the enumeration. System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #region Ranges /// /// A delegate that tests if an item is within a custom range. The range must be a contiguous /// range of items with the ordering of this tree. The range test function must test /// if an item is before, withing, or after the range. /// /// Item to test against the range. /// Returns negative if item is before the range, zero if item is withing the range, /// and positive if item is after the range. public delegate int RangeTester(T item); /// /// Gets a range tester that defines a range by first and last items. /// /// If true, bound the range on the bottom by first. /// If useFirst is true, the inclusive lower bound. /// If true, bound the range on the top by last. /// If useLast is true, the exclusive upper bound. /// A RangeTester delegate that tests for an item in the given range. public RangeTester BoundedRangeTester(bool useFirst, T first, bool useLast, T last) { return delegate(T item) { if (useFirst && comparer.Compare(first, item) > 0) return -1; // item is before first. else if (useLast && comparer.Compare(last, item) <= 0) return 1; // item is after or equal to last. else return 0; // item is greater or equal to first, and less than last. }; } /// /// Gets a range tester that defines a range by first and last items. /// /// The lower bound. /// True if the lower bound is inclusive, false if exclusive. /// The upper bound. /// True if the upper bound is inclusive, false if exclusive. /// A RangeTester delegate that tests for an item in the given range. public RangeTester DoubleBoundedRangeTester(T first, bool firstInclusive, T last, bool lastInclusive) { return delegate(T item) { if (firstInclusive) { if (comparer.Compare(first, item) > 0) return -1; // item is before first. } else { if (comparer.Compare(first, item) >= 0) return -1; // item is before or equal to first. } if (lastInclusive) { if (comparer.Compare(last, item) < 0) return 1; // item is after last. } else { if (comparer.Compare(last, item) <= 0) return 1; // item is after or equal to last } return 0; // item is between first and last. }; } /// /// Gets a range tester that defines a range by a lower bound. /// /// The lower bound. /// True if the lower bound is inclusive, false if exclusive. /// A RangeTester delegate that tests for an item in the given range. public RangeTester LowerBoundedRangeTester(T first, bool inclusive) { return delegate(T item) { if (inclusive) { if (comparer.Compare(first, item) > 0) return -1; // item is before first. else return 0; // item is after or equal to first } else { if (comparer.Compare(first, item) >= 0) return -1; // item is before or equal to first. else return 0; // item is after first } }; } /// /// Gets a range tester that defines a range by upper bound. /// /// The upper bound. /// True if the upper bound is inclusive, false if exclusive. /// A RangeTester delegate that tests for an item in the given range. public RangeTester UpperBoundedRangeTester(T last, bool inclusive) { return delegate(T item) { if (inclusive) { if (comparer.Compare(last, item) < 0) return 1; // item is after last. else return 0; // item is before or equal to last. } else { if (comparer.Compare(last, item) <= 0) return 1; // item is after or equal to last else return 0; // item is before last. } }; } /// /// Gets a range tester that defines a range by all items equal to an item. /// /// The item that is contained in the range. /// A RangeTester delegate that tests for an item equal to . public RangeTester EqualRangeTester(T equalTo) { return delegate(T item) { return comparer.Compare(item, equalTo); }; } /// /// A range tester that defines a range that is the entire tree. /// /// Item to test. /// Always returns 0. public int EntireRangeTester(T item) { return 0; } /// /// Enumerate the items in a custom range in the tree. The range is determined by /// a RangeTest delegate. /// /// Tests an item against the custom range. /// An IEnumerable<T> that enumerates the custom range in order. /// The tree has an item added or deleted during the enumeration. public IEnumerable EnumerateRange(RangeTester rangeTester) { return EnumerateRangeInOrder(rangeTester, root); } /// /// Enumerate all the items in a custom range, under and including node, in-order. /// /// Tests an item against the custom range. /// Node to begin enumeration. May be null. /// An enumerable of the items. /// The tree has an item added or deleted during the enumeration. private IEnumerable EnumerateRangeInOrder(RangeTester rangeTester, Node node) { int startStamp = changeStamp; if (node != null) { int compare = rangeTester(node.item); if (compare >= 0) { // At least part of the range may lie to the left. foreach (T item in EnumerateRangeInOrder(rangeTester, node.left)) { yield return item; CheckEnumerationStamp(startStamp); } } if (compare == 0) { // The item is within the range. yield return node.item; CheckEnumerationStamp(startStamp); } if (compare <= 0) { // At least part of the range lies to the right. foreach (T item in EnumerateRangeInOrder(rangeTester, node.right)) { yield return item; CheckEnumerationStamp(startStamp); } } } } /// /// Enumerate the items in a custom range in the tree, in reversed order. The range is determined by /// a RangeTest delegate. /// /// Tests an item against the custom range. /// An IEnumerable<T> that enumerates the custom range in reversed order. /// The tree has an item added or deleted during the enumeration. public IEnumerable EnumerateRangeReversed(RangeTester rangeTester) { return EnumerateRangeInReversedOrder(rangeTester, root); } /// /// Enumerate all the items in a custom range, under and including node, in reversed order. /// /// Tests an item against the custom range. /// Node to begin enumeration. May be null. /// An enumerable of the items, in reversed oreder. /// The tree has an item added or deleted during the enumeration. private IEnumerable EnumerateRangeInReversedOrder(RangeTester rangeTester, Node node) { int startStamp = changeStamp; if (node != null) { int compare = rangeTester(node.item); if (compare <= 0) { // At least part of the range lies to the right. foreach (T item in EnumerateRangeInReversedOrder(rangeTester, node.right)) { yield return item; CheckEnumerationStamp(startStamp); } } if (compare == 0) { // The item is within the range. yield return node.item; CheckEnumerationStamp(startStamp); } if (compare >= 0) { // At least part of the range may lie to the left. foreach (T item in EnumerateRangeInReversedOrder(rangeTester, node.left)) { yield return item; CheckEnumerationStamp(startStamp); } } } } /// /// Deletes either the first or last item from a range, as identified by a RangeTester /// delegate. If the range is empty, returns false. /// /// Top-down algorithm from Weiss. Basic plan is to move down in the tree, /// rotating and recoloring along the way to always keep the current node red, which /// ensures that the node we delete is red. The details are quite complex, however! /// Range to delete from. /// If true, delete the first item from the range, else the last. /// Returns the item that was deleted, if true returned. /// True if an element was deleted, false if the range is empty. public bool DeleteItemFromRange(RangeTester rangeTester, bool deleteFirst, out T item) { Node node; // The current node. Node parent; // Parent of the current node. Node gparent; // Grandparent of the current node. Node sib; // Sibling of the current node. Node keyNode; // Node with the key that is being removed. // The tree may be changed. StopEnumerations(); if (root == null) { // Nothing in the tree. Go home now. item = default(T); return false; } // We decrement counts on the way down the tree. If we end up not finding an item to delete // we need a stack to adjust the counts back. Node[] nodeStack = GetNodeStack(); int nodeStackPtr = 0; // first free item on the stack. // Start at the root. node = root; sib = parent = gparent = null; keyNode = null; // Proceed down the tree, making the current node red so it can be removed. for (; ; ) { Debug.Assert(parent == null || parent.IsRed); Debug.Assert(sib == null || !sib.IsRed); Debug.Assert(!node.IsRed); if ((node.left == null || !node.left.IsRed) && (node.right == null || !node.right.IsRed)) { // node has two black children (null children are considered black). if (parent == null) { // Special case for the root. Debug.Assert(node == root); node.IsRed = true; } else if ((sib.left == null || !sib.left.IsRed) && (sib.right == null || !sib.right.IsRed)) { // sib has two black children. node.IsRed = true; sib.IsRed = true; parent.IsRed = false; } else { if (parent.left == node && (sib.right == null || !sib.right.IsRed)) { // sib has a black child on the opposite side as node. Node tleft = sib.left; Rotate(parent, sib, tleft); sib = tleft; } else if (parent.right == node && (sib.left == null || !sib.left.IsRed)) { // sib has a black child on the opposite side as node. Node tright = sib.right; Rotate(parent, sib, tright); sib = tright; } // sib has a red child. Rotate(gparent, parent, sib); node.IsRed = true; sib.IsRed = true; sib.left.IsRed = false; sib.right.IsRed = false; sib.DecrementCount(); nodeStack[nodeStackPtr - 1] = sib; parent.DecrementCount(); nodeStack[nodeStackPtr++] = parent; } } // Compare the key and move down the tree to the correct child. do { Node nextNode, nextSib; // Node we've moving to, and it's sibling. node.DecrementCount(); nodeStack[nodeStackPtr++] = node; // Determine which way to move in the tree by comparing the // current item to what we're looking for. int compare = rangeTester(node.item); if (compare == 0) { // We've found the node to remove. Remember it, then keep traversing the // tree to either find the first/last of equal keys, and if needed, the predecessor // or successor (the actual node to be removed). keyNode = node; if (deleteFirst) { nextNode = node.left; nextSib = node.right; } else { nextNode = node.right; nextSib = node.left; } } else if (compare > 0) { nextNode = node.left; nextSib = node.right; } else { nextNode = node.right; nextSib = node.left; } // Have we reached the end of our tree walk? if (nextNode == null) goto FINISHED; // Move down the tree. gparent = parent; parent = node; node = nextNode; sib = nextSib; } while (!parent.IsRed && node.IsRed); if (!parent.IsRed) { Debug.Assert(!node.IsRed); // moved to a black child. Rotate(gparent, parent, sib); sib.DecrementCount(); nodeStack[nodeStackPtr - 1] = sib; parent.DecrementCount(); nodeStack[nodeStackPtr++] = parent; sib.IsRed = false; parent.IsRed = true; gparent = sib; sib = (parent.left == node) ? parent.right : parent.left; } } FINISHED: if (keyNode == null) { // We never found a node to delete. // Return counts back to their previous value. for (int i = 0; i < nodeStackPtr; ++i) nodeStack[i].IncrementCount(); // Color the root black, in case it was colored red above. if (root != null) root.IsRed = false; item = default(T); return false; } // Return the item from the node we're deleting. item = keyNode.item; // At a leaf or a node with one child which is a leaf. Remove the node. if (keyNode != node) { // The node we want to delete is interior. Move the item from the // node we're actually deleting to the key node. keyNode.item = node.item; } // If we have one child, replace the current with the child, otherwise, // replace the current node with null. Node replacement; if (node.left != null) { replacement = node.left; Debug.Assert(!node.IsRed && replacement.IsRed); replacement.IsRed = false; } else if (node.right != null) { replacement = node.right; Debug.Assert(!node.IsRed && replacement.IsRed); replacement.IsRed = false; } else replacement = null; if (parent == null) { Debug.Assert(root == node); root = replacement; } else if (parent.left == node) parent.left = replacement; else { Debug.Assert(parent.right == node); parent.right = replacement; } // Color the root black, in case it was colored red above. if (root != null) root.IsRed = false; // Update item count. count -= 1; // And we're done. return true; } /// /// Delete all the items in a range, identified by a RangeTester delegate. /// /// The delegate that defines the range to delete. /// The number of items deleted. public int DeleteRange(RangeTester rangeTester) { bool deleted; int counter = 0; T dummy; do { deleted = DeleteItemFromRange(rangeTester, true, out dummy); if (deleted) ++counter; } while (deleted); return counter; } /// /// Count the items in a custom range in the tree. The range is determined by /// a RangeTester delegate. /// /// The delegate that defines the range. /// The number of items in the range. public int CountRange(RangeTester rangeTester) { return CountRangeUnderNode(rangeTester, root, false, false); } /// /// Count all the items in a custom range, under and including node. /// /// The delegate that defines the range. /// Node to begin enumeration. May be null. /// This node and all under it are either in the range or below it. /// This node and all under it are either in the range or above it. /// The number of items in the range, under and include node. private int CountRangeUnderNode(RangeTester rangeTester, Node node, bool belowRangeTop, bool aboveRangeBottom) { if (node != null) { if (belowRangeTop && aboveRangeBottom) { // This node and all below it must be in the range. Use the predefined count. return node.Count; } int compare = rangeTester(node.item); int counter; if (compare == 0) { counter = 1; // the node itself counter += CountRangeUnderNode(rangeTester, node.left, true, aboveRangeBottom); counter += CountRangeUnderNode(rangeTester, node.right, belowRangeTop, true); } else if (compare < 0) { counter = CountRangeUnderNode(rangeTester, node.right, belowRangeTop, aboveRangeBottom); } else { // compare > 0 counter = CountRangeUnderNode(rangeTester, node.left, belowRangeTop, aboveRangeBottom); } return counter; } else { return 0; } } /// /// Find the first item in a custom range in the tree, and it's index. The range is determined /// by a RangeTester delegate. /// /// The delegate that defines the range. /// Returns the item found, if true was returned. /// Index of first item in range if range is non-empty, -1 otherwise. public int FirstItemInRange(RangeTester rangeTester, out T item) { Node node = root, found = null; int curCount = 0, foundIndex = -1; while (node != null) { int compare = rangeTester(node.item); if (compare == 0) { found = node; if (node.left != null) foundIndex = curCount + node.left.Count; else foundIndex = curCount; } if (compare >= 0) node = node.left; else { if (node.left != null) curCount += node.left.Count + 1; else curCount += 1; node = node.right; } } if (found != null) { item = found.item; return foundIndex; } else { item = default(T); return -1; } } /// /// Find the last item in a custom range in the tree, and it's index. The range is determined /// by a RangeTester delegate. /// /// The delegate that defines the range. /// Returns the item found, if true was returned. /// Index of the item if range is non-empty, -1 otherwise. public int LastItemInRange(RangeTester rangeTester, out T item) { Node node = root, found = null; int curCount = 0, foundIndex = -1; while (node != null) { int compare = rangeTester(node.item); if (compare == 0) { found = node; if (node.left != null) foundIndex = curCount + node.left.Count; else foundIndex = curCount; } if (compare <= 0) { if (node.left != null) curCount += node.left.Count + 1; else curCount += 1; node = node.right; } else node = node.left; } if (found != null) { item = found.item; return foundIndex; } else { item = default(T); return foundIndex; } } #endregion Ranges #if DEBUG /// /// Prints out the tree. /// public void Print() { PrintSubTree(root, "", ""); Console.WriteLine(); } /// /// Prints a sub-tree. /// /// Node to print from /// Prefix for the node /// Prefix for the node's children private void PrintSubTree(Node node, string prefixNode, string prefixChildren) { if (node == null) return; // Red nodes marked as "@@", black nodes as "..". Console.WriteLine("{0}{1} {2,4} {3}", prefixNode, node.IsRed ? "@@" : "..", node.Count, node.item); PrintSubTree(node.left, prefixChildren + "|-L-", prefixChildren + "| "); PrintSubTree(node.right, prefixChildren + "|-R-", prefixChildren + " "); } /// /// Validates that the tree is correctly sorted, and meets the red-black tree /// axioms. /// public void Validate() { Debug.Assert(comparer != null, "Comparer should not be null"); if (root == null) { Debug.Assert(0 == count, "Count in empty tree should be 0."); } else { Debug.Assert(! root.IsRed, "Root is not black"); int blackHeight; int nodeCount = ValidateSubTree(root, out blackHeight); Debug.Assert(nodeCount == this.count, "Node count of tree is not correct."); } } /// /// Validates a sub-tree and returns the count and black height. /// /// Sub-tree to validate. May be null. /// Returns the black height of the tree. /// Returns the number of nodes in the sub-tree. 0 if node is null. private int ValidateSubTree(Node node, out int blackHeight) { if (node == null) { blackHeight = 0; return 0; } // Check that this node is sorted with respect to any children. if (node.left != null) Debug.Assert(comparer.Compare(node.left.item, node.item) <= 0, "Left child is not less than or equal to node"); if (node.right != null) Debug.Assert(comparer.Compare(node.right.item, node.item) >= 0, "Right child is not greater than or equal to node"); // Check that the two-red rule is not violated. if (node.IsRed) { if (node.left != null) Debug.Assert(! node.left.IsRed, "Node and left child both red"); if (node.right != null) Debug.Assert(! node.right.IsRed, "Node and right child both red"); } // Validate sub-trees and get their size and heights. int leftCount, leftBlackHeight; int rightCount, rightBlackHeight; int ourCount; leftCount = ValidateSubTree(node.left, out leftBlackHeight); rightCount = ValidateSubTree(node.right, out rightBlackHeight); ourCount = leftCount + rightCount + 1; Debug.Assert(ourCount == node.Count); // Validate the equal black-height rule. Debug.Assert(leftBlackHeight == rightBlackHeight, "Black heights are not equal"); // Calculate our black height and return the count blackHeight = leftBlackHeight; if (! node.IsRed) blackHeight += 1; return ourCount; } #endif //DEBUG } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Strings.cs000066400000000000000000000063061446222606700256070ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; namespace Wintellect.PowerCollections { /// /// A holder class for localizable strings that are used. Currently, these are not loaded from resources, but /// just coded into this class. To make this library localizable, simply change this class to load the /// given strings from resources. /// internal static class Strings { public static readonly string UncomparableType = "Type \"{0}\" does not implement IComparable<{0}> or IComparable."; public static readonly string ArgMustNotBeNegative = "The argument may not be less than zero."; public static readonly string ArrayTooSmall = "The array is too small to hold all of the items."; public static readonly string KeyNotFound = "The key was not found in the collection."; public static readonly string ResetNotSupported = "Reset is not supported on this enumerator."; public static readonly string CannotModifyCollection = "The \"{0}\" collection is read-only and cannot be modified."; public static readonly string KeyAlreadyPresent = "The key was already present in the dictionary."; public static readonly string WrongType = "The value \"{0}\" isn't of type \"{1}\" and can't be used in this generic collection."; public static readonly string MustOverrideOrReimplement = "This method must be overridden or re-implemented in the derived class."; public static readonly string MustOverrideIndexerGet = "The get accessor of the indexer must be overridden."; public static readonly string MustOverrideIndexerSet = "The set accessor of the indexer must be overridden."; public static readonly string OutOfViewRange = "The argument is outside the range of this View."; public static readonly string TypeNotCloneable = "Type \"{0}\" does not implement ICloneable."; public static readonly string ChangeDuringEnumeration = "Collection was modified during an enumeration."; public static readonly string InconsistentComparisons = "The two collections cannot be combined because they use different comparison operations."; public static readonly string CollectionIsEmpty = "The collection is empty."; public static readonly string BadComparandType = "Comparand is not of the correct type."; public static readonly string CollectionTooLarge = "The collection has become too large."; public static readonly string InvalidLoadFactor = "The load factor must be between 0.25 and 0.95."; public static readonly string CapacityLessThanCount = "The capacity may not be less than Count."; public static readonly string ListIsReadOnly = "The list may not be read only."; public static readonly string CollectionIsReadOnly = "The collection may not be read only."; public static readonly string IdentityComparerNoCompare = "The Compare method is not supported on an identity comparer."; } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Util.cs000066400000000000000000000074361446222606700251000ustar00rootroot00000000000000//****************************** // Written by Peter Golde // Copyright (c) 2004-2007, Wintellect // // Use and restribution of this code is subject to the license agreement // contained in the file "License.txt" accompanying this file. //****************************** using System; using System.Collections; using System.Collections.Generic; namespace Wintellect.PowerCollections { /// /// A holder class for various internal utility functions that need to be shared. /// internal static class Util { /// /// Determine if a type is cloneable: either a value type or implementing /// ICloneable. /// /// Type to check. /// Returns if the type is a value type, and does not implement ICloneable. /// True if the type is cloneable. public static bool IsCloneableType(Type type, out bool isValue) { isValue = false; if (typeof(ICloneable).IsAssignableFrom(type)) { return true; } else if (type.IsValueType) { isValue = true; return true; } else return false; } /// /// Returns the simple name of the class, for use in exception messages. /// /// The simple name of this class. public static string SimpleClassName(Type type) { string name = type.Name; // Just use the simple name. int index = name.IndexOfAny(new char[] { '<', '{', '`' }); if (index >= 0) name = name.Substring(0, index); return name; } /// /// Wrap an enumerable so that clients can't get to the underlying /// implementation via a down-cast. /// [Serializable] class WrapEnumerable : IEnumerable { IEnumerable wrapped; /// /// Create the wrapper around an enumerable. /// /// IEnumerable to wrap. public WrapEnumerable(IEnumerable wrapped) { this.wrapped = wrapped; } public IEnumerator GetEnumerator() { return wrapped.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)wrapped).GetEnumerator(); } } /// /// Wrap an enumerable so that clients can't get to the underlying /// implementation via a down-case /// /// Enumerable to wrap. /// A wrapper around the enumerable. public static IEnumerable CreateEnumerableWrapper(IEnumerable wrapped) { return new WrapEnumerable(wrapped); } /// /// Gets the hash code for an object using a comparer. Correctly handles /// null. /// /// Item to get hash code for. Can be null. /// The comparer to use. /// The hash code for the item. public static int GetHashCode(T item, IEqualityComparer equalityComparer) { if (item == null) return 0x1786E23C; else return equalityComparer.GetHashCode(item); } } } quickroute-linux-upstream-2.5/3rdparty/PowerCollections/Wintellect.PowerCollections.csproj000066400000000000000000000144311446222606700324530ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {5821977D-AC2C-4912-BCD0-6E6B1A756167} Library Wintellect.PowerCollections PowerCollections 4 false SAK SAK SAK SAK CreateNewKey.pfx v2.0 true full false bin\Debug\ DEBUG;TRACE bin\Debug\PowerCollections.XML 1239678976 true -Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302;-Microsoft.Globalization#CA1303;-Microsoft.Globalization#CA1306;-Microsoft.Globalization#CA1304;-Microsoft.Globalization#CA1305;-Microsoft.Globalization#CA1300;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00002;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00001;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00009;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00008;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00011;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00010;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00003;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00006;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00004;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00007;-Microsoft.Practices.FxCop.Rules.WcfSecurity#WCFS00005;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0013;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0012;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0015;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0014;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0011;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0010;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0009;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0008;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0007;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0006;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0005;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0004;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0001;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0003;-Microsoft.Practices.FxCop.Rules.WcfSemantic#WCFSM0002;-Wintellect.DesignRules#Wintellect2002;-Wintellect.DesignRules#Wintellect2001;-Wintellect.DesignRules#Wintellect2003;-Wintellect.DesignRules#Wintellect2004;-Wintellect.DesignRules#Wintellect2000;-Wintellect.DesignRules#Wintellect2006;-Wintellect.DesignRules#Wintellect2005;-Wintellect.PerformanceRules#Wintellect1000;-Wintellect.UsageRules#Wintellect3000;-Wintellect.UsageRules#Wintellect3003;-Wintellect.UsageRules#Wintellect3002;-Wintellect.UsageRules#Wintellect3005;-Wintellect.UsageRules#Wintellect3004;-Wintellect.UsageRules#Wintellect3001 false true bin\Release\ TRACE bin\Release\PowerCollections.XML 1239678976 -Wintellect.DesignRules#Wintellect2002;-Wintellect.DesignRules#Wintellect2001;-Wintellect.DesignRules#Wintellect2003;-Wintellect.DesignRules#Wintellect2004;-Wintellect.DesignRules#Wintellect2000;-Wintellect.DesignRules#Wintellect2006;-Wintellect.DesignRules#Wintellect2005;-Wintellect.PerformanceRules#Wintellect1000;-Wintellect.UsageRules#Wintellect3000;-Wintellect.UsageRules#Wintellect3003;-Wintellect.UsageRules#Wintellect3002;-Wintellect.UsageRules#Wintellect3005;-Wintellect.UsageRules#Wintellect3004;-Wintellect.UsageRules#Wintellect3001 bin\ReleaseSigned\ TRACE 1239678976 bin\Release\PowerCollections.XML true AnyCPU C:\Program Files (x86)\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop\\rules true GlobalSuppressions.cs quickroute-linux-upstream-2.5/3rdparty/PowerCollections/app.config000066400000000000000000000001111446222606700255620ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/000077500000000000000000000000001446222606700225165ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/AssemblyInfo.cs000066400000000000000000000126621446222606700254470ustar00rootroot00000000000000// AssemblyInfo.cs // // Copyright (C) 2001 Mike Krueger // Copyright 2004 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; #if (NET_1_0) [assembly: AssemblyTitle("SharpZipLib for .NET Framework 1.0")] #elif (NET_1_1) [assembly: AssemblyTitle("SharpZipLib for .NET Framework 1.1")] #elif (NET_2_0) [assembly: AssemblyTitle("SharpZipLib for .NET Framework 2.0")] #elif (NET_3_0) [assembly: AssemblyTitle("SharpZipLib for .NET Framework 3.0")] #elif (NET_3_5) [assembly: AssemblyTitle("SharpZipLib for .NET Framework 3.5")] #elif (NET_4_0) [assembly: AssemblyTitle("SharpZipLib for .NET Framework 4.0")] #elif (NETCF_1_0) [assembly: AssemblyTitle("SharpZipLib for .NET Compact Framework 1.0")] #elif (NETCF_2_0) [assembly: AssemblyTitle("SharpZipLib for .NET Compact Framework 2.0")] #elif (MONO_1_0) [assembly: AssemblyTitle("SharpZipLib for Mono 1.0")] #elif (MONO_2_0) [assembly: AssemblyTitle("SharpZipLib for Mono 2.0")] #else [assembly: AssemblyTitle("SharpZipLibrary unlabelled version")] #endif [assembly: AssemblyDescription("A free C# compression library")] [assembly: AssemblyProduct("#ZipLibrary")] [assembly: AssemblyDefaultAlias("SharpZipLib")] [assembly: AssemblyCulture("")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] #else [assembly: AssemblyConfiguration("Release")] #endif [assembly: AssemblyCompany("ICSharpCode.net")] [assembly: AssemblyCopyright("Copyright 2001-2010 Mike Krueger, John Reilly")] [assembly: AssemblyTrademark("Copyright 2001-2010 Mike Krueger, John Reilly")] [assembly: AssemblyVersion("0.86.0.518")] [assembly: AssemblyInformationalVersionAttribute("0.86.0")] [assembly: CLSCompliant(true)] #if (!NETCF) // // If #Zip is strongly named it still allows partially trusted callers // [assembly: System.Security.AllowPartiallyTrustedCallers] #endif // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // // In order to sign your assembly you must specify a key to use. Refer to the // Microsoft .NET Framework documentation for more information on assembly signing. // // Use the attributes below to control which key is used for signing. // // Notes: // (*) If no key is specified, the assembly is not signed. // (*) KeyName refers to a key that has been installed in the Crypto Service // Provider (CSP) on your machine. KeyFile refers to a file which contains // a key. // (*) If the KeyFile and the KeyName values are both specified, the // following processing occurs: // (1) If the KeyName can be found in the CSP, that key is used. // (2) If the KeyName does not exist and the KeyFile does exist, the key // in the KeyFile is installed into the CSP and used. // (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. // When specifying the KeyFile, the location of the KeyFile should be // relative to the project output directory which is // %Project Directory%\obj\. For example, if your KeyFile is // located in the project directory, you would specify the AssemblyKeyFile // attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] // (*) Delay Signing is an advanced option - see the Microsoft .NET Framework // documentation for more information on this. // #if (CLI_1_0 || NET_1_0 || NET_1_1 || NETCF_1_0 || SSCLI) [assembly: AssemblyDelaySign(false)] #if VSTUDIO [assembly: AssemblyKeyFile("../../ICSharpCode.SharpZipLib.key")] #elif AUTOBUILD [assembly: AssemblyKeyFile("ICSharpCode.SharpZipLib.key")] #else [assembly: AssemblyKeyFile("../ICSharpCode.SharpZipLib.key")] #endif #endif quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Checksums/000077500000000000000000000000001446222606700244435ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Checksums/Adler32.cs000066400000000000000000000166701446222606700262000ustar00rootroot00000000000000// Adler32.cs - Computes Adler32 data checksum of a data stream // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Checksums { /// /// Computes Adler32 checksum for a stream of data. An Adler32 /// checksum is not as reliable as a CRC32 checksum, but a lot faster to /// compute. /// /// The specification for Adler32 may be found in RFC 1950. /// ZLIB Compressed Data Format Specification version 3.3) /// /// /// From that document: /// /// "ADLER32 (Adler-32 checksum) /// This contains a checksum value of the uncompressed data /// (excluding any dictionary data) computed according to Adler-32 /// algorithm. This algorithm is a 32-bit extension and improvement /// of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 /// standard. /// /// Adler-32 is composed of two sums accumulated per byte: s1 is /// the sum of all bytes, s2 is the sum of all s1 values. Both sums /// are done modulo 65521. s1 is initialized to 1, s2 to zero. The /// Adler-32 checksum is stored as s2*65536 + s1 in most- /// significant-byte first (network) order." /// /// "8.2. The Adler-32 algorithm /// /// The Adler-32 algorithm is much faster than the CRC32 algorithm yet /// still provides an extremely low probability of undetected errors. /// /// The modulo on unsigned long accumulators can be delayed for 5552 /// bytes, so the modulo operation time is negligible. If the bytes /// are a, b, c, the second sum is 3a + 2b + c + 3, and so is position /// and order sensitive, unlike the first sum, which is just a /// checksum. That 65521 is prime is important to avoid a possible /// large class of two-byte errors that leave the check unchanged. /// (The Fletcher checksum uses 255, which is not prime and which also /// makes the Fletcher check insensitive to single byte changes 0 - /// 255.) /// /// The sum s1 is initialized to 1 instead of zero to make the length /// of the sequence part of s2, so that the length does not have to be /// checked separately. (Any sequence of zeroes has a Fletcher /// checksum of zero.)" /// /// /// public sealed class Adler32 : IChecksum { /// /// largest prime smaller than 65536 /// const uint BASE = 65521; /// /// Returns the Adler32 data checksum computed so far. /// public long Value { get { return checksum; } } /// /// Creates a new instance of the Adler32 class. /// The checksum starts off with a value of 1. /// public Adler32() { Reset(); } /// /// Resets the Adler32 checksum to the initial value. /// public void Reset() { checksum = 1; } /// /// Updates the checksum with a byte value. /// /// /// The data value to add. The high byte of the int is ignored. /// public void Update(int value) { // We could make a length 1 byte array and call update again, but I // would rather not have that overhead uint s1 = checksum & 0xFFFF; uint s2 = checksum >> 16; s1 = (s1 + ((uint)value & 0xFF)) % BASE; s2 = (s1 + s2) % BASE; checksum = (s2 << 16) + s1; } /// /// Updates the checksum with an array of bytes. /// /// /// The source of the data to update with. /// public void Update(byte[] buffer) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } Update(buffer, 0, buffer.Length); } /// /// Updates the checksum with the bytes taken from the array. /// /// /// an array of bytes /// /// /// the start of the data used for this update /// /// /// the number of bytes to use for this update /// public void Update(byte[] buffer, int offset, int count) { if (buffer == null) { throw new ArgumentNullException("buffer"); } if (offset < 0) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "cannot be negative"); #endif } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "cannot be negative"); #endif } if (offset >= buffer.Length) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "not a valid index into buffer"); #endif } if (offset + count > buffer.Length) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "exceeds buffer size"); #endif } //(By Per Bothner) uint s1 = checksum & 0xFFFF; uint s2 = checksum >> 16; while (count > 0) { // We can defer the modulo operation: // s1 maximally grows from 65521 to 65521 + 255 * 3800 // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31 int n = 3800; if (n > count) { n = count; } count -= n; while (--n >= 0) { s1 = s1 + (uint)(buffer[offset++] & 0xff); s2 = s2 + s1; } s1 %= BASE; s2 %= BASE; } checksum = (s2 << 16) | s1; } #region Instance Fields uint checksum; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Checksums/Crc32.cs000066400000000000000000000215121446222606700256470ustar00rootroot00000000000000// CRC32.cs - Computes CRC32 data checksum of a data stream // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Checksums { /// /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. /// /// Polynomials over GF(2) are represented in binary, one bit per coefficient, /// with the lowest powers in the most significant bit. Then adding polynomials /// is just exclusive-or, and multiplying a polynomial by x is a right shift by /// one. If we call the above polynomial p, and represent a byte as the /// polynomial q, also with the lowest power in the most significant bit (so the /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, /// where a mod b means the remainder after dividing a by b. /// /// This calculation is done using the shift-register method of multiplying and /// taking the remainder. The register is initialized to zero, and for each /// incoming bit, x^32 is added mod p to the register if the bit is a one (where /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by /// x (which is shifting right by one and adding x^32 mod p if the bit shifted /// out is a one). We start with the highest power (least significant bit) of /// q and repeat for all eight bits of q. /// /// The table is simply the CRC of all possible eight bit values. This is all /// the information needed to generate CRC's on data a byte at a time for all /// combinations of CRC register values and incoming bytes. /// public sealed class Crc32 : IChecksum { const uint CrcSeed = 0xFFFFFFFF; readonly static uint[] CrcTable = new uint[] { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; internal static uint ComputeCrc32(uint oldCrc, byte value) { return (uint)(Crc32.CrcTable[(oldCrc ^ value) & 0xFF] ^ (oldCrc >> 8)); } /// /// The crc data checksum so far. /// uint crc; /// /// Returns the CRC32 data checksum computed so far. /// public long Value { get { return (long)crc; } set { crc = (uint)value; } } /// /// Resets the CRC32 data checksum as if no update was ever called. /// public void Reset() { crc = 0; } /// /// Updates the checksum with the int bval. /// /// /// the byte is taken as the lower 8 bits of value /// public void Update(int value) { crc ^= CrcSeed; crc = CrcTable[(crc ^ value) & 0xFF] ^ (crc >> 8); crc ^= CrcSeed; } /// /// Updates the checksum with the bytes taken from the array. /// /// /// buffer an array of bytes /// public void Update(byte[] buffer) { if (buffer == null) { throw new ArgumentNullException("buffer"); } Update(buffer, 0, buffer.Length); } /// /// Adds the byte array to the data checksum. /// /// /// The buffer which contains the data /// /// /// The offset in the buffer where the data starts /// /// /// The number of data bytes to update the CRC with. /// public void Update(byte[] buffer, int offset, int count) { if (buffer == null) { throw new ArgumentNullException("buffer"); } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "Count cannot be less than zero"); #endif } if (offset < 0 || offset + count > buffer.Length) { throw new ArgumentOutOfRangeException("offset"); } crc ^= CrcSeed; while (--count >= 0) { crc = CrcTable[(crc ^ buffer[offset++]) & 0xFF] ^ (crc >> 8); } crc ^= CrcSeed; } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Checksums/IChecksum.cs000066400000000000000000000065671446222606700266630ustar00rootroot00000000000000// IChecksum.cs - Interface to compute a data checksum // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. namespace ICSharpCode.SharpZipLib.Checksums { /// /// Interface to compute a data checksum used by checked input/output streams. /// A data checksum can be updated by one byte or with a byte array. After each /// update the value of the current checksum can be returned by calling /// getValue. The complete checksum object can also be reset /// so it can be used again with new data. /// public interface IChecksum { /// /// Returns the data checksum computed so far. /// long Value { get; } /// /// Resets the data checksum as if no update was ever called. /// void Reset(); /// /// Adds one byte to the data checksum. /// /// /// the data value to add. The high byte of the int is ignored. /// void Update(int value); /// /// Updates the data checksum with the bytes taken from the array. /// /// /// buffer an array of bytes /// void Update(byte[] buffer); /// /// Adds the byte array to the data checksum. /// /// /// The buffer which contains the data /// /// /// The offset in the buffer where the data starts /// /// /// the number of data bytes to add. /// void Update(byte[] buffer, int offset, int count); } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Checksums/StrangeCrc.cs000066400000000000000000000164041446222606700270320ustar00rootroot00000000000000// StrangeCRC.cs - computes a crc used in the bziplib // // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Checksums { /// /// Bzip2 checksum algorithm /// public class StrangeCRC : IChecksum { readonly static uint[] crc32Table = { 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4 }; int globalCrc; /// /// Initialise a default instance of /// public StrangeCRC() { Reset(); } /// /// Reset the state of Crc. /// public void Reset() { globalCrc = -1; } /// /// Get the current Crc value. /// public long Value { get { return ~globalCrc; } } /// /// Update the Crc value. /// /// data update is based on public void Update(int value) { int temp = (globalCrc >> 24) ^ value; if (temp < 0) { temp = 256 + temp; } globalCrc = unchecked((int)((globalCrc << 8) ^ crc32Table[temp])); } /// /// Update Crc based on a block of data /// /// The buffer containing data to update the crc with. public void Update(byte[] buffer) { if (buffer == null) { throw new ArgumentNullException("buffer"); } Update(buffer, 0, buffer.Length); } /// /// Update Crc based on a portion of a block of data /// /// block of data /// index of first byte to use /// number of bytes to use public void Update(byte[] buffer, int offset, int count) { if (buffer == null) { throw new ArgumentNullException("buffer"); } if ( offset < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "cannot be less than zero"); #endif } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "cannot be less than zero"); #endif } if ( offset + count > buffer.Length ) { throw new ArgumentOutOfRangeException("count"); } for (int i = 0; i < count; ++i) { Update(buffer[offset++]); } } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/000077500000000000000000000000001446222606700234065ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/FileSystemScanner.cs000066400000000000000000000352131446222606700273370ustar00rootroot00000000000000// FileSystemScanner.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Core { #region EventArgs /// /// Event arguments for scanning. /// public class ScanEventArgs : EventArgs { #region Constructors /// /// Initialise a new instance of /// /// The file or directory name. public ScanEventArgs(string name) { name_ = name; } #endregion /// /// The file or directory name for this event. /// public string Name { get { return name_; } } /// /// Get set a value indicating if scanning should continue or not. /// public bool ContinueRunning { get { return continueRunning_; } set { continueRunning_ = value; } } #region Instance Fields string name_; bool continueRunning_ = true; #endregion } /// /// Event arguments during processing of a single file or directory. /// public class ProgressEventArgs : EventArgs { #region Constructors /// /// Initialise a new instance of /// /// The file or directory name if known. /// The number of bytes processed so far /// The total number of bytes to process, 0 if not known public ProgressEventArgs(string name, long processed, long target) { name_ = name; processed_ = processed; target_ = target; } #endregion /// /// The name for this event if known. /// public string Name { get { return name_; } } /// /// Get set a value indicating wether scanning should continue or not. /// public bool ContinueRunning { get { return continueRunning_; } set { continueRunning_ = value; } } /// /// Get a percentage representing how much of the has been processed /// /// 0.0 to 100.0 percent; 0 if target is not known. public float PercentComplete { get { float result; if (target_ <= 0) { result = 0; } else { result = ((float)processed_ / (float)target_) * 100.0f; } return result; } } /// /// The number of bytes processed so far /// public long Processed { get { return processed_; } } /// /// The number of bytes to process. /// /// Target may be 0 or negative if the value isnt known. public long Target { get { return target_; } } #region Instance Fields string name_; long processed_; long target_; bool continueRunning_ = true; #endregion } /// /// Event arguments for directories. /// public class DirectoryEventArgs : ScanEventArgs { #region Constructors /// /// Initialize an instance of . /// /// The name for this directory. /// Flag value indicating if any matching files are contained in this directory. public DirectoryEventArgs(string name, bool hasMatchingFiles) : base (name) { hasMatchingFiles_ = hasMatchingFiles; } #endregion /// /// Get a value indicating if the directory contains any matching files or not. /// public bool HasMatchingFiles { get { return hasMatchingFiles_; } } #region Instance Fields bool hasMatchingFiles_; #endregion } /// /// Arguments passed when scan failures are detected. /// public class ScanFailureEventArgs : EventArgs { #region Constructors /// /// Initialise a new instance of /// /// The name to apply. /// The exception to use. public ScanFailureEventArgs(string name, Exception e) { name_ = name; exception_ = e; continueRunning_ = true; } #endregion /// /// The applicable name. /// public string Name { get { return name_; } } /// /// The applicable exception. /// public Exception Exception { get { return exception_; } } /// /// Get / set a value indicating wether scanning should continue. /// public bool ContinueRunning { get { return continueRunning_; } set { continueRunning_ = value; } } #region Instance Fields string name_; Exception exception_; bool continueRunning_; #endregion } #endregion #region Delegates /// /// Delegate invoked before starting to process a directory. /// public delegate void ProcessDirectoryHandler(object sender, DirectoryEventArgs e); /// /// Delegate invoked before starting to process a file. /// /// The source of the event /// The event arguments. public delegate void ProcessFileHandler(object sender, ScanEventArgs e); /// /// Delegate invoked during processing of a file or directory /// /// The source of the event /// The event arguments. public delegate void ProgressHandler(object sender, ProgressEventArgs e); /// /// Delegate invoked when a file has been completely processed. /// /// The source of the event /// The event arguments. public delegate void CompletedFileHandler(object sender, ScanEventArgs e); /// /// Delegate invoked when a directory failure is detected. /// /// The source of the event /// The event arguments. public delegate void DirectoryFailureHandler(object sender, ScanFailureEventArgs e); /// /// Delegate invoked when a file failure is detected. /// /// The source of the event /// The event arguments. public delegate void FileFailureHandler(object sender, ScanFailureEventArgs e); #endregion /// /// FileSystemScanner provides facilities scanning of files and directories. /// public class FileSystemScanner { #region Constructors /// /// Initialise a new instance of /// /// The file filter to apply when scanning. public FileSystemScanner(string filter) { fileFilter_ = new PathFilter(filter); } /// /// Initialise a new instance of /// /// The file filter to apply. /// The directory filter to apply. public FileSystemScanner(string fileFilter, string directoryFilter) { fileFilter_ = new PathFilter(fileFilter); directoryFilter_ = new PathFilter(directoryFilter); } /// /// Initialise a new instance of /// /// The file filter to apply. public FileSystemScanner(IScanFilter fileFilter) { fileFilter_ = fileFilter; } /// /// Initialise a new instance of /// /// The file filter to apply. /// The directory filter to apply. public FileSystemScanner(IScanFilter fileFilter, IScanFilter directoryFilter) { fileFilter_ = fileFilter; directoryFilter_ = directoryFilter; } #endregion #region Delegates /// /// Delegate to invoke when a directory is processed. /// public ProcessDirectoryHandler ProcessDirectory; /// /// Delegate to invoke when a file is processed. /// public ProcessFileHandler ProcessFile; /// /// Delegate to invoke when processing for a file has finished. /// public CompletedFileHandler CompletedFile; /// /// Delegate to invoke when a directory failure is detected. /// public DirectoryFailureHandler DirectoryFailure; /// /// Delegate to invoke when a file failure is detected. /// public FileFailureHandler FileFailure; #endregion /// /// Raise the DirectoryFailure event. /// /// The directory name. /// The exception detected. bool OnDirectoryFailure(string directory, Exception e) { DirectoryFailureHandler handler = DirectoryFailure; bool result = (handler != null); if ( result ) { ScanFailureEventArgs args = new ScanFailureEventArgs(directory, e); handler(this, args); alive_ = args.ContinueRunning; } return result; } /// /// Raise the FileFailure event. /// /// The file name. /// The exception detected. bool OnFileFailure(string file, Exception e) { FileFailureHandler handler = FileFailure; bool result = (handler != null); if ( result ){ ScanFailureEventArgs args = new ScanFailureEventArgs(file, e); FileFailure(this, args); alive_ = args.ContinueRunning; } return result; } /// /// Raise the ProcessFile event. /// /// The file name. void OnProcessFile(string file) { ProcessFileHandler handler = ProcessFile; if ( handler!= null ) { ScanEventArgs args = new ScanEventArgs(file); handler(this, args); alive_ = args.ContinueRunning; } } /// /// Raise the complete file event /// /// The file name void OnCompleteFile(string file) { CompletedFileHandler handler = CompletedFile; if (handler != null) { ScanEventArgs args = new ScanEventArgs(file); handler(this, args); alive_ = args.ContinueRunning; } } /// /// Raise the ProcessDirectory event. /// /// The directory name. /// Flag indicating if the directory has matching files. void OnProcessDirectory(string directory, bool hasMatchingFiles) { ProcessDirectoryHandler handler = ProcessDirectory; if ( handler != null ) { DirectoryEventArgs args = new DirectoryEventArgs(directory, hasMatchingFiles); handler(this, args); alive_ = args.ContinueRunning; } } /// /// Scan a directory. /// /// The base directory to scan. /// True to recurse subdirectories, false to scan a single directory. public void Scan(string directory, bool recurse) { alive_ = true; ScanDir(directory, recurse); } void ScanDir(string directory, bool recurse) { try { string[] names = System.IO.Directory.GetFiles(directory); bool hasMatch = false; for (int fileIndex = 0; fileIndex < names.Length; ++fileIndex) { if ( !fileFilter_.IsMatch(names[fileIndex]) ) { names[fileIndex] = null; } else { hasMatch = true; } } OnProcessDirectory(directory, hasMatch); if ( alive_ && hasMatch ) { foreach (string fileName in names) { try { if ( fileName != null ) { OnProcessFile(fileName); if ( !alive_ ) { break; } } } catch (Exception e) { if (!OnFileFailure(fileName, e)) { throw; } } } } } catch (Exception e) { if (!OnDirectoryFailure(directory, e)) { throw; } } if ( alive_ && recurse ) { try { string[] names = System.IO.Directory.GetDirectories(directory); foreach (string fulldir in names) { if ((directoryFilter_ == null) || (directoryFilter_.IsMatch(fulldir))) { ScanDir(fulldir, true); if ( !alive_ ) { break; } } } } catch (Exception e) { if (!OnDirectoryFailure(directory, e)) { throw; } } } } #region Instance Fields /// /// The file filter currently in use. /// IScanFilter fileFilter_; /// /// The directory filter currently in use. /// IScanFilter directoryFilter_; /// /// Flag indicating if scanning should continue running. /// bool alive_; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/INameTransform.cs000066400000000000000000000046231446222606700266270ustar00rootroot00000000000000// INameTransform.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. namespace ICSharpCode.SharpZipLib.Core { /// /// INameTransform defines how file system names are transformed for use with archives, or vice versa. /// public interface INameTransform { /// /// Given a file name determine the transformed value. /// /// The name to transform. /// The transformed file name. string TransformFile(string name); /// /// Given a directory name determine the transformed value. /// /// The name to transform. /// The transformed directory name string TransformDirectory(string name); } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/IScanFilter.cs000066400000000000000000000041731446222606700261050ustar00rootroot00000000000000// IScanFilter.cs // // Copyright 2006 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. namespace ICSharpCode.SharpZipLib.Core { /// /// Scanning filters support filtering of names. /// public interface IScanFilter { /// /// Test a name to see if it 'matches' the filter. /// /// The name to test. /// Returns true if the name matches the filter, false if it does not match. bool IsMatch(string name); } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/NameFilter.cs000066400000000000000000000224751446222606700257750ustar00rootroot00000000000000// NameFilter.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 2010-03-03 Z-1654 Fixed bug where escape characters were excluded in SplitQuoted() using System; using System.Collections; using System.Text; using System.Text.RegularExpressions; namespace ICSharpCode.SharpZipLib.Core { /// /// NameFilter is a string matching class which allows for both positive and negative /// matching. /// A filter is a sequence of independant regular expressions separated by semi-colons ';'. /// To include a semi-colon it may be quoted as in \;. Each expression can be prefixed by a plus '+' sign or /// a minus '-' sign to denote the expression is intended to include or exclude names. /// If neither a plus or minus sign is found include is the default. /// A given name is tested for inclusion before checking exclusions. Only names matching an include spec /// and not matching an exclude spec are deemed to match the filter. /// An empty filter matches any name. /// /// The following expression includes all name ending in '.dat' with the exception of 'dummy.dat' /// "+\.dat$;-^dummy\.dat$" /// public class NameFilter : IScanFilter { #region Constructors /// /// Construct an instance based on the filter expression passed /// /// The filter expression. public NameFilter(string filter) { filter_ = filter; inclusions_ = new ArrayList(); exclusions_ = new ArrayList(); Compile(); } #endregion /// /// Test a string to see if it is a valid regular expression. /// /// The expression to test. /// True if expression is a valid false otherwise. public static bool IsValidExpression(string expression) { bool result = true; try { Regex exp = new Regex(expression, RegexOptions.IgnoreCase | RegexOptions.Singleline); } catch (ArgumentException) { result = false; } return result; } /// /// Test an expression to see if it is valid as a filter. /// /// The filter expression to test. /// True if the expression is valid, false otherwise. public static bool IsValidFilterExpression(string toTest) { bool result = true; try { if (toTest != null) { string[] items = SplitQuoted(toTest); for (int i = 0; i < items.Length; ++i) { if ((items[i] != null) && (items[i].Length > 0)) { string toCompile; if (items[i][0] == '+') { toCompile = items[i].Substring(1, items[i].Length - 1); } else if (items[i][0] == '-') { toCompile = items[i].Substring(1, items[i].Length - 1); } else { toCompile = items[i]; } Regex testRegex = new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Singleline); } } } } catch (ArgumentException) { result = false; } return result; } /// /// Split a string into its component pieces /// /// The original string /// Returns an array of values containing the individual filter elements. public static string[] SplitQuoted(string original) { char escape = '\\'; char[] separators = { ';' }; ArrayList result = new ArrayList(); if ((original != null) && (original.Length > 0)) { int endIndex = -1; StringBuilder b = new StringBuilder(); while (endIndex < original.Length) { endIndex += 1; if (endIndex >= original.Length) { result.Add(b.ToString()); } else if (original[endIndex] == escape) { endIndex += 1; if (endIndex >= original.Length) { #if NETCF_1_0 throw new ArgumentException("Missing terminating escape character"); #else throw new ArgumentException("Missing terminating escape character", "original"); #endif } // include escape if this is not an escaped separator if (Array.IndexOf(separators, original[endIndex]) < 0) b.Append(escape); b.Append(original[endIndex]); } else { if (Array.IndexOf(separators, original[endIndex]) >= 0) { result.Add(b.ToString()); b.Length = 0; } else { b.Append(original[endIndex]); } } } } return (string[])result.ToArray(typeof(string)); } /// /// Convert this filter to its string equivalent. /// /// The string equivalent for this filter. public override string ToString() { return filter_; } /// /// Test a value to see if it is included by the filter. /// /// The value to test. /// True if the value is included, false otherwise. public bool IsIncluded(string name) { bool result = false; if ( inclusions_.Count == 0 ) { result = true; } else { foreach ( Regex r in inclusions_ ) { if ( r.IsMatch(name) ) { result = true; break; } } } return result; } /// /// Test a value to see if it is excluded by the filter. /// /// The value to test. /// True if the value is excluded, false otherwise. public bool IsExcluded(string name) { bool result = false; foreach ( Regex r in exclusions_ ) { if ( r.IsMatch(name) ) { result = true; break; } } return result; } #region IScanFilter Members /// /// Test a value to see if it matches the filter. /// /// The value to test. /// True if the value matches, false otherwise. public bool IsMatch(string name) { return (IsIncluded(name) && !IsExcluded(name)); } #endregion /// /// Compile this filter. /// void Compile() { // TODO: Check to see if combining RE's makes it faster/smaller. // simple scheme would be to have one RE for inclusion and one for exclusion. if ( filter_ == null ) { return; } string[] items = SplitQuoted(filter_); for ( int i = 0; i < items.Length; ++i ) { if ( (items[i] != null) && (items[i].Length > 0) ) { bool include = (items[i][0] != '-'); string toCompile; if ( items[i][0] == '+' ) { toCompile = items[i].Substring(1, items[i].Length - 1); } else if ( items[i][0] == '-' ) { toCompile = items[i].Substring(1, items[i].Length - 1); } else { toCompile = items[i]; } // NOTE: Regular expressions can fail to compile here for a number of reasons that cause an exception // these are left unhandled here as the caller is responsible for ensuring all is valid. // several functions IsValidFilterExpression and IsValidExpression are provided for such checking if ( include ) { inclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)); } else { exclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)); } } } } #region Instance Fields string filter_; ArrayList inclusions_; ArrayList exclusions_; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/PathFilter.cs000066400000000000000000000231761446222606700260100ustar00rootroot00000000000000// PathFilter.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; namespace ICSharpCode.SharpZipLib.Core { /// /// PathFilter filters directories and files using a form of regular expressions /// by full path name. /// See NameFilter for more detail on filtering. /// public class PathFilter : IScanFilter { #region Constructors /// /// Initialise a new instance of . /// /// The filter expression to apply. public PathFilter(string filter) { nameFilter_ = new NameFilter(filter); } #endregion #region IScanFilter Members /// /// Test a name to see if it matches the filter. /// /// The name to test. /// True if the name matches, false otherwise. /// is used to get the full path before matching. public virtual bool IsMatch(string name) { bool result = false; if ( name != null ) { string cooked = (name.Length > 0) ? Path.GetFullPath(name) : ""; result = nameFilter_.IsMatch(cooked); } return result; } #endregion #region Instance Fields NameFilter nameFilter_; #endregion } /// /// ExtendedPathFilter filters based on name, file size, and the last write time of the file. /// /// Provides an example of how to customise filtering. public class ExtendedPathFilter : PathFilter { #region Constructors /// /// Initialise a new instance of ExtendedPathFilter. /// /// The filter to apply. /// The minimum file size to include. /// The maximum file size to include. public ExtendedPathFilter(string filter, long minSize, long maxSize) : base(filter) { MinSize = minSize; MaxSize = maxSize; } /// /// Initialise a new instance of ExtendedPathFilter. /// /// The filter to apply. /// The minimum to include. /// The maximum to include. public ExtendedPathFilter(string filter, DateTime minDate, DateTime maxDate) : base(filter) { MinDate = minDate; MaxDate = maxDate; } /// /// Initialise a new instance of ExtendedPathFilter. /// /// The filter to apply. /// The minimum file size to include. /// The maximum file size to include. /// The minimum to include. /// The maximum to include. public ExtendedPathFilter(string filter, long minSize, long maxSize, DateTime minDate, DateTime maxDate) : base(filter) { MinSize = minSize; MaxSize = maxSize; MinDate = minDate; MaxDate = maxDate; } #endregion #region IScanFilter Members /// /// Test a filename to see if it matches the filter. /// /// The filename to test. /// True if the filter matches, false otherwise. /// The doesnt exist public override bool IsMatch(string name) { bool result = base.IsMatch(name); if ( result ) { FileInfo fileInfo = new FileInfo(name); result = (MinSize <= fileInfo.Length) && (MaxSize >= fileInfo.Length) && (MinDate <= fileInfo.LastWriteTime) && (MaxDate >= fileInfo.LastWriteTime) ; } return result; } #endregion #region Properties /// /// Get/set the minimum size/length for a file that will match this filter. /// /// The default value is zero. /// value is less than zero; greater than public long MinSize { get { return minSize_; } set { if ( (value < 0) || (maxSize_ < value) ) { throw new ArgumentOutOfRangeException("value"); } minSize_ = value; } } /// /// Get/set the maximum size/length for a file that will match this filter. /// /// The default value is /// value is less than zero or less than public long MaxSize { get { return maxSize_; } set { if ( (value < 0) || (minSize_ > value) ) { throw new ArgumentOutOfRangeException("value"); } maxSize_ = value; } } /// /// Get/set the minimum value that will match for this filter. /// /// Files with a LastWrite time less than this value are excluded by the filter. public DateTime MinDate { get { return minDate_; } set { if ( value > maxDate_ ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("value"); #else throw new ArgumentOutOfRangeException("value", "Exceeds MaxDate"); #endif } minDate_ = value; } } /// /// Get/set the maximum value that will match for this filter. /// /// Files with a LastWrite time greater than this value are excluded by the filter. public DateTime MaxDate { get { return maxDate_; } set { if ( minDate_ > value ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("value"); #else throw new ArgumentOutOfRangeException("value", "Exceeds MinDate"); #endif } maxDate_ = value; } } #endregion #region Instance Fields long minSize_; long maxSize_ = long.MaxValue; DateTime minDate_ = DateTime.MinValue; DateTime maxDate_ = DateTime.MaxValue; #endregion } /// /// NameAndSizeFilter filters based on name and file size. /// /// A sample showing how filters might be extended. [Obsolete("Use ExtendedPathFilter instead")] public class NameAndSizeFilter : PathFilter { /// /// Initialise a new instance of NameAndSizeFilter. /// /// The filter to apply. /// The minimum file size to include. /// The maximum file size to include. public NameAndSizeFilter(string filter, long minSize, long maxSize) : base(filter) { MinSize = minSize; MaxSize = maxSize; } /// /// Test a filename to see if it matches the filter. /// /// The filename to test. /// True if the filter matches, false otherwise. public override bool IsMatch(string name) { bool result = base.IsMatch(name); if ( result ) { FileInfo fileInfo = new FileInfo(name); long length = fileInfo.Length; result = (MinSize <= length) && (MaxSize >= length); } return result; } /// /// Get/set the minimum size for a file that will match this filter. /// public long MinSize { get { return minSize_; } set { if ( (value < 0) || (maxSize_ < value) ) { throw new ArgumentOutOfRangeException("value"); } minSize_ = value; } } /// /// Get/set the maximum size for a file that will match this filter. /// public long MaxSize { get { return maxSize_; } set { if ( (value < 0) || (minSize_ > value) ) { throw new ArgumentOutOfRangeException("value"); } maxSize_ = value; } } #region Instance Fields long minSize_; long maxSize_ = long.MaxValue; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/StreamUtils.cs000066400000000000000000000211371446222606700262150ustar00rootroot00000000000000// StreamUtils.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; namespace ICSharpCode.SharpZipLib.Core { /// /// Provides simple " utilities. /// public sealed class StreamUtils { /// /// Read from a ensuring all the required data is read. /// /// The stream to read. /// The buffer to fill. /// static public void ReadFully(Stream stream, byte[] buffer) { ReadFully(stream, buffer, 0, buffer.Length); } /// /// Read from a " ensuring all the required data is read. /// /// The stream to read data from. /// The buffer to store data in. /// The offset at which to begin storing data. /// The number of bytes of data to store. /// Required parameter is null /// and or are invalid. /// End of stream is encountered before all the data has been read. static public void ReadFully(Stream stream, byte[] buffer, int offset, int count) { if ( stream == null ) { throw new ArgumentNullException("stream"); } if ( buffer == null ) { throw new ArgumentNullException("buffer"); } // Offset can equal length when buffer and count are 0. if ( (offset < 0) || (offset > buffer.Length) ) { throw new ArgumentOutOfRangeException("offset"); } if ( (count < 0) || (offset + count > buffer.Length) ) { throw new ArgumentOutOfRangeException("count"); } while ( count > 0 ) { int readCount = stream.Read(buffer, offset, count); if ( readCount <= 0 ) { throw new EndOfStreamException(); } offset += readCount; count -= readCount; } } /// /// Copy the contents of one to another. /// /// The stream to source data from. /// The stream to write data to. /// The buffer to use during copying. static public void Copy(Stream source, Stream destination, byte[] buffer) { if (source == null) { throw new ArgumentNullException("source"); } if (destination == null) { throw new ArgumentNullException("destination"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } // Ensure a reasonable size of buffer is used without being prohibitive. if (buffer.Length < 128) { throw new ArgumentException("Buffer is too small", "buffer"); } bool copying = true; while (copying) { int bytesRead = source.Read(buffer, 0, buffer.Length); if (bytesRead > 0) { destination.Write(buffer, 0, bytesRead); } else { destination.Flush(); copying = false; } } } /// /// Copy the contents of one to another. /// /// The stream to source data from. /// The stream to write data to. /// The buffer to use during copying. /// The progress handler delegate to use. /// The minimum between progress updates. /// The source for this event. /// The name to use with the event. /// This form is specialised for use within #Zip to support events during archive operations. static public void Copy(Stream source, Stream destination, byte[] buffer, ProgressHandler progressHandler, TimeSpan updateInterval, object sender, string name) { Copy(source, destination, buffer, progressHandler, updateInterval, sender, name, -1); } /// /// Copy the contents of one to another. /// /// The stream to source data from. /// The stream to write data to. /// The buffer to use during copying. /// The progress handler delegate to use. /// The minimum between progress updates. /// The source for this event. /// The name to use with the event. /// A predetermined fixed target value to use with progress updates. /// If the value is negative the target is calculated by looking at the stream. /// This form is specialised for use within #Zip to support events during archive operations. static public void Copy(Stream source, Stream destination, byte[] buffer, ProgressHandler progressHandler, TimeSpan updateInterval, object sender, string name, long fixedTarget) { if (source == null) { throw new ArgumentNullException("source"); } if (destination == null) { throw new ArgumentNullException("destination"); } if (buffer == null) { throw new ArgumentNullException("buffer"); } // Ensure a reasonable size of buffer is used without being prohibitive. if (buffer.Length < 128) { throw new ArgumentException("Buffer is too small", "buffer"); } if (progressHandler == null) { throw new ArgumentNullException("progressHandler"); } bool copying = true; DateTime marker = DateTime.Now; long processed = 0; long target = 0; if (fixedTarget >= 0) { target = fixedTarget; } else if (source.CanSeek) { target = source.Length - source.Position; } // Always fire 0% progress.. ProgressEventArgs args = new ProgressEventArgs(name, processed, target); progressHandler(sender, args); bool progressFired = true; while (copying) { int bytesRead = source.Read(buffer, 0, buffer.Length); if (bytesRead > 0) { processed += bytesRead; progressFired = false; destination.Write(buffer, 0, bytesRead); } else { destination.Flush(); copying = false; } if (DateTime.Now - marker > updateInterval) { progressFired = true; marker = DateTime.Now; args = new ProgressEventArgs(name, processed, target); progressHandler(sender, args); copying = args.ContinueRunning; } } if (!progressFired) { args = new ProgressEventArgs(name, processed, target); progressHandler(sender, args); } } /// /// Initialise an instance of /// private StreamUtils() { // Do nothing. } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Core/WindowsPathUtils.cs000066400000000000000000000065131446222606700272320ustar00rootroot00000000000000// WindowsPathUtils.cs // // Copyright 2007 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. namespace ICSharpCode.SharpZipLib.Core { /// /// WindowsPathUtils provides simple utilities for handling windows paths. /// public abstract class WindowsPathUtils { /// /// Initializes a new instance of the class. /// internal WindowsPathUtils() { } /// /// Remove any path root present in the path /// /// A containing path information. /// The path with the root removed if it was present; path otherwise. /// Unlike the class the path isnt otherwise checked for validity. public static string DropPathRoot(string path) { string result = path; if ( (path != null) && (path.Length > 0) ) { if ((path[0] == '\\') || (path[0] == '/')) { // UNC name ? if ((path.Length > 1) && ((path[1] == '\\') || (path[1] == '/'))) { int index = 2; int elements = 2; // Scan for two separate elements \\machine\share\restofpath while ((index <= path.Length) && (((path[index] != '\\') && (path[index] != '/')) || (--elements > 0))) { index++; } index++; if (index < path.Length) { result = path.Substring(index); } else { result = ""; } } } else if ((path.Length > 1) && (path[1] == ':')) { int dropCount = 2; if ((path.Length > 2) && ((path[2] == '\\') || (path[2] == '/'))) { dropCount = 3; } result = result.Remove(0, dropCount); } } return result; } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Encryption/000077500000000000000000000000001446222606700246505ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Encryption/PkzipClassic.cs000066400000000000000000000337121446222606700276040ustar00rootroot00000000000000// // PkzipClassic encryption // // Copyright 2004 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // #if !NETCF_1_0 using System; using System.Security.Cryptography; using ICSharpCode.SharpZipLib.Checksums; namespace ICSharpCode.SharpZipLib.Encryption { /// /// PkzipClassic embodies the classic or original encryption facilities used in Pkzip archives. /// While it has been superceded by more recent and more powerful algorithms, its still in use and /// is viable for preventing casual snooping /// public abstract class PkzipClassic : SymmetricAlgorithm { /// /// Generates new encryption keys based on given seed /// /// The seed value to initialise keys with. /// A new key value. static public byte[] GenerateKeys(byte[] seed) { if ( seed == null ) { throw new ArgumentNullException("seed"); } if ( seed.Length == 0 ) { throw new ArgumentException("Length is zero", "seed"); } uint[] newKeys = new uint[] { 0x12345678, 0x23456789, 0x34567890 }; for (int i = 0; i < seed.Length; ++i) { newKeys[0] = Crc32.ComputeCrc32(newKeys[0], seed[i]); newKeys[1] = newKeys[1] + (byte)newKeys[0]; newKeys[1] = newKeys[1] * 134775813 + 1; newKeys[2] = Crc32.ComputeCrc32(newKeys[2], (byte)(newKeys[1] >> 24)); } byte[] result = new byte[12]; result[0] = (byte)(newKeys[0] & 0xff); result[1] = (byte)((newKeys[0] >> 8) & 0xff); result[2] = (byte)((newKeys[0] >> 16) & 0xff); result[3] = (byte)((newKeys[0] >> 24) & 0xff); result[4] = (byte)(newKeys[1] & 0xff); result[5] = (byte)((newKeys[1] >> 8) & 0xff); result[6] = (byte)((newKeys[1] >> 16) & 0xff); result[7] = (byte)((newKeys[1] >> 24) & 0xff); result[8] = (byte)(newKeys[2] & 0xff); result[9] = (byte)((newKeys[2] >> 8) & 0xff); result[10] = (byte)((newKeys[2] >> 16) & 0xff); result[11] = (byte)((newKeys[2] >> 24) & 0xff); return result; } } /// /// PkzipClassicCryptoBase provides the low level facilities for encryption /// and decryption using the PkzipClassic algorithm. /// class PkzipClassicCryptoBase { /// /// Transform a single byte /// /// /// The transformed value /// protected byte TransformByte() { uint temp = ((keys[2] & 0xFFFF) | 2); return (byte)((temp * (temp ^ 1)) >> 8); } /// /// Set the key schedule for encryption/decryption. /// /// The data use to set the keys from. protected void SetKeys(byte[] keyData) { if ( keyData == null ) { throw new ArgumentNullException("keyData"); } if ( keyData.Length != 12 ) { throw new InvalidOperationException("Key length is not valid"); } keys = new uint[3]; keys[0] = (uint)((keyData[3] << 24) | (keyData[2] << 16) | (keyData[1] << 8) | keyData[0]); keys[1] = (uint)((keyData[7] << 24) | (keyData[6] << 16) | (keyData[5] << 8) | keyData[4]); keys[2] = (uint)((keyData[11] << 24) | (keyData[10] << 16) | (keyData[9] << 8) | keyData[8]); } /// /// Update encryption keys /// protected void UpdateKeys(byte ch) { keys[0] = Crc32.ComputeCrc32(keys[0], ch); keys[1] = keys[1] + (byte)keys[0]; keys[1] = keys[1] * 134775813 + 1; keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24)); } /// /// Reset the internal state. /// protected void Reset() { keys[0] = 0; keys[1] = 0; keys[2] = 0; } #region Instance Fields uint[] keys; #endregion } /// /// PkzipClassic CryptoTransform for encryption. /// class PkzipClassicEncryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform { /// /// Initialise a new instance of /// /// The key block to use. internal PkzipClassicEncryptCryptoTransform(byte[] keyBlock) { SetKeys(keyBlock); } #region ICryptoTransform Members /// /// Transforms the specified region of the specified byte array. /// /// The input for which to compute the transform. /// The offset into the byte array from which to begin using data. /// The number of bytes in the byte array to use as data. /// The computed transform. public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { byte[] result = new byte[inputCount]; TransformBlock(inputBuffer, inputOffset, inputCount, result, 0); return result; } /// /// Transforms the specified region of the input byte array and copies /// the resulting transform to the specified region of the output byte array. /// /// The input for which to compute the transform. /// The offset into the input byte array from which to begin using data. /// The number of bytes in the input byte array to use as data. /// The output to which to write the transform. /// The offset into the output byte array from which to begin writing data. /// The number of bytes written. public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { for (int i = inputOffset; i < inputOffset + inputCount; ++i) { byte oldbyte = inputBuffer[i]; outputBuffer[outputOffset++] = (byte)(inputBuffer[i] ^ TransformByte()); UpdateKeys(oldbyte); } return inputCount; } /// /// Gets a value indicating whether the current transform can be reused. /// public bool CanReuseTransform { get { return true; } } /// /// Gets the size of the input data blocks in bytes. /// public int InputBlockSize { get { return 1; } } /// /// Gets the size of the output data blocks in bytes. /// public int OutputBlockSize { get { return 1; } } /// /// Gets a value indicating whether multiple blocks can be transformed. /// public bool CanTransformMultipleBlocks { get { return true; } } #endregion #region IDisposable Members /// /// Cleanup internal state. /// public void Dispose() { Reset(); } #endregion } /// /// PkzipClassic CryptoTransform for decryption. /// class PkzipClassicDecryptCryptoTransform : PkzipClassicCryptoBase, ICryptoTransform { /// /// Initialise a new instance of . /// /// The key block to decrypt with. internal PkzipClassicDecryptCryptoTransform(byte[] keyBlock) { SetKeys(keyBlock); } #region ICryptoTransform Members /// /// Transforms the specified region of the specified byte array. /// /// The input for which to compute the transform. /// The offset into the byte array from which to begin using data. /// The number of bytes in the byte array to use as data. /// The computed transform. public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { byte[] result = new byte[inputCount]; TransformBlock(inputBuffer, inputOffset, inputCount, result, 0); return result; } /// /// Transforms the specified region of the input byte array and copies /// the resulting transform to the specified region of the output byte array. /// /// The input for which to compute the transform. /// The offset into the input byte array from which to begin using data. /// The number of bytes in the input byte array to use as data. /// The output to which to write the transform. /// The offset into the output byte array from which to begin writing data. /// The number of bytes written. public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { for (int i = inputOffset; i < inputOffset + inputCount; ++i) { byte newByte = (byte)(inputBuffer[i] ^ TransformByte()); outputBuffer[outputOffset++] = newByte; UpdateKeys(newByte); } return inputCount; } /// /// Gets a value indicating whether the current transform can be reused. /// public bool CanReuseTransform { get { return true; } } /// /// Gets the size of the input data blocks in bytes. /// public int InputBlockSize { get { return 1; } } /// /// Gets the size of the output data blocks in bytes. /// public int OutputBlockSize { get { return 1; } } /// /// Gets a value indicating whether multiple blocks can be transformed. /// public bool CanTransformMultipleBlocks { get { return true; } } #endregion #region IDisposable Members /// /// Cleanup internal state. /// public void Dispose() { Reset(); } #endregion } /// /// Defines a wrapper object to access the Pkzip algorithm. /// This class cannot be inherited. /// public sealed class PkzipClassicManaged : PkzipClassic { /// /// Get / set the applicable block size in bits. /// /// The only valid block size is 8. public override int BlockSize { get { return 8; } set { if (value != 8) { throw new CryptographicException("Block size is invalid"); } } } /// /// Get an array of legal key sizes. /// public override KeySizes[] LegalKeySizes { get { KeySizes[] keySizes = new KeySizes[1]; keySizes[0] = new KeySizes(12 * 8, 12 * 8, 0); return keySizes; } } /// /// Generate an initial vector. /// public override void GenerateIV() { // Do nothing. } /// /// Get an array of legal block sizes. /// public override KeySizes[] LegalBlockSizes { get { KeySizes[] keySizes = new KeySizes[1]; keySizes[0] = new KeySizes(1 * 8, 1 * 8, 0); return keySizes; } } /// /// Get / set the key value applicable. /// public override byte[] Key { get { if ( key_ == null ) { GenerateKey(); } return (byte[]) key_.Clone(); } set { if ( value == null ) { throw new ArgumentNullException("value"); } if ( value.Length != 12 ) { throw new CryptographicException("Key size is illegal"); } key_ = (byte[]) value.Clone(); } } /// /// Generate a new random key. /// public override void GenerateKey() { key_ = new byte[12]; Random rnd = new Random(); rnd.NextBytes(key_); } /// /// Create an encryptor. /// /// The key to use for this encryptor. /// Initialisation vector for the new encryptor. /// Returns a new PkzipClassic encryptor public override ICryptoTransform CreateEncryptor( byte[] rgbKey, byte[] rgbIV) { key_ = rgbKey; return new PkzipClassicEncryptCryptoTransform(Key); } /// /// Create a decryptor. /// /// Keys to use for this new decryptor. /// Initialisation vector for the new decryptor. /// Returns a new decryptor. public override ICryptoTransform CreateDecryptor( byte[] rgbKey, byte[] rgbIV) { key_ = rgbKey; return new PkzipClassicDecryptCryptoTransform(Key); } #region Instance Fields byte[] key_; #endregion } } #endif quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Encryption/ZipAESStream.cs000066400000000000000000000152631446222606700274550ustar00rootroot00000000000000// // ZipAESStream.cs // // Copyright 2009 David Pierson // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // #if !NET_1_1 && !NETCF_2_0 using System; using System.IO; using System.Security.Cryptography; namespace ICSharpCode.SharpZipLib.Encryption { // Based on information from http://www.winzip.com/aes_info.htm // and http://www.gladman.me.uk/cryptography_technology/fileencrypt/ /// /// Encrypts and decrypts AES ZIP /// internal class ZipAESStream : CryptoStream { /// /// Constructor /// /// The stream on which to perform the cryptographic transformation. /// Instance of ZipAESTransform /// Read or Write public ZipAESStream(Stream stream, ZipAESTransform transform, CryptoStreamMode mode) : base(stream, transform, mode) { _stream = stream; _transform = transform; _slideBuffer = new byte[1024]; _blockAndAuth = CRYPTO_BLOCK_SIZE + AUTH_CODE_LENGTH; // mode: // CryptoStreamMode.Read means we read from "stream" and pass decrypted to our Read() method. // Write bypasses this stream and uses the Transform directly. if (mode != CryptoStreamMode.Read) { throw new Exception("ZipAESStream only for read"); } } // The final n bytes of the AES stream contain the Auth Code. private const int AUTH_CODE_LENGTH = 10; private Stream _stream; private ZipAESTransform _transform; private byte[] _slideBuffer; private int _slideBufStartPos; private int _slideBufFreePos; // Blocksize is always 16 here, even for AES-256 which has transform.InputBlockSize of 32. private const int CRYPTO_BLOCK_SIZE = 16; private int _blockAndAuth; /// /// Reads a sequence of bytes from the current CryptoStream into buffer, /// and advances the position within the stream by the number of bytes read. /// public override int Read(byte[] outBuffer, int offset, int count) { int nBytes = 0; while (nBytes < count) { // Calculate buffer quantities vs read-ahead size, and check for sufficient free space int byteCount = _slideBufFreePos - _slideBufStartPos; // Need to handle final block and Auth Code specially, but don't know total data length. // Maintain a read-ahead equal to the length of (crypto block + Auth Code). // When that runs out we can detect these final sections. int lengthToRead = _blockAndAuth - byteCount; if (_slideBuffer.Length - _slideBufFreePos < lengthToRead) { // Shift the data to the beginning of the buffer int iTo = 0; for (int iFrom = _slideBufStartPos; iFrom < _slideBufFreePos; iFrom++, iTo++) { _slideBuffer[iTo] = _slideBuffer[iFrom]; } _slideBufFreePos -= _slideBufStartPos; // Note the -= _slideBufStartPos = 0; } int obtained = _stream.Read(_slideBuffer, _slideBufFreePos, lengthToRead); _slideBufFreePos += obtained; // Recalculate how much data we now have byteCount = _slideBufFreePos - _slideBufStartPos; if (byteCount >= _blockAndAuth) { // At least a 16 byte block and an auth code remains. _transform.TransformBlock(_slideBuffer, _slideBufStartPos, CRYPTO_BLOCK_SIZE, outBuffer, offset); nBytes += CRYPTO_BLOCK_SIZE; offset += CRYPTO_BLOCK_SIZE; _slideBufStartPos += CRYPTO_BLOCK_SIZE; } else { // Last round. if (byteCount > AUTH_CODE_LENGTH) { // At least one byte of data plus auth code int finalBlock = byteCount - AUTH_CODE_LENGTH; _transform.TransformBlock(_slideBuffer, _slideBufStartPos, finalBlock, outBuffer, offset); nBytes += finalBlock; _slideBufStartPos += finalBlock; } else if (byteCount < AUTH_CODE_LENGTH) throw new Exception("Internal error missed auth code"); // Coding bug // Final block done. Check Auth code. byte[] calcAuthCode = _transform.GetAuthCode(); for (int i = 0; i < AUTH_CODE_LENGTH; i++) { if (calcAuthCode[i] != _slideBuffer[_slideBufStartPos + i]) { throw new Exception("AES Authentication Code does not match. This is a super-CRC check on the data in the file after compression and encryption. \r\n" + "The file may be damaged."); } } break; // Reached the auth code } } return nBytes; } /// /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. /// /// An array of bytes. This method copies count bytes from buffer to the current stream. /// The byte offset in buffer at which to begin copying bytes to the current stream. /// The number of bytes to be written to the current stream. public override void Write(byte[] buffer, int offset, int count) { // ZipAESStream is used for reading but not for writing. Writing uses the ZipAESTransform directly. throw new NotImplementedException(); } } } #endifquickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Encryption/ZipAESTransform.cs000066400000000000000000000162061446222606700301730ustar00rootroot00000000000000// // ZipAESTransform.cs // // Copyright 2009 David Pierson // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // #if !NET_1_1 && !NETCF_2_0 // Framework version 2.0 required for Rfc2898DeriveBytes using System; using System.Security.Cryptography; namespace ICSharpCode.SharpZipLib.Encryption { /// /// Transforms stream using AES in CTR mode /// internal class ZipAESTransform : ICryptoTransform { private const int PWD_VER_LENGTH = 2; // WinZip use iteration count of 1000 for PBKDF2 key generation private const int KEY_ROUNDS = 1000; // For 128-bit AES (16 bytes) the encryption is implemented as expected. // For 256-bit AES (32 bytes) WinZip do full 256 bit AES of the nonce to create the encryption // block but use only the first 16 bytes of it, and discard the second half. private const int ENCRYPT_BLOCK = 16; private int _blockSize; private ICryptoTransform _encryptor; private readonly byte[] _counterNonce; private byte[] _encryptBuffer; private int _encrPos; private byte[] _pwdVerifier; private HMACSHA1 _hmacsha1; private bool _finalised; private bool _writeMode; /// /// Constructor. /// /// Password string /// Random bytes, length depends on encryption strength. /// 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes. /// The encryption strength, in bytes eg 16 for 128 bits. /// True when creating a zip, false when reading. For the AuthCode. /// public ZipAESTransform(string key, byte[] saltBytes, int blockSize, bool writeMode) { if (blockSize != 16 && blockSize != 32) // 24 valid for AES but not supported by Winzip throw new Exception("Invalid blocksize " + blockSize + ". Must be 16 or 32."); if (saltBytes.Length != blockSize / 2) throw new Exception("Invalid salt len. Must be " + blockSize / 2 + " for blocksize " + blockSize); // initialise the encryption buffer and buffer pos _blockSize = blockSize; _encryptBuffer = new byte[_blockSize]; _encrPos = ENCRYPT_BLOCK; // Performs the equivalent of derive_key in Dr Brian Gladman's pwd2key.c Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(key, saltBytes, KEY_ROUNDS); RijndaelManaged rm = new RijndaelManaged(); rm.Mode = CipherMode.ECB; // No feedback from cipher for CTR mode _counterNonce = new byte[_blockSize]; byte[] byteKey1 = pdb.GetBytes(_blockSize); byte[] byteKey2 = pdb.GetBytes(_blockSize); _encryptor = rm.CreateEncryptor(byteKey1, byteKey2); _pwdVerifier = pdb.GetBytes(PWD_VER_LENGTH); // _hmacsha1 = new HMACSHA1(byteKey2); _writeMode = writeMode; } /// /// Implement the ICryptoTransform method. /// public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset) { // Pass the data stream to the hash algorithm for generating the Auth Code. // This does not change the inputBuffer. Do this before decryption for read mode. if (!_writeMode) { _hmacsha1.TransformBlock(inputBuffer, inputOffset, inputCount, inputBuffer, inputOffset); } // Encrypt with AES in CTR mode. Regards to Dr Brian Gladman for this. int ix = 0; while (ix < inputCount) { if (_encrPos == ENCRYPT_BLOCK) { /* increment encryption nonce */ int j = 0; while (++_counterNonce[j] == 0) { ++j; } /* encrypt the nonce to form next xor buffer */ _encryptor.TransformBlock(_counterNonce, 0, _blockSize, _encryptBuffer, 0); _encrPos = 0; } outputBuffer[ix + outputOffset] = (byte)(inputBuffer[ix + inputOffset] ^ _encryptBuffer[_encrPos++]); // ix++; } if (_writeMode) { // This does not change the buffer. _hmacsha1.TransformBlock(outputBuffer, outputOffset, inputCount, outputBuffer, outputOffset); } return inputCount; } /// /// Returns the 2 byte password verifier /// public byte[] PwdVerifier { get { return _pwdVerifier; } } /// /// Returns the 10 byte AUTH CODE to be checked or appended immediately following the AES data stream. /// public byte[] GetAuthCode() { // We usually don't get advance notice of final block. Hash requres a TransformFinal. if (!_finalised) { byte[] dummy = new byte[0]; _hmacsha1.TransformFinalBlock(dummy, 0, 0); _finalised = true; } return _hmacsha1.Hash; } #region ICryptoTransform Members /// /// Not implemented. /// public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount) { throw new NotImplementedException("ZipAESTransform.TransformFinalBlock"); } /// /// Gets the size of the input data blocks in bytes. /// public int InputBlockSize { get { return _blockSize; } } /// /// Gets the size of the output data blocks in bytes. /// public int OutputBlockSize { get { return _blockSize; } } /// /// Gets a value indicating whether multiple blocks can be transformed. /// public bool CanTransformMultipleBlocks { get { return true; } } /// /// Gets a value indicating whether the current transform can be reused. /// public bool CanReuseTransform { get { return true; } } /// /// Cleanup internal state. /// public void Dispose() { _encryptor.Dispose(); } #endregion } } #endifquickroute-linux-upstream-2.5/3rdparty/SharpZipLib/ICSharpCode.SharpZLib.csproj000066400000000000000000000114531446222606700276650ustar00rootroot00000000000000 Debug AnyCPU 2.0 {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} ICSharpCode.SharpZipLib ICSharpCode.SharpZipLib Library 4 False False OnOutputUpdated ..\bin\ICSharpCode.SharpZipLib.xml 8.0.30703 v2.0 True ..\bin\ None False Auto 4194304 4096 AnyCPU true False ..\bin\ Full False Auto 4194304 4096 NET_2_0 AnyCPU False Auto 4194304 AnyCPU 4096 NET_2_0 quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/ICSharpCode.SharpZLib.prjx000066400000000000000000000216751446222606700273570ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Lzw/000077500000000000000000000000001446222606700232725ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Lzw/LzwConstants.cs000066400000000000000000000064411446222606700262770ustar00rootroot00000000000000// LzwConstants.cs // // Copyright (C) 2009 Gabriel Burca // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. namespace ICSharpCode.SharpZipLib.LZW { /// /// This class contains constants used for LZW /// sealed public class LzwConstants { /// /// Magic number found at start of LZW header: 0x1f 0x9d /// public const int MAGIC = 0x1f9d; /// /// Maximum number of bits per code /// public const int MAX_BITS = 16; /* 3rd header byte: * bit 0..4 Number of compression bits * bit 5 Extended header * bit 6 Free * bit 7 Block mode */ /// /// Mask for 'number of compression bits' /// public const int BIT_MASK = 0x1f; /// /// Indicates the presence of a fourth header byte /// public const int EXTENDED_MASK = 0x20; //public const int FREE_MASK = 0x40; /// /// Reserved bits /// public const int RESERVED_MASK = 0x60; /// /// Block compression: if table is full and compression rate is dropping, /// clear the dictionary. /// public const int BLOCK_MODE_MASK = 0x80; /// /// LZW file header size (in bytes) /// public const int HDR_SIZE = 3; /// /// Initial number of bits per code /// public const int INIT_BITS = 9; LzwConstants() { } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Lzw/LzwException.cs000066400000000000000000000065341446222606700262640ustar00rootroot00000000000000// LzwException.cs // // Copyright (C) 2009 Gabriel Burca // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; #if !NETCF_1_0 && !NETCF_2_0 using System.Runtime.Serialization; #endif namespace ICSharpCode.SharpZipLib.LZW { /// /// LzwException represents a LZW specific exception /// #if !NETCF_1_0 && !NETCF_2_0 [Serializable] #endif public class LzwException : SharpZipBaseException { #if !NETCF_1_0 && !NETCF_2_0 /// /// Deserialization constructor /// /// for this constructor /// for this constructor protected LzwException(SerializationInfo info, StreamingContext context) : base(info, context) { } #endif /// /// Initialise a new instance of LzwException /// public LzwException() { } /// /// Initialise a new instance of LzwException with its message string. /// /// A that describes the error. public LzwException(string message) : base(message) { } /// /// Initialise a new instance of . /// /// A that describes the error. /// The that caused this exception. public LzwException(string message, Exception innerException) : base(message, innerException) { } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Lzw/LzwInputStream.cs000066400000000000000000000516551446222606700266050ustar00rootroot00000000000000// LzwInputStream.cs // // Copyright (C) 2009 Gabriel Burca // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; namespace ICSharpCode.SharpZipLib.LZW { /// /// This filter stream is used to decompress a LZW format stream. /// Specifically, a stream that uses the LZC compression method. /// This file format is usually associated with the .Z file extension. /// /// See http://en.wikipedia.org/wiki/Compress /// See http://wiki.wxwidgets.org/Development:_Z_File_Format /// /// The file header consists of 3 (or optionally 4) bytes. The first two bytes /// contain the magic marker "0x1f 0x9d", followed by a byte of flags. /// /// Based on Java code by Ronald Tschalar, which in turn was based on the unlzw.c /// code in the gzip package. /// /// This sample shows how to unzip a compressed file /// /// using System; /// using System.IO; /// /// using ICSharpCode.SharpZipLib.Core; /// using ICSharpCode.SharpZipLib.LZW; /// /// class MainClass /// { /// public static void Main(string[] args) /// { /// using (Stream inStream = new LzwInputStream(File.OpenRead(args[0]))) /// using (FileStream outStream = File.Create(Path.GetFileNameWithoutExtension(args[0]))) { /// byte[] buffer = new byte[4096]; /// StreamUtils.Copy(inStream, outStream, buffer); /// // OR /// inStream.Read(buffer, 0, buffer.Length); /// // now do something with the buffer /// } /// } /// } /// /// public class LzwInputStream : Stream { /// /// Get/set flag indicating ownership of underlying stream. /// When the flag is true will close the underlying stream also. /// /// /// The default value is true. /// public bool IsStreamOwner { get { return isStreamOwner; } set { isStreamOwner = value; } } /// /// Creates a LzwInputStream /// /// /// The stream to read compressed data from (baseInputStream LZW format) /// public LzwInputStream(Stream baseInputStream) { this.baseInputStream = baseInputStream; } /// /// See /// /// public override int ReadByte() { int b = Read(one, 0, 1); if (b == 1) return (one[0] & 0xff); return -1; } /// /// Reads decompressed data into the provided buffer byte array /// /// /// The array to read and decompress data into /// /// /// The offset indicating where the data should be placed /// /// /// The number of bytes to decompress /// /// The number of bytes read. Zero signals the end of stream public override int Read(byte[] buffer, int offset, int count) { if (!headerParsed) ParseHeader(); if (eof) return 0; int start = offset; /* Using local copies of various variables speeds things up by as * much as 30% in Java! Performance not tested in C#. */ int[] lTabPrefix = tabPrefix; byte[] lTabSuffix = tabSuffix; byte[] lStack = stack; int lNBits = nBits; int lMaxCode = maxCode; int lMaxMaxCode = maxMaxCode; int lBitMask = bitMask; int lOldCode = oldCode; byte lFinChar = finChar; int lStackP = stackP; int lFreeEnt = freeEnt; byte[] lData = data; int lBitPos = bitPos; // empty stack if stuff still left int sSize = lStack.Length - lStackP; if (sSize > 0) { int num = (sSize >= count) ? count : sSize; Array.Copy(lStack, lStackP, buffer, offset, num); offset += num; count -= num; lStackP += num; } if (count == 0) { stackP = lStackP; return offset - start; } // loop, filling local buffer until enough data has been decompressed MainLoop: do { if (end < EXTRA) { Fill(); } int bitIn = (got > 0) ? (end - end % lNBits) << 3 : (end << 3) - (lNBits - 1); while (lBitPos < bitIn) { #region A // handle 1-byte reads correctly if (count == 0) { nBits = lNBits; maxCode = lMaxCode; maxMaxCode = lMaxMaxCode; bitMask = lBitMask; oldCode = lOldCode; finChar = lFinChar; stackP = lStackP; freeEnt = lFreeEnt; bitPos = lBitPos; return offset - start; } // check for code-width expansion if (lFreeEnt > lMaxCode) { int nBytes = lNBits << 3; lBitPos = (lBitPos - 1) + nBytes - (lBitPos - 1 + nBytes) % nBytes; lNBits++; lMaxCode = (lNBits == maxBits) ? lMaxMaxCode : (1 << lNBits) - 1; lBitMask = (1 << lNBits) - 1; lBitPos = ResetBuf(lBitPos); goto MainLoop; } #endregion #region B // read next code int pos = lBitPos >> 3; int code = (((lData[pos] & 0xFF) | ((lData[pos + 1] & 0xFF) << 8) | ((lData[pos + 2] & 0xFF) << 16)) >> (lBitPos & 0x7)) & lBitMask; lBitPos += lNBits; // handle first iteration if (lOldCode == -1) { if (code >= 256) throw new LzwException("corrupt input: " + code + " > 255"); lFinChar = (byte) (lOldCode = code); buffer[offset++] = lFinChar; count--; continue; } // handle CLEAR code if (code == TBL_CLEAR && blockMode) { Array.Copy(zeros, 0, lTabPrefix, 0, zeros.Length); lFreeEnt = TBL_FIRST - 1; int nBytes = lNBits << 3; lBitPos = (lBitPos - 1) + nBytes - (lBitPos - 1 + nBytes) % nBytes; lNBits = LzwConstants.INIT_BITS; lMaxCode = (1 << lNBits) - 1; lBitMask = lMaxCode; // Code tables reset lBitPos = ResetBuf(lBitPos); goto MainLoop; } #endregion #region C // setup int inCode = code; lStackP = lStack.Length; // Handle KwK case if (code >= lFreeEnt) { if (code > lFreeEnt) { throw new LzwException("corrupt input: code=" + code + ", freeEnt=" + lFreeEnt); } lStack[--lStackP] = lFinChar; code = lOldCode; } // Generate output characters in reverse order while (code >= 256) { lStack[--lStackP] = lTabSuffix[code]; code = lTabPrefix[code]; } lFinChar = lTabSuffix[code]; buffer[offset++] = lFinChar; count--; // And put them out in forward order sSize = lStack.Length - lStackP; int num = (sSize >= count) ? count : sSize; Array.Copy(lStack, lStackP, buffer, offset, num); offset += num; count -= num; lStackP += num; #endregion #region D // generate new entry in table if (lFreeEnt < lMaxMaxCode) { lTabPrefix[lFreeEnt] = lOldCode; lTabSuffix[lFreeEnt] = lFinChar; lFreeEnt++; } // Remember previous code lOldCode = inCode; // if output buffer full, then return if (count == 0) { nBits = lNBits; maxCode = lMaxCode; bitMask = lBitMask; oldCode = lOldCode; finChar = lFinChar; stackP = lStackP; freeEnt = lFreeEnt; bitPos = lBitPos; return offset - start; } #endregion } // while lBitPos = ResetBuf(lBitPos); } while (got > 0); // do..while nBits = lNBits; maxCode = lMaxCode; bitMask = lBitMask; oldCode = lOldCode; finChar = lFinChar; stackP = lStackP; freeEnt = lFreeEnt; bitPos = lBitPos; eof = true; return offset - start; } /// /// Moves the unread data in the buffer to the beginning and resets /// the pointers. /// /// /// private int ResetBuf(int bitPosition) { int pos = bitPosition >> 3; Array.Copy(data, pos, data, 0, end - pos); end -= pos; return 0; } private void Fill() { got = baseInputStream.Read(data, end, data.Length - 1 - end); if (got > 0) { end += got; } } private void ParseHeader() { headerParsed = true; byte[] hdr = new byte[LzwConstants.HDR_SIZE]; int result = baseInputStream.Read(hdr, 0, hdr.Length); // Check the magic marker if (result < 0) throw new LzwException("Failed to read LZW header"); if (hdr[0] != (LzwConstants.MAGIC >> 8) || hdr[1] != (LzwConstants.MAGIC & 0xff)) { throw new LzwException(String.Format( "Wrong LZW header. Magic bytes don't match. 0x{0:x2} 0x{1:x2}", hdr[0], hdr[1])); } // Check the 3rd header byte blockMode = (hdr[2] & LzwConstants.BLOCK_MODE_MASK) > 0; maxBits = hdr[2] & LzwConstants.BIT_MASK; if (maxBits > LzwConstants.MAX_BITS) { throw new LzwException("Stream compressed with " + maxBits + " bits, but decompression can only handle " + LzwConstants.MAX_BITS + " bits."); } if ((hdr[2] & LzwConstants.RESERVED_MASK) > 0) { throw new LzwException("Unsupported bits set in the header."); } // Initialize variables maxMaxCode = 1 << maxBits; nBits = LzwConstants.INIT_BITS; maxCode = (1 << nBits) - 1; bitMask = maxCode; oldCode = -1; finChar = 0; freeEnt = blockMode ? TBL_FIRST : 256; tabPrefix = new int[1 << maxBits]; tabSuffix = new byte[1 << maxBits]; stack = new byte[1 << maxBits]; stackP = stack.Length; for (int idx = 255; idx >= 0; idx--) tabSuffix[idx] = (byte)idx; } #region Stream Overrides /// /// Gets a value indicating whether the current stream supports reading /// public override bool CanRead { get { return baseInputStream.CanRead; } } /// /// Gets a value of false indicating seeking is not supported for this stream. /// public override bool CanSeek { get { return false; } } /// /// Gets a value of false indicating that this stream is not writeable. /// public override bool CanWrite { get { return false; } } /// /// A value representing the length of the stream in bytes. /// public override long Length { get { return got; } } /// /// The current position within the stream. /// Throws a NotSupportedException when attempting to set the position /// /// Attempting to set the position public override long Position { get { return baseInputStream.Position; } set { throw new NotSupportedException("InflaterInputStream Position not supported"); } } /// /// Flushes the baseInputStream /// public override void Flush() { baseInputStream.Flush(); } /// /// Sets the position within the current stream /// Always throws a NotSupportedException /// /// The relative offset to seek to. /// The defining where to seek from. /// The new position in the stream. /// Any access public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException("Seek not supported"); } /// /// Set the length of the current stream /// Always throws a NotSupportedException /// /// The new length value for the stream. /// Any access public override void SetLength(long value) { throw new NotSupportedException("InflaterInputStream SetLength not supported"); } /// /// Writes a sequence of bytes to stream and advances the current position /// This method always throws a NotSupportedException /// /// Thew buffer containing data to write. /// The offset of the first byte to write. /// The number of bytes to write. /// Any access public override void Write(byte[] buffer, int offset, int count) { throw new NotSupportedException("InflaterInputStream Write not supported"); } /// /// Writes one byte to the current stream and advances the current position /// Always throws a NotSupportedException /// /// The byte to write. /// Any access public override void WriteByte(byte value) { throw new NotSupportedException("InflaterInputStream WriteByte not supported"); } /// /// Entry point to begin an asynchronous write. Always throws a NotSupportedException. /// /// The buffer to write data from /// Offset of first byte to write /// The maximum number of bytes to write /// The method to be called when the asynchronous write operation is completed /// A user-provided object that distinguishes this particular asynchronous write request from other requests /// An IAsyncResult that references the asynchronous write /// Any access public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { throw new NotSupportedException("InflaterInputStream BeginWrite not supported"); } /// /// Closes the input stream. When /// is true the underlying stream is also closed. /// public override void Close() { if (!isClosed) { isClosed = true; if (isStreamOwner) { baseInputStream.Close(); } } } #endregion #region Instance Fields Stream baseInputStream; /// /// Flag indicating wether this instance is designated the stream owner. /// When closing if this flag is true the underlying stream is closed. /// bool isStreamOwner = true; /// /// Flag indicating wether this instance has been closed or not. /// bool isClosed; readonly byte[] one = new byte[1]; bool headerParsed; // string table stuff private const int TBL_CLEAR = 0x100; private const int TBL_FIRST = TBL_CLEAR + 1; private int[] tabPrefix; private byte[] tabSuffix; private readonly int[] zeros = new int[256]; private byte[] stack; // various state private bool blockMode; private int nBits; private int maxBits; private int maxMaxCode; private int maxCode; private int bitMask; private int oldCode; private byte finChar; private int stackP; private int freeEnt; // input buffer private readonly byte[] data = new byte[1024 * 8]; private int bitPos; private int end; int got; private bool eof; private const int EXTRA = 64; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Main.cs000066400000000000000000000033211446222606700237300ustar00rootroot00000000000000// Main.cs // // Copyright (C) 2001 Mike Krueger // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/SharpZipBaseException.cs000066400000000000000000000071261446222606700272650ustar00rootroot00000000000000// SharpZipBaseException.cs // // Copyright 2004 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; #if !NETCF_1_0 && !NETCF_2_0 using System.Runtime.Serialization; #endif namespace ICSharpCode.SharpZipLib { /// /// SharpZipBaseException is the base exception class for the SharpZipLibrary. /// All library exceptions are derived from this. /// /// NOTE: Not all exceptions thrown will be derived from this class. /// A variety of other exceptions are possible for example #if !NETCF_1_0 && !NETCF_2_0 [Serializable] #endif public class SharpZipBaseException : ApplicationException { #if !NETCF_1_0 && !NETCF_2_0 /// /// Deserialization constructor /// /// for this constructor /// for this constructor protected SharpZipBaseException(SerializationInfo info, StreamingContext context ) : base( info, context ) { } #endif /// /// Initializes a new instance of the SharpZipBaseException class. /// public SharpZipBaseException() { } /// /// Initializes a new instance of the SharpZipBaseException class with a specified error message. /// /// A message describing the exception. public SharpZipBaseException(string message) : base(message) { } /// /// Initializes a new instance of the SharpZipBaseException class with a specified /// error message and a reference to the inner exception that is the cause of this exception. /// /// A message describing the exception. /// The inner exception public SharpZipBaseException(string message, Exception innerException) : base(message, innerException) { } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/000077500000000000000000000000001446222606700232605ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/000077500000000000000000000000001446222606700255615ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Deflater.cs000066400000000000000000000424511446222606700276440ustar00rootroot00000000000000// Deflater.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// This is the Deflater class. The deflater class compresses input /// with the deflate algorithm described in RFC 1951. It has several /// compression levels and three different strategies described below. /// /// This class is not thread safe. This is inherent in the API, due /// to the split of deflate and setInput. /// /// author of the original java version : Jochen Hoenicke /// public class Deflater { #region Deflater Documentation /* * The Deflater can do the following state transitions: * * (1) -> INIT_STATE ----> INIT_FINISHING_STATE ---. * / | (2) (5) | * / v (5) | * (3)| SETDICT_STATE ---> SETDICT_FINISHING_STATE |(3) * \ | (3) | ,--------' * | | | (3) / * v v (5) v v * (1) -> BUSY_STATE ----> FINISHING_STATE * | (6) * v * FINISHED_STATE * \_____________________________________/ * | (7) * v * CLOSED_STATE * * (1) If we should produce a header we start in INIT_STATE, otherwise * we start in BUSY_STATE. * (2) A dictionary may be set only when we are in INIT_STATE, then * we change the state as indicated. * (3) Whether a dictionary is set or not, on the first call of deflate * we change to BUSY_STATE. * (4) -- intentionally left blank -- :) * (5) FINISHING_STATE is entered, when flush() is called to indicate that * there is no more INPUT. There are also states indicating, that * the header wasn't written yet. * (6) FINISHED_STATE is entered, when everything has been flushed to the * internal pending output buffer. * (7) At any time (7) * */ #endregion #region Public Constants /// /// The best and slowest compression level. This tries to find very /// long and distant string repetitions. /// public const int BEST_COMPRESSION = 9; /// /// The worst but fastest compression level. /// public const int BEST_SPEED = 1; /// /// The default compression level. /// public const int DEFAULT_COMPRESSION = -1; /// /// This level won't compress at all but output uncompressed blocks. /// public const int NO_COMPRESSION = 0; /// /// The compression method. This is the only method supported so far. /// There is no need to use this constant at all. /// public const int DEFLATED = 8; #endregion #region Local Constants private const int IS_SETDICT = 0x01; private const int IS_FLUSHING = 0x04; private const int IS_FINISHING = 0x08; private const int INIT_STATE = 0x00; private const int SETDICT_STATE = 0x01; // private static int INIT_FINISHING_STATE = 0x08; // private static int SETDICT_FINISHING_STATE = 0x09; private const int BUSY_STATE = 0x10; private const int FLUSHING_STATE = 0x14; private const int FINISHING_STATE = 0x1c; private const int FINISHED_STATE = 0x1e; private const int CLOSED_STATE = 0x7f; #endregion #region Constructors /// /// Creates a new deflater with default compression level. /// public Deflater() : this(DEFAULT_COMPRESSION, false) { } /// /// Creates a new deflater with given compression level. /// /// /// the compression level, a value between NO_COMPRESSION /// and BEST_COMPRESSION, or DEFAULT_COMPRESSION. /// /// if lvl is out of range. public Deflater(int level) : this(level, false) { } /// /// Creates a new deflater with given compression level. /// /// /// the compression level, a value between NO_COMPRESSION /// and BEST_COMPRESSION. /// /// /// true, if we should suppress the Zlib/RFC1950 header at the /// beginning and the adler checksum at the end of the output. This is /// useful for the GZIP/PKZIP formats. /// /// if lvl is out of range. public Deflater(int level, bool noZlibHeaderOrFooter) { if (level == DEFAULT_COMPRESSION) { level = 6; } else if (level < NO_COMPRESSION || level > BEST_COMPRESSION) { throw new ArgumentOutOfRangeException("level"); } pending = new DeflaterPending(); engine = new DeflaterEngine(pending); this.noZlibHeaderOrFooter = noZlibHeaderOrFooter; SetStrategy(DeflateStrategy.Default); SetLevel(level); Reset(); } #endregion /// /// Resets the deflater. The deflater acts afterwards as if it was /// just created with the same compression level and strategy as it /// had before. /// public void Reset() { state = (noZlibHeaderOrFooter ? BUSY_STATE : INIT_STATE); totalOut = 0; pending.Reset(); engine.Reset(); } /// /// Gets the current adler checksum of the data that was processed so far. /// public int Adler { get { return engine.Adler; } } /// /// Gets the number of input bytes processed so far. /// public long TotalIn { get { return engine.TotalIn; } } /// /// Gets the number of output bytes so far. /// public long TotalOut { get { return totalOut; } } /// /// Flushes the current input block. Further calls to deflate() will /// produce enough output to inflate everything in the current input /// block. This is not part of Sun's JDK so I have made it package /// private. It is used by DeflaterOutputStream to implement /// flush(). /// public void Flush() { state |= IS_FLUSHING; } /// /// Finishes the deflater with the current input block. It is an error /// to give more input after this method was called. This method must /// be called to force all bytes to be flushed. /// public void Finish() { state |= (IS_FLUSHING | IS_FINISHING); } /// /// Returns true if the stream was finished and no more output bytes /// are available. /// public bool IsFinished { get { return (state == FINISHED_STATE) && pending.IsFlushed; } } /// /// Returns true, if the input buffer is empty. /// You should then call setInput(). /// NOTE: This method can also return true when the stream /// was finished. /// public bool IsNeedingInput { get { return engine.NeedsInput(); } } /// /// Sets the data which should be compressed next. This should be only /// called when needsInput indicates that more input is needed. /// If you call setInput when needsInput() returns false, the /// previous input that is still pending will be thrown away. /// The given byte array should not be changed, before needsInput() returns /// true again. /// This call is equivalent to setInput(input, 0, input.length). /// /// /// the buffer containing the input data. /// /// /// if the buffer was finished() or ended(). /// public void SetInput(byte[] input) { SetInput(input, 0, input.Length); } /// /// Sets the data which should be compressed next. This should be /// only called when needsInput indicates that more input is needed. /// The given byte array should not be changed, before needsInput() returns /// true again. /// /// /// the buffer containing the input data. /// /// /// the start of the data. /// /// /// the number of data bytes of input. /// /// /// if the buffer was Finish()ed or if previous input is still pending. /// public void SetInput(byte[] input, int offset, int count) { if ((state & IS_FINISHING) != 0) { throw new InvalidOperationException("Finish() already called"); } engine.SetInput(input, offset, count); } /// /// Sets the compression level. There is no guarantee of the exact /// position of the change, but if you call this when needsInput is /// true the change of compression level will occur somewhere near /// before the end of the so far given input. /// /// /// the new compression level. /// public void SetLevel(int level) { if (level == DEFAULT_COMPRESSION) { level = 6; } else if (level < NO_COMPRESSION || level > BEST_COMPRESSION) { throw new ArgumentOutOfRangeException("level"); } if (this.level != level) { this.level = level; engine.SetLevel(level); } } /// /// Get current compression level /// /// Returns the current compression level public int GetLevel() { return level; } /// /// Sets the compression strategy. Strategy is one of /// DEFAULT_STRATEGY, HUFFMAN_ONLY and FILTERED. For the exact /// position where the strategy is changed, the same as for /// SetLevel() applies. /// /// /// The new compression strategy. /// public void SetStrategy(DeflateStrategy strategy) { engine.Strategy = strategy; } /// /// Deflates the current input block with to the given array. /// /// /// The buffer where compressed data is stored /// /// /// The number of compressed bytes added to the output, or 0 if either /// IsNeedingInput() or IsFinished returns true or length is zero. /// public int Deflate(byte[] output) { return Deflate(output, 0, output.Length); } /// /// Deflates the current input block to the given array. /// /// /// Buffer to store the compressed data. /// /// /// Offset into the output array. /// /// /// The maximum number of bytes that may be stored. /// /// /// The number of compressed bytes added to the output, or 0 if either /// needsInput() or finished() returns true or length is zero. /// /// /// If Finish() was previously called. /// /// /// If offset or length don't match the array length. /// public int Deflate(byte[] output, int offset, int length) { int origLength = length; if (state == CLOSED_STATE) { throw new InvalidOperationException("Deflater closed"); } if (state < BUSY_STATE) { // output header int header = (DEFLATED + ((DeflaterConstants.MAX_WBITS - 8) << 4)) << 8; int level_flags = (level - 1) >> 1; if (level_flags < 0 || level_flags > 3) { level_flags = 3; } header |= level_flags << 6; if ((state & IS_SETDICT) != 0) { // Dictionary was set header |= DeflaterConstants.PRESET_DICT; } header += 31 - (header % 31); pending.WriteShortMSB(header); if ((state & IS_SETDICT) != 0) { int chksum = engine.Adler; engine.ResetAdler(); pending.WriteShortMSB(chksum >> 16); pending.WriteShortMSB(chksum & 0xffff); } state = BUSY_STATE | (state & (IS_FLUSHING | IS_FINISHING)); } for (;;) { int count = pending.Flush(output, offset, length); offset += count; totalOut += count; length -= count; if (length == 0 || state == FINISHED_STATE) { break; } if (!engine.Deflate((state & IS_FLUSHING) != 0, (state & IS_FINISHING) != 0)) { if (state == BUSY_STATE) { // We need more input now return origLength - length; } else if (state == FLUSHING_STATE) { if (level != NO_COMPRESSION) { /* We have to supply some lookahead. 8 bit lookahead * is needed by the zlib inflater, and we must fill * the next byte, so that all bits are flushed. */ int neededbits = 8 + ((-pending.BitCount) & 7); while (neededbits > 0) { /* write a static tree block consisting solely of * an EOF: */ pending.WriteBits(2, 10); neededbits -= 10; } } state = BUSY_STATE; } else if (state == FINISHING_STATE) { pending.AlignToByte(); // Compressed data is complete. Write footer information if required. if (!noZlibHeaderOrFooter) { int adler = engine.Adler; pending.WriteShortMSB(adler >> 16); pending.WriteShortMSB(adler & 0xffff); } state = FINISHED_STATE; } } } return origLength - length; } /// /// Sets the dictionary which should be used in the deflate process. /// This call is equivalent to setDictionary(dict, 0, dict.Length). /// /// /// the dictionary. /// /// /// if SetInput () or Deflate () were already called or another dictionary was already set. /// public void SetDictionary(byte[] dictionary) { SetDictionary(dictionary, 0, dictionary.Length); } /// /// Sets the dictionary which should be used in the deflate process. /// The dictionary is a byte array containing strings that are /// likely to occur in the data which should be compressed. The /// dictionary is not stored in the compressed output, only a /// checksum. To decompress the output you need to supply the same /// dictionary again. /// /// /// The dictionary data /// /// /// The index where dictionary information commences. /// /// /// The number of bytes in the dictionary. /// /// /// If SetInput () or Deflate() were already called or another dictionary was already set. /// public void SetDictionary(byte[] dictionary, int index, int count) { if (state != INIT_STATE) { throw new InvalidOperationException(); } state = SETDICT_STATE; engine.SetDictionary(dictionary, index, count); } #region Instance Fields /// /// Compression level. /// int level; /// /// If true no Zlib/RFC1950 headers or footers are generated /// bool noZlibHeaderOrFooter; /// /// The current state. /// int state; /// /// The total bytes of output written. /// long totalOut; /// /// The pending output. /// DeflaterPending pending; /// /// The deflater engine. /// DeflaterEngine engine; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/DeflaterConstants.cs000066400000000000000000000131721446222606700315370ustar00rootroot00000000000000// DeflaterConstants.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// This class contains constants used for deflation. /// public class DeflaterConstants { /// /// Set to true to enable debugging /// public const bool DEBUGGING = false; /// /// Written to Zip file to identify a stored block /// public const int STORED_BLOCK = 0; /// /// Identifies static tree in Zip file /// public const int STATIC_TREES = 1; /// /// Identifies dynamic tree in Zip file /// public const int DYN_TREES = 2; /// /// Header flag indicating a preset dictionary for deflation /// public const int PRESET_DICT = 0x20; /// /// Sets internal buffer sizes for Huffman encoding /// public const int DEFAULT_MEM_LEVEL = 8; /// /// Internal compression engine constant /// public const int MAX_MATCH = 258; /// /// Internal compression engine constant /// public const int MIN_MATCH = 3; /// /// Internal compression engine constant /// public const int MAX_WBITS = 15; /// /// Internal compression engine constant /// public const int WSIZE = 1 << MAX_WBITS; /// /// Internal compression engine constant /// public const int WMASK = WSIZE - 1; /// /// Internal compression engine constant /// public const int HASH_BITS = DEFAULT_MEM_LEVEL + 7; /// /// Internal compression engine constant /// public const int HASH_SIZE = 1 << HASH_BITS; /// /// Internal compression engine constant /// public const int HASH_MASK = HASH_SIZE - 1; /// /// Internal compression engine constant /// public const int HASH_SHIFT = (HASH_BITS + MIN_MATCH - 1) / MIN_MATCH; /// /// Internal compression engine constant /// public const int MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1; /// /// Internal compression engine constant /// public const int MAX_DIST = WSIZE - MIN_LOOKAHEAD; /// /// Internal compression engine constant /// public const int PENDING_BUF_SIZE = 1 << (DEFAULT_MEM_LEVEL + 8); /// /// Internal compression engine constant /// public static int MAX_BLOCK_SIZE = Math.Min(65535, PENDING_BUF_SIZE - 5); /// /// Internal compression engine constant /// public const int DEFLATE_STORED = 0; /// /// Internal compression engine constant /// public const int DEFLATE_FAST = 1; /// /// Internal compression engine constant /// public const int DEFLATE_SLOW = 2; /// /// Internal compression engine constant /// public static int[] GOOD_LENGTH = { 0, 4, 4, 4, 4, 8, 8, 8, 32, 32 }; /// /// Internal compression engine constant /// public static int[] MAX_LAZY = { 0, 4, 5, 6, 4, 16, 16, 32, 128, 258 }; /// /// Internal compression engine constant /// public static int[] NICE_LENGTH = { 0, 8, 16, 32, 16, 32, 128, 128, 258, 258 }; /// /// Internal compression engine constant /// public static int[] MAX_CHAIN = { 0, 4, 8, 32, 16, 32, 128, 256, 1024, 4096 }; /// /// Internal compression engine constant /// public static int[] COMPR_FUNC = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2 }; } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/DeflaterEngine.cs000066400000000000000000000554051446222606700307750ustar00rootroot00000000000000// DeflaterEngine.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using ICSharpCode.SharpZipLib.Checksums; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// Strategies for deflater /// public enum DeflateStrategy { /// /// The default strategy /// Default = 0, /// /// This strategy will only allow longer string repetitions. It is /// useful for random data with a small character set. /// Filtered = 1, /// /// This strategy will not look for string repetitions at all. It /// only encodes with Huffman trees (which means, that more common /// characters get a smaller encoding. /// HuffmanOnly = 2 } // DEFLATE ALGORITHM: // // The uncompressed stream is inserted into the window array. When // the window array is full the first half is thrown away and the // second half is copied to the beginning. // // The head array is a hash table. Three characters build a hash value // and they the value points to the corresponding index in window of // the last string with this hash. The prev array implements a // linked list of matches with the same hash: prev[index & WMASK] points // to the previous index with the same hash. // /// /// Low level compression engine for deflate algorithm which uses a 32K sliding window /// with secondary compression from Huffman/Shannon-Fano codes. /// public class DeflaterEngine : DeflaterConstants { #region Constants const int TooFar = 4096; #endregion #region Constructors /// /// Construct instance with pending buffer /// /// /// Pending buffer to use /// > public DeflaterEngine(DeflaterPending pending) { this.pending = pending; huffman = new DeflaterHuffman(pending); adler = new Adler32(); window = new byte[2 * WSIZE]; head = new short[HASH_SIZE]; prev = new short[WSIZE]; // We start at index 1, to avoid an implementation deficiency, that // we cannot build a repeat pattern at index 0. blockStart = strstart = 1; } #endregion /// /// Deflate drives actual compression of data /// /// True to flush input buffers /// Finish deflation with the current input. /// Returns true if progress has been made. public bool Deflate(bool flush, bool finish) { bool progress; do { FillWindow(); bool canFlush = flush && (inputOff == inputEnd); #if DebugDeflation if (DeflaterConstants.DEBUGGING) { Console.WriteLine("window: [" + blockStart + "," + strstart + "," + lookahead + "], " + compressionFunction + "," + canFlush); } #endif switch (compressionFunction) { case DEFLATE_STORED: progress = DeflateStored(canFlush, finish); break; case DEFLATE_FAST: progress = DeflateFast(canFlush, finish); break; case DEFLATE_SLOW: progress = DeflateSlow(canFlush, finish); break; default: throw new InvalidOperationException("unknown compressionFunction"); } } while (pending.IsFlushed && progress); // repeat while we have no pending output and progress was made return progress; } /// /// Sets input data to be deflated. Should only be called when NeedsInput() /// returns true /// /// The buffer containing input data. /// The offset of the first byte of data. /// The number of bytes of data to use as input. public void SetInput(byte[] buffer, int offset, int count) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } if ( offset < 0 ) { throw new ArgumentOutOfRangeException("offset"); } if ( count < 0 ) { throw new ArgumentOutOfRangeException("count"); } if (inputOff < inputEnd) { throw new InvalidOperationException("Old input was not completely processed"); } int end = offset + count; /* We want to throw an ArrayIndexOutOfBoundsException early. The * check is very tricky: it also handles integer wrap around. */ if ((offset > end) || (end > buffer.Length) ) { throw new ArgumentOutOfRangeException("count"); } inputBuf = buffer; inputOff = offset; inputEnd = end; } /// /// Determines if more input is needed. /// /// Return true if input is needed via SetInput public bool NeedsInput() { return (inputEnd == inputOff); } /// /// Set compression dictionary /// /// The buffer containing the dictionary data /// The offset in the buffer for the first byte of data /// The length of the dictionary data. public void SetDictionary(byte[] buffer, int offset, int length) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (strstart != 1) ) { throw new InvalidOperationException("strstart not 1"); } #endif adler.Update(buffer, offset, length); if (length < MIN_MATCH) { return; } if (length > MAX_DIST) { offset += length - MAX_DIST; length = MAX_DIST; } System.Array.Copy(buffer, offset, window, strstart, length); UpdateHash(); --length; while (--length > 0) { InsertString(); strstart++; } strstart += 2; blockStart = strstart; } /// /// Reset internal state /// public void Reset() { huffman.Reset(); adler.Reset(); blockStart = strstart = 1; lookahead = 0; totalIn = 0; prevAvailable = false; matchLen = MIN_MATCH - 1; for (int i = 0; i < HASH_SIZE; i++) { head[i] = 0; } for (int i = 0; i < WSIZE; i++) { prev[i] = 0; } } /// /// Reset Adler checksum /// public void ResetAdler() { adler.Reset(); } /// /// Get current value of Adler checksum /// public int Adler { get { return unchecked((int)adler.Value); } } /// /// Total data processed /// public long TotalIn { get { return totalIn; } } /// /// Get/set the deflate strategy /// public DeflateStrategy Strategy { get { return strategy; } set { strategy = value; } } /// /// Set the deflate level (0-9) /// /// The value to set the level to. public void SetLevel(int level) { if ( (level < 0) || (level > 9) ) { throw new ArgumentOutOfRangeException("level"); } goodLength = DeflaterConstants.GOOD_LENGTH[level]; max_lazy = DeflaterConstants.MAX_LAZY[level]; niceLength = DeflaterConstants.NICE_LENGTH[level]; max_chain = DeflaterConstants.MAX_CHAIN[level]; if (DeflaterConstants.COMPR_FUNC[level] != compressionFunction) { #if DebugDeflation if (DeflaterConstants.DEBUGGING) { Console.WriteLine("Change from " + compressionFunction + " to " + DeflaterConstants.COMPR_FUNC[level]); } #endif switch (compressionFunction) { case DEFLATE_STORED: if (strstart > blockStart) { huffman.FlushStoredBlock(window, blockStart, strstart - blockStart, false); blockStart = strstart; } UpdateHash(); break; case DEFLATE_FAST: if (strstart > blockStart) { huffman.FlushBlock(window, blockStart, strstart - blockStart, false); blockStart = strstart; } break; case DEFLATE_SLOW: if (prevAvailable) { huffman.TallyLit(window[strstart-1] & 0xff); } if (strstart > blockStart) { huffman.FlushBlock(window, blockStart, strstart - blockStart, false); blockStart = strstart; } prevAvailable = false; matchLen = MIN_MATCH - 1; break; } compressionFunction = COMPR_FUNC[level]; } } /// /// Fill the window /// public void FillWindow() { /* If the window is almost full and there is insufficient lookahead, * move the upper half to the lower one to make room in the upper half. */ if (strstart >= WSIZE + MAX_DIST) { SlideWindow(); } /* If there is not enough lookahead, but still some input left, * read in the input */ while (lookahead < DeflaterConstants.MIN_LOOKAHEAD && inputOff < inputEnd) { int more = 2 * WSIZE - lookahead - strstart; if (more > inputEnd - inputOff) { more = inputEnd - inputOff; } System.Array.Copy(inputBuf, inputOff, window, strstart + lookahead, more); adler.Update(inputBuf, inputOff, more); inputOff += more; totalIn += more; lookahead += more; } if (lookahead >= MIN_MATCH) { UpdateHash(); } } void UpdateHash() { /* if (DEBUGGING) { Console.WriteLine("updateHash: "+strstart); } */ ins_h = (window[strstart] << HASH_SHIFT) ^ window[strstart + 1]; } /// /// Inserts the current string in the head hash and returns the previous /// value for this hash. /// /// The previous hash value int InsertString() { short match; int hash = ((ins_h << HASH_SHIFT) ^ window[strstart + (MIN_MATCH -1)]) & HASH_MASK; #if DebugDeflation if (DeflaterConstants.DEBUGGING) { if (hash != (((window[strstart] << (2*HASH_SHIFT)) ^ (window[strstart + 1] << HASH_SHIFT) ^ (window[strstart + 2])) & HASH_MASK)) { throw new SharpZipBaseException("hash inconsistent: " + hash + "/" +window[strstart] + "," +window[strstart + 1] + "," +window[strstart + 2] + "," + HASH_SHIFT); } } #endif prev[strstart & WMASK] = match = head[hash]; head[hash] = unchecked((short)strstart); ins_h = hash; return match & 0xffff; } void SlideWindow() { Array.Copy(window, WSIZE, window, 0, WSIZE); matchStart -= WSIZE; strstart -= WSIZE; blockStart -= WSIZE; // Slide the hash table (could be avoided with 32 bit values // at the expense of memory usage). for (int i = 0; i < HASH_SIZE; ++i) { int m = head[i] & 0xffff; head[i] = (short)(m >= WSIZE ? (m - WSIZE) : 0); } // Slide the prev table. for (int i = 0; i < WSIZE; i++) { int m = prev[i] & 0xffff; prev[i] = (short)(m >= WSIZE ? (m - WSIZE) : 0); } } /// /// Find the best (longest) string in the window matching the /// string starting at strstart. /// /// Preconditions: /// /// strstart + MAX_MATCH <= window.length. /// /// /// True if a match greater than the minimum length is found bool FindLongestMatch(int curMatch) { int chainLength = this.max_chain; int niceLength = this.niceLength; short[] prev = this.prev; int scan = this.strstart; int match; int best_end = this.strstart + matchLen; int best_len = Math.Max(matchLen, MIN_MATCH - 1); int limit = Math.Max(strstart - MAX_DIST, 0); int strend = strstart + MAX_MATCH - 1; byte scan_end1 = window[best_end - 1]; byte scan_end = window[best_end]; // Do not waste too much time if we already have a good match: if (best_len >= this.goodLength) { chainLength >>= 2; } /* Do not look for matches beyond the end of the input. This is necessary * to make deflate deterministic. */ if (niceLength > lookahead) { niceLength = lookahead; } #if DebugDeflation if (DeflaterConstants.DEBUGGING && (strstart > 2 * WSIZE - MIN_LOOKAHEAD)) { throw new InvalidOperationException("need lookahead"); } #endif do { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (curMatch >= strstart) ) { throw new InvalidOperationException("no future"); } #endif if (window[curMatch + best_len] != scan_end || window[curMatch + best_len - 1] != scan_end1 || window[curMatch] != window[scan] || window[curMatch + 1] != window[scan + 1]) { continue; } match = curMatch + 2; scan += 2; /* We check for insufficient lookahead only every 8th comparison; * the 256th check will be made at strstart + 258. */ while ( window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] && (scan < strend)) { // Do nothing } if (scan > best_end) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (ins_h == 0) ) Console.Error.WriteLine("Found match: " + curMatch + "-" + (scan - strstart)); #endif matchStart = curMatch; best_end = scan; best_len = scan - strstart; if (best_len >= niceLength) { break; } scan_end1 = window[best_end - 1]; scan_end = window[best_end]; } scan = strstart; } while ((curMatch = (prev[curMatch & WMASK] & 0xffff)) > limit && --chainLength != 0); matchLen = Math.Min(best_len, lookahead); return matchLen >= MIN_MATCH; } bool DeflateStored(bool flush, bool finish) { if (!flush && (lookahead == 0)) { return false; } strstart += lookahead; lookahead = 0; int storedLength = strstart - blockStart; if ((storedLength >= DeflaterConstants.MAX_BLOCK_SIZE) || // Block is full (blockStart < WSIZE && storedLength >= MAX_DIST) || // Block may move out of window flush) { bool lastBlock = finish; if (storedLength > DeflaterConstants.MAX_BLOCK_SIZE) { storedLength = DeflaterConstants.MAX_BLOCK_SIZE; lastBlock = false; } #if DebugDeflation if (DeflaterConstants.DEBUGGING) { Console.WriteLine("storedBlock[" + storedLength + "," + lastBlock + "]"); } #endif huffman.FlushStoredBlock(window, blockStart, storedLength, lastBlock); blockStart += storedLength; return !lastBlock; } return true; } bool DeflateFast(bool flush, bool finish) { if (lookahead < MIN_LOOKAHEAD && !flush) { return false; } while (lookahead >= MIN_LOOKAHEAD || flush) { if (lookahead == 0) { // We are flushing everything huffman.FlushBlock(window, blockStart, strstart - blockStart, finish); blockStart = strstart; return false; } if (strstart > 2 * WSIZE - MIN_LOOKAHEAD) { /* slide window, as FindLongestMatch needs this. * This should only happen when flushing and the window * is almost full. */ SlideWindow(); } int hashHead; if (lookahead >= MIN_MATCH && (hashHead = InsertString()) != 0 && strategy != DeflateStrategy.HuffmanOnly && strstart - hashHead <= MAX_DIST && FindLongestMatch(hashHead)) { // longestMatch sets matchStart and matchLen #if DebugDeflation if (DeflaterConstants.DEBUGGING) { for (int i = 0 ; i < matchLen; i++) { if (window[strstart + i] != window[matchStart + i]) { throw new SharpZipBaseException("Match failure"); } } } #endif bool full = huffman.TallyDist(strstart - matchStart, matchLen); lookahead -= matchLen; if (matchLen <= max_lazy && lookahead >= MIN_MATCH) { while (--matchLen > 0) { ++strstart; InsertString(); } ++strstart; } else { strstart += matchLen; if (lookahead >= MIN_MATCH - 1) { UpdateHash(); } } matchLen = MIN_MATCH - 1; if (!full) { continue; } } else { // No match found huffman.TallyLit(window[strstart] & 0xff); ++strstart; --lookahead; } if (huffman.IsFull()) { bool lastBlock = finish && (lookahead == 0); huffman.FlushBlock(window, blockStart, strstart - blockStart, lastBlock); blockStart = strstart; return !lastBlock; } } return true; } bool DeflateSlow(bool flush, bool finish) { if (lookahead < MIN_LOOKAHEAD && !flush) { return false; } while (lookahead >= MIN_LOOKAHEAD || flush) { if (lookahead == 0) { if (prevAvailable) { huffman.TallyLit(window[strstart-1] & 0xff); } prevAvailable = false; // We are flushing everything #if DebugDeflation if (DeflaterConstants.DEBUGGING && !flush) { throw new SharpZipBaseException("Not flushing, but no lookahead"); } #endif huffman.FlushBlock(window, blockStart, strstart - blockStart, finish); blockStart = strstart; return false; } if (strstart >= 2 * WSIZE - MIN_LOOKAHEAD) { /* slide window, as FindLongestMatch needs this. * This should only happen when flushing and the window * is almost full. */ SlideWindow(); } int prevMatch = matchStart; int prevLen = matchLen; if (lookahead >= MIN_MATCH) { int hashHead = InsertString(); if (strategy != DeflateStrategy.HuffmanOnly && hashHead != 0 && strstart - hashHead <= MAX_DIST && FindLongestMatch(hashHead)) { // longestMatch sets matchStart and matchLen // Discard match if too small and too far away if (matchLen <= 5 && (strategy == DeflateStrategy.Filtered || (matchLen == MIN_MATCH && strstart - matchStart > TooFar))) { matchLen = MIN_MATCH - 1; } } } // previous match was better if ((prevLen >= MIN_MATCH) && (matchLen <= prevLen) ) { #if DebugDeflation if (DeflaterConstants.DEBUGGING) { for (int i = 0 ; i < matchLen; i++) { if (window[strstart-1+i] != window[prevMatch + i]) throw new SharpZipBaseException(); } } #endif huffman.TallyDist(strstart - 1 - prevMatch, prevLen); prevLen -= 2; do { strstart++; lookahead--; if (lookahead >= MIN_MATCH) { InsertString(); } } while (--prevLen > 0); strstart ++; lookahead--; prevAvailable = false; matchLen = MIN_MATCH - 1; } else { if (prevAvailable) { huffman.TallyLit(window[strstart-1] & 0xff); } prevAvailable = true; strstart++; lookahead--; } if (huffman.IsFull()) { int len = strstart - blockStart; if (prevAvailable) { len--; } bool lastBlock = (finish && (lookahead == 0) && !prevAvailable); huffman.FlushBlock(window, blockStart, len, lastBlock); blockStart += len; return !lastBlock; } } return true; } #region Instance Fields // Hash index of string to be inserted int ins_h; /// /// Hashtable, hashing three characters to an index for window, so /// that window[index]..window[index+2] have this hash code. /// Note that the array should really be unsigned short, so you need /// to and the values with 0xffff. /// short[] head; /// /// prev[index & WMASK] points to the previous index that has the /// same hash code as the string starting at index. This way /// entries with the same hash code are in a linked list. /// Note that the array should really be unsigned short, so you need /// to and the values with 0xffff. /// short[] prev; int matchStart; // Length of best match int matchLen; // Set if previous match exists bool prevAvailable; int blockStart; /// /// Points to the current character in the window. /// int strstart; /// /// lookahead is the number of characters starting at strstart in /// window that are valid. /// So window[strstart] until window[strstart+lookahead-1] are valid /// characters. /// int lookahead; /// /// This array contains the part of the uncompressed stream that /// is of relevance. The current character is indexed by strstart. /// byte[] window; DeflateStrategy strategy; int max_chain, max_lazy, niceLength, goodLength; /// /// The current compression function. /// int compressionFunction; /// /// The input data for compression. /// byte[] inputBuf; /// /// The total bytes of input read. /// long totalIn; /// /// The offset into inputBuf, where input data starts. /// int inputOff; /// /// The end offset of the input data. /// int inputEnd; DeflaterPending pending; DeflaterHuffman huffman; /// /// The adler checksum /// Adler32 adler; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/DeflaterHuffman.cs000066400000000000000000000605371446222606700311560ustar00rootroot00000000000000// DeflaterHuffman.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// This is the DeflaterHuffman class. /// /// This class is not thread safe. This is inherent in the API, due /// to the split of Deflate and SetInput. /// /// author of the original java version : Jochen Hoenicke /// public class DeflaterHuffman { const int BUFSIZE = 1 << (DeflaterConstants.DEFAULT_MEM_LEVEL + 6); const int LITERAL_NUM = 286; // Number of distance codes const int DIST_NUM = 30; // Number of codes used to transfer bit lengths const int BITLEN_NUM = 19; // repeat previous bit length 3-6 times (2 bits of repeat count) const int REP_3_6 = 16; // repeat a zero length 3-10 times (3 bits of repeat count) const int REP_3_10 = 17; // repeat a zero length 11-138 times (7 bits of repeat count) const int REP_11_138 = 18; const int EOF_SYMBOL = 256; // The lengths of the bit length codes are sent in order of decreasing // probability, to avoid transmitting the lengths for unused bit length codes. static readonly int[] BL_ORDER = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; static readonly byte[] bit4Reverse = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 }; static short[] staticLCodes; static byte[] staticLLength; static short[] staticDCodes; static byte[] staticDLength; class Tree { #region Instance Fields public short[] freqs; public byte[] length; public int minNumCodes; public int numCodes; short[] codes; int[] bl_counts; int maxLength; DeflaterHuffman dh; #endregion #region Constructors public Tree(DeflaterHuffman dh, int elems, int minCodes, int maxLength) { this.dh = dh; this.minNumCodes = minCodes; this.maxLength = maxLength; freqs = new short[elems]; bl_counts = new int[maxLength]; } #endregion /// /// Resets the internal state of the tree /// public void Reset() { for (int i = 0; i < freqs.Length; i++) { freqs[i] = 0; } codes = null; length = null; } public void WriteSymbol(int code) { // if (DeflaterConstants.DEBUGGING) { // freqs[code]--; // // Console.Write("writeSymbol("+freqs.length+","+code+"): "); // } dh.pending.WriteBits(codes[code] & 0xffff, length[code]); } /// /// Check that all frequencies are zero /// /// /// At least one frequency is non-zero /// public void CheckEmpty() { bool empty = true; for (int i = 0; i < freqs.Length; i++) { if (freqs[i] != 0) { //Console.WriteLine("freqs[" + i + "] == " + freqs[i]); empty = false; } } if (!empty) { throw new SharpZipBaseException("!Empty"); } } /// /// Set static codes and length /// /// new codes /// length for new codes public void SetStaticCodes(short[] staticCodes, byte[] staticLengths) { codes = staticCodes; length = staticLengths; } /// /// Build dynamic codes and lengths /// public void BuildCodes() { int numSymbols = freqs.Length; int[] nextCode = new int[maxLength]; int code = 0; codes = new short[freqs.Length]; // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("buildCodes: "+freqs.Length); // } for (int bits = 0; bits < maxLength; bits++) { nextCode[bits] = code; code += bl_counts[bits] << (15 - bits); // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("bits: " + ( bits + 1) + " count: " + bl_counts[bits] // +" nextCode: "+code); // } } #if DebugDeflation if ( DeflaterConstants.DEBUGGING && (code != 65536) ) { throw new SharpZipBaseException("Inconsistent bl_counts!"); } #endif for (int i=0; i < numCodes; i++) { int bits = length[i]; if (bits > 0) { // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("codes["+i+"] = rev(" + nextCode[bits-1]+"), // +bits); // } codes[i] = BitReverse(nextCode[bits-1]); nextCode[bits-1] += 1 << (16 - bits); } } } public void BuildTree() { int numSymbols = freqs.Length; /* heap is a priority queue, sorted by frequency, least frequent * nodes first. The heap is a binary tree, with the property, that * the parent node is smaller than both child nodes. This assures * that the smallest node is the first parent. * * The binary tree is encoded in an array: 0 is root node and * the nodes 2*n+1, 2*n+2 are the child nodes of node n. */ int[] heap = new int[numSymbols]; int heapLen = 0; int maxCode = 0; for (int n = 0; n < numSymbols; n++) { int freq = freqs[n]; if (freq != 0) { // Insert n into heap int pos = heapLen++; int ppos; while (pos > 0 && freqs[heap[ppos = (pos - 1) / 2]] > freq) { heap[pos] = heap[ppos]; pos = ppos; } heap[pos] = n; maxCode = n; } } /* We could encode a single literal with 0 bits but then we * don't see the literals. Therefore we force at least two * literals to avoid this case. We don't care about order in * this case, both literals get a 1 bit code. */ while (heapLen < 2) { int node = maxCode < 2 ? ++maxCode : 0; heap[heapLen++] = node; } numCodes = Math.Max(maxCode + 1, minNumCodes); int numLeafs = heapLen; int[] childs = new int[4 * heapLen - 2]; int[] values = new int[2 * heapLen - 1]; int numNodes = numLeafs; for (int i = 0; i < heapLen; i++) { int node = heap[i]; childs[2 * i] = node; childs[2 * i + 1] = -1; values[i] = freqs[node] << 8; heap[i] = i; } /* Construct the Huffman tree by repeatedly combining the least two * frequent nodes. */ do { int first = heap[0]; int last = heap[--heapLen]; // Propagate the hole to the leafs of the heap int ppos = 0; int path = 1; while (path < heapLen) { if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) { path++; } heap[ppos] = heap[path]; ppos = path; path = path * 2 + 1; } /* Now propagate the last element down along path. Normally * it shouldn't go too deep. */ int lastVal = values[last]; while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) { heap[path] = heap[ppos]; } heap[path] = last; int second = heap[0]; // Create a new node father of first and second last = numNodes++; childs[2 * last] = first; childs[2 * last + 1] = second; int mindepth = Math.Min(values[first] & 0xff, values[second] & 0xff); values[last] = lastVal = values[first] + values[second] - mindepth + 1; // Again, propagate the hole to the leafs ppos = 0; path = 1; while (path < heapLen) { if (path + 1 < heapLen && values[heap[path]] > values[heap[path+1]]) { path++; } heap[ppos] = heap[path]; ppos = path; path = ppos * 2 + 1; } // Now propagate the new element down along path while ((path = ppos) > 0 && values[heap[ppos = (path - 1)/2]] > lastVal) { heap[path] = heap[ppos]; } heap[path] = last; } while (heapLen > 1); if (heap[0] != childs.Length / 2 - 1) { throw new SharpZipBaseException("Heap invariant violated"); } BuildLength(childs); } /// /// Get encoded length /// /// Encoded length, the sum of frequencies * lengths public int GetEncodedLength() { int len = 0; for (int i = 0; i < freqs.Length; i++) { len += freqs[i] * length[i]; } return len; } /// /// Scan a literal or distance tree to determine the frequencies of the codes /// in the bit length tree. /// public void CalcBLFreq(Tree blTree) { int max_count; /* max repeat count */ int min_count; /* min repeat count */ int count; /* repeat count of the current code */ int curlen = -1; /* length of current code */ int i = 0; while (i < numCodes) { count = 1; int nextlen = length[i]; if (nextlen == 0) { max_count = 138; min_count = 3; } else { max_count = 6; min_count = 3; if (curlen != nextlen) { blTree.freqs[nextlen]++; count = 0; } } curlen = nextlen; i++; while (i < numCodes && curlen == length[i]) { i++; if (++count >= max_count) { break; } } if (count < min_count) { blTree.freqs[curlen] += (short)count; } else if (curlen != 0) { blTree.freqs[REP_3_6]++; } else if (count <= 10) { blTree.freqs[REP_3_10]++; } else { blTree.freqs[REP_11_138]++; } } } /// /// Write tree values /// /// Tree to write public void WriteTree(Tree blTree) { int max_count; // max repeat count int min_count; // min repeat count int count; // repeat count of the current code int curlen = -1; // length of current code int i = 0; while (i < numCodes) { count = 1; int nextlen = length[i]; if (nextlen == 0) { max_count = 138; min_count = 3; } else { max_count = 6; min_count = 3; if (curlen != nextlen) { blTree.WriteSymbol(nextlen); count = 0; } } curlen = nextlen; i++; while (i < numCodes && curlen == length[i]) { i++; if (++count >= max_count) { break; } } if (count < min_count) { while (count-- > 0) { blTree.WriteSymbol(curlen); } } else if (curlen != 0) { blTree.WriteSymbol(REP_3_6); dh.pending.WriteBits(count - 3, 2); } else if (count <= 10) { blTree.WriteSymbol(REP_3_10); dh.pending.WriteBits(count - 3, 3); } else { blTree.WriteSymbol(REP_11_138); dh.pending.WriteBits(count - 11, 7); } } } void BuildLength(int[] childs) { this.length = new byte [freqs.Length]; int numNodes = childs.Length / 2; int numLeafs = (numNodes + 1) / 2; int overflow = 0; for (int i = 0; i < maxLength; i++) { bl_counts[i] = 0; } // First calculate optimal bit lengths int[] lengths = new int[numNodes]; lengths[numNodes-1] = 0; for (int i = numNodes - 1; i >= 0; i--) { if (childs[2 * i + 1] != -1) { int bitLength = lengths[i] + 1; if (bitLength > maxLength) { bitLength = maxLength; overflow++; } lengths[childs[2 * i]] = lengths[childs[2 * i + 1]] = bitLength; } else { // A leaf node int bitLength = lengths[i]; bl_counts[bitLength - 1]++; this.length[childs[2*i]] = (byte) lengths[i]; } } // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("Tree "+freqs.Length+" lengths:"); // for (int i=0; i < numLeafs; i++) { // //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]] // + " len: "+length[childs[2*i]]); // } // } if (overflow == 0) { return; } int incrBitLen = maxLength - 1; do { // Find the first bit length which could increase: while (bl_counts[--incrBitLen] == 0) ; // Move this node one down and remove a corresponding // number of overflow nodes. do { bl_counts[incrBitLen]--; bl_counts[++incrBitLen]++; overflow -= 1 << (maxLength - 1 - incrBitLen); } while (overflow > 0 && incrBitLen < maxLength - 1); } while (overflow > 0); /* We may have overshot above. Move some nodes from maxLength to * maxLength-1 in that case. */ bl_counts[maxLength-1] += overflow; bl_counts[maxLength-2] -= overflow; /* Now recompute all bit lengths, scanning in increasing * frequency. It is simpler to reconstruct all lengths instead of * fixing only the wrong ones. This idea is taken from 'ar' * written by Haruhiko Okumura. * * The nodes were inserted with decreasing frequency into the childs * array. */ int nodePtr = 2 * numLeafs; for (int bits = maxLength; bits != 0; bits--) { int n = bl_counts[bits-1]; while (n > 0) { int childPtr = 2*childs[nodePtr++]; if (childs[childPtr + 1] == -1) { // We found another leaf length[childs[childPtr]] = (byte) bits; n--; } } } // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("*** After overflow elimination. ***"); // for (int i=0; i < numLeafs; i++) { // //Console.WriteLine("Node "+childs[2*i]+" freq: "+freqs[childs[2*i]] // + " len: "+length[childs[2*i]]); // } // } } } #region Instance Fields /// /// Pending buffer to use /// public DeflaterPending pending; Tree literalTree; Tree distTree; Tree blTree; // Buffer for distances short[] d_buf; byte[] l_buf; int last_lit; int extra_bits; #endregion static DeflaterHuffman() { // See RFC 1951 3.2.6 // Literal codes staticLCodes = new short[LITERAL_NUM]; staticLLength = new byte[LITERAL_NUM]; int i = 0; while (i < 144) { staticLCodes[i] = BitReverse((0x030 + i) << 8); staticLLength[i++] = 8; } while (i < 256) { staticLCodes[i] = BitReverse((0x190 - 144 + i) << 7); staticLLength[i++] = 9; } while (i < 280) { staticLCodes[i] = BitReverse((0x000 - 256 + i) << 9); staticLLength[i++] = 7; } while (i < LITERAL_NUM) { staticLCodes[i] = BitReverse((0x0c0 - 280 + i) << 8); staticLLength[i++] = 8; } // Distance codes staticDCodes = new short[DIST_NUM]; staticDLength = new byte[DIST_NUM]; for (i = 0; i < DIST_NUM; i++) { staticDCodes[i] = BitReverse(i << 11); staticDLength[i] = 5; } } /// /// Construct instance with pending buffer /// /// Pending buffer to use public DeflaterHuffman(DeflaterPending pending) { this.pending = pending; literalTree = new Tree(this, LITERAL_NUM, 257, 15); distTree = new Tree(this, DIST_NUM, 1, 15); blTree = new Tree(this, BITLEN_NUM, 4, 7); d_buf = new short[BUFSIZE]; l_buf = new byte [BUFSIZE]; } /// /// Reset internal state /// public void Reset() { last_lit = 0; extra_bits = 0; literalTree.Reset(); distTree.Reset(); blTree.Reset(); } /// /// Write all trees to pending buffer /// /// The number/rank of treecodes to send. public void SendAllTrees(int blTreeCodes) { blTree.BuildCodes(); literalTree.BuildCodes(); distTree.BuildCodes(); pending.WriteBits(literalTree.numCodes - 257, 5); pending.WriteBits(distTree.numCodes - 1, 5); pending.WriteBits(blTreeCodes - 4, 4); for (int rank = 0; rank < blTreeCodes; rank++) { pending.WriteBits(blTree.length[BL_ORDER[rank]], 3); } literalTree.WriteTree(blTree); distTree.WriteTree(blTree); #if DebugDeflation if (DeflaterConstants.DEBUGGING) { blTree.CheckEmpty(); } #endif } /// /// Compress current buffer writing data to pending buffer /// public void CompressBlock() { for (int i = 0; i < last_lit; i++) { int litlen = l_buf[i] & 0xff; int dist = d_buf[i]; if (dist-- != 0) { // if (DeflaterConstants.DEBUGGING) { // Console.Write("["+(dist+1)+","+(litlen+3)+"]: "); // } int lc = Lcode(litlen); literalTree.WriteSymbol(lc); int bits = (lc - 261) / 4; if (bits > 0 && bits <= 5) { pending.WriteBits(litlen & ((1 << bits) - 1), bits); } int dc = Dcode(dist); distTree.WriteSymbol(dc); bits = dc / 2 - 1; if (bits > 0) { pending.WriteBits(dist & ((1 << bits) - 1), bits); } } else { // if (DeflaterConstants.DEBUGGING) { // if (litlen > 32 && litlen < 127) { // Console.Write("("+(char)litlen+"): "); // } else { // Console.Write("{"+litlen+"}: "); // } // } literalTree.WriteSymbol(litlen); } } #if DebugDeflation if (DeflaterConstants.DEBUGGING) { Console.Write("EOF: "); } #endif literalTree.WriteSymbol(EOF_SYMBOL); #if DebugDeflation if (DeflaterConstants.DEBUGGING) { literalTree.CheckEmpty(); distTree.CheckEmpty(); } #endif } /// /// Flush block to output with no compression /// /// Data to write /// Index of first byte to write /// Count of bytes to write /// True if this is the last block public void FlushStoredBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock) { #if DebugDeflation // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("Flushing stored block "+ storedLength); // } #endif pending.WriteBits((DeflaterConstants.STORED_BLOCK << 1) + (lastBlock ? 1 : 0), 3); pending.AlignToByte(); pending.WriteShort(storedLength); pending.WriteShort(~storedLength); pending.WriteBlock(stored, storedOffset, storedLength); Reset(); } /// /// Flush block to output with compression /// /// Data to flush /// Index of first byte to flush /// Count of bytes to flush /// True if this is the last block public void FlushBlock(byte[] stored, int storedOffset, int storedLength, bool lastBlock) { literalTree.freqs[EOF_SYMBOL]++; // Build trees literalTree.BuildTree(); distTree.BuildTree(); // Calculate bitlen frequency literalTree.CalcBLFreq(blTree); distTree.CalcBLFreq(blTree); // Build bitlen tree blTree.BuildTree(); int blTreeCodes = 4; for (int i = 18; i > blTreeCodes; i--) { if (blTree.length[BL_ORDER[i]] > 0) { blTreeCodes = i+1; } } int opt_len = 14 + blTreeCodes * 3 + blTree.GetEncodedLength() + literalTree.GetEncodedLength() + distTree.GetEncodedLength() + extra_bits; int static_len = extra_bits; for (int i = 0; i < LITERAL_NUM; i++) { static_len += literalTree.freqs[i] * staticLLength[i]; } for (int i = 0; i < DIST_NUM; i++) { static_len += distTree.freqs[i] * staticDLength[i]; } if (opt_len >= static_len) { // Force static trees opt_len = static_len; } if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) { // Store Block // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("Storing, since " + storedLength + " < " + opt_len // + " <= " + static_len); // } FlushStoredBlock(stored, storedOffset, storedLength, lastBlock); } else if (opt_len == static_len) { // Encode with static tree pending.WriteBits((DeflaterConstants.STATIC_TREES << 1) + (lastBlock ? 1 : 0), 3); literalTree.SetStaticCodes(staticLCodes, staticLLength); distTree.SetStaticCodes(staticDCodes, staticDLength); CompressBlock(); Reset(); } else { // Encode with dynamic tree pending.WriteBits((DeflaterConstants.DYN_TREES << 1) + (lastBlock ? 1 : 0), 3); SendAllTrees(blTreeCodes); CompressBlock(); Reset(); } } /// /// Get value indicating if internal buffer is full /// /// true if buffer is full public bool IsFull() { return last_lit >= BUFSIZE; } /// /// Add literal to buffer /// /// Literal value to add to buffer. /// Value indicating internal buffer is full public bool TallyLit(int literal) { // if (DeflaterConstants.DEBUGGING) { // if (lit > 32 && lit < 127) { // //Console.WriteLine("("+(char)lit+")"); // } else { // //Console.WriteLine("{"+lit+"}"); // } // } d_buf[last_lit] = 0; l_buf[last_lit++] = (byte)literal; literalTree.freqs[literal]++; return IsFull(); } /// /// Add distance code and length to literal and distance trees /// /// Distance code /// Length /// Value indicating if internal buffer is full public bool TallyDist(int distance, int length) { // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("[" + distance + "," + length + "]"); // } d_buf[last_lit] = (short)distance; l_buf[last_lit++] = (byte)(length - 3); int lc = Lcode(length - 3); literalTree.freqs[lc]++; if (lc >= 265 && lc < 285) { extra_bits += (lc - 261) / 4; } int dc = Dcode(distance - 1); distTree.freqs[dc]++; if (dc >= 4) { extra_bits += dc / 2 - 1; } return IsFull(); } /// /// Reverse the bits of a 16 bit value. /// /// Value to reverse bits /// Value with bits reversed public static short BitReverse(int toReverse) { return (short) (bit4Reverse[toReverse & 0xF] << 12 | bit4Reverse[(toReverse >> 4) & 0xF] << 8 | bit4Reverse[(toReverse >> 8) & 0xF] << 4 | bit4Reverse[toReverse >> 12]); } static int Lcode(int length) { if (length == 255) { return 285; } int code = 257; while (length >= 8) { code += 4; length >>= 1; } return code + length; } static int Dcode(int distance) { int code = 0; while (distance >= 4) { code += 2; distance >>= 1; } return code + distance; } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/DeflaterPending.cs000066400000000000000000000044441446222606700311510ustar00rootroot00000000000000// DeflaterPending.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// This class stores the pending output of the Deflater. /// /// author of the original java version : Jochen Hoenicke /// public class DeflaterPending : PendingBuffer { /// /// Construct instance with default buffer size /// public DeflaterPending() : base(DeflaterConstants.PENDING_BUF_SIZE) { } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Inflater.cs000066400000000000000000000567621446222606700276740ustar00rootroot00000000000000// Inflater.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// Inflater is used to decompress data that has been compressed according /// to the "deflate" standard described in rfc1951. /// /// By default Zlib (rfc1950) headers and footers are expected in the input. /// You can use constructor public Inflater(bool noHeader) passing true /// if there is no Zlib header information /// /// The usage is as following. First you have to set some input with /// SetInput(), then Inflate() it. If inflate doesn't /// inflate any bytes there may be three reasons: ///
    ///
  • IsNeedingInput() returns true because the input buffer is empty. /// You have to provide more input with SetInput(). /// NOTE: IsNeedingInput() also returns true when, the stream is finished. ///
  • ///
  • IsNeedingDictionary() returns true, you have to provide a preset /// dictionary with SetDictionary().
  • ///
  • IsFinished returns true, the inflater has finished.
  • ///
/// Once the first output byte is produced, a dictionary will not be /// needed at a later stage. /// /// author of the original java version : John Leuner, Jochen Hoenicke ///
public class Inflater { #region Constants/Readonly /// /// Copy lengths for literal codes 257..285 /// static readonly int[] CPLENS = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 }; /// /// Extra bits for literal codes 257..285 /// static readonly int[] CPLEXT = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; /// /// Copy offsets for distance codes 0..29 /// static readonly int[] CPDIST = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; /// /// Extra bits for distance codes /// static readonly int[] CPDEXT = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; /// /// These are the possible states for an inflater /// const int DECODE_HEADER = 0; const int DECODE_DICT = 1; const int DECODE_BLOCKS = 2; const int DECODE_STORED_LEN1 = 3; const int DECODE_STORED_LEN2 = 4; const int DECODE_STORED = 5; const int DECODE_DYN_HEADER = 6; const int DECODE_HUFFMAN = 7; const int DECODE_HUFFMAN_LENBITS = 8; const int DECODE_HUFFMAN_DIST = 9; const int DECODE_HUFFMAN_DISTBITS = 10; const int DECODE_CHKSUM = 11; const int FINISHED = 12; #endregion #region Instance Fields /// /// This variable contains the current state. /// int mode; /// /// The adler checksum of the dictionary or of the decompressed /// stream, as it is written in the header resp. footer of the /// compressed stream. /// Only valid if mode is DECODE_DICT or DECODE_CHKSUM. /// int readAdler; /// /// The number of bits needed to complete the current state. This /// is valid, if mode is DECODE_DICT, DECODE_CHKSUM, /// DECODE_HUFFMAN_LENBITS or DECODE_HUFFMAN_DISTBITS. /// int neededBits; int repLength; int repDist; int uncomprLen; /// /// True, if the last block flag was set in the last block of the /// inflated stream. This means that the stream ends after the /// current block. /// bool isLastBlock; /// /// The total number of inflated bytes. /// long totalOut; /// /// The total number of bytes set with setInput(). This is not the /// value returned by the TotalIn property, since this also includes the /// unprocessed input. /// long totalIn; /// /// This variable stores the noHeader flag that was given to the constructor. /// True means, that the inflated stream doesn't contain a Zlib header or /// footer. /// bool noHeader; StreamManipulator input; OutputWindow outputWindow; InflaterDynHeader dynHeader; InflaterHuffmanTree litlenTree, distTree; Adler32 adler; #endregion #region Constructors /// /// Creates a new inflater or RFC1951 decompressor /// RFC1950/Zlib headers and footers will be expected in the input data /// public Inflater() : this(false) { } /// /// Creates a new inflater. /// /// /// True if no RFC1950/Zlib header and footer fields are expected in the input data /// /// This is used for GZIPed/Zipped input. /// /// For compatibility with /// Sun JDK you should provide one byte of input more than needed in /// this case. /// public Inflater(bool noHeader) { this.noHeader = noHeader; this.adler = new Adler32(); input = new StreamManipulator(); outputWindow = new OutputWindow(); mode = noHeader ? DECODE_BLOCKS : DECODE_HEADER; } #endregion /// /// Resets the inflater so that a new stream can be decompressed. All /// pending input and output will be discarded. /// public void Reset() { mode = noHeader ? DECODE_BLOCKS : DECODE_HEADER; totalIn = 0; totalOut = 0; input.Reset(); outputWindow.Reset(); dynHeader = null; litlenTree = null; distTree = null; isLastBlock = false; adler.Reset(); } /// /// Decodes a zlib/RFC1950 header. /// /// /// False if more input is needed. /// /// /// The header is invalid. /// private bool DecodeHeader() { int header = input.PeekBits(16); if (header < 0) { return false; } input.DropBits(16); // The header is written in "wrong" byte order header = ((header << 8) | (header >> 8)) & 0xffff; if (header % 31 != 0) { throw new SharpZipBaseException("Header checksum illegal"); } if ((header & 0x0f00) != (Deflater.DEFLATED << 8)) { throw new SharpZipBaseException("Compression Method unknown"); } /* Maximum size of the backwards window in bits. * We currently ignore this, but we could use it to make the * inflater window more space efficient. On the other hand the * full window (15 bits) is needed most times, anyway. int max_wbits = ((header & 0x7000) >> 12) + 8; */ if ((header & 0x0020) == 0) { // Dictionary flag? mode = DECODE_BLOCKS; } else { mode = DECODE_DICT; neededBits = 32; } return true; } /// /// Decodes the dictionary checksum after the deflate header. /// /// /// False if more input is needed. /// private bool DecodeDict() { while (neededBits > 0) { int dictByte = input.PeekBits(8); if (dictByte < 0) { return false; } input.DropBits(8); readAdler = (readAdler << 8) | dictByte; neededBits -= 8; } return false; } /// /// Decodes the huffman encoded symbols in the input stream. /// /// /// false if more input is needed, true if output window is /// full or the current block ends. /// /// /// if deflated stream is invalid. /// private bool DecodeHuffman() { int free = outputWindow.GetFreeSpace(); while (free >= 258) { int symbol; switch (mode) { case DECODE_HUFFMAN: // This is the inner loop so it is optimized a bit while (((symbol = litlenTree.GetSymbol(input)) & ~0xff) == 0) { outputWindow.Write(symbol); if (--free < 258) { return true; } } if (symbol < 257) { if (symbol < 0) { return false; } else { // symbol == 256: end of block distTree = null; litlenTree = null; mode = DECODE_BLOCKS; return true; } } try { repLength = CPLENS[symbol - 257]; neededBits = CPLEXT[symbol - 257]; } catch (Exception) { throw new SharpZipBaseException("Illegal rep length code"); } goto case DECODE_HUFFMAN_LENBITS; // fall through case DECODE_HUFFMAN_LENBITS: if (neededBits > 0) { mode = DECODE_HUFFMAN_LENBITS; int i = input.PeekBits(neededBits); if (i < 0) { return false; } input.DropBits(neededBits); repLength += i; } mode = DECODE_HUFFMAN_DIST; goto case DECODE_HUFFMAN_DIST; // fall through case DECODE_HUFFMAN_DIST: symbol = distTree.GetSymbol(input); if (symbol < 0) { return false; } try { repDist = CPDIST[symbol]; neededBits = CPDEXT[symbol]; } catch (Exception) { throw new SharpZipBaseException("Illegal rep dist code"); } goto case DECODE_HUFFMAN_DISTBITS; // fall through case DECODE_HUFFMAN_DISTBITS: if (neededBits > 0) { mode = DECODE_HUFFMAN_DISTBITS; int i = input.PeekBits(neededBits); if (i < 0) { return false; } input.DropBits(neededBits); repDist += i; } outputWindow.Repeat(repLength, repDist); free -= repLength; mode = DECODE_HUFFMAN; break; default: throw new SharpZipBaseException("Inflater unknown mode"); } } return true; } /// /// Decodes the adler checksum after the deflate stream. /// /// /// false if more input is needed. /// /// /// If checksum doesn't match. /// private bool DecodeChksum() { while (neededBits > 0) { int chkByte = input.PeekBits(8); if (chkByte < 0) { return false; } input.DropBits(8); readAdler = (readAdler << 8) | chkByte; neededBits -= 8; } if ((int) adler.Value != readAdler) { throw new SharpZipBaseException("Adler chksum doesn't match: " + (int)adler.Value + " vs. " + readAdler); } mode = FINISHED; return false; } /// /// Decodes the deflated stream. /// /// /// false if more input is needed, or if finished. /// /// /// if deflated stream is invalid. /// private bool Decode() { switch (mode) { case DECODE_HEADER: return DecodeHeader(); case DECODE_DICT: return DecodeDict(); case DECODE_CHKSUM: return DecodeChksum(); case DECODE_BLOCKS: if (isLastBlock) { if (noHeader) { mode = FINISHED; return false; } else { input.SkipToByteBoundary(); neededBits = 32; mode = DECODE_CHKSUM; return true; } } int type = input.PeekBits(3); if (type < 0) { return false; } input.DropBits(3); if ((type & 1) != 0) { isLastBlock = true; } switch (type >> 1){ case DeflaterConstants.STORED_BLOCK: input.SkipToByteBoundary(); mode = DECODE_STORED_LEN1; break; case DeflaterConstants.STATIC_TREES: litlenTree = InflaterHuffmanTree.defLitLenTree; distTree = InflaterHuffmanTree.defDistTree; mode = DECODE_HUFFMAN; break; case DeflaterConstants.DYN_TREES: dynHeader = new InflaterDynHeader(); mode = DECODE_DYN_HEADER; break; default: throw new SharpZipBaseException("Unknown block type " + type); } return true; case DECODE_STORED_LEN1: { if ((uncomprLen = input.PeekBits(16)) < 0) { return false; } input.DropBits(16); mode = DECODE_STORED_LEN2; } goto case DECODE_STORED_LEN2; // fall through case DECODE_STORED_LEN2: { int nlen = input.PeekBits(16); if (nlen < 0) { return false; } input.DropBits(16); if (nlen != (uncomprLen ^ 0xffff)) { throw new SharpZipBaseException("broken uncompressed block"); } mode = DECODE_STORED; } goto case DECODE_STORED; // fall through case DECODE_STORED: { int more = outputWindow.CopyStored(input, uncomprLen); uncomprLen -= more; if (uncomprLen == 0) { mode = DECODE_BLOCKS; return true; } return !input.IsNeedingInput; } case DECODE_DYN_HEADER: if (!dynHeader.Decode(input)) { return false; } litlenTree = dynHeader.BuildLitLenTree(); distTree = dynHeader.BuildDistTree(); mode = DECODE_HUFFMAN; goto case DECODE_HUFFMAN; // fall through case DECODE_HUFFMAN: case DECODE_HUFFMAN_LENBITS: case DECODE_HUFFMAN_DIST: case DECODE_HUFFMAN_DISTBITS: return DecodeHuffman(); case FINISHED: return false; default: throw new SharpZipBaseException("Inflater.Decode unknown mode"); } } /// /// Sets the preset dictionary. This should only be called, if /// needsDictionary() returns true and it should set the same /// dictionary, that was used for deflating. The getAdler() /// function returns the checksum of the dictionary needed. /// /// /// The dictionary. /// public void SetDictionary(byte[] buffer) { SetDictionary(buffer, 0, buffer.Length); } /// /// Sets the preset dictionary. This should only be called, if /// needsDictionary() returns true and it should set the same /// dictionary, that was used for deflating. The getAdler() /// function returns the checksum of the dictionary needed. /// /// /// The dictionary. /// /// /// The index into buffer where the dictionary starts. /// /// /// The number of bytes in the dictionary. /// /// /// No dictionary is needed. /// /// /// The adler checksum for the buffer is invalid /// public void SetDictionary(byte[] buffer, int index, int count) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } if ( index < 0 ) { throw new ArgumentOutOfRangeException("index"); } if ( count < 0 ) { throw new ArgumentOutOfRangeException("count"); } if (!IsNeedingDictionary) { throw new InvalidOperationException("Dictionary is not needed"); } adler.Update(buffer, index, count); if ((int)adler.Value != readAdler) { throw new SharpZipBaseException("Wrong adler checksum"); } adler.Reset(); outputWindow.CopyDict(buffer, index, count); mode = DECODE_BLOCKS; } /// /// Sets the input. This should only be called, if needsInput() /// returns true. /// /// /// the input. /// public void SetInput(byte[] buffer) { SetInput(buffer, 0, buffer.Length); } /// /// Sets the input. This should only be called, if needsInput() /// returns true. /// /// /// The source of input data /// /// /// The index into buffer where the input starts. /// /// /// The number of bytes of input to use. /// /// /// No input is needed. /// /// /// The index and/or count are wrong. /// public void SetInput(byte[] buffer, int index, int count) { input.SetInput(buffer, index, count); totalIn += (long)count; } /// /// Inflates the compressed stream to the output buffer. If this /// returns 0, you should check, whether IsNeedingDictionary(), /// IsNeedingInput() or IsFinished() returns true, to determine why no /// further output is produced. /// /// /// the output buffer. /// /// /// The number of bytes written to the buffer, 0 if no further /// output can be produced. /// /// /// if buffer has length 0. /// /// /// if deflated stream is invalid. /// public int Inflate(byte[] buffer) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } return Inflate(buffer, 0, buffer.Length); } /// /// Inflates the compressed stream to the output buffer. If this /// returns 0, you should check, whether needsDictionary(), /// needsInput() or finished() returns true, to determine why no /// further output is produced. /// /// /// the output buffer. /// /// /// the offset in buffer where storing starts. /// /// /// the maximum number of bytes to output. /// /// /// the number of bytes written to the buffer, 0 if no further output can be produced. /// /// /// if count is less than 0. /// /// /// if the index and / or count are wrong. /// /// /// if deflated stream is invalid. /// public int Inflate(byte[] buffer, int offset, int count) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "count cannot be negative"); #endif } if ( offset < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "offset cannot be negative"); #endif } if ( offset + count > buffer.Length ) { throw new ArgumentException("count exceeds buffer bounds"); } // Special case: count may be zero if (count == 0) { if (!IsFinished) { // -jr- 08-Nov-2003 INFLATE_BUG fix.. Decode(); } return 0; } int bytesCopied = 0; do { if (mode != DECODE_CHKSUM) { /* Don't give away any output, if we are waiting for the * checksum in the input stream. * * With this trick we have always: * IsNeedingInput() and not IsFinished() * implies more output can be produced. */ int more = outputWindow.CopyOutput(buffer, offset, count); if ( more > 0 ) { adler.Update(buffer, offset, more); offset += more; bytesCopied += more; totalOut += (long)more; count -= more; if (count == 0) { return bytesCopied; } } } } while (Decode() || ((outputWindow.GetAvailable() > 0) && (mode != DECODE_CHKSUM))); return bytesCopied; } /// /// Returns true, if the input buffer is empty. /// You should then call setInput(). /// NOTE: This method also returns true when the stream is finished. /// public bool IsNeedingInput { get { return input.IsNeedingInput; } } /// /// Returns true, if a preset dictionary is needed to inflate the input. /// public bool IsNeedingDictionary { get { return mode == DECODE_DICT && neededBits == 0; } } /// /// Returns true, if the inflater has finished. This means, that no /// input is needed and no output can be produced. /// public bool IsFinished { get { return mode == FINISHED && outputWindow.GetAvailable() == 0; } } /// /// Gets the adler checksum. This is either the checksum of all /// uncompressed bytes returned by inflate(), or if needsDictionary() /// returns true (and thus no output was yet produced) this is the /// adler checksum of the expected dictionary. /// /// /// the adler checksum. /// public int Adler { get { return IsNeedingDictionary ? readAdler : (int) adler.Value; } } /// /// Gets the total number of output bytes returned by Inflate(). /// /// /// the total number of output bytes. /// public long TotalOut { get { return totalOut; } } /// /// Gets the total number of processed compressed input bytes. /// /// /// The total number of bytes of processed input bytes. /// public long TotalIn { get { return totalIn - (long)RemainingInput; } } /// /// Gets the number of unprocessed input bytes. Useful, if the end of the /// stream is reached and you want to further process the bytes after /// the deflate stream. /// /// /// The number of bytes of the input which have not been processed. /// public int RemainingInput { // TODO: This should be a long? get { return input.AvailableBytes; } } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/InflaterDynHeader.cs000066400000000000000000000136741446222606700314530ustar00rootroot00000000000000// InflaterDynHeader.cs // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace ICSharpCode.SharpZipLib.Zip.Compression { class InflaterDynHeader { #region Constants const int LNUM = 0; const int DNUM = 1; const int BLNUM = 2; const int BLLENS = 3; const int LENS = 4; const int REPS = 5; static readonly int[] repMin = { 3, 3, 11 }; static readonly int[] repBits = { 2, 3, 7 }; static readonly int[] BL_ORDER = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; #endregion #region Constructors public InflaterDynHeader() { } #endregion public bool Decode(StreamManipulator input) { decode_loop: for (;;) { switch (mode) { case LNUM: lnum = input.PeekBits(5); if (lnum < 0) { return false; } lnum += 257; input.DropBits(5); // System.err.println("LNUM: "+lnum); mode = DNUM; goto case DNUM; // fall through case DNUM: dnum = input.PeekBits(5); if (dnum < 0) { return false; } dnum++; input.DropBits(5); // System.err.println("DNUM: "+dnum); num = lnum+dnum; litdistLens = new byte[num]; mode = BLNUM; goto case BLNUM; // fall through case BLNUM: blnum = input.PeekBits(4); if (blnum < 0) { return false; } blnum += 4; input.DropBits(4); blLens = new byte[19]; ptr = 0; // System.err.println("BLNUM: "+blnum); mode = BLLENS; goto case BLLENS; // fall through case BLLENS: while (ptr < blnum) { int len = input.PeekBits(3); if (len < 0) { return false; } input.DropBits(3); // System.err.println("blLens["+BL_ORDER[ptr]+"]: "+len); blLens[BL_ORDER[ptr]] = (byte) len; ptr++; } blTree = new InflaterHuffmanTree(blLens); blLens = null; ptr = 0; mode = LENS; goto case LENS; // fall through case LENS: { int symbol; while (((symbol = blTree.GetSymbol(input)) & ~15) == 0) { /* Normal case: symbol in [0..15] */ // System.err.println("litdistLens["+ptr+"]: "+symbol); litdistLens[ptr++] = lastLen = (byte)symbol; if (ptr == num) { /* Finished */ return true; } } /* need more input ? */ if (symbol < 0) { return false; } /* otherwise repeat code */ if (symbol >= 17) { /* repeat zero */ // System.err.println("repeating zero"); lastLen = 0; } else { if (ptr == 0) { throw new SharpZipBaseException(); } } repSymbol = symbol-16; } mode = REPS; goto case REPS; // fall through case REPS: { int bits = repBits[repSymbol]; int count = input.PeekBits(bits); if (count < 0) { return false; } input.DropBits(bits); count += repMin[repSymbol]; // System.err.println("litdistLens repeated: "+count); if (ptr + count > num) { throw new SharpZipBaseException(); } while (count-- > 0) { litdistLens[ptr++] = lastLen; } if (ptr == num) { /* Finished */ return true; } } mode = LENS; goto decode_loop; } } } public InflaterHuffmanTree BuildLitLenTree() { byte[] litlenLens = new byte[lnum]; Array.Copy(litdistLens, 0, litlenLens, 0, lnum); return new InflaterHuffmanTree(litlenLens); } public InflaterHuffmanTree BuildDistTree() { byte[] distLens = new byte[dnum]; Array.Copy(litdistLens, lnum, distLens, 0, dnum); return new InflaterHuffmanTree(distLens); } #region Instance Fields byte[] blLens; byte[] litdistLens; InflaterHuffmanTree blTree; /// /// The current decode mode /// int mode; int lnum, dnum, blnum, num; int repSymbol; byte lastLen; int ptr; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/InflaterHuffmanTree.cs000066400000000000000000000151071446222606700320050ustar00rootroot00000000000000// InflaterHuffmanTree.cs // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// Huffman tree used for inflation /// public class InflaterHuffmanTree { #region Constants const int MAX_BITLEN = 15; #endregion #region Instance Fields short[] tree; #endregion /// /// Literal length tree /// public static InflaterHuffmanTree defLitLenTree; /// /// Distance tree /// public static InflaterHuffmanTree defDistTree; static InflaterHuffmanTree() { try { byte[] codeLengths = new byte[288]; int i = 0; while (i < 144) { codeLengths[i++] = 8; } while (i < 256) { codeLengths[i++] = 9; } while (i < 280) { codeLengths[i++] = 7; } while (i < 288) { codeLengths[i++] = 8; } defLitLenTree = new InflaterHuffmanTree(codeLengths); codeLengths = new byte[32]; i = 0; while (i < 32) { codeLengths[i++] = 5; } defDistTree = new InflaterHuffmanTree(codeLengths); } catch (Exception) { throw new SharpZipBaseException("InflaterHuffmanTree: static tree length illegal"); } } #region Constructors /// /// Constructs a Huffman tree from the array of code lengths. /// /// /// the array of code lengths /// public InflaterHuffmanTree(byte[] codeLengths) { BuildTree(codeLengths); } #endregion void BuildTree(byte[] codeLengths) { int[] blCount = new int[MAX_BITLEN + 1]; int[] nextCode = new int[MAX_BITLEN + 1]; for (int i = 0; i < codeLengths.Length; i++) { int bits = codeLengths[i]; if (bits > 0) { blCount[bits]++; } } int code = 0; int treeSize = 512; for (int bits = 1; bits <= MAX_BITLEN; bits++) { nextCode[bits] = code; code += blCount[bits] << (16 - bits); if (bits >= 10) { /* We need an extra table for bit lengths >= 10. */ int start = nextCode[bits] & 0x1ff80; int end = code & 0x1ff80; treeSize += (end - start) >> (16 - bits); } } /* -jr comment this out! doesnt work for dynamic trees and pkzip 2.04g if (code != 65536) { throw new SharpZipBaseException("Code lengths don't add up properly."); } */ /* Now create and fill the extra tables from longest to shortest * bit len. This way the sub trees will be aligned. */ tree = new short[treeSize]; int treePtr = 512; for (int bits = MAX_BITLEN; bits >= 10; bits--) { int end = code & 0x1ff80; code -= blCount[bits] << (16 - bits); int start = code & 0x1ff80; for (int i = start; i < end; i += 1 << 7) { tree[DeflaterHuffman.BitReverse(i)] = (short) ((-treePtr << 4) | bits); treePtr += 1 << (bits-9); } } for (int i = 0; i < codeLengths.Length; i++) { int bits = codeLengths[i]; if (bits == 0) { continue; } code = nextCode[bits]; int revcode = DeflaterHuffman.BitReverse(code); if (bits <= 9) { do { tree[revcode] = (short) ((i << 4) | bits); revcode += 1 << bits; } while (revcode < 512); } else { int subTree = tree[revcode & 511]; int treeLen = 1 << (subTree & 15); subTree = -(subTree >> 4); do { tree[subTree | (revcode >> 9)] = (short) ((i << 4) | bits); revcode += 1 << bits; } while (revcode < treeLen); } nextCode[bits] = code + (1 << (16 - bits)); } } /// /// Reads the next symbol from input. The symbol is encoded using the /// huffman tree. /// /// /// input the input source. /// /// /// the next symbol, or -1 if not enough input is available. /// public int GetSymbol(StreamManipulator input) { int lookahead, symbol; if ((lookahead = input.PeekBits(9)) >= 0) { if ((symbol = tree[lookahead]) >= 0) { input.DropBits(symbol & 15); return symbol >> 4; } int subtree = -(symbol >> 4); int bitlen = symbol & 15; if ((lookahead = input.PeekBits(bitlen)) >= 0) { symbol = tree[subtree | (lookahead >> 9)]; input.DropBits(symbol & 15); return symbol >> 4; } else { int bits = input.AvailableBits; lookahead = input.PeekBits(bits); symbol = tree[subtree | (lookahead >> 9)]; if ((symbol & 15) <= bits) { input.DropBits(symbol & 15); return symbol >> 4; } else { return -1; } } } else { int bits = input.AvailableBits; lookahead = input.PeekBits(bits); symbol = tree[lookahead]; if (symbol >= 0 && (symbol & 15) <= bits) { input.DropBits(symbol & 15); return symbol >> 4; } else { return -1; } } } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/PendingBuffer.cs000066400000000000000000000176041446222606700306360ustar00rootroot00000000000000// PendingBuffer.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Zip.Compression { /// /// This class is general purpose class for writing data to a buffer. /// /// It allows you to write bits as well as bytes /// Based on DeflaterPending.java /// /// author of the original java version : Jochen Hoenicke /// public class PendingBuffer { #region Instance Fields /// /// Internal work buffer /// byte[] buffer_; int start; int end; uint bits; int bitCount; #endregion #region Constructors /// /// construct instance using default buffer size of 4096 /// public PendingBuffer() : this( 4096 ) { } /// /// construct instance using specified buffer size /// /// /// size to use for internal buffer /// public PendingBuffer(int bufferSize) { buffer_ = new byte[bufferSize]; } #endregion /// /// Clear internal state/buffers /// public void Reset() { start = end = bitCount = 0; } /// /// Write a byte to buffer /// /// /// The value to write /// public void WriteByte(int value) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } #endif buffer_[end++] = unchecked((byte) value); } /// /// Write a short value to buffer LSB first /// /// /// The value to write. /// public void WriteShort(int value) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } #endif buffer_[end++] = unchecked((byte) value); buffer_[end++] = unchecked((byte) (value >> 8)); } /// /// write an integer LSB first /// /// The value to write. public void WriteInt(int value) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } #endif buffer_[end++] = unchecked((byte) value); buffer_[end++] = unchecked((byte) (value >> 8)); buffer_[end++] = unchecked((byte) (value >> 16)); buffer_[end++] = unchecked((byte) (value >> 24)); } /// /// Write a block of data to buffer /// /// data to write /// offset of first byte to write /// number of bytes to write public void WriteBlock(byte[] block, int offset, int length) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } #endif System.Array.Copy(block, offset, buffer_, end, length); end += length; } /// /// The number of bits written to the buffer /// public int BitCount { get { return bitCount; } } /// /// Align internal buffer on a byte boundary /// public void AlignToByte() { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } #endif if (bitCount > 0) { buffer_[end++] = unchecked((byte) bits); if (bitCount > 8) { buffer_[end++] = unchecked((byte) (bits >> 8)); } } bits = 0; bitCount = 0; } /// /// Write bits to internal buffer /// /// source of bits /// number of bits to write public void WriteBits(int b, int count) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } // if (DeflaterConstants.DEBUGGING) { // //Console.WriteLine("writeBits("+b+","+count+")"); // } #endif bits |= (uint)(b << bitCount); bitCount += count; if (bitCount >= 16) { buffer_[end++] = unchecked((byte) bits); buffer_[end++] = unchecked((byte) (bits >> 8)); bits >>= 16; bitCount -= 16; } } /// /// Write a short value to internal buffer most significant byte first /// /// value to write public void WriteShortMSB(int s) { #if DebugDeflation if (DeflaterConstants.DEBUGGING && (start != 0) ) { throw new SharpZipBaseException("Debug check: start != 0"); } #endif buffer_[end++] = unchecked((byte) (s >> 8)); buffer_[end++] = unchecked((byte) s); } /// /// Indicates if buffer has been flushed /// public bool IsFlushed { get { return end == 0; } } /// /// Flushes the pending buffer into the given output array. If the /// output array is to small, only a partial flush is done. /// /// The output array. /// The offset into output array. /// The maximum number of bytes to store. /// The number of bytes flushed. public int Flush(byte[] output, int offset, int length) { if (bitCount >= 8) { buffer_[end++] = unchecked((byte) bits); bits >>= 8; bitCount -= 8; } if (length > end - start) { length = end - start; System.Array.Copy(buffer_, start, output, offset, length); start = 0; end = 0; } else { System.Array.Copy(buffer_, start, output, offset, length); start += length; } return length; } /// /// Convert internal buffer to byte array. /// Buffer is empty on completion /// /// /// The internal buffer contents converted to a byte array. /// public byte[] ToByteArray() { byte[] result = new byte[end - start]; System.Array.Copy(buffer_, start, result, 0, result.Length); start = 0; end = 0; return result; } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Streams/000077500000000000000000000000001446222606700271775ustar00rootroot00000000000000quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Streams/DeflaterOutputStream.cs000066400000000000000000000420241446222606700336530ustar00rootroot00000000000000// DeflaterOutputStream.cs // // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 22-12-2009 DavidPierson Added AES support using System; using System.IO; #if !NETCF_1_0 using System.Security.Cryptography; using ICSharpCode.SharpZipLib.Encryption; #endif namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams { /// /// A special stream deflating or compressing the bytes that are /// written to it. It uses a Deflater to perform actual deflating.
/// Authors of the original java version : Tom Tromey, Jochen Hoenicke ///
public class DeflaterOutputStream : Stream { #region Constructors /// /// Creates a new DeflaterOutputStream with a default Deflater and default buffer size. /// /// /// the output stream where deflated output should be written. /// public DeflaterOutputStream(Stream baseOutputStream) : this(baseOutputStream, new Deflater(), 512) { } /// /// Creates a new DeflaterOutputStream with the given Deflater and /// default buffer size. /// /// /// the output stream where deflated output should be written. /// /// /// the underlying deflater. /// public DeflaterOutputStream(Stream baseOutputStream, Deflater deflater) : this(baseOutputStream, deflater, 512) { } /// /// Creates a new DeflaterOutputStream with the given Deflater and /// buffer size. /// /// /// The output stream where deflated output is written. /// /// /// The underlying deflater to use /// /// /// The buffer size in bytes to use when deflating (minimum value 512) /// /// /// bufsize is less than or equal to zero. /// /// /// baseOutputStream does not support writing /// /// /// deflater instance is null /// public DeflaterOutputStream(Stream baseOutputStream, Deflater deflater, int bufferSize) { if ( baseOutputStream == null ) { throw new ArgumentNullException("baseOutputStream"); } if (baseOutputStream.CanWrite == false) { throw new ArgumentException("Must support writing", "baseOutputStream"); } if (deflater == null) { throw new ArgumentNullException("deflater"); } if (bufferSize < 512) { throw new ArgumentOutOfRangeException("bufferSize"); } baseOutputStream_ = baseOutputStream; buffer_ = new byte[bufferSize]; deflater_ = deflater; } #endregion #region Public API /// /// Finishes the stream by calling finish() on the deflater. /// /// /// Not all input is deflated /// public virtual void Finish() { deflater_.Finish(); while (!deflater_.IsFinished) { int len = deflater_.Deflate(buffer_, 0, buffer_.Length); if (len <= 0) { break; } #if NETCF_1_0 if ( keys != null ) { #else if (cryptoTransform_ != null) { #endif EncryptBlock(buffer_, 0, len); } baseOutputStream_.Write(buffer_, 0, len); } if (!deflater_.IsFinished) { throw new SharpZipBaseException("Can't deflate all input?"); } baseOutputStream_.Flush(); #if NETCF_1_0 if ( keys != null ) { keys = null; } #else if (cryptoTransform_ != null) { #if !NET_1_1 && !NETCF_2_0 if (cryptoTransform_ is ZipAESTransform) { AESAuthCode = ((ZipAESTransform)cryptoTransform_).GetAuthCode(); } #endif cryptoTransform_.Dispose(); cryptoTransform_ = null; } #endif } /// /// Get/set flag indicating ownership of the underlying stream. /// When the flag is true will close the underlying stream also. /// public bool IsStreamOwner { get { return isStreamOwner_; } set { isStreamOwner_ = value; } } /// /// Allows client to determine if an entry can be patched after its added /// public bool CanPatchEntries { get { return baseOutputStream_.CanSeek; } } #endregion #region Encryption string password; #if NETCF_1_0 uint[] keys; #else ICryptoTransform cryptoTransform_; /// /// Returns the 10 byte AUTH CODE to be appended immediately following the AES data stream. /// protected byte[] AESAuthCode; #endif /// /// Get/set the password used for encryption. /// /// When set to null or if the password is empty no encryption is performed public string Password { get { return password; } set { if ( (value != null) && (value.Length == 0) ) { password = null; } else { password = value; } } } /// /// Encrypt a block of data /// /// /// Data to encrypt. NOTE the original contents of the buffer are lost /// /// /// Offset of first byte in buffer to encrypt /// /// /// Number of bytes in buffer to encrypt /// protected void EncryptBlock(byte[] buffer, int offset, int length) { #if NETCF_1_0 for (int i = offset; i < offset + length; ++i) { byte oldbyte = buffer[i]; buffer[i] ^= EncryptByte(); UpdateKeys(oldbyte); } #else cryptoTransform_.TransformBlock(buffer, 0, length, buffer, 0); #endif } /// /// Initializes encryption keys based on given . /// /// The password. protected void InitializePassword(string password) { #if NETCF_1_0 keys = new uint[] { 0x12345678, 0x23456789, 0x34567890 }; byte[] rawPassword = ZipConstants.ConvertToArray(password); for (int i = 0; i < rawPassword.Length; ++i) { UpdateKeys((byte)rawPassword[i]); } #else PkzipClassicManaged pkManaged = new PkzipClassicManaged(); byte[] key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(password)); cryptoTransform_ = pkManaged.CreateEncryptor(key, null); #endif } #if !NET_1_1 && !NETCF_2_0 /// /// Initializes encryption keys based on given password. /// protected void InitializeAESPassword(ZipEntry entry, string rawPassword, out byte[] salt, out byte[] pwdVerifier) { salt = new byte[entry.AESSaltLen]; // Salt needs to be cryptographically random, and unique per file if (_aesRnd == null) _aesRnd = new RNGCryptoServiceProvider(); _aesRnd.GetBytes(salt); int blockSize = entry.AESKeySize / 8; // bits to bytes cryptoTransform_ = new ZipAESTransform(rawPassword, salt, blockSize, true); pwdVerifier = ((ZipAESTransform)cryptoTransform_).PwdVerifier; } #endif #if NETCF_1_0 /// /// Encrypt a single byte /// /// /// The encrypted value /// protected byte EncryptByte() { uint temp = ((keys[2] & 0xFFFF) | 2); return (byte)((temp * (temp ^ 1)) >> 8); } /// /// Update encryption keys /// protected void UpdateKeys(byte ch) { keys[0] = Crc32.ComputeCrc32(keys[0], ch); keys[1] = keys[1] + (byte)keys[0]; keys[1] = keys[1] * 134775813 + 1; keys[2] = Crc32.ComputeCrc32(keys[2], (byte)(keys[1] >> 24)); } #endif #endregion #region Deflation Support /// /// Deflates everything in the input buffers. This will call /// def.deflate() until all bytes from the input buffers /// are processed. /// protected void Deflate() { while (!deflater_.IsNeedingInput) { int deflateCount = deflater_.Deflate(buffer_, 0, buffer_.Length); if (deflateCount <= 0) { break; } #if NETCF_1_0 if (keys != null) #else if (cryptoTransform_ != null) #endif { EncryptBlock(buffer_, 0, deflateCount); } baseOutputStream_.Write(buffer_, 0, deflateCount); } if (!deflater_.IsNeedingInput) { throw new SharpZipBaseException("DeflaterOutputStream can't deflate all input?"); } } #endregion #region Stream Overrides /// /// Gets value indicating stream can be read from /// public override bool CanRead { get { return false; } } /// /// Gets a value indicating if seeking is supported for this stream /// This property always returns false /// public override bool CanSeek { get { return false; } } /// /// Get value indicating if this stream supports writing /// public override bool CanWrite { get { return baseOutputStream_.CanWrite; } } /// /// Get current length of stream /// public override long Length { get { return baseOutputStream_.Length; } } /// /// Gets the current position within the stream. /// /// Any attempt to set position public override long Position { get { return baseOutputStream_.Position; } set { throw new NotSupportedException("Position property not supported"); } } /// /// Sets the current position of this stream to the given value. Not supported by this class! /// /// The offset relative to the to seek. /// The to seek from. /// The new position in the stream. /// Any access public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException("DeflaterOutputStream Seek not supported"); } /// /// Sets the length of this stream to the given value. Not supported by this class! /// /// The new stream length. /// Any access public override void SetLength(long value) { throw new NotSupportedException("DeflaterOutputStream SetLength not supported"); } /// /// Read a byte from stream advancing position by one /// /// The byte read cast to an int. THe value is -1 if at the end of the stream. /// Any access public override int ReadByte() { throw new NotSupportedException("DeflaterOutputStream ReadByte not supported"); } /// /// Read a block of bytes from stream /// /// The buffer to store read data in. /// The offset to start storing at. /// The maximum number of bytes to read. /// The actual number of bytes read. Zero if end of stream is detected. /// Any access public override int Read(byte[] buffer, int offset, int count) { throw new NotSupportedException("DeflaterOutputStream Read not supported"); } /// /// Asynchronous reads are not supported a NotSupportedException is always thrown /// /// The buffer to read into. /// The offset to start storing data at. /// The number of bytes to read /// The async callback to use. /// The state to use. /// Returns an /// Any access public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { throw new NotSupportedException("DeflaterOutputStream BeginRead not currently supported"); } /// /// Asynchronous writes arent supported, a NotSupportedException is always thrown /// /// The buffer to write. /// The offset to begin writing at. /// The number of bytes to write. /// The to use. /// The state object. /// Returns an IAsyncResult. /// Any access public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { throw new NotSupportedException("BeginWrite is not supported"); } /// /// Flushes the stream by calling Flush on the deflater and then /// on the underlying stream. This ensures that all bytes are flushed. /// public override void Flush() { deflater_.Flush(); Deflate(); baseOutputStream_.Flush(); } /// /// Calls and closes the underlying /// stream when is true. /// public override void Close() { if ( !isClosed_ ) { isClosed_ = true; try { Finish(); #if NETCF_1_0 keys=null; #else if ( cryptoTransform_ != null ) { GetAuthCodeIfAES(); cryptoTransform_.Dispose(); cryptoTransform_ = null; } #endif } finally { if( isStreamOwner_ ) { baseOutputStream_.Close(); } } } } private void GetAuthCodeIfAES() { #if !NET_1_1 && !NETCF_2_0 if (cryptoTransform_ is ZipAESTransform) { AESAuthCode = ((ZipAESTransform)cryptoTransform_).GetAuthCode(); } #endif } /// /// Writes a single byte to the compressed output stream. /// /// /// The byte value. /// public override void WriteByte(byte value) { byte[] b = new byte[1]; b[0] = value; Write(b, 0, 1); } /// /// Writes bytes from an array to the compressed stream. /// /// /// The byte array /// /// /// The offset into the byte array where to start. /// /// /// The number of bytes to write. /// public override void Write(byte[] buffer, int offset, int count) { deflater_.SetInput(buffer, offset, count); Deflate(); } #endregion #region Instance Fields /// /// This buffer is used temporarily to retrieve the bytes from the /// deflater and write them to the underlying output stream. /// byte[] buffer_; /// /// The deflater which is used to deflate the stream. /// protected Deflater deflater_; /// /// Base stream the deflater depends on. /// protected Stream baseOutputStream_; bool isClosed_; bool isStreamOwner_ = true; #endregion #region Static Fields #if !NET_1_1 && !NETCF_2_0 // Static to help ensure that multiple files within a zip will get different random salt private static RNGCryptoServiceProvider _aesRnd; #endif #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Streams/InflaterInputStream.cs000066400000000000000000000501741446222606700334750ustar00rootroot00000000000000// InflaterInputStream.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 11-08-2009 GeoffHart T9121 Added Multi-member gzip support using System; using System.IO; #if !NETCF_1_0 using System.Security.Cryptography; #endif namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams { /// /// An input buffer customised for use by /// /// /// The buffer supports decryption of incoming data. /// public class InflaterInputBuffer { #region Constructors /// /// Initialise a new instance of with a default buffer size /// /// The stream to buffer. public InflaterInputBuffer(Stream stream) : this(stream , 4096) { } /// /// Initialise a new instance of /// /// The stream to buffer. /// The size to use for the buffer /// A minimum buffer size of 1KB is permitted. Lower sizes are treated as 1KB. public InflaterInputBuffer(Stream stream, int bufferSize) { inputStream = stream; if ( bufferSize < 1024 ) { bufferSize = 1024; } rawData = new byte[bufferSize]; clearText = rawData; } #endregion /// /// Get the length of bytes bytes in the /// public int RawLength { get { return rawLength; } } /// /// Get the contents of the raw data buffer. /// /// This may contain encrypted data. public byte[] RawData { get { return rawData; } } /// /// Get the number of useable bytes in /// public int ClearTextLength { get { return clearTextLength; } } /// /// Get the contents of the clear text buffer. /// public byte[] ClearText { get { return clearText; } } /// /// Get/set the number of bytes available /// public int Available { get { return available; } set { available = value; } } /// /// Call passing the current clear text buffer contents. /// /// The inflater to set input for. public void SetInflaterInput(Inflater inflater) { if ( available > 0 ) { inflater.SetInput(clearText, clearTextLength - available, available); available = 0; } } /// /// Fill the buffer from the underlying input stream. /// public void Fill() { rawLength = 0; int toRead = rawData.Length; while (toRead > 0) { int count = inputStream.Read(rawData, rawLength, toRead); if ( count <= 0 ) { break; } rawLength += count; toRead -= count; } #if !NETCF_1_0 if ( cryptoTransform != null ) { clearTextLength = cryptoTransform.TransformBlock(rawData, 0, rawLength, clearText, 0); } else #endif { clearTextLength = rawLength; } available = clearTextLength; } /// /// Read a buffer directly from the input stream /// /// The buffer to fill /// Returns the number of bytes read. public int ReadRawBuffer(byte[] buffer) { return ReadRawBuffer(buffer, 0, buffer.Length); } /// /// Read a buffer directly from the input stream /// /// The buffer to read into /// The offset to start reading data into. /// The number of bytes to read. /// Returns the number of bytes read. public int ReadRawBuffer(byte[] outBuffer, int offset, int length) { if ( length < 0 ) { throw new ArgumentOutOfRangeException("length"); } int currentOffset = offset; int currentLength = length; while ( currentLength > 0 ) { if ( available <= 0 ) { Fill(); if (available <= 0) { return 0; } } int toCopy = Math.Min(currentLength, available); System.Array.Copy(rawData, rawLength - (int)available, outBuffer, currentOffset, toCopy); currentOffset += toCopy; currentLength -= toCopy; available -= toCopy; } return length; } /// /// Read clear text data from the input stream. /// /// The buffer to add data to. /// The offset to start adding data at. /// The number of bytes to read. /// Returns the number of bytes actually read. public int ReadClearTextBuffer(byte[] outBuffer, int offset, int length) { if ( length < 0 ) { throw new ArgumentOutOfRangeException("length"); } int currentOffset = offset; int currentLength = length; while ( currentLength > 0 ) { if ( available <= 0 ) { Fill(); if (available <= 0) { return 0; } } int toCopy = Math.Min(currentLength, available); Array.Copy(clearText, clearTextLength - (int)available, outBuffer, currentOffset, toCopy); currentOffset += toCopy; currentLength -= toCopy; available -= toCopy; } return length; } /// /// Read a from the input stream. /// /// Returns the byte read. public int ReadLeByte() { if (available <= 0) { Fill(); if (available <= 0) { throw new ZipException("EOF in header"); } } byte result = rawData[rawLength - available]; available -= 1; return result; } /// /// Read an in little endian byte order. /// /// The short value read case to an int. public int ReadLeShort() { return ReadLeByte() | (ReadLeByte() << 8); } /// /// Read an in little endian byte order. /// /// The int value read. public int ReadLeInt() { return ReadLeShort() | (ReadLeShort() << 16); } /// /// Read a in little endian byte order. /// /// The long value read. public long ReadLeLong() { return (uint)ReadLeInt() | ((long)ReadLeInt() << 32); } #if !NETCF_1_0 /// /// Get/set the to apply to any data. /// /// Set this value to null to have no transform applied. public ICryptoTransform CryptoTransform { set { cryptoTransform = value; if ( cryptoTransform != null ) { if ( rawData == clearText ) { if ( internalClearText == null ) { internalClearText = new byte[rawData.Length]; } clearText = internalClearText; } clearTextLength = rawLength; if ( available > 0 ) { cryptoTransform.TransformBlock(rawData, rawLength - available, available, clearText, rawLength - available); } } else { clearText = rawData; clearTextLength = rawLength; } } } #endif #region Instance Fields int rawLength; byte[] rawData; int clearTextLength; byte[] clearText; #if !NETCF_1_0 byte[] internalClearText; #endif int available; #if !NETCF_1_0 ICryptoTransform cryptoTransform; #endif Stream inputStream; #endregion } /// /// This filter stream is used to decompress data compressed using the "deflate" /// format. The "deflate" format is described in RFC 1951. /// /// This stream may form the basis for other decompression filters, such /// as the GZipInputStream. /// /// Author of the original java version : John Leuner. /// public class InflaterInputStream : Stream { #region Constructors /// /// Create an InflaterInputStream with the default decompressor /// and a default buffer size of 4KB. /// /// /// The InputStream to read bytes from /// public InflaterInputStream(Stream baseInputStream) : this(baseInputStream, new Inflater(), 4096) { } /// /// Create an InflaterInputStream with the specified decompressor /// and a default buffer size of 4KB. /// /// /// The source of input data /// /// /// The decompressor used to decompress data read from baseInputStream /// public InflaterInputStream(Stream baseInputStream, Inflater inf) : this(baseInputStream, inf, 4096) { } /// /// Create an InflaterInputStream with the specified decompressor /// and the specified buffer size. /// /// /// The InputStream to read bytes from /// /// /// The decompressor to use /// /// /// Size of the buffer to use /// public InflaterInputStream(Stream baseInputStream, Inflater inflater, int bufferSize) { if (baseInputStream == null) { throw new ArgumentNullException("baseInputStream"); } if (inflater == null) { throw new ArgumentNullException("inflater"); } if (bufferSize <= 0) { throw new ArgumentOutOfRangeException("bufferSize"); } this.baseInputStream = baseInputStream; this.inf = inflater; inputBuffer = new InflaterInputBuffer(baseInputStream, bufferSize); } #endregion /// /// Get/set flag indicating ownership of underlying stream. /// When the flag is true will close the underlying stream also. /// /// /// The default value is true. /// public bool IsStreamOwner { get { return isStreamOwner; } set { isStreamOwner = value; } } /// /// Skip specified number of bytes of uncompressed data /// /// /// Number of bytes to skip /// /// /// The number of bytes skipped, zero if the end of /// stream has been reached /// /// /// The number of bytes to skip is less than or equal to zero. /// public long Skip(long count) { if (count <= 0) { throw new ArgumentOutOfRangeException("count"); } // v0.80 Skip by seeking if underlying stream supports it... if (baseInputStream.CanSeek) { baseInputStream.Seek(count, SeekOrigin.Current); return count; } else { int length = 2048; if (count < length) { length = (int) count; } byte[] tmp = new byte[length]; int readCount = 1; long toSkip = count; while ((toSkip > 0) && (readCount > 0) ) { if (toSkip < length) { length = (int)toSkip; } readCount = baseInputStream.Read(tmp, 0, length); toSkip -= readCount; } return count - toSkip; } } /// /// Clear any cryptographic state. /// protected void StopDecrypting() { #if !NETCF_1_0 inputBuffer.CryptoTransform = null; #endif } /// /// Returns 0 once the end of the stream (EOF) has been reached. /// Otherwise returns 1. /// public virtual int Available { get { return inf.IsFinished ? 0 : 1; } } /// /// Fills the buffer with more data to decompress. /// /// /// Stream ends early /// protected void Fill() { // Protect against redundant calls if (inputBuffer.Available <= 0) { inputBuffer.Fill(); if (inputBuffer.Available <= 0) { throw new SharpZipBaseException("Unexpected EOF"); } } inputBuffer.SetInflaterInput(inf); } #region Stream Overrides /// /// Gets a value indicating whether the current stream supports reading /// public override bool CanRead { get { return baseInputStream.CanRead; } } /// /// Gets a value of false indicating seeking is not supported for this stream. /// public override bool CanSeek { get { return false; } } /// /// Gets a value of false indicating that this stream is not writeable. /// public override bool CanWrite { get { return false; } } /// /// A value representing the length of the stream in bytes. /// public override long Length { get { return inputBuffer.RawLength; } } /// /// The current position within the stream. /// Throws a NotSupportedException when attempting to set the position /// /// Attempting to set the position public override long Position { get { return baseInputStream.Position; } set { throw new NotSupportedException("InflaterInputStream Position not supported"); } } /// /// Flushes the baseInputStream /// public override void Flush() { baseInputStream.Flush(); } /// /// Sets the position within the current stream /// Always throws a NotSupportedException /// /// The relative offset to seek to. /// The defining where to seek from. /// The new position in the stream. /// Any access public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException("Seek not supported"); } /// /// Set the length of the current stream /// Always throws a NotSupportedException /// /// The new length value for the stream. /// Any access public override void SetLength(long value) { throw new NotSupportedException("InflaterInputStream SetLength not supported"); } /// /// Writes a sequence of bytes to stream and advances the current position /// This method always throws a NotSupportedException /// /// Thew buffer containing data to write. /// The offset of the first byte to write. /// The number of bytes to write. /// Any access public override void Write(byte[] buffer, int offset, int count) { throw new NotSupportedException("InflaterInputStream Write not supported"); } /// /// Writes one byte to the current stream and advances the current position /// Always throws a NotSupportedException /// /// The byte to write. /// Any access public override void WriteByte(byte value) { throw new NotSupportedException("InflaterInputStream WriteByte not supported"); } /// /// Entry point to begin an asynchronous write. Always throws a NotSupportedException. /// /// The buffer to write data from /// Offset of first byte to write /// The maximum number of bytes to write /// The method to be called when the asynchronous write operation is completed /// A user-provided object that distinguishes this particular asynchronous write request from other requests /// An IAsyncResult that references the asynchronous write /// Any access public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { throw new NotSupportedException("InflaterInputStream BeginWrite not supported"); } /// /// Closes the input stream. When /// is true the underlying stream is also closed. /// public override void Close() { if ( !isClosed ) { isClosed = true; if ( isStreamOwner ) { baseInputStream.Close(); } } } /// /// Reads decompressed data into the provided buffer byte array /// /// /// The array to read and decompress data into /// /// /// The offset indicating where the data should be placed /// /// /// The number of bytes to decompress /// /// The number of bytes read. Zero signals the end of stream /// /// Inflater needs a dictionary /// public override int Read(byte[] buffer, int offset, int count) { if (inf.IsNeedingDictionary) { throw new SharpZipBaseException("Need a dictionary"); } int remainingBytes = count; while (true) { int bytesRead = inf.Inflate(buffer, offset, remainingBytes); offset += bytesRead; remainingBytes -= bytesRead; if (remainingBytes == 0 || inf.IsFinished) { break; } if ( inf.IsNeedingInput ) { Fill(); } else if ( bytesRead == 0 ) { throw new ZipException("Dont know what to do"); } } return count - remainingBytes; } #endregion #region Instance Fields /// /// Decompressor for this stream /// protected Inflater inf; /// /// Input buffer for this stream. /// protected InflaterInputBuffer inputBuffer; /// /// Base stream the inflater reads from. /// private Stream baseInputStream; /// /// The compressed size /// protected long csize; /// /// Flag indicating wether this instance has been closed or not. /// bool isClosed; /// /// Flag indicating wether this instance is designated the stream owner. /// When closing if this flag is true the underlying stream is closed. /// bool isStreamOwner = true; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Streams/OutputWindow.cs000066400000000000000000000163051446222606700322230ustar00rootroot00000000000000// OutputWindow.cs // // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams { /// /// Contains the output from the Inflation process. /// We need to have a window so that we can refer backwards into the output stream /// to repeat stuff.
/// Author of the original java version : John Leuner ///
public class OutputWindow { #region Constants const int WindowSize = 1 << 15; const int WindowMask = WindowSize - 1; #endregion #region Instance Fields byte[] window = new byte[WindowSize]; //The window is 2^15 bytes int windowEnd; int windowFilled; #endregion /// /// Write a byte to this output window /// /// value to write /// /// if window is full /// public void Write(int value) { if (windowFilled++ == WindowSize) { throw new InvalidOperationException("Window full"); } window[windowEnd++] = (byte) value; windowEnd &= WindowMask; } private void SlowRepeat(int repStart, int length, int distance) { while (length-- > 0) { window[windowEnd++] = window[repStart++]; windowEnd &= WindowMask; repStart &= WindowMask; } } /// /// Append a byte pattern already in the window itself /// /// length of pattern to copy /// distance from end of window pattern occurs /// /// If the repeated data overflows the window /// public void Repeat(int length, int distance) { if ((windowFilled += length) > WindowSize) { throw new InvalidOperationException("Window full"); } int repStart = (windowEnd - distance) & WindowMask; int border = WindowSize - length; if ( (repStart <= border) && (windowEnd < border) ) { if (length <= distance) { System.Array.Copy(window, repStart, window, windowEnd, length); windowEnd += length; } else { // We have to copy manually, since the repeat pattern overlaps. while (length-- > 0) { window[windowEnd++] = window[repStart++]; } } } else { SlowRepeat(repStart, length, distance); } } /// /// Copy from input manipulator to internal window /// /// source of data /// length of data to copy /// the number of bytes copied public int CopyStored(StreamManipulator input, int length) { length = Math.Min(Math.Min(length, WindowSize - windowFilled), input.AvailableBytes); int copied; int tailLen = WindowSize - windowEnd; if (length > tailLen) { copied = input.CopyBytes(window, windowEnd, tailLen); if (copied == tailLen) { copied += input.CopyBytes(window, 0, length - tailLen); } } else { copied = input.CopyBytes(window, windowEnd, length); } windowEnd = (windowEnd + copied) & WindowMask; windowFilled += copied; return copied; } /// /// Copy dictionary to window /// /// source dictionary /// offset of start in source dictionary /// length of dictionary /// /// If window isnt empty /// public void CopyDict(byte[] dictionary, int offset, int length) { if ( dictionary == null ) { throw new ArgumentNullException("dictionary"); } if (windowFilled > 0) { throw new InvalidOperationException(); } if (length > WindowSize) { offset += length - WindowSize; length = WindowSize; } System.Array.Copy(dictionary, offset, window, 0, length); windowEnd = length & WindowMask; } /// /// Get remaining unfilled space in window /// /// Number of bytes left in window public int GetFreeSpace() { return WindowSize - windowFilled; } /// /// Get bytes available for output in window /// /// Number of bytes filled public int GetAvailable() { return windowFilled; } /// /// Copy contents of window to output /// /// buffer to copy to /// offset to start at /// number of bytes to count /// The number of bytes copied /// /// If a window underflow occurs /// public int CopyOutput(byte[] output, int offset, int len) { int copyEnd = windowEnd; if (len > windowFilled) { len = windowFilled; } else { copyEnd = (windowEnd - windowFilled + len) & WindowMask; } int copied = len; int tailLen = len - copyEnd; if (tailLen > 0) { System.Array.Copy(window, WindowSize - tailLen, output, offset, tailLen); offset += tailLen; len = copyEnd; } System.Array.Copy(window, copyEnd - len, output, offset, len); windowFilled -= copied; if (windowFilled < 0) { throw new InvalidOperationException(); } return copied; } /// /// Reset by clearing window so GetAvailable returns 0 /// public void Reset() { windowFilled = windowEnd = 0; } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/Compression/Streams/StreamManipulator.cs000066400000000000000000000215501446222606700332000ustar00rootroot00000000000000// StreamManipulator.cs // // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams { /// /// This class allows us to retrieve a specified number of bits from /// the input buffer, as well as copy big byte blocks. /// /// It uses an int buffer to store up to 31 bits for direct /// manipulation. This guarantees that we can get at least 16 bits, /// but we only need at most 15, so this is all safe. /// /// There are some optimizations in this class, for example, you must /// never peek more than 8 bits more than needed, and you must first /// peek bits before you may drop them. This is not a general purpose /// class but optimized for the behaviour of the Inflater. /// /// authors of the original java version : John Leuner, Jochen Hoenicke /// public class StreamManipulator { #region Constructors /// /// Constructs a default StreamManipulator with all buffers empty /// public StreamManipulator() { } #endregion /// /// Get the next sequence of bits but don't increase input pointer. bitCount must be /// less or equal 16 and if this call succeeds, you must drop /// at least n - 8 bits in the next call. /// /// The number of bits to peek. /// /// the value of the bits, or -1 if not enough bits available. */ /// public int PeekBits(int bitCount) { if (bitsInBuffer_ < bitCount) { if (windowStart_ == windowEnd_) { return -1; // ok } buffer_ |= (uint)((window_[windowStart_++] & 0xff | (window_[windowStart_++] & 0xff) << 8) << bitsInBuffer_); bitsInBuffer_ += 16; } return (int)(buffer_ & ((1 << bitCount) - 1)); } /// /// Drops the next n bits from the input. You should have called PeekBits /// with a bigger or equal n before, to make sure that enough bits are in /// the bit buffer. /// /// The number of bits to drop. public void DropBits(int bitCount) { buffer_ >>= bitCount; bitsInBuffer_ -= bitCount; } /// /// Gets the next n bits and increases input pointer. This is equivalent /// to followed by , except for correct error handling. /// /// The number of bits to retrieve. /// /// the value of the bits, or -1 if not enough bits available. /// public int GetBits(int bitCount) { int bits = PeekBits(bitCount); if (bits >= 0) { DropBits(bitCount); } return bits; } /// /// Gets the number of bits available in the bit buffer. This must be /// only called when a previous PeekBits() returned -1. /// /// /// the number of bits available. /// public int AvailableBits { get { return bitsInBuffer_; } } /// /// Gets the number of bytes available. /// /// /// The number of bytes available. /// public int AvailableBytes { get { return windowEnd_ - windowStart_ + (bitsInBuffer_ >> 3); } } /// /// Skips to the next byte boundary. /// public void SkipToByteBoundary() { buffer_ >>= (bitsInBuffer_ & 7); bitsInBuffer_ &= ~7; } /// /// Returns true when SetInput can be called /// public bool IsNeedingInput { get { return windowStart_ == windowEnd_; } } /// /// Copies bytes from input buffer to output buffer starting /// at output[offset]. You have to make sure, that the buffer is /// byte aligned. If not enough bytes are available, copies fewer /// bytes. /// /// /// The buffer to copy bytes to. /// /// /// The offset in the buffer at which copying starts /// /// /// The length to copy, 0 is allowed. /// /// /// The number of bytes copied, 0 if no bytes were available. /// /// /// Length is less than zero /// /// /// Bit buffer isnt byte aligned /// public int CopyBytes(byte[] output, int offset, int length) { if (length < 0) { throw new ArgumentOutOfRangeException("length"); } if ((bitsInBuffer_ & 7) != 0) { // bits_in_buffer may only be 0 or a multiple of 8 throw new InvalidOperationException("Bit buffer is not byte aligned!"); } int count = 0; while ((bitsInBuffer_ > 0) && (length > 0)) { output[offset++] = (byte) buffer_; buffer_ >>= 8; bitsInBuffer_ -= 8; length--; count++; } if (length == 0) { return count; } int avail = windowEnd_ - windowStart_; if (length > avail) { length = avail; } System.Array.Copy(window_, windowStart_, output, offset, length); windowStart_ += length; if (((windowStart_ - windowEnd_) & 1) != 0) { // We always want an even number of bytes in input, see peekBits buffer_ = (uint)(window_[windowStart_++] & 0xff); bitsInBuffer_ = 8; } return count + length; } /// /// Resets state and empties internal buffers /// public void Reset() { buffer_ = 0; windowStart_ = windowEnd_ = bitsInBuffer_ = 0; } /// /// Add more input for consumption. /// Only call when IsNeedingInput returns true /// /// data to be input /// offset of first byte of input /// number of bytes of input to add. public void SetInput(byte[] buffer, int offset, int count) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } if ( offset < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); #endif } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "Cannot be negative"); #endif } if (windowStart_ < windowEnd_) { throw new InvalidOperationException("Old input was not completely processed"); } int end = offset + count; // We want to throw an ArrayIndexOutOfBoundsException early. // Note the check also handles integer wrap around. if ((offset > end) || (end > buffer.Length) ) { throw new ArgumentOutOfRangeException("count"); } if ((count & 1) != 0) { // We always want an even number of bytes in input, see PeekBits buffer_ |= (uint)((buffer[offset++] & 0xff) << bitsInBuffer_); bitsInBuffer_ += 8; } window_ = buffer; windowStart_ = offset; windowEnd_ = end; } #region Instance Fields private byte[] window_; private int windowStart_; private int windowEnd_; private uint buffer_; private int bitsInBuffer_; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/FastZip.cs000066400000000000000000000570241446222606700251770ustar00rootroot00000000000000// FastZip.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; using ICSharpCode.SharpZipLib.Core; namespace ICSharpCode.SharpZipLib.Zip { /// /// FastZipEvents supports all events applicable to FastZip operations. /// public class FastZipEvents { /// /// Delegate to invoke when processing directories. /// public ProcessDirectoryHandler ProcessDirectory; /// /// Delegate to invoke when processing files. /// public ProcessFileHandler ProcessFile; /// /// Delegate to invoke during processing of files. /// public ProgressHandler Progress; /// /// Delegate to invoke when processing for a file has been completed. /// public CompletedFileHandler CompletedFile; /// /// Delegate to invoke when processing directory failures. /// public DirectoryFailureHandler DirectoryFailure; /// /// Delegate to invoke when processing file failures. /// public FileFailureHandler FileFailure; /// /// Raise the directory failure event. /// /// The directory causing the failure. /// The exception for this event. /// A boolean indicating if execution should continue or not. public bool OnDirectoryFailure(string directory, Exception e) { bool result = false; DirectoryFailureHandler handler = DirectoryFailure; if ( handler != null ) { ScanFailureEventArgs args = new ScanFailureEventArgs(directory, e); handler(this, args); result = args.ContinueRunning; } return result; } /// /// Fires the file failure handler delegate. /// /// The file causing the failure. /// The exception for this failure. /// A boolean indicating if execution should continue or not. public bool OnFileFailure(string file, Exception e) { FileFailureHandler handler = FileFailure; bool result = (handler != null); if ( result ) { ScanFailureEventArgs args = new ScanFailureEventArgs(file, e); handler(this, args); result = args.ContinueRunning; } return result; } /// /// Fires the ProcessFile delegate. /// /// The file being processed. /// A boolean indicating if execution should continue or not. public bool OnProcessFile(string file) { bool result = true; ProcessFileHandler handler = ProcessFile; if ( handler != null ) { ScanEventArgs args = new ScanEventArgs(file); handler(this, args); result = args.ContinueRunning; } return result; } /// /// Fires the delegate /// /// The file whose processing has been completed. /// A boolean indicating if execution should continue or not. public bool OnCompletedFile(string file) { bool result = true; CompletedFileHandler handler = CompletedFile; if ( handler != null ) { ScanEventArgs args = new ScanEventArgs(file); handler(this, args); result = args.ContinueRunning; } return result; } /// /// Fires the process directory delegate. /// /// The directory being processed. /// Flag indicating if the directory has matching files as determined by the current filter. /// A of true if the operation should continue; false otherwise. public bool OnProcessDirectory(string directory, bool hasMatchingFiles) { bool result = true; ProcessDirectoryHandler handler = ProcessDirectory; if ( handler != null ) { DirectoryEventArgs args = new DirectoryEventArgs(directory, hasMatchingFiles); handler(this, args); result = args.ContinueRunning; } return result; } /// /// The minimum timespan between events. /// /// The minimum period of time between events. /// /// The default interval is three seconds. public TimeSpan ProgressInterval { get { return progressInterval_; } set { progressInterval_ = value; } } #region Instance Fields TimeSpan progressInterval_ = TimeSpan.FromSeconds(3); #endregion } /// /// FastZip provides facilities for creating and extracting zip files. /// public class FastZip { #region Enumerations /// /// Defines the desired handling when overwriting files during extraction. /// public enum Overwrite { /// /// Prompt the user to confirm overwriting /// Prompt, /// /// Never overwrite files. /// Never, /// /// Always overwrite files. /// Always } #endregion #region Constructors /// /// Initialise a default instance of . /// public FastZip() { } /// /// Initialise a new instance of /// /// The events to use during operations. public FastZip(FastZipEvents events) { events_ = events; } #endregion #region Properties /// /// Get/set a value indicating wether empty directories should be created. /// public bool CreateEmptyDirectories { get { return createEmptyDirectories_; } set { createEmptyDirectories_ = value; } } #if !NETCF_1_0 /// /// Get / set the password value. /// public string Password { get { return password_; } set { password_ = value; } } #endif /// /// Get or set the active when creating Zip files. /// /// public INameTransform NameTransform { get { return entryFactory_.NameTransform; } set { entryFactory_.NameTransform = value; } } /// /// Get or set the active when creating Zip files. /// public IEntryFactory EntryFactory { get { return entryFactory_; } set { if ( value == null ) { entryFactory_ = new ZipEntryFactory(); } else { entryFactory_ = value; } } } /// /// Gets or sets the setting for Zip64 handling when writing. /// /// /// The default value is dynamic which is not backwards compatible with old /// programs and can cause problems with XP's built in compression which cant /// read Zip64 archives. However it does avoid the situation were a large file /// is added and cannot be completed correctly. /// NOTE: Setting the size for entries before they are added is the best solution! /// By default the EntryFactory used by FastZip will set fhe file size. /// public UseZip64 UseZip64 { get { return useZip64_; } set { useZip64_ = value; } } /// /// Get/set a value indicating wether file dates and times should /// be restored when extracting files from an archive. /// /// The default value is false. public bool RestoreDateTimeOnExtract { get { return restoreDateTimeOnExtract_; } set { restoreDateTimeOnExtract_ = value; } } /// /// Get/set a value indicating wether file attributes should /// be restored during extract operations /// public bool RestoreAttributesOnExtract { get { return restoreAttributesOnExtract_; } set { restoreAttributesOnExtract_ = value; } } #endregion #region Delegates /// /// Delegate called when confirming overwriting of files. /// public delegate bool ConfirmOverwriteDelegate(string fileName); #endregion #region CreateZip /// /// Create a zip file. /// /// The name of the zip file to create. /// The directory to source files from. /// True to recurse directories, false for no recursion. /// The file filter to apply. /// The directory filter to apply. public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter) { CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, directoryFilter); } /// /// Create a zip file/archive. /// /// The name of the zip file to create. /// The directory to obtain files and directories from. /// True to recurse directories, false for no recursion. /// The file filter to apply. public void CreateZip(string zipFileName, string sourceDirectory, bool recurse, string fileFilter) { CreateZip(File.Create(zipFileName), sourceDirectory, recurse, fileFilter, null); } /// /// Create a zip archive sending output to the passed. /// /// The stream to write archive data to. /// The directory to source files from. /// True to recurse directories, false for no recursion. /// The file filter to apply. /// The directory filter to apply. /// The is closed after creation. public void CreateZip(Stream outputStream, string sourceDirectory, bool recurse, string fileFilter, string directoryFilter) { NameTransform = new ZipNameTransform(sourceDirectory); sourceDirectory_ = sourceDirectory; using ( outputStream_ = new ZipOutputStream(outputStream) ) { #if !NETCF_1_0 if ( password_ != null ) { outputStream_.Password = password_; } #endif outputStream_.UseZip64 = UseZip64; FileSystemScanner scanner = new FileSystemScanner(fileFilter, directoryFilter); scanner.ProcessFile += new ProcessFileHandler(ProcessFile); if ( this.CreateEmptyDirectories ) { scanner.ProcessDirectory += new ProcessDirectoryHandler(ProcessDirectory); } if (events_ != null) { if ( events_.FileFailure != null ) { scanner.FileFailure += events_.FileFailure; } if ( events_.DirectoryFailure != null ) { scanner.DirectoryFailure += events_.DirectoryFailure; } } scanner.Scan(sourceDirectory, recurse); } } #endregion #region ExtractZip /// /// Extract the contents of a zip file. /// /// The zip file to extract from. /// The directory to save extracted information in. /// A filter to apply to files. public void ExtractZip(string zipFileName, string targetDirectory, string fileFilter) { ExtractZip(zipFileName, targetDirectory, Overwrite.Always, null, fileFilter, null, restoreDateTimeOnExtract_); } /// /// Extract the contents of a zip file. /// /// The zip file to extract from. /// The directory to save extracted information in. /// The style of overwriting to apply. /// A delegate to invoke when confirming overwriting. /// A filter to apply to files. /// A filter to apply to directories. /// Flag indicating whether to restore the date and time for extracted files. public void ExtractZip(string zipFileName, string targetDirectory, Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime) { Stream inputStream = File.Open(zipFileName, FileMode.Open, FileAccess.Read, FileShare.Read); ExtractZip(inputStream, targetDirectory, overwrite, confirmDelegate, fileFilter, directoryFilter, restoreDateTime, true); } /// /// Extract the contents of a zip file held in a stream. /// /// The seekable input stream containing the zip to extract from. /// The directory to save extracted information in. /// The style of overwriting to apply. /// A delegate to invoke when confirming overwriting. /// A filter to apply to files. /// A filter to apply to directories. /// Flag indicating whether to restore the date and time for extracted files. /// Flag indicating whether the inputStream will be closed by this method. public void ExtractZip(Stream inputStream, string targetDirectory, Overwrite overwrite, ConfirmOverwriteDelegate confirmDelegate, string fileFilter, string directoryFilter, bool restoreDateTime, bool isStreamOwner) { if ((overwrite == Overwrite.Prompt) && (confirmDelegate == null)) { throw new ArgumentNullException("confirmDelegate"); } continueRunning_ = true; overwrite_ = overwrite; confirmDelegate_ = confirmDelegate; extractNameTransform_ = new WindowsNameTransform(targetDirectory); fileFilter_ = new NameFilter(fileFilter); directoryFilter_ = new NameFilter(directoryFilter); restoreDateTimeOnExtract_ = restoreDateTime; using (zipFile_ = new ZipFile(inputStream)) { #if !NETCF_1_0 if (password_ != null) { zipFile_.Password = password_; } #endif zipFile_.IsStreamOwner = isStreamOwner; System.Collections.IEnumerator enumerator = zipFile_.GetEnumerator(); while (continueRunning_ && enumerator.MoveNext()) { ZipEntry entry = (ZipEntry)enumerator.Current; if (entry.IsFile) { // TODO Path.GetDirectory can fail here on invalid characters. if (directoryFilter_.IsMatch(Path.GetDirectoryName(entry.Name)) && fileFilter_.IsMatch(entry.Name)) { ExtractEntry(entry); } } else if (entry.IsDirectory) { if (directoryFilter_.IsMatch(entry.Name) && CreateEmptyDirectories) { ExtractEntry(entry); } } else { // Do nothing for volume labels etc... } } } } #endregion #region Internal Processing void ProcessDirectory(object sender, DirectoryEventArgs e) { if ( !e.HasMatchingFiles && CreateEmptyDirectories ) { if ( events_ != null ) { events_.OnProcessDirectory(e.Name, e.HasMatchingFiles); } if ( e.ContinueRunning ) { if (e.Name != sourceDirectory_) { ZipEntry entry = entryFactory_.MakeDirectoryEntry(e.Name); outputStream_.PutNextEntry(entry); } } } } void ProcessFile(object sender, ScanEventArgs e) { if ( (events_ != null) && (events_.ProcessFile != null) ) { events_.ProcessFile(sender, e); } if ( e.ContinueRunning ) { try { // The open below is equivalent to OpenRead which gaurantees that if opened the // file will not be changed by subsequent openers, but precludes opening in some cases // were it could succeed. ie the open may fail as its already open for writing and the share mode should reflect that. using (FileStream stream = File.Open(e.Name, FileMode.Open, FileAccess.Read, FileShare.Read)) { ZipEntry entry = entryFactory_.MakeFileEntry(e.Name); outputStream_.PutNextEntry(entry); AddFileContents(e.Name, stream); } } catch(Exception ex) { if (events_ != null) { continueRunning_ = events_.OnFileFailure(e.Name, ex); } else { continueRunning_ = false; throw; } } } } void AddFileContents(string name, Stream stream) { if( stream==null ) { throw new ArgumentNullException("stream"); } if( buffer_==null ) { buffer_=new byte[4096]; } if( (events_!=null)&&(events_.Progress!=null) ) { StreamUtils.Copy(stream, outputStream_, buffer_, events_.Progress, events_.ProgressInterval, this, name); } else { StreamUtils.Copy(stream, outputStream_, buffer_); } if( events_!=null ) { continueRunning_=events_.OnCompletedFile(name); } } void ExtractFileEntry(ZipEntry entry, string targetName) { bool proceed = true; if ( overwrite_ != Overwrite.Always ) { if ( File.Exists(targetName) ) { if ( (overwrite_ == Overwrite.Prompt) && (confirmDelegate_ != null) ) { proceed = confirmDelegate_(targetName); } else { proceed = false; } } } if ( proceed ) { if ( events_ != null ) { continueRunning_ = events_.OnProcessFile(entry.Name); } if ( continueRunning_ ) { try { using ( FileStream outputStream = File.Create(targetName) ) { if ( buffer_ == null ) { buffer_ = new byte[4096]; } if ((events_ != null) && (events_.Progress != null)) { StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_, events_.Progress, events_.ProgressInterval, this, entry.Name, entry.Size); } else { StreamUtils.Copy(zipFile_.GetInputStream(entry), outputStream, buffer_); } if (events_ != null) { continueRunning_ = events_.OnCompletedFile(entry.Name); } } #if !NETCF_1_0 && !NETCF_2_0 if ( restoreDateTimeOnExtract_ ) { File.SetLastWriteTime(targetName, entry.DateTime); } if ( RestoreAttributesOnExtract && entry.IsDOSEntry && (entry.ExternalFileAttributes != -1)) { FileAttributes fileAttributes = (FileAttributes) entry.ExternalFileAttributes; // TODO: FastZip - Setting of other file attributes on extraction is a little trickier. fileAttributes &= (FileAttributes.Archive | FileAttributes.Normal | FileAttributes.ReadOnly | FileAttributes.Hidden); File.SetAttributes(targetName, fileAttributes); } #endif } catch(Exception ex) { if ( events_ != null ) { continueRunning_ = events_.OnFileFailure(targetName, ex); } else { continueRunning_ = false; throw; } } } } } void ExtractEntry(ZipEntry entry) { bool doExtraction = entry.IsCompressionMethodSupported(); string targetName = entry.Name; if ( doExtraction ) { if ( entry.IsFile ) { targetName = extractNameTransform_.TransformFile(targetName); } else if ( entry.IsDirectory ) { targetName = extractNameTransform_.TransformDirectory(targetName); } doExtraction = !((targetName == null) || (targetName.Length == 0)); } // TODO: Fire delegate/throw exception were compression method not supported, or name is invalid? string dirName = null; if ( doExtraction ) { if ( entry.IsDirectory ) { dirName = targetName; } else { dirName = Path.GetDirectoryName(Path.GetFullPath(targetName)); } } if ( doExtraction && !Directory.Exists(dirName) ) { if ( !entry.IsDirectory || CreateEmptyDirectories ) { try { Directory.CreateDirectory(dirName); } catch (Exception ex) { doExtraction = false; if ( events_ != null ) { if ( entry.IsDirectory ) { continueRunning_ = events_.OnDirectoryFailure(targetName, ex); } else { continueRunning_ = events_.OnFileFailure(targetName, ex); } } else { continueRunning_ = false; throw; } } } } if ( doExtraction && entry.IsFile ) { ExtractFileEntry(entry, targetName); } } static int MakeExternalAttributes(FileInfo info) { return (int)info.Attributes; } #if NET_1_0 || NET_1_1 || NETCF_1_0 static bool NameIsValid(string name) { return (name != null) && (name.Length > 0) && (name.IndexOfAny(Path.InvalidPathChars) < 0); } #else static bool NameIsValid(string name) { return (name != null) && (name.Length > 0) && (name.IndexOfAny(Path.GetInvalidPathChars()) < 0); } #endif #endregion #region Instance Fields bool continueRunning_; byte[] buffer_; ZipOutputStream outputStream_; ZipFile zipFile_; string sourceDirectory_; NameFilter fileFilter_; NameFilter directoryFilter_; Overwrite overwrite_; ConfirmOverwriteDelegate confirmDelegate_; bool restoreDateTimeOnExtract_; bool restoreAttributesOnExtract_; bool createEmptyDirectories_; FastZipEvents events_; IEntryFactory entryFactory_ = new ZipEntryFactory(); INameTransform extractNameTransform_; UseZip64 useZip64_=UseZip64.Dynamic; #if !NETCF_1_0 string password_; #endif #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/IEntryFactory.cs000066400000000000000000000110221446222606700263450ustar00rootroot00000000000000// IEntryFactory.cs // // Copyright 2006 John Reilly // // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 2012-11-29 Z-1684 Added MakeFileEntry(string fileName, string entryName, bool useFileSystem) using ICSharpCode.SharpZipLib.Core; namespace ICSharpCode.SharpZipLib.Zip { /// /// Defines factory methods for creating new values. /// public interface IEntryFactory { /// /// Create a for a file given its name /// /// The name of the file to create an entry for. /// Returns a file entry based on the passed. ZipEntry MakeFileEntry(string fileName); /// /// Create a for a file given its name /// /// The name of the file to create an entry for. /// If true get details from the file system if the file exists. /// Returns a file entry based on the passed. ZipEntry MakeFileEntry(string fileName, bool useFileSystem); /// /// Create a for a file given its actual name and optional override name /// /// The name of the file to create an entry for. /// An alternative name to be used for the new entry. Null if not applicable. /// If true get details from the file system if the file exists. /// Returns a file entry based on the passed. ZipEntry MakeFileEntry(string fileName, string entryName, bool useFileSystem); /// /// Create a for a directory given its name /// /// The name of the directory to create an entry for. /// Returns a directory entry based on the passed. ZipEntry MakeDirectoryEntry(string directoryName); /// /// Create a for a directory given its name /// /// The name of the directory to create an entry for. /// If true get details from the file system for this directory if it exists. /// Returns a directory entry based on the passed. ZipEntry MakeDirectoryEntry(string directoryName, bool useFileSystem); /// /// Get/set the applicable. /// INameTransform NameTransform { get; set; } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/WindowsNameTransform.cs000066400000000000000000000203741446222606700277440ustar00rootroot00000000000000// WindowsNameTransform.cs // // Copyright 2007 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Core; namespace ICSharpCode.SharpZipLib.Zip { /// /// WindowsNameTransform transforms names to windows compatible ones. /// public class WindowsNameTransform : INameTransform { /// /// Initialises a new instance of /// /// public WindowsNameTransform(string baseDirectory) { if ( baseDirectory == null ) { throw new ArgumentNullException("baseDirectory", "Directory name is invalid"); } BaseDirectory = baseDirectory; } /// /// Initialise a default instance of /// public WindowsNameTransform() { // Do nothing. } /// /// Gets or sets a value containing the target directory to prefix values with. /// public string BaseDirectory { get { return _baseDirectory; } set { if ( value == null ) { throw new ArgumentNullException("value"); } _baseDirectory = Path.GetFullPath(value); } } /// /// Gets or sets a value indicating wether paths on incoming values should be removed. /// public bool TrimIncomingPaths { get { return _trimIncomingPaths; } set { _trimIncomingPaths = value; } } /// /// Transform a Zip directory name to a windows directory name. /// /// The directory name to transform. /// The transformed name. public string TransformDirectory(string name) { name = TransformFile(name); if (name.Length > 0) { while ( name.EndsWith(Path.DirectorySeparatorChar.ToString()) ) { name = name.Remove(name.Length - 1, 1); } } else { throw new ZipException("Cannot have an empty directory name"); } return name; } /// /// Transform a Zip format file name to a windows style one. /// /// The file name to transform. /// The transformed name. public string TransformFile(string name) { if (name != null) { name = MakeValidName(name, _replacementChar); if ( _trimIncomingPaths ) { name = Path.GetFileName(name); } // This may exceed windows length restrictions. // Combine will throw a PathTooLongException in that case. if ( _baseDirectory != null ) { name = Path.Combine(_baseDirectory, name); } } else { name = string.Empty; } return name; } /// /// Test a name to see if it is a valid name for a windows filename as extracted from a Zip archive. /// /// The name to test. /// Returns true if the name is a valid zip name; false otherwise. /// The filename isnt a true windows path in some fundamental ways like no absolute paths, no rooted paths etc. public static bool IsValidName(string name) { bool result = (name != null) && (name.Length <= MaxPath) && (string.Compare(name, MakeValidName(name, '_')) == 0) ; return result; } /// /// Initialise static class information. /// static WindowsNameTransform() { char[] invalidPathChars; #if NET_1_0 || NET_1_1 || NETCF_1_0 invalidPathChars = Path.InvalidPathChars; #else invalidPathChars = Path.GetInvalidPathChars(); #endif int howMany = invalidPathChars.Length + 3; InvalidEntryChars = new char[howMany]; Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length); InvalidEntryChars[howMany - 1] = '*'; InvalidEntryChars[howMany - 2] = '?'; InvalidEntryChars[howMany - 3] = ':'; } /// /// Force a name to be valid by replacing invalid characters with a fixed value /// /// The name to make valid /// The replacement character to use for any invalid characters. /// Returns a valid name public static string MakeValidName(string name, char replacement) { if ( name == null ) { throw new ArgumentNullException("name"); } name = WindowsPathUtils.DropPathRoot(name.Replace("/", Path.DirectorySeparatorChar.ToString())); // Drop any leading slashes. while ( (name.Length > 0) && (name[0] == Path.DirectorySeparatorChar)) { name = name.Remove(0, 1); } // Drop any trailing slashes. while ( (name.Length > 0) && (name[name.Length - 1] == Path.DirectorySeparatorChar)) { name = name.Remove(name.Length - 1, 1); } // Convert consecutive \\ characters to \ int index = name.IndexOf(string.Format("{0}{0}", Path.DirectorySeparatorChar)); while (index >= 0) { name = name.Remove(index, 1); index = name.IndexOf(Path.DirectorySeparatorChar); } // Convert any invalid characters using the replacement one. index = name.IndexOfAny(InvalidEntryChars); if (index >= 0) { StringBuilder builder = new StringBuilder(name); while (index >= 0 ) { builder[index] = replacement; if (index >= name.Length) { index = -1; } else { index = name.IndexOfAny(InvalidEntryChars, index + 1); } } name = builder.ToString(); } // Check for names greater than MaxPath characters. // TODO: Were is CLR version of MaxPath defined? Can't find it in Environment. if ( name.Length > MaxPath ) { throw new PathTooLongException(); } return name; } /// /// Gets or set the character to replace invalid characters during transformations. /// public char Replacement { get { return _replacementChar; } set { for ( int i = 0; i < InvalidEntryChars.Length; ++i ) { if ( InvalidEntryChars[i] == value ) { throw new ArgumentException("invalid path character"); } } if ((value == Path.DirectorySeparatorChar) || (value == Path.AltDirectorySeparatorChar)) { throw new ArgumentException("invalid replacement character"); } _replacementChar = value; } } /// /// The maximum windows path name permitted. /// /// This may not valid for all windows systems - CE?, etc but I cant find the equivalent in the CLR. const int MaxPath = 260; #region Instance Fields string _baseDirectory; bool _trimIncomingPaths; char _replacementChar = '_'; #endregion #region Class Fields static readonly char[] InvalidEntryChars; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipConstants.cs000066400000000000000000000502361446222606700262540ustar00rootroot00000000000000// ZipConstants.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 22-12-2009 DavidPierson Added AES support using System; using System.Text; using System.Threading; #if NETCF_1_0 || NETCF_2_0 using System.Globalization; #endif namespace ICSharpCode.SharpZipLib.Zip { #region Enumerations /// /// Determines how entries are tested to see if they should use Zip64 extensions or not. /// public enum UseZip64 { /// /// Zip64 will not be forced on entries during processing. /// /// An entry can have this overridden if required Off, /// /// Zip64 should always be used. /// On, /// /// #ZipLib will determine use based on entry values when added to archive. /// Dynamic, } /// /// The kind of compression used for an entry in an archive /// public enum CompressionMethod { /// /// A direct copy of the file contents is held in the archive /// Stored = 0, /// /// Common Zip compression method using a sliding dictionary /// of up to 32KB and secondary compression from Huffman/Shannon-Fano trees /// Deflated = 8, /// /// An extension to deflate with a 64KB window. Not supported by #Zip currently /// Deflate64 = 9, /// /// BZip2 compression. Not supported by #Zip. /// BZip2 = 11, /// /// WinZip special for AES encryption, Now supported by #Zip. /// WinZipAES = 99, } /// /// Identifies the encryption algorithm used for an entry /// public enum EncryptionAlgorithm { /// /// No encryption has been used. /// None = 0, /// /// Encrypted using PKZIP 2.0 or 'classic' encryption. /// PkzipClassic = 1, /// /// DES encryption has been used. /// Des = 0x6601, /// /// RC2 encryption has been used for encryption. /// RC2 = 0x6602, /// /// Triple DES encryption with 168 bit keys has been used for this entry. /// TripleDes168 = 0x6603, /// /// Triple DES with 112 bit keys has been used for this entry. /// TripleDes112 = 0x6609, /// /// AES 128 has been used for encryption. /// Aes128 = 0x660e, /// /// AES 192 has been used for encryption. /// Aes192 = 0x660f, /// /// AES 256 has been used for encryption. /// Aes256 = 0x6610, /// /// RC2 corrected has been used for encryption. /// RC2Corrected = 0x6702, /// /// Blowfish has been used for encryption. /// Blowfish = 0x6720, /// /// Twofish has been used for encryption. /// Twofish = 0x6721, /// /// RC4 has been used for encryption. /// RC4 = 0x6801, /// /// An unknown algorithm has been used for encryption. /// Unknown = 0xffff } /// /// Defines the contents of the general bit flags field for an archive entry. /// [Flags] public enum GeneralBitFlags : int { /// /// Bit 0 if set indicates that the file is encrypted /// Encrypted = 0x0001, /// /// Bits 1 and 2 - Two bits defining the compression method (only for Method 6 Imploding and 8,9 Deflating) /// Method = 0x0006, /// /// Bit 3 if set indicates a trailing data desciptor is appended to the entry data /// Descriptor = 0x0008, /// /// Bit 4 is reserved for use with method 8 for enhanced deflation /// ReservedPKware4 = 0x0010, /// /// Bit 5 if set indicates the file contains Pkzip compressed patched data. /// Requires version 2.7 or greater. /// Patched = 0x0020, /// /// Bit 6 if set indicates strong encryption has been used for this entry. /// StrongEncryption = 0x0040, /// /// Bit 7 is currently unused /// Unused7 = 0x0080, /// /// Bit 8 is currently unused /// Unused8 = 0x0100, /// /// Bit 9 is currently unused /// Unused9 = 0x0200, /// /// Bit 10 is currently unused /// Unused10 = 0x0400, /// /// Bit 11 if set indicates the filename and /// comment fields for this file must be encoded using UTF-8. /// UnicodeText = 0x0800, /// /// Bit 12 is documented as being reserved by PKware for enhanced compression. /// EnhancedCompress = 0x1000, /// /// Bit 13 if set indicates that values in the local header are masked to hide /// their actual values, and the central directory is encrypted. /// /// /// Used when encrypting the central directory contents. /// HeaderMasked = 0x2000, /// /// Bit 14 is documented as being reserved for use by PKware /// ReservedPkware14 = 0x4000, /// /// Bit 15 is documented as being reserved for use by PKware /// ReservedPkware15 = 0x8000 } #endregion /// /// This class contains constants used for Zip format files /// public sealed class ZipConstants { #region Versions /// /// The version made by field for entries in the central header when created by this library /// /// /// This is also the Zip version for the library when comparing against the version required to extract /// for an entry. See . /// public const int VersionMadeBy = 51; // was 45 before AES /// /// The version made by field for entries in the central header when created by this library /// /// /// This is also the Zip version for the library when comparing against the version required to extract /// for an entry. See ZipInputStream.CanDecompressEntry. /// [Obsolete("Use VersionMadeBy instead")] public const int VERSION_MADE_BY = 51; /// /// The minimum version required to support strong encryption /// public const int VersionStrongEncryption = 50; /// /// The minimum version required to support strong encryption /// [Obsolete("Use VersionStrongEncryption instead")] public const int VERSION_STRONG_ENCRYPTION = 50; /// /// Version indicating AES encryption /// public const int VERSION_AES = 51; /// /// The version required for Zip64 extensions (4.5 or higher) /// public const int VersionZip64 = 45; #endregion #region Header Sizes /// /// Size of local entry header (excluding variable length fields at end) /// public const int LocalHeaderBaseSize = 30; /// /// Size of local entry header (excluding variable length fields at end) /// [Obsolete("Use LocalHeaderBaseSize instead")] public const int LOCHDR = 30; /// /// Size of Zip64 data descriptor /// public const int Zip64DataDescriptorSize = 24; /// /// Size of data descriptor /// public const int DataDescriptorSize = 16; /// /// Size of data descriptor /// [Obsolete("Use DataDescriptorSize instead")] public const int EXTHDR = 16; /// /// Size of central header entry (excluding variable fields) /// public const int CentralHeaderBaseSize = 46; /// /// Size of central header entry /// [Obsolete("Use CentralHeaderBaseSize instead")] public const int CENHDR = 46; /// /// Size of end of central record (excluding variable fields) /// public const int EndOfCentralRecordBaseSize = 22; /// /// Size of end of central record (excluding variable fields) /// [Obsolete("Use EndOfCentralRecordBaseSize instead")] public const int ENDHDR = 22; /// /// Size of 'classic' cryptographic header stored before any entry data /// public const int CryptoHeaderSize = 12; /// /// Size of cryptographic header stored before entry data /// [Obsolete("Use CryptoHeaderSize instead")] public const int CRYPTO_HEADER_SIZE = 12; #endregion #region Header Signatures /// /// Signature for local entry header /// public const int LocalHeaderSignature = 'P' | ('K' << 8) | (3 << 16) | (4 << 24); /// /// Signature for local entry header /// [Obsolete("Use LocalHeaderSignature instead")] public const int LOCSIG = 'P' | ('K' << 8) | (3 << 16) | (4 << 24); /// /// Signature for spanning entry /// public const int SpanningSignature = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); /// /// Signature for spanning entry /// [Obsolete("Use SpanningSignature instead")] public const int SPANNINGSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); /// /// Signature for temporary spanning entry /// public const int SpanningTempSignature = 'P' | ('K' << 8) | ('0' << 16) | ('0' << 24); /// /// Signature for temporary spanning entry /// [Obsolete("Use SpanningTempSignature instead")] public const int SPANTEMPSIG = 'P' | ('K' << 8) | ('0' << 16) | ('0' << 24); /// /// Signature for data descriptor /// /// /// This is only used where the length, Crc, or compressed size isnt known when the /// entry is created and the output stream doesnt support seeking. /// The local entry cannot be 'patched' with the correct values in this case /// so the values are recorded after the data prefixed by this header, as well as in the central directory. /// public const int DataDescriptorSignature = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); /// /// Signature for data descriptor /// /// /// This is only used where the length, Crc, or compressed size isnt known when the /// entry is created and the output stream doesnt support seeking. /// The local entry cannot be 'patched' with the correct values in this case /// so the values are recorded after the data prefixed by this header, as well as in the central directory. /// [Obsolete("Use DataDescriptorSignature instead")] public const int EXTSIG = 'P' | ('K' << 8) | (7 << 16) | (8 << 24); /// /// Signature for central header /// [Obsolete("Use CentralHeaderSignature instead")] public const int CENSIG = 'P' | ('K' << 8) | (1 << 16) | (2 << 24); /// /// Signature for central header /// public const int CentralHeaderSignature = 'P' | ('K' << 8) | (1 << 16) | (2 << 24); /// /// Signature for Zip64 central file header /// public const int Zip64CentralFileHeaderSignature = 'P' | ('K' << 8) | (6 << 16) | (6 << 24); /// /// Signature for Zip64 central file header /// [Obsolete("Use Zip64CentralFileHeaderSignature instead")] public const int CENSIG64 = 'P' | ('K' << 8) | (6 << 16) | (6 << 24); /// /// Signature for Zip64 central directory locator /// public const int Zip64CentralDirLocatorSignature = 'P' | ('K' << 8) | (6 << 16) | (7 << 24); /// /// Signature for archive extra data signature (were headers are encrypted). /// public const int ArchiveExtraDataSignature = 'P' | ('K' << 8) | (6 << 16) | (7 << 24); /// /// Central header digitial signature /// public const int CentralHeaderDigitalSignature = 'P' | ('K' << 8) | (5 << 16) | (5 << 24); /// /// Central header digitial signature /// [Obsolete("Use CentralHeaderDigitalSignaure instead")] public const int CENDIGITALSIG = 'P' | ('K' << 8) | (5 << 16) | (5 << 24); /// /// End of central directory record signature /// public const int EndOfCentralDirectorySignature = 'P' | ('K' << 8) | (5 << 16) | (6 << 24); /// /// End of central directory record signature /// [Obsolete("Use EndOfCentralDirectorySignature instead")] public const int ENDSIG = 'P' | ('K' << 8) | (5 << 16) | (6 << 24); #endregion #if NETCF_1_0 || NETCF_2_0 // This isnt so great but is better than nothing. // Trying to work out an appropriate OEM code page would be good. // 850 is a good default for english speakers particularly in Europe. static int defaultCodePage = CultureInfo.CurrentCulture.TextInfo.ANSICodePage; #else /// /// Get OEM codepage from NetFX, which parses the NLP file with culture info table etc etc. /// But sometimes it yields the special value of 1 which is nicknamed CodePageNoOEM in sources (might also mean CP_OEMCP, but Encoding puts it so). /// This was observed on Ukranian and Hindu systems. /// Given this value, throws an . /// So replace it with some fallback, e.g. 437 which is the default cpcp in a console in a default Windows installation. /// static int defaultCodePage = // these values cause ArgumentException in subsequent calls to Encoding::GetEncoding() ((Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage == 1) || (Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage == 2) || (Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage == 3) || (Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage == 42)) ? 437 // The default OEM encoding in a console in a default Windows installation, as a fallback. : Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage; #endif /// /// Default encoding used for string conversion. 0 gives the default system OEM code page. /// Dont use unicode encodings if you want to be Zip compatible! /// Using the default code page isnt the full solution neccessarily /// there are many variable factors, codepage 850 is often a good choice for /// European users, however be careful about compatability. /// public static int DefaultCodePage { get { return defaultCodePage; } set { if ((value < 0) || (value > 65535) || (value == 1) || (value == 2) || (value == 3) || (value == 42)) { throw new ArgumentOutOfRangeException("value"); } defaultCodePage = value; } } /// /// Convert a portion of a byte array to a string. /// /// /// Data to convert to string /// /// /// Number of bytes to convert starting from index 0 /// /// /// data[0]..data[count - 1] converted to a string /// public static string ConvertToString(byte[] data, int count) { if ( data == null ) { return string.Empty; } return Encoding.GetEncoding(DefaultCodePage).GetString(data, 0, count); } /// /// Convert a byte array to string /// /// /// Byte array to convert /// /// /// dataconverted to a string /// public static string ConvertToString(byte[] data) { if ( data == null ) { return string.Empty; } return ConvertToString(data, data.Length); } /// /// Convert a byte array to string /// /// The applicable general purpose bits flags /// /// Byte array to convert /// /// The number of bytes to convert. /// /// dataconverted to a string /// public static string ConvertToStringExt(int flags, byte[] data, int count) { if ( data == null ) { return string.Empty; } if ( (flags & (int)GeneralBitFlags.UnicodeText) != 0 ) { return Encoding.UTF8.GetString(data, 0, count); } else { return ConvertToString(data, count); } } /// /// Convert a byte array to string /// /// /// Byte array to convert /// /// The applicable general purpose bits flags /// /// dataconverted to a string /// public static string ConvertToStringExt(int flags, byte[] data) { if ( data == null ) { return string.Empty; } if ( (flags & (int)GeneralBitFlags.UnicodeText) != 0 ) { return Encoding.UTF8.GetString(data, 0, data.Length); } else { return ConvertToString(data, data.Length); } } /// /// Convert a string to a byte array /// /// /// String to convert to an array /// /// Converted array public static byte[] ConvertToArray(string str) { if ( str == null ) { return new byte[0]; } return Encoding.GetEncoding(DefaultCodePage).GetBytes(str); } /// /// Convert a string to a byte array /// /// The applicable general purpose bits flags /// /// String to convert to an array /// /// Converted array public static byte[] ConvertToArray(int flags, string str) { if (str == null) { return new byte[0]; } if ((flags & (int)GeneralBitFlags.UnicodeText) != 0) { return Encoding.UTF8.GetBytes(str); } else { return ConvertToArray(str); } } /// /// Initialise default instance of ZipConstants /// /// /// Private to prevent instances being created. /// ZipConstants() { // Do nothing } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipEntry.cs000066400000000000000000001115101446222606700253720ustar00rootroot00000000000000// ZipEntry.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 2009-12-22 Z-1649 Added AES support // 2010-02-02 DavidP Changed NTFS Extra Data min length to 4 // 2012-06-03 Z-1744 Use only the low order byte of "Version Needed to Extract" // 2012-07-18 Z-1676 Translate to forward slashes and remove drive from name in constructor using System; using System.IO; namespace ICSharpCode.SharpZipLib.Zip { /// /// Defines known values for the property. /// public enum HostSystemID { /// /// Host system = MSDOS /// Msdos = 0, /// /// Host system = Amiga /// Amiga = 1, /// /// Host system = Open VMS /// OpenVms = 2, /// /// Host system = Unix /// Unix = 3, /// /// Host system = VMCms /// VMCms = 4, /// /// Host system = Atari ST /// AtariST = 5, /// /// Host system = OS2 /// OS2 = 6, /// /// Host system = Macintosh /// Macintosh = 7, /// /// Host system = ZSystem /// ZSystem = 8, /// /// Host system = Cpm /// Cpm = 9, /// /// Host system = Windows NT /// WindowsNT = 10, /// /// Host system = MVS /// MVS = 11, /// /// Host system = VSE /// Vse = 12, /// /// Host system = Acorn RISC /// AcornRisc = 13, /// /// Host system = VFAT /// Vfat = 14, /// /// Host system = Alternate MVS /// AlternateMvs = 15, /// /// Host system = BEOS /// BeOS = 16, /// /// Host system = Tandem /// Tandem = 17, /// /// Host system = OS400 /// OS400 = 18, /// /// Host system = OSX /// OSX = 19, /// /// Host system = WinZIP AES /// WinZipAES = 99, } /// /// This class represents an entry in a zip archive. This can be a file /// or a directory /// ZipFile and ZipInputStream will give you instances of this class as /// information about the members in an archive. ZipOutputStream /// uses an instance of this class when creating an entry in a Zip file. ///
///
Author of the original java version : Jochen Hoenicke ///
public class ZipEntry : ICloneable { [Flags] enum Known : byte { None = 0, Size = 0x01, CompressedSize = 0x02, Crc = 0x04, Time = 0x08, ExternalAttributes = 0x10, } #region Constructors /// /// Creates a zip entry with the given name. /// /// /// The name for this entry. Can include directory components. /// The convention for names is 'unix' style paths with relative names only. /// There are with no device names and path elements are separated by '/' characters. /// /// /// The name passed is null /// public ZipEntry(string name) : this(name, 0, ZipConstants.VersionMadeBy, CompressionMethod.Deflated) { } /// /// Creates a zip entry with the given name and version required to extract /// /// /// The name for this entry. Can include directory components. /// The convention for names is 'unix' style paths with no device names and /// path elements separated by '/' characters. This is not enforced see CleanName /// on how to ensure names are valid if this is desired. /// /// /// The minimum 'feature version' required this entry /// /// /// The name passed is null /// internal ZipEntry(string name, int versionRequiredToExtract) : this(name, versionRequiredToExtract, ZipConstants.VersionMadeBy, CompressionMethod.Deflated) { } /// /// Initializes an entry with the given name and made by information /// /// Name for this entry /// Version and HostSystem Information /// Minimum required zip feature version required to extract this entry /// Compression method for this entry. /// /// The name passed is null /// /// /// versionRequiredToExtract should be 0 (auto-calculate) or > 10 /// /// /// This constructor is used by the ZipFile class when reading from the central header /// It is not generally useful, use the constructor specifying the name only. /// internal ZipEntry(string name, int versionRequiredToExtract, int madeByInfo, CompressionMethod method) { if (name == null) { throw new ArgumentNullException("name"); } if ( name.Length > 0xffff ) { throw new ArgumentException("Name is too long", "name"); } if ( (versionRequiredToExtract != 0) && (versionRequiredToExtract < 10) ) { throw new ArgumentOutOfRangeException("versionRequiredToExtract"); } this.DateTime = DateTime.Now; this.name = CleanName(name); this.versionMadeBy = (ushort)madeByInfo; this.versionToExtract = (ushort)versionRequiredToExtract; this.method = method; } /// /// Creates a deep copy of the given zip entry. /// /// /// The entry to copy. /// [Obsolete("Use Clone instead")] public ZipEntry(ZipEntry entry) { if ( entry == null ) { throw new ArgumentNullException("entry"); } known = entry.known; name = entry.name; size = entry.size; compressedSize = entry.compressedSize; crc = entry.crc; dosTime = entry.dosTime; method = entry.method; comment = entry.comment; versionToExtract = entry.versionToExtract; versionMadeBy = entry.versionMadeBy; externalFileAttributes = entry.externalFileAttributes; flags = entry.flags; zipFileIndex = entry.zipFileIndex; offset = entry.offset; forceZip64_ = entry.forceZip64_; if ( entry.extra != null ) { extra = new byte[entry.extra.Length]; Array.Copy(entry.extra, 0, extra, 0, entry.extra.Length); } } #endregion /// /// Get a value indicating wether the entry has a CRC value available. /// public bool HasCrc { get { return (known & Known.Crc) != 0; } } /// /// Get/Set flag indicating if entry is encrypted. /// A simple helper routine to aid interpretation of flags /// /// This is an assistant that interprets the flags property. public bool IsCrypted { get { return (flags & 1) != 0; } set { if (value) { flags |= 1; } else { flags &= ~1; } } } /// /// Get / set a flag indicating wether entry name and comment text are /// encoded in unicode UTF8. /// /// This is an assistant that interprets the flags property. public bool IsUnicodeText { get { return ( flags & (int)GeneralBitFlags.UnicodeText ) != 0; } set { if ( value ) { flags |= (int)GeneralBitFlags.UnicodeText; } else { flags &= ~(int)GeneralBitFlags.UnicodeText; } } } /// /// Value used during password checking for PKZIP 2.0 / 'classic' encryption. /// internal byte CryptoCheckValue { get { return cryptoCheckValue_; } set { cryptoCheckValue_ = value; } } /// /// Get/Set general purpose bit flag for entry /// /// /// General purpose bit flag
///
/// Bit 0: If set, indicates the file is encrypted
/// Bit 1-2 Only used for compression type 6 Imploding, and 8, 9 deflating
/// Imploding:
/// Bit 1 if set indicates an 8K sliding dictionary was used. If clear a 4k dictionary was used
/// Bit 2 if set indicates 3 Shannon-Fanno trees were used to encode the sliding dictionary, 2 otherwise
///
/// Deflating:
/// Bit 2 Bit 1
/// 0 0 Normal compression was used
/// 0 1 Maximum compression was used
/// 1 0 Fast compression was used
/// 1 1 Super fast compression was used
///
/// Bit 3: If set, the fields crc-32, compressed size /// and uncompressed size are were not able to be written during zip file creation /// The correct values are held in a data descriptor immediately following the compressed data.
/// Bit 4: Reserved for use by PKZIP for enhanced deflating
/// Bit 5: If set indicates the file contains compressed patch data
/// Bit 6: If set indicates strong encryption was used.
/// Bit 7-10: Unused or reserved
/// Bit 11: If set the name and comments for this entry are in unicode.
/// Bit 12-15: Unused or reserved
///
/// /// public int Flags { get { return flags; } set { flags = value; } } /// /// Get/Set index of this entry in Zip file /// /// This is only valid when the entry is part of a public long ZipFileIndex { get { return zipFileIndex; } set { zipFileIndex = value; } } /// /// Get/set offset for use in central header /// public long Offset { get { return offset; } set { offset = value; } } /// /// Get/Set external file attributes as an integer. /// The values of this are operating system dependant see /// HostSystem for details /// public int ExternalFileAttributes { get { if ((known & Known.ExternalAttributes) == 0) { return -1; } else { return externalFileAttributes; } } set { externalFileAttributes = value; known |= Known.ExternalAttributes; } } /// /// Get the version made by for this entry or zero if unknown. /// The value / 10 indicates the major version number, and /// the value mod 10 is the minor version number /// public int VersionMadeBy { get { return (versionMadeBy & 0xff); } } /// /// Get a value indicating this entry is for a DOS/Windows system. /// public bool IsDOSEntry { get { return ((HostSystem == ( int )HostSystemID.Msdos) || (HostSystem == ( int )HostSystemID.WindowsNT)); } } /// /// Test the external attributes for this to /// see if the external attributes are Dos based (including WINNT and variants) /// and match the values /// /// The attributes to test. /// Returns true if the external attributes are known to be DOS/Windows /// based and have the same attributes set as the value passed. bool HasDosAttributes(int attributes) { bool result = false; if ( (known & Known.ExternalAttributes) != 0 ) { if ( ((HostSystem == (int)HostSystemID.Msdos) || (HostSystem == (int)HostSystemID.WindowsNT)) && (ExternalFileAttributes & attributes) == attributes) { result = true; } } return result; } /// /// Gets the compatability information for the external file attribute /// If the external file attributes are compatible with MS-DOS and can be read /// by PKZIP for DOS version 2.04g then this value will be zero. Otherwise the value /// will be non-zero and identify the host system on which the attributes are compatible. /// /// /// /// The values for this as defined in the Zip File format and by others are shown below. The values are somewhat /// misleading in some cases as they are not all used as shown. You should consult the relevant documentation /// to obtain up to date and correct information. The modified appnote by the infozip group is /// particularly helpful as it documents a lot of peculiarities. The document is however a little dated. /// /// 0 - MS-DOS and OS/2 (FAT / VFAT / FAT32 file systems) /// 1 - Amiga /// 2 - OpenVMS /// 3 - Unix /// 4 - VM/CMS /// 5 - Atari ST /// 6 - OS/2 HPFS /// 7 - Macintosh /// 8 - Z-System /// 9 - CP/M /// 10 - Windows NTFS /// 11 - MVS (OS/390 - Z/OS) /// 12 - VSE /// 13 - Acorn Risc /// 14 - VFAT /// 15 - Alternate MVS /// 16 - BeOS /// 17 - Tandem /// 18 - OS/400 /// 19 - OS/X (Darwin) /// 99 - WinZip AES /// remainder - unused /// /// public int HostSystem { get { return (versionMadeBy >> 8) & 0xff; } set { versionMadeBy &= 0xff; versionMadeBy |= (ushort)((value & 0xff) << 8); } } /// /// Get minimum Zip feature version required to extract this entry /// /// /// Minimum features are defined as:
/// 1.0 - Default value
/// 1.1 - File is a volume label
/// 2.0 - File is a folder/directory
/// 2.0 - File is compressed using Deflate compression
/// 2.0 - File is encrypted using traditional encryption
/// 2.1 - File is compressed using Deflate64
/// 2.5 - File is compressed using PKWARE DCL Implode
/// 2.7 - File is a patch data set
/// 4.5 - File uses Zip64 format extensions
/// 4.6 - File is compressed using BZIP2 compression
/// 5.0 - File is encrypted using DES
/// 5.0 - File is encrypted using 3DES
/// 5.0 - File is encrypted using original RC2 encryption
/// 5.0 - File is encrypted using RC4 encryption
/// 5.1 - File is encrypted using AES encryption
/// 5.1 - File is encrypted using corrected RC2 encryption
/// 5.1 - File is encrypted using corrected RC2-64 encryption
/// 6.1 - File is encrypted using non-OAEP key wrapping
/// 6.2 - Central directory encryption (not confirmed yet)
/// 6.3 - File is compressed using LZMA
/// 6.3 - File is compressed using PPMD+
/// 6.3 - File is encrypted using Blowfish
/// 6.3 - File is encrypted using Twofish
///
/// public int Version { get { // Return recorded version if known. if (versionToExtract != 0) { return versionToExtract & 0x00ff; // Only lower order byte. High order is O/S file system. } else { int result = 10; if (AESKeySize > 0) { result = ZipConstants.VERSION_AES; // Ver 5.1 = AES } else if (CentralHeaderRequiresZip64) { result = ZipConstants.VersionZip64; } else if (CompressionMethod.Deflated == method) { result = 20; } else if (IsDirectory == true) { result = 20; } else if (IsCrypted == true) { result = 20; } else if (HasDosAttributes(0x08) ) { result = 11; } return result; } } } /// /// Get a value indicating whether this entry can be decompressed by the library. /// /// This is based on the and /// wether the compression method is supported. public bool CanDecompress { get { return (Version <= ZipConstants.VersionMadeBy) && ((Version == 10) || (Version == 11) || (Version == 20) || (Version == 45) || (Version == 51)) && IsCompressionMethodSupported(); } } /// /// Force this entry to be recorded using Zip64 extensions. /// public void ForceZip64() { forceZip64_ = true; } /// /// Get a value indicating wether Zip64 extensions were forced. /// /// A value of true if Zip64 extensions have been forced on; false if not. public bool IsZip64Forced() { return forceZip64_; } /// /// Gets a value indicating if the entry requires Zip64 extensions /// to store the full entry values. /// /// A value of true if a local header requires Zip64 extensions; false if not. public bool LocalHeaderRequiresZip64 { get { bool result = forceZip64_; if ( !result ) { ulong trueCompressedSize = compressedSize; if ( (versionToExtract == 0) && IsCrypted ) { trueCompressedSize += ZipConstants.CryptoHeaderSize; } // TODO: A better estimation of the true limit based on compression overhead should be used // to determine when an entry should use Zip64. result = ((this.size >= uint.MaxValue) || (trueCompressedSize >= uint.MaxValue)) && ((versionToExtract == 0) || (versionToExtract >= ZipConstants.VersionZip64)); } return result; } } /// /// Get a value indicating wether the central directory entry requires Zip64 extensions to be stored. /// public bool CentralHeaderRequiresZip64 { get { return LocalHeaderRequiresZip64 || (offset >= uint.MaxValue); } } /// /// Get/Set DosTime value. /// /// /// The MS-DOS date format can only represent dates between 1/1/1980 and 12/31/2107. /// public long DosTime { get { if ((known & Known.Time) == 0) { return 0; } else { return dosTime; } } set { unchecked { dosTime = (uint)value; } known |= Known.Time; } } /// /// Gets/Sets the time of last modification of the entry. /// /// /// The property is updated to match this as far as possible. /// public DateTime DateTime { get { uint sec = Math.Min(59, 2 * (dosTime & 0x1f)); uint min = Math.Min(59, (dosTime >> 5) & 0x3f); uint hrs = Math.Min(23, (dosTime >> 11) & 0x1f); uint mon = Math.Max(1, Math.Min(12, ((dosTime >> 21) & 0xf))); uint year = ((dosTime >> 25) & 0x7f) + 1980; int day = Math.Max(1, Math.Min(DateTime.DaysInMonth((int)year, (int)mon), (int)((dosTime >> 16) & 0x1f))); return new System.DateTime((int)year, (int)mon, day, (int)hrs, (int)min, (int)sec); } set { uint year = (uint) value.Year; uint month = (uint) value.Month; uint day = (uint) value.Day; uint hour = (uint) value.Hour; uint minute = (uint) value.Minute; uint second = (uint) value.Second; if ( year < 1980 ) { year = 1980; month = 1; day = 1; hour = 0; minute = 0; second = 0; } else if ( year > 2107 ) { year = 2107; month = 12; day = 31; hour = 23; minute = 59; second = 59; } DosTime = ((year - 1980) & 0x7f) << 25 | (month << 21) | (day << 16) | (hour << 11) | (minute << 5) | (second >> 1); } } /// /// Returns the entry name. /// /// /// The unix naming convention is followed. /// Path components in the entry should always separated by forward slashes ('/'). /// Dos device names like C: should also be removed. /// See the class, or /// public string Name { get { return name; } } /// /// Gets/Sets the size of the uncompressed data. /// /// /// The size or -1 if unknown. /// /// Setting the size before adding an entry to an archive can help /// avoid compatability problems with some archivers which dont understand Zip64 extensions. public long Size { get { return (known & Known.Size) != 0 ? (long)size : -1L; } set { this.size = (ulong)value; this.known |= Known.Size; } } /// /// Gets/Sets the size of the compressed data. /// /// /// The compressed entry size or -1 if unknown. /// public long CompressedSize { get { return (known & Known.CompressedSize) != 0 ? (long)compressedSize : -1L; } set { this.compressedSize = (ulong)value; this.known |= Known.CompressedSize; } } /// /// Gets/Sets the crc of the uncompressed data. /// /// /// Crc is not in the range 0..0xffffffffL /// /// /// The crc value or -1 if unknown. /// public long Crc { get { return (known & Known.Crc) != 0 ? crc & 0xffffffffL : -1L; } set { if (((ulong)crc & 0xffffffff00000000L) != 0) { throw new ArgumentOutOfRangeException("value"); } this.crc = (uint)value; this.known |= Known.Crc; } } /// /// Gets/Sets the compression method. Only Deflated and Stored are supported. /// /// /// The compression method for this entry /// /// /// public CompressionMethod CompressionMethod { get { return method; } set { if ( !IsCompressionMethodSupported(value) ) { throw new NotSupportedException("Compression method not supported"); } this.method = value; } } /// /// Gets the compression method for outputting to the local or central header. /// Returns same value as CompressionMethod except when AES encrypting, which /// places 99 in the method and places the real method in the extra data. /// internal CompressionMethod CompressionMethodForHeader { get { return (AESKeySize > 0) ? CompressionMethod.WinZipAES : method; } } /// /// Gets/Sets the extra data. /// /// /// Extra data is longer than 64KB (0xffff) bytes. /// /// /// Extra data or null if not set. /// public byte[] ExtraData { get { // TODO: This is slightly safer but less efficient. Think about wether it should change. // return (byte[]) extra.Clone(); return extra; } set { if (value == null) { extra = null; } else { if (value.Length > 0xffff) { throw new System.ArgumentOutOfRangeException("value"); } extra = new byte[value.Length]; Array.Copy(value, 0, extra, 0, value.Length); } } } #if !NET_1_1 && !NETCF_2_0 /// /// For AES encrypted files returns or sets the number of bits of encryption (128, 192 or 256). /// When setting, only 0 (off), 128 or 256 is supported. /// public int AESKeySize { get { // the strength (1 or 3) is in the entry header switch (_aesEncryptionStrength) { case 0: return 0; // Not AES case 1: return 128; case 2: return 192; // Not used by WinZip case 3: return 256; default: throw new ZipException("Invalid AESEncryptionStrength " + _aesEncryptionStrength); } } set { switch (value) { case 0: _aesEncryptionStrength = 0; break; case 128: _aesEncryptionStrength = 1; break; case 256: _aesEncryptionStrength = 3; break; default: throw new ZipException("AESKeySize must be 0, 128 or 256: " + value); } } } /// /// AES Encryption strength for storage in extra data in entry header. /// 1 is 128 bit, 2 is 192 bit, 3 is 256 bit. /// internal byte AESEncryptionStrength { get { return (byte)_aesEncryptionStrength; } } #else /// /// AES unsupported prior to .NET 2.0 /// internal int AESKeySize; #endif /// /// Returns the length of the salt, in bytes /// internal int AESSaltLen { get { // Key size -> Salt length: 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes. return AESKeySize / 16; } } /// /// Number of extra bytes required to hold the AES Header fields (Salt, Pwd verify, AuthCode) /// internal int AESOverheadSize { get { // File format: // Bytes Content // Variable Salt value // 2 Password verification value // Variable Encrypted file data // 10 Authentication code return 12 + AESSaltLen; } } /// /// Process extra data fields updating the entry based on the contents. /// /// True if the extra data fields should be handled /// for a local header, rather than for a central header. /// internal void ProcessExtraData(bool localHeader) { ZipExtraData extraData = new ZipExtraData(this.extra); if ( extraData.Find(0x0001) ) { // Version required to extract is ignored here as some archivers dont set it correctly // in theory it should be version 45 or higher // The recorded size will change but remember that this is zip64. forceZip64_ = true; if ( extraData.ValueLength < 4 ) { throw new ZipException("Extra data extended Zip64 information length is invalid"); } if ( localHeader || (size == uint.MaxValue) ) { size = (ulong)extraData.ReadLong(); } if ( localHeader || (compressedSize == uint.MaxValue) ) { compressedSize = (ulong)extraData.ReadLong(); } if ( !localHeader && (offset == uint.MaxValue) ) { offset = extraData.ReadLong(); } // Disk number on which file starts is ignored } else { if ( ((versionToExtract & 0xff) >= ZipConstants.VersionZip64) && ((size == uint.MaxValue) || (compressedSize == uint.MaxValue)) ) { throw new ZipException("Zip64 Extended information required but is missing."); } } if ( extraData.Find(10) ) { // No room for any tags. if ( extraData.ValueLength < 4 ) { throw new ZipException("NTFS Extra data invalid"); } extraData.ReadInt(); // Reserved while ( extraData.UnreadCount >= 4 ) { int ntfsTag = extraData.ReadShort(); int ntfsLength = extraData.ReadShort(); if ( ntfsTag == 1 ) { if ( ntfsLength >= 24 ) { long lastModification = extraData.ReadLong(); long lastAccess = extraData.ReadLong(); long createTime = extraData.ReadLong(); DateTime = System.DateTime.FromFileTime(lastModification); } break; } else { // An unknown NTFS tag so simply skip it. extraData.Skip(ntfsLength); } } } else if ( extraData.Find(0x5455) ) { int length = extraData.ValueLength; int flags = extraData.ReadByte(); // Can include other times but these are ignored. Length of data should // actually be 1 + 4 * no of bits in flags. if ( ((flags & 1) != 0) && (length >= 5) ) { int iTime = extraData.ReadInt(); DateTime = (new System.DateTime ( 1970, 1, 1, 0, 0, 0 ).ToUniversalTime() + new TimeSpan ( 0, 0, 0, iTime, 0 )).ToLocalTime(); } } if (method == CompressionMethod.WinZipAES) { ProcessAESExtraData(extraData); } } // For AES the method in the entry is 99, and the real compression method is in the extradata // private void ProcessAESExtraData(ZipExtraData extraData) { #if !NET_1_1 && !NETCF_2_0 if (extraData.Find(0x9901)) { // Set version and flag for Zipfile.CreateAndInitDecryptionStream versionToExtract = ZipConstants.VERSION_AES; // Ver 5.1 = AES see "Version" getter // Set StrongEncryption flag for ZipFile.CreateAndInitDecryptionStream Flags = Flags | (int)GeneralBitFlags.StrongEncryption; // // Unpack AES extra data field see http://www.winzip.com/aes_info.htm int length = extraData.ValueLength; // Data size currently 7 if (length < 7) throw new ZipException("AES Extra Data Length " + length + " invalid."); int ver = extraData.ReadShort(); // Version number (1=AE-1 2=AE-2) int vendorId = extraData.ReadShort(); // 2-character vendor ID 0x4541 = "AE" int encrStrength = extraData.ReadByte(); // encryption strength 1 = 128 2 = 192 3 = 256 int actualCompress = extraData.ReadShort(); // The actual compression method used to compress the file _aesVer = ver; _aesEncryptionStrength = encrStrength; method = (CompressionMethod)actualCompress; } else throw new ZipException("AES Extra Data missing"); #else throw new ZipException("AES unsupported"); #endif } /// /// Gets/Sets the entry comment. /// /// /// If comment is longer than 0xffff. /// /// /// The comment or null if not set. /// /// /// A comment is only available for entries when read via the class. /// The class doesnt have the comment data available. /// public string Comment { get { return comment; } set { // This test is strictly incorrect as the length is in characters // while the storage limit is in bytes. // While the test is partially correct in that a comment of this length or greater // is definitely invalid, shorter comments may also have an invalid length // where there are multi-byte characters // The full test is not possible here however as the code page to apply conversions with // isnt available. if ( (value != null) && (value.Length > 0xffff) ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("value"); #else throw new ArgumentOutOfRangeException("value", "cannot exceed 65535"); #endif } comment = value; } } /// /// Gets a value indicating if the entry is a directory. /// however. /// /// /// A directory is determined by an entry name with a trailing slash '/'. /// The external file attributes can also indicate an entry is for a directory. /// Currently only dos/windows attributes are tested in this manner. /// The trailing slash convention should always be followed. /// public bool IsDirectory { get { int nameLength = name.Length; bool result = ((nameLength > 0) && ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) || HasDosAttributes(16) ; return result; } } /// /// Get a value of true if the entry appears to be a file; false otherwise /// /// /// This only takes account of DOS/Windows attributes. Other operating systems are ignored. /// For linux and others the result may be incorrect. /// public bool IsFile { get { return !IsDirectory && !HasDosAttributes(8); } } /// /// Test entry to see if data can be extracted. /// /// Returns true if data can be extracted for this entry; false otherwise. public bool IsCompressionMethodSupported() { return IsCompressionMethodSupported(CompressionMethod); } #region ICloneable Members /// /// Creates a copy of this zip entry. /// /// An that is a copy of the current instance. public object Clone() { ZipEntry result = (ZipEntry)this.MemberwiseClone(); // Ensure extra data is unique if it exists. if ( extra != null ) { result.extra = new byte[extra.Length]; Array.Copy(extra, 0, result.extra, 0, extra.Length); } return result; } #endregion /// /// Gets a string representation of this ZipEntry. /// /// A readable textual representation of this public override string ToString() { return name; } /// /// Test a compression method to see if this library /// supports extracting data compressed with that method /// /// The compression method to test. /// Returns true if the compression method is supported; false otherwise public static bool IsCompressionMethodSupported(CompressionMethod method) { return ( method == CompressionMethod.Deflated ) || ( method == CompressionMethod.Stored ); } /// /// Cleans a name making it conform to Zip file conventions. /// Devices names ('c:\') and UNC share names ('\\server\share') are removed /// and forward slashes ('\') are converted to back slashes ('/'). /// Names are made relative by trimming leading slashes which is compatible /// with the ZIP naming convention. /// /// The name to clean /// The 'cleaned' name. /// /// The Zip name transform class is more flexible. /// public static string CleanName(string name) { if (name == null) { return string.Empty; } if (Path.IsPathRooted(name)) { // NOTE: // for UNC names... \\machine\share\zoom\beet.txt gives \zoom\beet.txt name = name.Substring(Path.GetPathRoot(name).Length); } name = name.Replace(@"\", "/"); while ( (name.Length > 0) && (name[0] == '/')) { name = name.Remove(0, 1); } return name; } #region Instance Fields Known known; int externalFileAttributes = -1; // contains external attributes (O/S dependant) ushort versionMadeBy; // Contains host system and version information // only relevant for central header entries string name; ulong size; ulong compressedSize; ushort versionToExtract; // Version required to extract (library handles <= 2.0) uint crc; uint dosTime; CompressionMethod method = CompressionMethod.Deflated; byte[] extra; string comment; int flags; // general purpose bit flags long zipFileIndex = -1; // used by ZipFile long offset; // used by ZipFile and ZipOutputStream bool forceZip64_; byte cryptoCheckValue_; #if !NET_1_1 && !NETCF_2_0 int _aesVer; // Version number (2 = AE-2 ?). Assigned but not used. int _aesEncryptionStrength; // Encryption strength 1 = 128 2 = 192 3 = 256 #endif #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipEntryFactory.cs000066400000000000000000000311241446222606700267240ustar00rootroot00000000000000// ZipEntryFactory.cs // // Copyright 2006 John Reilly // // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 2012-11-29 Z-1684 Added MakeFileEntry(string fileName, string entryName, bool useFileSystem) using System; using System.IO; using ICSharpCode.SharpZipLib.Core; namespace ICSharpCode.SharpZipLib.Zip { /// /// Basic implementation of /// public class ZipEntryFactory : IEntryFactory { #region Enumerations /// /// Defines the possible values to be used for the . /// public enum TimeSetting { /// /// Use the recorded LastWriteTime value for the file. /// LastWriteTime, /// /// Use the recorded LastWriteTimeUtc value for the file /// LastWriteTimeUtc, /// /// Use the recorded CreateTime value for the file. /// CreateTime, /// /// Use the recorded CreateTimeUtc value for the file. /// CreateTimeUtc, /// /// Use the recorded LastAccessTime value for the file. /// LastAccessTime, /// /// Use the recorded LastAccessTimeUtc value for the file. /// LastAccessTimeUtc, /// /// Use a fixed value. /// /// The actual value used can be /// specified via the constructor or /// using the with the setting set /// to which will use the when this class was constructed. /// The property can also be used to set this value. Fixed, } #endregion #region Constructors /// /// Initialise a new instance of the class. /// /// A default , and the LastWriteTime for files is used. public ZipEntryFactory() { nameTransform_ = new ZipNameTransform(); } /// /// Initialise a new instance of using the specified /// /// The time setting to use when creating Zip entries. public ZipEntryFactory(TimeSetting timeSetting) { timeSetting_ = timeSetting; nameTransform_ = new ZipNameTransform(); } /// /// Initialise a new instance of using the specified /// /// The time to set all values to. public ZipEntryFactory(DateTime time) { timeSetting_ = TimeSetting.Fixed; FixedDateTime = time; nameTransform_ = new ZipNameTransform(); } #endregion #region Properties /// /// Get / set the to be used when creating new values. /// /// /// Setting this property to null will cause a default name transform to be used. /// public INameTransform NameTransform { get { return nameTransform_; } set { if (value == null) { nameTransform_ = new ZipNameTransform(); } else { nameTransform_ = value; } } } /// /// Get / set the in use. /// public TimeSetting Setting { get { return timeSetting_; } set { timeSetting_ = value; } } /// /// Get / set the value to use when is set to /// public DateTime FixedDateTime { get { return fixedDateTime_; } set { if (value.Year < 1970) { throw new ArgumentException("Value is too old to be valid", "value"); } fixedDateTime_ = value; } } /// /// A bitmask defining the attributes to be retrieved from the actual file. /// /// The default is to get all possible attributes from the actual file. public int GetAttributes { get { return getAttributes_; } set { getAttributes_ = value; } } /// /// A bitmask defining which attributes are to be set on. /// /// By default no attributes are set on. public int SetAttributes { get { return setAttributes_; } set { setAttributes_ = value; } } /// /// Get set a value indicating wether unidoce text should be set on. /// public bool IsUnicodeText { get { return isUnicodeText_; } set { isUnicodeText_ = value; } } #endregion #region IEntryFactory Members /// /// Make a new for a file. /// /// The name of the file to create a new entry for. /// Returns a new based on the . public ZipEntry MakeFileEntry(string fileName) { return MakeFileEntry(fileName, null, true); } /// /// Make a new for a file. /// /// The name of the file to create a new entry for. /// If true entry detail is retrieved from the file system if the file exists. /// Returns a new based on the . public ZipEntry MakeFileEntry(string fileName, bool useFileSystem) { return MakeFileEntry(fileName, null, useFileSystem); } /// /// Make a new from a name. /// /// The name of the file to create a new entry for. /// An alternative name to be used for the new entry. Null if not applicable. /// If true entry detail is retrieved from the file system if the file exists. /// Returns a new based on the . public ZipEntry MakeFileEntry(string fileName, string entryName, bool useFileSystem) { ZipEntry result = new ZipEntry(nameTransform_.TransformFile(entryName != null && entryName.Length > 0 ? entryName : fileName)); result.IsUnicodeText = isUnicodeText_; int externalAttributes = 0; bool useAttributes = (setAttributes_ != 0); FileInfo fi = null; if (useFileSystem) { fi = new FileInfo(fileName); } if ((fi != null) && fi.Exists) { switch (timeSetting_) { case TimeSetting.CreateTime: result.DateTime = fi.CreationTime; break; case TimeSetting.CreateTimeUtc: #if NETCF_1_0 || NETCF_2_0 result.DateTime = fi.CreationTime.ToUniversalTime(); #else result.DateTime = fi.CreationTimeUtc; #endif break; case TimeSetting.LastAccessTime: result.DateTime = fi.LastAccessTime; break; case TimeSetting.LastAccessTimeUtc: #if NETCF_1_0 || NETCF_2_0 result.DateTime = fi.LastAccessTime.ToUniversalTime(); #else result.DateTime = fi.LastAccessTimeUtc; #endif break; case TimeSetting.LastWriteTime: result.DateTime = fi.LastWriteTime; break; case TimeSetting.LastWriteTimeUtc: #if NETCF_1_0 || NETCF_2_0 result.DateTime = fi.LastWriteTime.ToUniversalTime(); #else result.DateTime = fi.LastWriteTimeUtc; #endif break; case TimeSetting.Fixed: result.DateTime = fixedDateTime_; break; default: throw new ZipException("Unhandled time setting in MakeFileEntry"); } result.Size = fi.Length; useAttributes = true; externalAttributes = ((int)fi.Attributes & getAttributes_); } else { if (timeSetting_ == TimeSetting.Fixed) { result.DateTime = fixedDateTime_; } } if (useAttributes) { externalAttributes |= setAttributes_; result.ExternalFileAttributes = externalAttributes; } return result; } /// /// Make a new for a directory. /// /// The raw untransformed name for the new directory /// Returns a new representing a directory. public ZipEntry MakeDirectoryEntry(string directoryName) { return MakeDirectoryEntry(directoryName, true); } /// /// Make a new for a directory. /// /// The raw untransformed name for the new directory /// If true entry detail is retrieved from the file system if the file exists. /// Returns a new representing a directory. public ZipEntry MakeDirectoryEntry(string directoryName, bool useFileSystem) { ZipEntry result = new ZipEntry(nameTransform_.TransformDirectory(directoryName)); result.IsUnicodeText = isUnicodeText_; result.Size = 0; int externalAttributes = 0; DirectoryInfo di = null; if (useFileSystem) { di = new DirectoryInfo(directoryName); } if ((di != null) && di.Exists) { switch (timeSetting_) { case TimeSetting.CreateTime: result.DateTime = di.CreationTime; break; case TimeSetting.CreateTimeUtc: #if NETCF_1_0 || NETCF_2_0 result.DateTime = di.CreationTime.ToUniversalTime(); #else result.DateTime = di.CreationTimeUtc; #endif break; case TimeSetting.LastAccessTime: result.DateTime = di.LastAccessTime; break; case TimeSetting.LastAccessTimeUtc: #if NETCF_1_0 || NETCF_2_0 result.DateTime = di.LastAccessTime.ToUniversalTime(); #else result.DateTime = di.LastAccessTimeUtc; #endif break; case TimeSetting.LastWriteTime: result.DateTime = di.LastWriteTime; break; case TimeSetting.LastWriteTimeUtc: #if NETCF_1_0 || NETCF_2_0 result.DateTime = di.LastWriteTime.ToUniversalTime(); #else result.DateTime = di.LastWriteTimeUtc; #endif break; case TimeSetting.Fixed: result.DateTime = fixedDateTime_; break; default: throw new ZipException("Unhandled time setting in MakeDirectoryEntry"); } externalAttributes = ((int)di.Attributes & getAttributes_); } else { if (timeSetting_ == TimeSetting.Fixed) { result.DateTime = fixedDateTime_; } } // Always set directory attribute on. externalAttributes |= (setAttributes_ | 16); result.ExternalFileAttributes = externalAttributes; return result; } #endregion #region Instance Fields INameTransform nameTransform_; DateTime fixedDateTime_ = DateTime.Now; TimeSetting timeSetting_; bool isUnicodeText_; int getAttributes_ = -1; int setAttributes_; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipException.cs000066400000000000000000000064741446222606700262430ustar00rootroot00000000000000// ZipException.cs // // Copyright (C) 2001 Mike Krueger // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; #if !NETCF_1_0 && !NETCF_2_0 using System.Runtime.Serialization; #endif namespace ICSharpCode.SharpZipLib.Zip { /// /// Represents exception conditions specific to Zip archive handling /// #if !NETCF_1_0 && !NETCF_2_0 [Serializable] #endif public class ZipException : SharpZipBaseException { #if !NETCF_1_0 && !NETCF_2_0 /// /// Deserialization constructor /// /// for this constructor /// for this constructor protected ZipException(SerializationInfo info, StreamingContext context ) : base( info, context ) { } #endif /// /// Initializes a new instance of the ZipException class. /// public ZipException() { } /// /// Initializes a new instance of the ZipException class with a specified error message. /// /// The error message that explains the reason for the exception. public ZipException(string message) : base(message) { } /// /// Initialise a new instance of ZipException. /// /// A message describing the error. /// The exception that is the cause of the current exception. public ZipException(string message, Exception exception) : base(message, exception) { } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipExtraData.cs000066400000000000000000000656501446222606700261630ustar00rootroot00000000000000// // ZipExtraData.cs // // Copyright 2004-2007 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; namespace ICSharpCode.SharpZipLib.Zip { // TODO: Sort out wether tagged data is useful and what a good implementation might look like. // Its just a sketch of an idea at the moment. /// /// ExtraData tagged value interface. /// public interface ITaggedData { /// /// Get the ID for this tagged data value. /// short TagID { get; } /// /// Set the contents of this instance from the data passed. /// /// The data to extract contents from. /// The offset to begin extracting data from. /// The number of bytes to extract. void SetData(byte[] data, int offset, int count); /// /// Get the data representing this instance. /// /// Returns the data for this instance. byte[] GetData(); } /// /// A raw binary tagged value /// public class RawTaggedData : ITaggedData { /// /// Initialise a new instance. /// /// The tag ID. public RawTaggedData(short tag) { _tag = tag; } #region ITaggedData Members /// /// Get the ID for this tagged data value. /// public short TagID { get { return _tag; } set { _tag = value; } } /// /// Set the data from the raw values provided. /// /// The raw data to extract values from. /// The index to start extracting values from. /// The number of bytes available. public void SetData(byte[] data, int offset, int count) { if( data==null ) { throw new ArgumentNullException("data"); } _data=new byte[count]; Array.Copy(data, offset, _data, 0, count); } /// /// Get the binary data representing this instance. /// /// The raw binary data representing this instance. public byte[] GetData() { return _data; } #endregion /// /// Get /set the binary data representing this instance. /// /// The raw binary data representing this instance. public byte[] Data { get { return _data; } set { _data=value; } } #region Instance Fields /// /// The tag ID for this instance. /// short _tag; byte[] _data; #endregion } /// /// Class representing extended unix date time values. /// public class ExtendedUnixData : ITaggedData { /// /// Flags indicate which values are included in this instance. /// [Flags] public enum Flags : byte { /// /// The modification time is included /// ModificationTime = 0x01, /// /// The access time is included /// AccessTime = 0x02, /// /// The create time is included. /// CreateTime = 0x04, } #region ITaggedData Members /// /// Get the ID /// public short TagID { get { return 0x5455; } } /// /// Set the data from the raw values provided. /// /// The raw data to extract values from. /// The index to start extracting values from. /// The number of bytes available. public void SetData(byte[] data, int index, int count) { using (MemoryStream ms = new MemoryStream(data, index, count, false)) using (ZipHelperStream helperStream = new ZipHelperStream(ms)) { // bit 0 if set, modification time is present // bit 1 if set, access time is present // bit 2 if set, creation time is present _flags = (Flags)helperStream.ReadByte(); if (((_flags & Flags.ModificationTime) != 0) && (count >= 5)) { int iTime = helperStream.ReadLEInt(); _modificationTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() + new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime(); } if ((_flags & Flags.AccessTime) != 0) { int iTime = helperStream.ReadLEInt(); _lastAccessTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() + new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime(); } if ((_flags & Flags.CreateTime) != 0) { int iTime = helperStream.ReadLEInt(); _createTime = (new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime() + new TimeSpan(0, 0, 0, iTime, 0)).ToLocalTime(); } } } /// /// Get the binary data representing this instance. /// /// The raw binary data representing this instance. public byte[] GetData() { using (MemoryStream ms = new MemoryStream()) using (ZipHelperStream helperStream = new ZipHelperStream(ms)) { helperStream.IsStreamOwner = false; helperStream.WriteByte((byte)_flags); // Flags if ( (_flags & Flags.ModificationTime) != 0) { TimeSpan span = _modificationTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); int seconds = (int)span.TotalSeconds; helperStream.WriteLEInt(seconds); } if ( (_flags & Flags.AccessTime) != 0) { TimeSpan span = _lastAccessTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); int seconds = (int)span.TotalSeconds; helperStream.WriteLEInt(seconds); } if ( (_flags & Flags.CreateTime) != 0) { TimeSpan span = _createTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime(); int seconds = (int)span.TotalSeconds; helperStream.WriteLEInt(seconds); } return ms.ToArray(); } } #endregion /// /// Test a value to see if is valid and can be represented here. /// /// The value to test. /// Returns true if the value is valid and can be represented; false if not. /// The standard Unix time is a signed integer data type, directly encoding the Unix time number, /// which is the number of seconds since 1970-01-01. /// Being 32 bits means the values here cover a range of about 136 years. /// The minimum representable time is 1901-12-13 20:45:52, /// and the maximum representable time is 2038-01-19 03:14:07. /// public static bool IsValidValue(DateTime value) { return (( value >= new DateTime(1901, 12, 13, 20, 45, 52)) || ( value <= new DateTime(2038, 1, 19, 03, 14, 07) )); } /// /// Get /set the Modification Time /// /// /// public DateTime ModificationTime { get { return _modificationTime; } set { if ( !IsValidValue(value) ) { throw new ArgumentOutOfRangeException("value"); } _flags |= Flags.ModificationTime; _modificationTime=value; } } /// /// Get / set the Access Time /// /// /// public DateTime AccessTime { get { return _lastAccessTime; } set { if ( !IsValidValue(value) ) { throw new ArgumentOutOfRangeException("value"); } _flags |= Flags.AccessTime; _lastAccessTime=value; } } /// /// Get / Set the Create Time /// /// /// public DateTime CreateTime { get { return _createTime; } set { if ( !IsValidValue(value) ) { throw new ArgumentOutOfRangeException("value"); } _flags |= Flags.CreateTime; _createTime=value; } } /// /// Get/set the values to include. /// Flags Include { get { return _flags; } set { _flags = value; } } #region Instance Fields Flags _flags; DateTime _modificationTime = new DateTime(1970,1,1); DateTime _lastAccessTime = new DateTime(1970, 1, 1); DateTime _createTime = new DateTime(1970, 1, 1); #endregion } /// /// Class handling NT date time values. /// public class NTTaggedData : ITaggedData { /// /// Get the ID for this tagged data value. /// public short TagID { get { return 10; } } /// /// Set the data from the raw values provided. /// /// The raw data to extract values from. /// The index to start extracting values from. /// The number of bytes available. public void SetData(byte[] data, int index, int count) { using (MemoryStream ms = new MemoryStream(data, index, count, false)) using (ZipHelperStream helperStream = new ZipHelperStream(ms)) { helperStream.ReadLEInt(); // Reserved while (helperStream.Position < helperStream.Length) { int ntfsTag = helperStream.ReadLEShort(); int ntfsLength = helperStream.ReadLEShort(); if (ntfsTag == 1) { if (ntfsLength >= 24) { long lastModificationTicks = helperStream.ReadLELong(); _lastModificationTime = DateTime.FromFileTime(lastModificationTicks); long lastAccessTicks = helperStream.ReadLELong(); _lastAccessTime = DateTime.FromFileTime(lastAccessTicks); long createTimeTicks = helperStream.ReadLELong(); _createTime = DateTime.FromFileTime(createTimeTicks); } break; } else { // An unknown NTFS tag so simply skip it. helperStream.Seek(ntfsLength, SeekOrigin.Current); } } } } /// /// Get the binary data representing this instance. /// /// The raw binary data representing this instance. public byte[] GetData() { using (MemoryStream ms = new MemoryStream()) using (ZipHelperStream helperStream = new ZipHelperStream(ms)) { helperStream.IsStreamOwner = false; helperStream.WriteLEInt(0); // Reserved helperStream.WriteLEShort(1); // Tag helperStream.WriteLEShort(24); // Length = 3 x 8. helperStream.WriteLELong(_lastModificationTime.ToFileTime()); helperStream.WriteLELong(_lastAccessTime.ToFileTime()); helperStream.WriteLELong(_createTime.ToFileTime()); return ms.ToArray(); } } /// /// Test a valuie to see if is valid and can be represented here. /// /// The value to test. /// Returns true if the value is valid and can be represented; false if not. /// /// NTFS filetimes are 64-bit unsigned integers, stored in Intel /// (least significant byte first) byte order. They determine the /// number of 1.0E-07 seconds (1/10th microseconds!) past WinNT "epoch", /// which is "01-Jan-1601 00:00:00 UTC". 28 May 60056 is the upper limit /// public static bool IsValidValue(DateTime value) { bool result = true; try { value.ToFileTimeUtc(); } catch { result = false; } return result; } /// /// Get/set the last modification time. /// public DateTime LastModificationTime { get { return _lastModificationTime; } set { if (! IsValidValue(value)) { throw new ArgumentOutOfRangeException("value"); } _lastModificationTime = value; } } /// /// Get /set the create time /// public DateTime CreateTime { get { return _createTime; } set { if ( !IsValidValue(value)) { throw new ArgumentOutOfRangeException("value"); } _createTime = value; } } /// /// Get /set the last access time. /// public DateTime LastAccessTime { get { return _lastAccessTime; } set { if (!IsValidValue(value)) { throw new ArgumentOutOfRangeException("value"); } _lastAccessTime = value; } } #region Instance Fields DateTime _lastAccessTime = DateTime.FromFileTime(0); DateTime _lastModificationTime = DateTime.FromFileTime(0); DateTime _createTime = DateTime.FromFileTime(0); #endregion } /// /// A factory that creates tagged data instances. /// interface ITaggedDataFactory { /// /// Get data for a specific tag value. /// /// The tag ID to find. /// The data to search. /// The offset to begin extracting data from. /// The number of bytes to extract. /// The located value found, or null if not found. ITaggedData Create(short tag, byte[] data, int offset, int count); } /// /// /// A class to handle the extra data field for Zip entries /// /// /// Extra data contains 0 or more values each prefixed by a header tag and length. /// They contain zero or more bytes of actual data. /// The data is held internally using a copy on write strategy. This is more efficient but /// means that for extra data created by passing in data can have the values modified by the caller /// in some circumstances. /// sealed public class ZipExtraData : IDisposable { #region Constructors /// /// Initialise a default instance. /// public ZipExtraData() { Clear(); } /// /// Initialise with known extra data. /// /// The extra data. public ZipExtraData(byte[] data) { if ( data == null ) { _data = new byte[0]; } else { _data = data; } } #endregion /// /// Get the raw extra data value /// /// Returns the raw byte[] extra data this instance represents. public byte[] GetEntryData() { if ( Length > ushort.MaxValue ) { throw new ZipException("Data exceeds maximum length"); } return (byte[])_data.Clone(); } /// /// Clear the stored data. /// public void Clear() { if ( (_data == null) || (_data.Length != 0) ) { _data = new byte[0]; } } /// /// Gets the current extra data length. /// public int Length { get { return _data.Length; } } /// /// Get a read-only for the associated tag. /// /// The tag to locate data for. /// Returns a containing tag data or null if no tag was found. public Stream GetStreamForTag(int tag) { Stream result = null; if ( Find(tag) ) { result = new MemoryStream(_data, _index, _readValueLength, false); } return result; } /// /// Get the tagged data for a tag. /// /// The tag to search for. /// Returns a tagged value or null if none found. private ITaggedData GetData(short tag) { ITaggedData result = null; if (Find(tag)) { result = Create(tag, _data, _readValueStart, _readValueLength); } return result; } static ITaggedData Create(short tag, byte[] data, int offset, int count) { ITaggedData result = null; switch ( tag ) { case 0x000A: result = new NTTaggedData(); break; case 0x5455: result = new ExtendedUnixData(); break; default: result = new RawTaggedData(tag); break; } result.SetData(data, offset, count); return result; } /// /// Get the length of the last value found by /// /// This is only valid if has previously returned true. public int ValueLength { get { return _readValueLength; } } /// /// Get the index for the current read value. /// /// This is only valid if has previously returned true. /// Initially the result will be the index of the first byte of actual data. The value is updated after calls to /// , and . public int CurrentReadIndex { get { return _index; } } /// /// Get the number of bytes remaining to be read for the current value; /// public int UnreadCount { get { if ((_readValueStart > _data.Length) || (_readValueStart < 4) ) { throw new ZipException("Find must be called before calling a Read method"); } return _readValueStart + _readValueLength - _index; } } /// /// Find an extra data value /// /// The identifier for the value to find. /// Returns true if the value was found; false otherwise. public bool Find(int headerID) { _readValueStart = _data.Length; _readValueLength = 0; _index = 0; int localLength = _readValueStart; int localTag = headerID - 1; // Trailing bytes that cant make up an entry (as there arent enough // bytes for a tag and length) are ignored! while ( (localTag != headerID) && (_index < _data.Length - 3) ) { localTag = ReadShortInternal(); localLength = ReadShortInternal(); if ( localTag != headerID ) { _index += localLength; } } bool result = (localTag == headerID) && ((_index + localLength) <= _data.Length); if ( result ) { _readValueStart = _index; _readValueLength = localLength; } return result; } /// /// Add a new entry to extra data. /// /// The value to add. public void AddEntry(ITaggedData taggedData) { if (taggedData == null) { throw new ArgumentNullException("taggedData"); } AddEntry(taggedData.TagID, taggedData.GetData()); } /// /// Add a new entry to extra data /// /// The ID for this entry. /// The data to add. /// If the ID already exists its contents are replaced. public void AddEntry(int headerID, byte[] fieldData) { if ( (headerID > ushort.MaxValue) || (headerID < 0)) { throw new ArgumentOutOfRangeException("headerID"); } int addLength = (fieldData == null) ? 0 : fieldData.Length; if ( addLength > ushort.MaxValue ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("fieldData"); #else throw new ArgumentOutOfRangeException("fieldData", "exceeds maximum length"); #endif } // Test for new length before adjusting data. int newLength = _data.Length + addLength + 4; if ( Find(headerID) ) { newLength -= (ValueLength + 4); } if ( newLength > ushort.MaxValue ) { throw new ZipException("Data exceeds maximum length"); } Delete(headerID); byte[] newData = new byte[newLength]; _data.CopyTo(newData, 0); int index = _data.Length; _data = newData; SetShort(ref index, headerID); SetShort(ref index, addLength); if ( fieldData != null ) { fieldData.CopyTo(newData, index); } } /// /// Start adding a new entry. /// /// Add data using , , , or . /// The new entry is completed and actually added by calling /// public void StartNewEntry() { _newEntry = new MemoryStream(); } /// /// Add entry data added since using the ID passed. /// /// The identifier to use for this entry. public void AddNewEntry(int headerID) { byte[] newData = _newEntry.ToArray(); _newEntry = null; AddEntry(headerID, newData); } /// /// Add a byte of data to the pending new entry. /// /// The byte to add. /// public void AddData(byte data) { _newEntry.WriteByte(data); } /// /// Add data to a pending new entry. /// /// The data to add. /// public void AddData(byte[] data) { if ( data == null ) { throw new ArgumentNullException("data"); } _newEntry.Write(data, 0, data.Length); } /// /// Add a short value in little endian order to the pending new entry. /// /// The data to add. /// public void AddLeShort(int toAdd) { unchecked { _newEntry.WriteByte(( byte )toAdd); _newEntry.WriteByte(( byte )(toAdd >> 8)); } } /// /// Add an integer value in little endian order to the pending new entry. /// /// The data to add. /// public void AddLeInt(int toAdd) { unchecked { AddLeShort(( short )toAdd); AddLeShort(( short )(toAdd >> 16)); } } /// /// Add a long value in little endian order to the pending new entry. /// /// The data to add. /// public void AddLeLong(long toAdd) { unchecked { AddLeInt(( int )(toAdd & 0xffffffff)); AddLeInt(( int )(toAdd >> 32)); } } /// /// Delete an extra data field. /// /// The identifier of the field to delete. /// Returns true if the field was found and deleted. public bool Delete(int headerID) { bool result = false; if ( Find(headerID) ) { result = true; int trueStart = _readValueStart - 4; byte[] newData = new byte[_data.Length - (ValueLength + 4)]; Array.Copy(_data, 0, newData, 0, trueStart); int trueEnd = trueStart + ValueLength + 4; Array.Copy(_data, trueEnd, newData, trueStart, _data.Length - trueEnd); _data = newData; } return result; } #region Reading Support /// /// Read a long in little endian form from the last found data value /// /// Returns the long value read. public long ReadLong() { ReadCheck(8); return (ReadInt() & 0xffffffff) | ((( long )ReadInt()) << 32); } /// /// Read an integer in little endian form from the last found data value. /// /// Returns the integer read. public int ReadInt() { ReadCheck(4); int result = _data[_index] + (_data[_index + 1] << 8) + (_data[_index + 2] << 16) + (_data[_index + 3] << 24); _index += 4; return result; } /// /// Read a short value in little endian form from the last found data value. /// /// Returns the short value read. public int ReadShort() { ReadCheck(2); int result = _data[_index] + (_data[_index + 1] << 8); _index += 2; return result; } /// /// Read a byte from an extra data /// /// The byte value read or -1 if the end of data has been reached. public int ReadByte() { int result = -1; if ( (_index < _data.Length) && (_readValueStart + _readValueLength > _index) ) { result = _data[_index]; _index += 1; } return result; } /// /// Skip data during reading. /// /// The number of bytes to skip. public void Skip(int amount) { ReadCheck(amount); _index += amount; } void ReadCheck(int length) { if ((_readValueStart > _data.Length) || (_readValueStart < 4) ) { throw new ZipException("Find must be called before calling a Read method"); } if (_index > _readValueStart + _readValueLength - length ) { throw new ZipException("End of extra data"); } if ( _index + length < 4 ) { throw new ZipException("Cannot read before start of tag"); } } /// /// Internal form of that reads data at any location. /// /// Returns the short value read. int ReadShortInternal() { if ( _index > _data.Length - 2) { throw new ZipException("End of extra data"); } int result = _data[_index] + (_data[_index + 1] << 8); _index += 2; return result; } void SetShort(ref int index, int source) { _data[index] = (byte)source; _data[index + 1] = (byte)(source >> 8); index += 2; } #endregion #region IDisposable Members /// /// Dispose of this instance. /// public void Dispose() { if ( _newEntry != null ) { _newEntry.Close(); } } #endregion #region Instance Fields int _index; int _readValueStart; int _readValueLength; MemoryStream _newEntry; byte[] _data; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipFile.cs000066400000000000000000004067311446222606700251640ustar00rootroot00000000000000// ZipFile.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 2009-12-22 Z-1649 Added AES support // 2010-03-02 Z-1650 Fixed updating ODT archives in memory. Exposed exceptions in updating. // 2010-05-25 Z-1663 Fixed exception when testing local header compressed size of -1 // 2012-11-29 Z-1684 Fixed ZipFile.Add(string fileName, string entryName) losing the file TimeStamp using System; using System.Collections; using System.IO; using System.Text; using System.Globalization; #if !NETCF_1_0 using System.Security.Cryptography; using ICSharpCode.SharpZipLib.Encryption; #endif using ICSharpCode.SharpZipLib.Core; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; using ICSharpCode.SharpZipLib.Zip.Compression; namespace ICSharpCode.SharpZipLib.Zip { #region Keys Required Event Args /// /// Arguments used with KeysRequiredEvent /// public class KeysRequiredEventArgs : EventArgs { #region Constructors /// /// Initialise a new instance of /// /// The name of the file for which keys are required. public KeysRequiredEventArgs(string name) { fileName = name; } /// /// Initialise a new instance of /// /// The name of the file for which keys are required. /// The current key value. public KeysRequiredEventArgs(string name, byte[] keyValue) { fileName = name; key = keyValue; } #endregion #region Properties /// /// Gets the name of the file for which keys are required. /// public string FileName { get { return fileName; } } /// /// Gets or sets the key value /// public byte[] Key { get { return key; } set { key = value; } } #endregion #region Instance Fields string fileName; byte[] key; #endregion } #endregion #region Test Definitions /// /// The strategy to apply to testing. /// public enum TestStrategy { /// /// Find the first error only. /// FindFirstError, /// /// Find all possible errors. /// FindAllErrors, } /// /// The operation in progress reported by a during testing. /// /// TestArchive public enum TestOperation { /// /// Setting up testing. /// Initialising, /// /// Testing an individual entries header /// EntryHeader, /// /// Testing an individual entries data /// EntryData, /// /// Testing an individual entry has completed. /// EntryComplete, /// /// Running miscellaneous tests /// MiscellaneousTests, /// /// Testing is complete /// Complete, } /// /// Status returned returned by during testing. /// /// TestArchive public class TestStatus { #region Constructors /// /// Initialise a new instance of /// /// The this status applies to. public TestStatus(ZipFile file) { file_ = file; } #endregion #region Properties /// /// Get the current in progress. /// public TestOperation Operation { get { return operation_; } } /// /// Get the this status is applicable to. /// public ZipFile File { get { return file_; } } /// /// Get the current/last entry tested. /// public ZipEntry Entry { get { return entry_; } } /// /// Get the number of errors detected so far. /// public int ErrorCount { get { return errorCount_; } } /// /// Get the number of bytes tested so far for the current entry. /// public long BytesTested { get { return bytesTested_; } } /// /// Get a value indicating wether the last entry test was valid. /// public bool EntryValid { get { return entryValid_; } } #endregion #region Internal API internal void AddError() { errorCount_++; entryValid_ = false; } internal void SetOperation(TestOperation operation) { operation_ = operation; } internal void SetEntry(ZipEntry entry) { entry_ = entry; entryValid_ = true; bytesTested_ = 0; } internal void SetBytesTested(long value) { bytesTested_ = value; } #endregion #region Instance Fields ZipFile file_; ZipEntry entry_; bool entryValid_; int errorCount_; long bytesTested_; TestOperation operation_; #endregion } /// /// Delegate invoked during testing if supplied indicating current progress and status. /// /// If the message is non-null an error has occured. If the message is null /// the operation as found in status has started. public delegate void ZipTestResultHandler(TestStatus status, string message); #endregion #region Update Definitions /// /// The possible ways of applying updates to an archive. /// public enum FileUpdateMode { /// /// Perform all updates on temporary files ensuring that the original file is saved. /// Safe, /// /// Update the archive directly, which is faster but less safe. /// Direct, } #endregion #region ZipFile Class /// /// This class represents a Zip archive. You can ask for the contained /// entries, or get an input stream for a file entry. The entry is /// automatically decompressed. /// /// You can also update the archive adding or deleting entries. /// /// This class is thread safe for input: You can open input streams for arbitrary /// entries in different threads. ///
///
Author of the original java version : Jochen Hoenicke ///
/// /// /// using System; /// using System.Text; /// using System.Collections; /// using System.IO; /// /// using ICSharpCode.SharpZipLib.Zip; /// /// class MainClass /// { /// static public void Main(string[] args) /// { /// using (ZipFile zFile = new ZipFile(args[0])) { /// Console.WriteLine("Listing of : " + zFile.Name); /// Console.WriteLine(""); /// Console.WriteLine("Raw Size Size Date Time Name"); /// Console.WriteLine("-------- -------- -------- ------ ---------"); /// foreach (ZipEntry e in zFile) { /// if ( e.IsFile ) { /// DateTime d = e.DateTime; /// Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize, /// d.ToString("dd-MM-yy"), d.ToString("HH:mm"), /// e.Name); /// } /// } /// } /// } /// } /// /// public class ZipFile : IEnumerable, IDisposable { #region KeyHandling /// /// Delegate for handling keys/password setting during compresion/decompression. /// public delegate void KeysRequiredEventHandler( object sender, KeysRequiredEventArgs e ); /// /// Event handler for handling encryption keys. /// public KeysRequiredEventHandler KeysRequired; /// /// Handles getting of encryption keys when required. /// /// The file for which encryption keys are required. void OnKeysRequired(string fileName) { if (KeysRequired != null) { KeysRequiredEventArgs krea = new KeysRequiredEventArgs(fileName, key); KeysRequired(this, krea); key = krea.Key; } } /// /// Get/set the encryption key value. /// byte[] Key { get { return key; } set { key = value; } } #if !NETCF_1_0 /// /// Password to be used for encrypting/decrypting files. /// /// Set to null if no password is required. public string Password { set { if ( (value == null) || (value.Length == 0) ) { key = null; } else { rawPassword_ = value; key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(value)); } } } #endif /// /// Get a value indicating wether encryption keys are currently available. /// bool HaveKeys { get { return key != null; } } #endregion #region Constructors /// /// Opens a Zip file with the given name for reading. /// /// The name of the file to open. /// The argument supplied is null. /// /// An i/o error occurs /// /// /// The file doesn't contain a valid zip archive. /// public ZipFile(string name) { if ( name == null ) { throw new ArgumentNullException("name"); } name_ = name; baseStream_ = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read); isStreamOwner = true; try { ReadEntries(); } catch { DisposeInternal(true); throw; } } /// /// Opens a Zip file reading the given . /// /// The to read archive data from. /// The supplied argument is null. /// /// An i/o error occurs. /// /// /// The file doesn't contain a valid zip archive. /// public ZipFile(FileStream file) { if ( file == null ) { throw new ArgumentNullException("file"); } if ( !file.CanSeek ) { throw new ArgumentException("Stream is not seekable", "file"); } baseStream_ = file; name_ = file.Name; isStreamOwner = true; try { ReadEntries(); } catch { DisposeInternal(true); throw; } } /// /// Opens a Zip file reading the given . /// /// The to read archive data from. /// /// An i/o error occurs /// /// /// The stream doesn't contain a valid zip archive.
///
/// /// The stream doesnt support seeking. /// /// /// The stream argument is null. /// public ZipFile(Stream stream) { if ( stream == null ) { throw new ArgumentNullException("stream"); } if ( !stream.CanSeek ) { throw new ArgumentException("Stream is not seekable", "stream"); } baseStream_ = stream; isStreamOwner = true; if ( baseStream_.Length > 0 ) { try { ReadEntries(); } catch { DisposeInternal(true); throw; } } else { entries_ = new ZipEntry[0]; isNewArchive_ = true; } } /// /// Initialises a default instance with no entries and no file storage. /// internal ZipFile() { entries_ = new ZipEntry[0]; isNewArchive_ = true; } #endregion #region Destructors and Closing /// /// Finalize this instance. /// ~ZipFile() { Dispose(false); } /// /// Closes the ZipFile. If the stream is owned then this also closes the underlying input stream. /// Once closed, no further instance methods should be called. /// /// /// An i/o error occurs. /// public void Close() { DisposeInternal(true); GC.SuppressFinalize(this); } #endregion #region Creators /// /// Create a new whose data will be stored in a file. /// /// The name of the archive to create. /// Returns the newly created /// is null public static ZipFile Create(string fileName) { if ( fileName == null ) { throw new ArgumentNullException("fileName"); } FileStream fs = File.Create(fileName); ZipFile result = new ZipFile(); result.name_ = fileName; result.baseStream_ = fs; result.isStreamOwner = true; return result; } /// /// Create a new whose data will be stored on a stream. /// /// The stream providing data storage. /// Returns the newly created /// is null /// doesnt support writing. public static ZipFile Create(Stream outStream) { if ( outStream == null ) { throw new ArgumentNullException("outStream"); } if ( !outStream.CanWrite ) { throw new ArgumentException("Stream is not writeable", "outStream"); } if ( !outStream.CanSeek ) { throw new ArgumentException("Stream is not seekable", "outStream"); } ZipFile result = new ZipFile(); result.baseStream_ = outStream; return result; } #endregion #region Properties /// /// Get/set a flag indicating if the underlying stream is owned by the ZipFile instance. /// If the flag is true then the stream will be closed when Close is called. /// /// /// The default value is true in all cases. /// public bool IsStreamOwner { get { return isStreamOwner; } set { isStreamOwner = value; } } /// /// Get a value indicating wether /// this archive is embedded in another file or not. /// public bool IsEmbeddedArchive { // Not strictly correct in all circumstances currently get { return offsetOfFirstEntry > 0; } } /// /// Get a value indicating that this archive is a new one. /// public bool IsNewArchive { get { return isNewArchive_; } } /// /// Gets the comment for the zip file. /// public string ZipFileComment { get { return comment_; } } /// /// Gets the name of this zip file. /// public string Name { get { return name_; } } /// /// Gets the number of entries in this zip file. /// /// /// The Zip file has been closed. /// [Obsolete("Use the Count property instead")] public int Size { get { return entries_.Length; } } /// /// Get the number of entries contained in this . /// public long Count { get { return entries_.Length; } } /// /// Indexer property for ZipEntries /// [System.Runtime.CompilerServices.IndexerNameAttribute("EntryByIndex")] public ZipEntry this[int index] { get { return (ZipEntry) entries_[index].Clone(); } } #endregion #region Input Handling /// /// Gets an enumerator for the Zip entries in this Zip file. /// /// Returns an for this archive. /// /// The Zip file has been closed. /// public IEnumerator GetEnumerator() { if (isDisposed_) { throw new ObjectDisposedException("ZipFile"); } return new ZipEntryEnumerator(entries_); } /// /// Return the index of the entry with a matching name /// /// Entry name to find /// If true the comparison is case insensitive /// The index position of the matching entry or -1 if not found /// /// The Zip file has been closed. /// public int FindEntry(string name, bool ignoreCase) { if (isDisposed_) { throw new ObjectDisposedException("ZipFile"); } // TODO: This will be slow as the next ice age for huge archives! for (int i = 0; i < entries_.Length; i++) { if (string.Compare(name, entries_[i].Name, ignoreCase, CultureInfo.InvariantCulture) == 0) { return i; } } return -1; } /// /// Searches for a zip entry in this archive with the given name. /// String comparisons are case insensitive /// /// /// The name to find. May contain directory components separated by slashes ('/'). /// /// /// A clone of the zip entry, or null if no entry with that name exists. /// /// /// The Zip file has been closed. /// public ZipEntry GetEntry(string name) { if (isDisposed_) { throw new ObjectDisposedException("ZipFile"); } int index = FindEntry(name, true); return (index >= 0) ? (ZipEntry) entries_[index].Clone() : null; } /// /// Gets an input stream for reading the given zip entry data in an uncompressed form. /// Normally the should be an entry returned by GetEntry(). /// /// The to obtain a data for /// An input containing data for this /// /// The ZipFile has already been closed /// /// /// The compression method for the entry is unknown /// /// /// The entry is not found in the ZipFile /// public Stream GetInputStream(ZipEntry entry) { if ( entry == null ) { throw new ArgumentNullException("entry"); } if ( isDisposed_ ) { throw new ObjectDisposedException("ZipFile"); } long index = entry.ZipFileIndex; if ( (index < 0) || (index >= entries_.Length) || (entries_[index].Name != entry.Name) ) { index = FindEntry(entry.Name, true); if (index < 0) { throw new ZipException("Entry cannot be found"); } } return GetInputStream(index); } /// /// Creates an input stream reading a zip entry /// /// The index of the entry to obtain an input stream for. /// /// An input containing data for this /// /// /// The ZipFile has already been closed /// /// /// The compression method for the entry is unknown /// /// /// The entry is not found in the ZipFile /// public Stream GetInputStream(long entryIndex) { if ( isDisposed_ ) { throw new ObjectDisposedException("ZipFile"); } long start = LocateEntry(entries_[entryIndex]); CompressionMethod method = entries_[entryIndex].CompressionMethod; Stream result = new PartialInputStream(this, start, entries_[entryIndex].CompressedSize); if (entries_[entryIndex].IsCrypted == true) { #if NETCF_1_0 throw new ZipException("decryption not supported for Compact Framework 1.0"); #else result = CreateAndInitDecryptionStream(result, entries_[entryIndex]); if (result == null) { throw new ZipException("Unable to decrypt this entry"); } #endif } switch (method) { case CompressionMethod.Stored: // read as is. break; case CompressionMethod.Deflated: // No need to worry about ownership and closing as underlying stream close does nothing. result = new InflaterInputStream(result, new Inflater(true)); break; default: throw new ZipException("Unsupported compression method " + method); } return result; } #endregion #region Archive Testing /// /// Test an archive for integrity/validity /// /// Perform low level data Crc check /// true if all tests pass, false otherwise /// Testing will terminate on the first error found. public bool TestArchive(bool testData) { return TestArchive(testData, TestStrategy.FindFirstError, null); } /// /// Test an archive for integrity/validity /// /// Perform low level data Crc check /// The to apply. /// The handler to call during testing. /// true if all tests pass, false otherwise /// The object has already been closed. public bool TestArchive(bool testData, TestStrategy strategy, ZipTestResultHandler resultHandler) { if (isDisposed_) { throw new ObjectDisposedException("ZipFile"); } TestStatus status = new TestStatus(this); if ( resultHandler != null ) { resultHandler(status, null); } HeaderTest test = testData ? (HeaderTest.Header | HeaderTest.Extract) : HeaderTest.Header; bool testing = true; try { int entryIndex = 0; while ( testing && (entryIndex < Count) ) { if ( resultHandler != null ) { status.SetEntry(this[entryIndex]); status.SetOperation(TestOperation.EntryHeader); resultHandler(status, null); } try { TestLocalHeader(this[entryIndex], test); } catch(ZipException ex) { status.AddError(); if ( resultHandler != null ) { resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message)); } if ( strategy == TestStrategy.FindFirstError ) { testing = false; } } if ( testing && testData && this[entryIndex].IsFile ) { if ( resultHandler != null ) { status.SetOperation(TestOperation.EntryData); resultHandler(status, null); } Crc32 crc = new Crc32(); using (Stream entryStream = this.GetInputStream(this[entryIndex])) { byte[] buffer = new byte[4096]; long totalBytes = 0; int bytesRead; while ((bytesRead = entryStream.Read(buffer, 0, buffer.Length)) > 0) { crc.Update(buffer, 0, bytesRead); if (resultHandler != null) { totalBytes += bytesRead; status.SetBytesTested(totalBytes); resultHandler(status, null); } } } if (this[entryIndex].Crc != crc.Value) { status.AddError(); if ( resultHandler != null ) { resultHandler(status, "CRC mismatch"); } if ( strategy == TestStrategy.FindFirstError ) { testing = false; } } if (( this[entryIndex].Flags & (int)GeneralBitFlags.Descriptor) != 0 ) { ZipHelperStream helper = new ZipHelperStream(baseStream_); DescriptorData data = new DescriptorData(); helper.ReadDataDescriptor(this[entryIndex].LocalHeaderRequiresZip64, data); if (this[entryIndex].Crc != data.Crc) { status.AddError(); } if (this[entryIndex].CompressedSize != data.CompressedSize) { status.AddError(); } if (this[entryIndex].Size != data.Size) { status.AddError(); } } } if ( resultHandler != null ) { status.SetOperation(TestOperation.EntryComplete); resultHandler(status, null); } entryIndex += 1; } if ( resultHandler != null ) { status.SetOperation(TestOperation.MiscellaneousTests); resultHandler(status, null); } // TODO: the 'Corrina Johns' test where local headers are missing from // the central directory. They are therefore invisible to many archivers. } catch (Exception ex) { status.AddError(); if ( resultHandler != null ) { resultHandler(status, string.Format("Exception during test - '{0}'", ex.Message)); } } if ( resultHandler != null ) { status.SetOperation(TestOperation.Complete); status.SetEntry(null); resultHandler(status, null); } return (status.ErrorCount == 0); } [Flags] enum HeaderTest { Extract = 0x01, // Check that this header represents an entry whose data can be extracted Header = 0x02, // Check that this header contents are valid } /// /// Test a local header against that provided from the central directory /// /// /// The entry to test against /// /// The type of tests to carry out. /// The offset of the entries data in the file long TestLocalHeader(ZipEntry entry, HeaderTest tests) { lock(baseStream_) { bool testHeader = (tests & HeaderTest.Header) != 0; bool testData = (tests & HeaderTest.Extract) != 0; baseStream_.Seek(offsetOfFirstEntry + entry.Offset, SeekOrigin.Begin); if ((int)ReadLEUint() != ZipConstants.LocalHeaderSignature) { throw new ZipException(string.Format("Wrong local header signature @{0:X}", offsetOfFirstEntry + entry.Offset)); } short extractVersion = ( short ) (ReadLEUshort() & 0x00ff); short localFlags = ( short )ReadLEUshort(); short compressionMethod = ( short )ReadLEUshort(); short fileTime = ( short )ReadLEUshort(); short fileDate = ( short )ReadLEUshort(); uint crcValue = ReadLEUint(); long compressedSize = ReadLEUint(); long size = ReadLEUint(); int storedNameLength = ReadLEUshort(); int extraDataLength = ReadLEUshort(); byte[] nameData = new byte[storedNameLength]; StreamUtils.ReadFully(baseStream_, nameData); byte[] extraData = new byte[extraDataLength]; StreamUtils.ReadFully(baseStream_, extraData); ZipExtraData localExtraData = new ZipExtraData(extraData); // Extra data / zip64 checks if (localExtraData.Find(1)) { // 2010-03-04 Forum 10512: removed checks for version >= ZipConstants.VersionZip64 // and size or compressedSize = MaxValue, due to rogue creators. size = localExtraData.ReadLong(); compressedSize = localExtraData.ReadLong(); if ((localFlags & (int)GeneralBitFlags.Descriptor) != 0) { // These may be valid if patched later if ( (size != -1) && (size != entry.Size)) { throw new ZipException("Size invalid for descriptor"); } if ((compressedSize != -1) && (compressedSize != entry.CompressedSize)) { throw new ZipException("Compressed size invalid for descriptor"); } } } else { // No zip64 extra data but entry requires it. if ((extractVersion >= ZipConstants.VersionZip64) && (((uint)size == uint.MaxValue) || ((uint)compressedSize == uint.MaxValue))) { throw new ZipException("Required Zip64 extended information missing"); } } if ( testData ) { if ( entry.IsFile ) { if ( !entry.IsCompressionMethodSupported() ) { throw new ZipException("Compression method not supported"); } if ( (extractVersion > ZipConstants.VersionMadeBy) || ((extractVersion > 20) && (extractVersion < ZipConstants.VersionZip64)) ) { throw new ZipException(string.Format("Version required to extract this entry not supported ({0})", extractVersion)); } if ( (localFlags & ( int )(GeneralBitFlags.Patched | GeneralBitFlags.StrongEncryption | GeneralBitFlags.EnhancedCompress | GeneralBitFlags.HeaderMasked)) != 0 ) { throw new ZipException("The library does not support the zip version required to extract this entry"); } } } if (testHeader) { if ((extractVersion <= 63) && // Ignore later versions as we dont know about them.. (extractVersion != 10) && (extractVersion != 11) && (extractVersion != 20) && (extractVersion != 21) && (extractVersion != 25) && (extractVersion != 27) && (extractVersion != 45) && (extractVersion != 46) && (extractVersion != 50) && (extractVersion != 51) && (extractVersion != 52) && (extractVersion != 61) && (extractVersion != 62) && (extractVersion != 63) ) { throw new ZipException(string.Format("Version required to extract this entry is invalid ({0})", extractVersion)); } // Local entry flags dont have reserved bit set on. if ((localFlags & (int)(GeneralBitFlags.ReservedPKware4 | GeneralBitFlags.ReservedPkware14 | GeneralBitFlags.ReservedPkware15)) != 0) { throw new ZipException("Reserved bit flags cannot be set."); } // Encryption requires extract version >= 20 if (((localFlags & (int)GeneralBitFlags.Encrypted) != 0) && (extractVersion < 20)) { throw new ZipException(string.Format("Version required to extract this entry is too low for encryption ({0})", extractVersion)); } // Strong encryption requires encryption flag to be set and extract version >= 50. if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0) { if ((localFlags & (int)GeneralBitFlags.Encrypted) == 0) { throw new ZipException("Strong encryption flag set but encryption flag is not set"); } if (extractVersion < 50) { throw new ZipException(string.Format("Version required to extract this entry is too low for encryption ({0})", extractVersion)); } } // Patched entries require extract version >= 27 if (((localFlags & (int)GeneralBitFlags.Patched) != 0) && (extractVersion < 27)) { throw new ZipException(string.Format("Patched data requires higher version than ({0})", extractVersion)); } // Central header flags match local entry flags. if (localFlags != entry.Flags) { throw new ZipException("Central header/local header flags mismatch"); } // Central header compression method matches local entry if (entry.CompressionMethod != (CompressionMethod)compressionMethod) { throw new ZipException("Central header/local header compression method mismatch"); } if (entry.Version != extractVersion) { throw new ZipException("Extract version mismatch"); } // Strong encryption and extract version match if ((localFlags & (int)GeneralBitFlags.StrongEncryption) != 0) { if (extractVersion < 62) { throw new ZipException("Strong encryption flag set but version not high enough"); } } if ((localFlags & (int)GeneralBitFlags.HeaderMasked) != 0) { if ((fileTime != 0) || (fileDate != 0)) { throw new ZipException("Header masked set but date/time values non-zero"); } } if ((localFlags & (int)GeneralBitFlags.Descriptor) == 0) { if (crcValue != (uint)entry.Crc) { throw new ZipException("Central header/local header crc mismatch"); } } // Crc valid for empty entry. // This will also apply to streamed entries where size isnt known and the header cant be patched if ((size == 0) && (compressedSize == 0)) { if (crcValue != 0) { throw new ZipException("Invalid CRC for empty entry"); } } // TODO: make test more correct... can't compare lengths as was done originally as this can fail for MBCS strings // Assuming a code page at this point is not valid? Best is to store the name length in the ZipEntry probably if (entry.Name.Length > storedNameLength) { throw new ZipException("File name length mismatch"); } // Name data has already been read convert it and compare. string localName = ZipConstants.ConvertToStringExt(localFlags, nameData); // Central directory and local entry name match if (localName != entry.Name) { throw new ZipException("Central header and local header file name mismatch"); } // Directories have zero actual size but can have compressed size if (entry.IsDirectory) { if (size > 0) { throw new ZipException("Directory cannot have size"); } // There may be other cases where the compressed size can be greater than this? // If so until details are known we will be strict. if (entry.IsCrypted) { if (compressedSize > ZipConstants.CryptoHeaderSize + 2) { throw new ZipException("Directory compressed size invalid"); } } else if (compressedSize > 2) { // When not compressed the directory size can validly be 2 bytes // if the true size wasnt known when data was originally being written. // NOTE: Versions of the library 0.85.4 and earlier always added 2 bytes throw new ZipException("Directory compressed size invalid"); } } if (!ZipNameTransform.IsValidName(localName, true)) { throw new ZipException("Name is invalid"); } } // Tests that apply to both data and header. // Size can be verified only if it is known in the local header. // it will always be known in the central header. if (((localFlags & (int)GeneralBitFlags.Descriptor) == 0) || ((size > 0) || (compressedSize > 0))) { if (size != entry.Size) { throw new ZipException( string.Format("Size mismatch between central header({0}) and local header({1})", entry.Size, size)); } if (compressedSize != entry.CompressedSize && compressedSize != 0xFFFFFFFF && compressedSize != -1) { throw new ZipException( string.Format("Compressed size mismatch between central header({0}) and local header({1})", entry.CompressedSize, compressedSize)); } } int extraLength = storedNameLength + extraDataLength; return offsetOfFirstEntry + entry.Offset + ZipConstants.LocalHeaderBaseSize + extraLength; } } #endregion #region Updating const int DefaultBufferSize = 4096; /// /// The kind of update to apply. /// enum UpdateCommand { Copy, // Copy original file contents. Modify, // Change encryption, compression, attributes, name, time etc, of an existing file. Add, // Add a new file to the archive. } #region Properties /// /// Get / set the to apply to names when updating. /// public INameTransform NameTransform { get { return updateEntryFactory_.NameTransform; } set { updateEntryFactory_.NameTransform = value; } } /// /// Get/set the used to generate values /// during updates. /// public IEntryFactory EntryFactory { get { return updateEntryFactory_; } set { if (value == null) { updateEntryFactory_ = new ZipEntryFactory(); } else { updateEntryFactory_ = value; } } } /// /// Get /set the buffer size to be used when updating this zip file. /// public int BufferSize { get { return bufferSize_; } set { if ( value < 1024 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("value"); #else throw new ArgumentOutOfRangeException("value", "cannot be below 1024"); #endif } if ( bufferSize_ != value ) { bufferSize_ = value; copyBuffer_ = null; } } } /// /// Get a value indicating an update has been started. /// public bool IsUpdating { get { return updates_ != null; } } /// /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries. /// public UseZip64 UseZip64 { get { return useZip64_; } set { useZip64_ = value; } } #endregion #region Immediate updating // TBD: Direct form of updating // // public void Update(IEntryMatcher deleteMatcher) // { // } // // public void Update(IScanner addScanner) // { // } #endregion #region Deferred Updating /// /// Begin updating this archive. /// /// The archive storage for use during the update. /// The data source to utilise during updating. /// ZipFile has been closed. /// One of the arguments provided is null /// ZipFile has been closed. public void BeginUpdate(IArchiveStorage archiveStorage, IDynamicDataSource dataSource) { if ( archiveStorage == null ) { throw new ArgumentNullException("archiveStorage"); } if ( dataSource == null ) { throw new ArgumentNullException("dataSource"); } if ( isDisposed_ ) { throw new ObjectDisposedException("ZipFile"); } if ( IsEmbeddedArchive ) { throw new ZipException ("Cannot update embedded/SFX archives"); } archiveStorage_ = archiveStorage; updateDataSource_ = dataSource; // NOTE: the baseStream_ may not currently support writing or seeking. updateIndex_ = new Hashtable(); updates_ = new ArrayList(entries_.Length); foreach(ZipEntry entry in entries_) { int index = updates_.Add(new ZipUpdate(entry)); updateIndex_.Add(entry.Name, index); } // We must sort by offset before using offset's calculated sizes updates_.Sort(new UpdateComparer()); int idx = 0; foreach (ZipUpdate update in updates_) { //If last entry, there is no next entry offset to use if (idx == updates_.Count - 1) break; update.OffsetBasedSize = ((ZipUpdate)updates_[idx + 1]).Entry.Offset - update.Entry.Offset; idx++; } updateCount_ = updates_.Count; contentsEdited_ = false; commentEdited_ = false; newComment_ = null; } /// /// Begin updating to this archive. /// /// The storage to use during the update. public void BeginUpdate(IArchiveStorage archiveStorage) { BeginUpdate(archiveStorage, new DynamicDiskDataSource()); } /// /// Begin updating this archive. /// /// /// /// public void BeginUpdate() { if ( Name == null ) { BeginUpdate(new MemoryArchiveStorage(), new DynamicDiskDataSource()); } else { BeginUpdate(new DiskArchiveStorage(this), new DynamicDiskDataSource()); } } /// /// Commit current updates, updating this archive. /// /// /// /// ZipFile has been closed. public void CommitUpdate() { if ( isDisposed_ ) { throw new ObjectDisposedException("ZipFile"); } CheckUpdating(); try { updateIndex_.Clear(); updateIndex_=null; if( contentsEdited_ ) { RunUpdates(); } else if( commentEdited_ ) { UpdateCommentOnly(); } else { // Create an empty archive if none existed originally. if( entries_.Length==0 ) { byte[] theComment=(newComment_!=null)?newComment_.RawComment:ZipConstants.ConvertToArray(comment_); using( ZipHelperStream zhs=new ZipHelperStream(baseStream_) ) { zhs.WriteEndOfCentralDirectory(0, 0, 0, theComment); } } } } finally { PostUpdateCleanup(); } } /// /// Abort updating leaving the archive unchanged. /// /// /// public void AbortUpdate() { PostUpdateCleanup(); } /// /// Set the file comment to be recorded when the current update is commited. /// /// The comment to record. /// ZipFile has been closed. public void SetComment(string comment) { if ( isDisposed_ ) { throw new ObjectDisposedException("ZipFile"); } CheckUpdating(); newComment_ = new ZipString(comment); if ( newComment_.RawLength > 0xffff ) { newComment_ = null; throw new ZipException("Comment length exceeds maximum - 65535"); } // We dont take account of the original and current comment appearing to be the same // as encoding may be different. commentEdited_ = true; } #endregion #region Adding Entries void AddUpdate(ZipUpdate update) { contentsEdited_ = true; int index = FindExistingUpdate(update.Entry.Name); if (index >= 0) { if ( updates_[index] == null ) { updateCount_ += 1; } // Direct replacement is faster than delete and add. updates_[index] = update; } else { index = updates_.Add(update); updateCount_ += 1; updateIndex_.Add(update.Entry.Name, index); } } /// /// Add a new entry to the archive. /// /// The name of the file to add. /// The compression method to use. /// Ensure Unicode text is used for name and comment for this entry. /// Argument supplied is null. /// ZipFile has been closed. /// Compression method is not supported. public void Add(string fileName, CompressionMethod compressionMethod, bool useUnicodeText ) { if (fileName == null) { throw new ArgumentNullException("fileName"); } if ( isDisposed_ ) { throw new ObjectDisposedException("ZipFile"); } if (!ZipEntry.IsCompressionMethodSupported(compressionMethod)) { throw new ArgumentOutOfRangeException("compressionMethod"); } CheckUpdating(); contentsEdited_ = true; ZipEntry entry = EntryFactory.MakeFileEntry(fileName); entry.IsUnicodeText = useUnicodeText; entry.CompressionMethod = compressionMethod; AddUpdate(new ZipUpdate(fileName, entry)); } /// /// Add a new entry to the archive. /// /// The name of the file to add. /// The compression method to use. /// ZipFile has been closed. /// The compression method is not supported. public void Add(string fileName, CompressionMethod compressionMethod) { if ( fileName == null ) { throw new ArgumentNullException("fileName"); } if ( !ZipEntry.IsCompressionMethodSupported(compressionMethod) ) { throw new ArgumentOutOfRangeException("compressionMethod"); } CheckUpdating(); contentsEdited_ = true; ZipEntry entry = EntryFactory.MakeFileEntry(fileName); entry.CompressionMethod = compressionMethod; AddUpdate(new ZipUpdate(fileName, entry)); } /// /// Add a file to the archive. /// /// The name of the file to add. /// Argument supplied is null. public void Add(string fileName) { if ( fileName == null ) { throw new ArgumentNullException("fileName"); } CheckUpdating(); AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName))); } /// /// Add a file to the archive. /// /// The name of the file to add. /// The name to use for the on the Zip file created. /// Argument supplied is null. public void Add(string fileName, string entryName) { if (fileName == null) { throw new ArgumentNullException("fileName"); } if ( entryName == null ) { throw new ArgumentNullException("entryName"); } CheckUpdating(); AddUpdate(new ZipUpdate(fileName, EntryFactory.MakeFileEntry(fileName, entryName, true))); } /// /// Add a file entry with data. /// /// The source of the data for this entry. /// The name to give to the entry. public void Add(IStaticDataSource dataSource, string entryName) { if ( dataSource == null ) { throw new ArgumentNullException("dataSource"); } if ( entryName == null ) { throw new ArgumentNullException("entryName"); } CheckUpdating(); AddUpdate(new ZipUpdate(dataSource, EntryFactory.MakeFileEntry(entryName, false))); } /// /// Add a file entry with data. /// /// The source of the data for this entry. /// The name to give to the entry. /// The compression method to use. public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod) { if ( dataSource == null ) { throw new ArgumentNullException("dataSource"); } if ( entryName == null ) { throw new ArgumentNullException("entryName"); } CheckUpdating(); ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false); entry.CompressionMethod = compressionMethod; AddUpdate(new ZipUpdate(dataSource, entry)); } /// /// Add a file entry with data. /// /// The source of the data for this entry. /// The name to give to the entry. /// The compression method to use. /// Ensure Unicode text is used for name and comments for this entry. public void Add(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod, bool useUnicodeText) { if (dataSource == null) { throw new ArgumentNullException("dataSource"); } if ( entryName == null ) { throw new ArgumentNullException("entryName"); } CheckUpdating(); ZipEntry entry = EntryFactory.MakeFileEntry(entryName, false); entry.IsUnicodeText = useUnicodeText; entry.CompressionMethod = compressionMethod; AddUpdate(new ZipUpdate(dataSource, entry)); } /// /// Add a that contains no data. /// /// The entry to add. /// This can be used to add directories, volume labels, or empty file entries. public void Add(ZipEntry entry) { if ( entry == null ) { throw new ArgumentNullException("entry"); } CheckUpdating(); if ( (entry.Size != 0) || (entry.CompressedSize != 0) ) { throw new ZipException("Entry cannot have any data"); } AddUpdate(new ZipUpdate(UpdateCommand.Add, entry)); } /// /// Add a directory entry to the archive. /// /// The directory to add. public void AddDirectory(string directoryName) { if ( directoryName == null ) { throw new ArgumentNullException("directoryName"); } CheckUpdating(); ZipEntry dirEntry = EntryFactory.MakeDirectoryEntry(directoryName); AddUpdate(new ZipUpdate(UpdateCommand.Add, dirEntry)); } #endregion #region Modifying Entries /* Modify not yet ready for public consumption. Direct modification of an entry should not overwrite original data before its read. Safe mode is trivial in this sense. public void Modify(ZipEntry original, ZipEntry updated) { if ( original == null ) { throw new ArgumentNullException("original"); } if ( updated == null ) { throw new ArgumentNullException("updated"); } CheckUpdating(); contentsEdited_ = true; updates_.Add(new ZipUpdate(original, updated)); } */ #endregion #region Deleting Entries /// /// Delete an entry by name /// /// The filename to delete /// True if the entry was found and deleted; false otherwise. public bool Delete(string fileName) { if ( fileName == null ) { throw new ArgumentNullException("fileName"); } CheckUpdating(); bool result = false; int index = FindExistingUpdate(fileName); if ( (index >= 0) && (updates_[index] != null) ) { result = true; contentsEdited_ = true; updates_[index] = null; updateCount_ -= 1; } else { throw new ZipException("Cannot find entry to delete"); } return result; } /// /// Delete a from the archive. /// /// The entry to delete. public void Delete(ZipEntry entry) { if ( entry == null ) { throw new ArgumentNullException("entry"); } CheckUpdating(); int index = FindExistingUpdate(entry); if ( index >= 0 ) { contentsEdited_ = true; updates_[index] = null; updateCount_ -= 1; } else { throw new ZipException("Cannot find entry to delete"); } } #endregion #region Update Support #region Writing Values/Headers void WriteLEShort(int value) { baseStream_.WriteByte(( byte )(value & 0xff)); baseStream_.WriteByte(( byte )((value >> 8) & 0xff)); } /// /// Write an unsigned short in little endian byte order. /// void WriteLEUshort(ushort value) { baseStream_.WriteByte(( byte )(value & 0xff)); baseStream_.WriteByte(( byte )(value >> 8)); } /// /// Write an int in little endian byte order. /// void WriteLEInt(int value) { WriteLEShort(value & 0xffff); WriteLEShort(value >> 16); } /// /// Write an unsigned int in little endian byte order. /// void WriteLEUint(uint value) { WriteLEUshort((ushort)(value & 0xffff)); WriteLEUshort((ushort)(value >> 16)); } /// /// Write a long in little endian byte order. /// void WriteLeLong(long value) { WriteLEInt(( int )(value & 0xffffffff)); WriteLEInt(( int )(value >> 32)); } void WriteLEUlong(ulong value) { WriteLEUint(( uint )(value & 0xffffffff)); WriteLEUint(( uint )(value >> 32)); } void WriteLocalEntryHeader(ZipUpdate update) { ZipEntry entry = update.OutEntry; // TODO: Local offset will require adjusting for multi-disk zip files. entry.Offset = baseStream_.Position; // TODO: Need to clear any entry flags that dont make sense or throw an exception here. if (update.Command != UpdateCommand.Copy) { if (entry.CompressionMethod == CompressionMethod.Deflated) { if (entry.Size == 0) { // No need to compress - no data. entry.CompressedSize = entry.Size; entry.Crc = 0; entry.CompressionMethod = CompressionMethod.Stored; } } else if (entry.CompressionMethod == CompressionMethod.Stored) { entry.Flags &= ~(int)GeneralBitFlags.Descriptor; } if (HaveKeys) { entry.IsCrypted = true; if (entry.Crc < 0) { entry.Flags |= (int)GeneralBitFlags.Descriptor; } } else { entry.IsCrypted = false; } switch (useZip64_) { case UseZip64.Dynamic: if (entry.Size < 0) { entry.ForceZip64(); } break; case UseZip64.On: entry.ForceZip64(); break; case UseZip64.Off: // Do nothing. The entry itself may be using Zip64 independantly. break; } } // Write the local file header WriteLEInt(ZipConstants.LocalHeaderSignature); WriteLEShort(entry.Version); WriteLEShort(entry.Flags); WriteLEShort((byte)entry.CompressionMethod); WriteLEInt(( int )entry.DosTime); if ( !entry.HasCrc ) { // Note patch address for updating CRC later. update.CrcPatchOffset = baseStream_.Position; WriteLEInt(( int )0); } else { WriteLEInt(unchecked(( int )entry.Crc)); } if (entry.LocalHeaderRequiresZip64) { WriteLEInt(-1); WriteLEInt(-1); } else { if ( (entry.CompressedSize < 0) || (entry.Size < 0) ) { update.SizePatchOffset = baseStream_.Position; } WriteLEInt(( int )entry.CompressedSize); WriteLEInt(( int )entry.Size); } byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); if ( name.Length > 0xFFFF ) { throw new ZipException("Entry name too long."); } ZipExtraData ed = new ZipExtraData(entry.ExtraData); if ( entry.LocalHeaderRequiresZip64 ) { ed.StartNewEntry(); // Local entry header always includes size and compressed size. // NOTE the order of these fields is reversed when compared to the normal headers! ed.AddLeLong(entry.Size); ed.AddLeLong(entry.CompressedSize); ed.AddNewEntry(1); } else { ed.Delete(1); } entry.ExtraData = ed.GetEntryData(); WriteLEShort(name.Length); WriteLEShort(entry.ExtraData.Length); if ( name.Length > 0 ) { baseStream_.Write(name, 0, name.Length); } if ( entry.LocalHeaderRequiresZip64 ) { if ( !ed.Find(1) ) { throw new ZipException("Internal error cannot find extra data"); } update.SizePatchOffset = baseStream_.Position + ed.CurrentReadIndex; } if ( entry.ExtraData.Length > 0 ) { baseStream_.Write(entry.ExtraData, 0, entry.ExtraData.Length); } } int WriteCentralDirectoryHeader(ZipEntry entry) { if ( entry.CompressedSize < 0 ) { throw new ZipException("Attempt to write central directory entry with unknown csize"); } if ( entry.Size < 0 ) { throw new ZipException("Attempt to write central directory entry with unknown size"); } if ( entry.Crc < 0 ) { throw new ZipException("Attempt to write central directory entry with unknown crc"); } // Write the central file header WriteLEInt(ZipConstants.CentralHeaderSignature); // Version made by WriteLEShort(ZipConstants.VersionMadeBy); // Version required to extract WriteLEShort(entry.Version); WriteLEShort(entry.Flags); unchecked { WriteLEShort((byte)entry.CompressionMethod); WriteLEInt((int)entry.DosTime); WriteLEInt((int)entry.Crc); } if ( (entry.IsZip64Forced()) || (entry.CompressedSize >= 0xffffffff) ) { WriteLEInt(-1); } else { WriteLEInt((int)(entry.CompressedSize & 0xffffffff)); } if ( (entry.IsZip64Forced()) || (entry.Size >= 0xffffffff) ) { WriteLEInt(-1); } else { WriteLEInt((int)entry.Size); } byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); if ( name.Length > 0xFFFF ) { throw new ZipException("Entry name is too long."); } WriteLEShort(name.Length); // Central header extra data is different to local header version so regenerate. ZipExtraData ed = new ZipExtraData(entry.ExtraData); if ( entry.CentralHeaderRequiresZip64 ) { ed.StartNewEntry(); if ( (entry.Size >= 0xffffffff) || (useZip64_ == UseZip64.On) ) { ed.AddLeLong(entry.Size); } if ( (entry.CompressedSize >= 0xffffffff) || (useZip64_ == UseZip64.On) ) { ed.AddLeLong(entry.CompressedSize); } if ( entry.Offset >= 0xffffffff ) { ed.AddLeLong(entry.Offset); } // Number of disk on which this file starts isnt supported and is never written here. ed.AddNewEntry(1); } else { // Should have already be done when local header was added. ed.Delete(1); } byte[] centralExtraData = ed.GetEntryData(); WriteLEShort(centralExtraData.Length); WriteLEShort(entry.Comment != null ? entry.Comment.Length : 0); WriteLEShort(0); // disk number WriteLEShort(0); // internal file attributes // External file attributes... if ( entry.ExternalFileAttributes != -1 ) { WriteLEInt(entry.ExternalFileAttributes); } else { if ( entry.IsDirectory ) { WriteLEUint(16); } else { WriteLEUint(0); } } if ( entry.Offset >= 0xffffffff ) { WriteLEUint(0xffffffff); } else { WriteLEUint((uint)(int)entry.Offset); } if ( name.Length > 0 ) { baseStream_.Write(name, 0, name.Length); } if ( centralExtraData.Length > 0 ) { baseStream_.Write(centralExtraData, 0, centralExtraData.Length); } byte[] rawComment = (entry.Comment != null) ? Encoding.ASCII.GetBytes(entry.Comment) : new byte[0]; if ( rawComment.Length > 0 ) { baseStream_.Write(rawComment, 0, rawComment.Length); } return ZipConstants.CentralHeaderBaseSize + name.Length + centralExtraData.Length + rawComment.Length; } #endregion void PostUpdateCleanup() { updateDataSource_ = null; updates_ = null; updateIndex_ = null; if (archiveStorage_ != null) { archiveStorage_.Dispose(); archiveStorage_=null; } } string GetTransformedFileName(string name) { INameTransform transform = NameTransform; return (transform != null) ? transform.TransformFile(name) : name; } string GetTransformedDirectoryName(string name) { INameTransform transform = NameTransform; return (transform != null) ? transform.TransformDirectory(name) : name; } /// /// Get a raw memory buffer. /// /// Returns a raw memory buffer. byte[] GetBuffer() { if ( copyBuffer_ == null ) { copyBuffer_ = new byte[bufferSize_]; } return copyBuffer_; } void CopyDescriptorBytes(ZipUpdate update, Stream dest, Stream source) { int bytesToCopy = GetDescriptorSize(update); if ( bytesToCopy > 0 ) { byte[] buffer = GetBuffer(); while ( bytesToCopy > 0 ) { int readSize = Math.Min(buffer.Length, bytesToCopy); int bytesRead = source.Read(buffer, 0, readSize); if ( bytesRead > 0 ) { dest.Write(buffer, 0, bytesRead); bytesToCopy -= bytesRead; } else { throw new ZipException("Unxpected end of stream"); } } } } void CopyBytes(ZipUpdate update, Stream destination, Stream source, long bytesToCopy, bool updateCrc) { if ( destination == source ) { throw new InvalidOperationException("Destination and source are the same"); } // NOTE: Compressed size is updated elsewhere. Crc32 crc = new Crc32(); byte[] buffer = GetBuffer(); long targetBytes = bytesToCopy; long totalBytesRead = 0; int bytesRead; do { int readSize = buffer.Length; if ( bytesToCopy < readSize ) { readSize = (int)bytesToCopy; } bytesRead = source.Read(buffer, 0, readSize); if ( bytesRead > 0 ) { if ( updateCrc ) { crc.Update(buffer, 0, bytesRead); } destination.Write(buffer, 0, bytesRead); bytesToCopy -= bytesRead; totalBytesRead += bytesRead; } } while ( (bytesRead > 0) && (bytesToCopy > 0) ); if ( totalBytesRead != targetBytes ) { throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead)); } if ( updateCrc ) { update.OutEntry.Crc = crc.Value; } } /// /// Get the size of the source descriptor for a . /// /// The update to get the size for. /// The descriptor size, zero if there isnt one. int GetDescriptorSize(ZipUpdate update) { int result = 0; if ( (update.Entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) { result = ZipConstants.DataDescriptorSize - 4; if ( update.Entry.LocalHeaderRequiresZip64 ) { result = ZipConstants.Zip64DataDescriptorSize - 4; } } return result; } void CopyDescriptorBytesDirect(ZipUpdate update, Stream stream, ref long destinationPosition, long sourcePosition) { int bytesToCopy = GetDescriptorSize(update); while ( bytesToCopy > 0 ) { int readSize = (int)bytesToCopy; byte[] buffer = GetBuffer(); stream.Position = sourcePosition; int bytesRead = stream.Read(buffer, 0, readSize); if ( bytesRead > 0 ) { stream.Position = destinationPosition; stream.Write(buffer, 0, bytesRead); bytesToCopy -= bytesRead; destinationPosition += bytesRead; sourcePosition += bytesRead; } else { throw new ZipException("Unxpected end of stream"); } } } void CopyEntryDataDirect(ZipUpdate update, Stream stream, bool updateCrc, ref long destinationPosition, ref long sourcePosition) { long bytesToCopy = update.Entry.CompressedSize; // NOTE: Compressed size is updated elsewhere. Crc32 crc = new Crc32(); byte[] buffer = GetBuffer(); long targetBytes = bytesToCopy; long totalBytesRead = 0; int bytesRead; do { int readSize = buffer.Length; if ( bytesToCopy < readSize ) { readSize = (int)bytesToCopy; } stream.Position = sourcePosition; bytesRead = stream.Read(buffer, 0, readSize); if ( bytesRead > 0 ) { if ( updateCrc ) { crc.Update(buffer, 0, bytesRead); } stream.Position = destinationPosition; stream.Write(buffer, 0, bytesRead); destinationPosition += bytesRead; sourcePosition += bytesRead; bytesToCopy -= bytesRead; totalBytesRead += bytesRead; } } while ( (bytesRead > 0) && (bytesToCopy > 0) ); if ( totalBytesRead != targetBytes ) { throw new ZipException(string.Format("Failed to copy bytes expected {0} read {1}", targetBytes, totalBytesRead)); } if ( updateCrc ) { update.OutEntry.Crc = crc.Value; } } int FindExistingUpdate(ZipEntry entry) { int result = -1; string convertedName = GetTransformedFileName(entry.Name); if (updateIndex_.ContainsKey(convertedName)) { result = (int)updateIndex_[convertedName]; } /* // This is slow like the coming of the next ice age but takes less storage and may be useful // for CF? for (int index = 0; index < updates_.Count; ++index) { ZipUpdate zu = ( ZipUpdate )updates_[index]; if ( (zu.Entry.ZipFileIndex == entry.ZipFileIndex) && (string.Compare(convertedName, zu.Entry.Name, true, CultureInfo.InvariantCulture) == 0) ) { result = index; break; } } */ return result; } int FindExistingUpdate(string fileName) { int result = -1; string convertedName = GetTransformedFileName(fileName); if (updateIndex_.ContainsKey(convertedName)) { result = (int)updateIndex_[convertedName]; } /* // This is slow like the coming of the next ice age but takes less storage and may be useful // for CF? for ( int index = 0; index < updates_.Count; ++index ) { if ( string.Compare(convertedName, (( ZipUpdate )updates_[index]).Entry.Name, true, CultureInfo.InvariantCulture) == 0 ) { result = index; break; } } */ return result; } /// /// Get an output stream for the specified /// /// The entry to get an output stream for. /// The output stream obtained for the entry. Stream GetOutputStream(ZipEntry entry) { Stream result = baseStream_; if ( entry.IsCrypted == true ) { #if NETCF_1_0 throw new ZipException("Encryption not supported for Compact Framework 1.0"); #else result = CreateAndInitEncryptionStream(result, entry); #endif } switch ( entry.CompressionMethod ) { case CompressionMethod.Stored: result = new UncompressedStream(result); break; case CompressionMethod.Deflated: DeflaterOutputStream dos = new DeflaterOutputStream(result, new Deflater(9, true)); dos.IsStreamOwner = false; result = dos; break; default: throw new ZipException("Unknown compression method " + entry.CompressionMethod); } return result; } void AddEntry(ZipFile workFile, ZipUpdate update) { Stream source = null; if ( update.Entry.IsFile ) { source = update.GetSource(); if ( source == null ) { source = updateDataSource_.GetSource(update.Entry, update.Filename); } } if ( source != null ) { using ( source ) { long sourceStreamLength = source.Length; if ( update.OutEntry.Size < 0 ) { update.OutEntry.Size = sourceStreamLength; } else { // Check for errant entries. if ( update.OutEntry.Size != sourceStreamLength ) { throw new ZipException("Entry size/stream size mismatch"); } } workFile.WriteLocalEntryHeader(update); long dataStart = workFile.baseStream_.Position; using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) { CopyBytes(update, output, source, sourceStreamLength, true); } long dataEnd = workFile.baseStream_.Position; update.OutEntry.CompressedSize = dataEnd - dataStart; if ((update.OutEntry.Flags & (int)GeneralBitFlags.Descriptor) == (int)GeneralBitFlags.Descriptor) { ZipHelperStream helper = new ZipHelperStream(workFile.baseStream_); helper.WriteDataDescriptor(update.OutEntry); } } } else { workFile.WriteLocalEntryHeader(update); update.OutEntry.CompressedSize = 0; } } void ModifyEntry(ZipFile workFile, ZipUpdate update) { workFile.WriteLocalEntryHeader(update); long dataStart = workFile.baseStream_.Position; // TODO: This is slow if the changes don't effect the data!! if ( update.Entry.IsFile && (update.Filename != null) ) { using ( Stream output = workFile.GetOutputStream(update.OutEntry) ) { using ( Stream source = this.GetInputStream(update.Entry) ) { CopyBytes(update, output, source, source.Length, true); } } } long dataEnd = workFile.baseStream_.Position; update.Entry.CompressedSize = dataEnd - dataStart; } void CopyEntryDirect(ZipFile workFile, ZipUpdate update, ref long destinationPosition) { bool skipOver = false; if ( update.Entry.Offset == destinationPosition ) { skipOver = true; } if ( !skipOver ) { baseStream_.Position = destinationPosition; workFile.WriteLocalEntryHeader(update); destinationPosition = baseStream_.Position; } long sourcePosition = 0; const int NameLengthOffset = 26; // TODO: Add base for SFX friendly handling long entryDataOffset = update.Entry.Offset + NameLengthOffset; baseStream_.Seek(entryDataOffset, SeekOrigin.Begin); // Clumsy way of handling retrieving the original name and extra data length for now. // TODO: Stop re-reading name and data length in CopyEntryDirect. uint nameLength = ReadLEUshort(); uint extraLength = ReadLEUshort(); sourcePosition = baseStream_.Position + nameLength + extraLength; if (skipOver) { if (update.OffsetBasedSize != -1) destinationPosition += update.OffsetBasedSize; else // TODO: Find out why this calculation comes up 4 bytes short on some entries in ODT (Office Document Text) archives. // WinZip produces a warning on these entries: // "caution: value of lrec.csize (compressed size) changed from ..." destinationPosition += (sourcePosition - entryDataOffset) + NameLengthOffset + // Header size update.Entry.CompressedSize + GetDescriptorSize(update); } else { if ( update.Entry.CompressedSize > 0 ) { CopyEntryDataDirect(update, baseStream_, false, ref destinationPosition, ref sourcePosition ); } CopyDescriptorBytesDirect(update, baseStream_, ref destinationPosition, sourcePosition); } } void CopyEntry(ZipFile workFile, ZipUpdate update) { workFile.WriteLocalEntryHeader(update); if ( update.Entry.CompressedSize > 0 ) { const int NameLengthOffset = 26; long entryDataOffset = update.Entry.Offset + NameLengthOffset; // TODO: This wont work for SFX files! baseStream_.Seek(entryDataOffset, SeekOrigin.Begin); uint nameLength = ReadLEUshort(); uint extraLength = ReadLEUshort(); baseStream_.Seek(nameLength + extraLength, SeekOrigin.Current); CopyBytes(update, workFile.baseStream_, baseStream_, update.Entry.CompressedSize, false); } CopyDescriptorBytes(update, workFile.baseStream_, baseStream_); } void Reopen(Stream source) { if ( source == null ) { throw new ZipException("Failed to reopen archive - no source"); } isNewArchive_ = false; baseStream_ = source; ReadEntries(); } void Reopen() { if (Name == null) { throw new InvalidOperationException("Name is not known cannot Reopen"); } Reopen(File.Open(Name, FileMode.Open, FileAccess.Read, FileShare.Read)); } void UpdateCommentOnly() { long baseLength = baseStream_.Length; ZipHelperStream updateFile = null; if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) { Stream copyStream = archiveStorage_.MakeTemporaryCopy(baseStream_); updateFile = new ZipHelperStream(copyStream); updateFile.IsStreamOwner = true; baseStream_.Close(); baseStream_ = null; } else { if (archiveStorage_.UpdateMode == FileUpdateMode.Direct) { // TODO: archiveStorage wasnt originally intended for this use. // Need to revisit this to tidy up handling as archive storage currently doesnt // handle the original stream well. // The problem is when using an existing zip archive with an in memory archive storage. // The open stream wont support writing but the memory storage should open the same file not an in memory one. // Need to tidy up the archive storage interface and contract basically. baseStream_ = archiveStorage_.OpenForDirectUpdate(baseStream_); updateFile = new ZipHelperStream(baseStream_); } else { baseStream_.Close(); baseStream_ = null; updateFile = new ZipHelperStream(Name); } } using ( updateFile ) { long locatedCentralDirOffset = updateFile.LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature, baseLength, ZipConstants.EndOfCentralRecordBaseSize, 0xffff); if ( locatedCentralDirOffset < 0 ) { throw new ZipException("Cannot find central directory"); } const int CentralHeaderCommentSizeOffset = 16; updateFile.Position += CentralHeaderCommentSizeOffset; byte[] rawComment = newComment_.RawComment; updateFile.WriteLEShort(rawComment.Length); updateFile.Write(rawComment, 0, rawComment.Length); updateFile.SetLength(updateFile.Position); } if ( archiveStorage_.UpdateMode == FileUpdateMode.Safe ) { Reopen(archiveStorage_.ConvertTemporaryToFinal()); } else { ReadEntries(); } } /// /// Class used to sort updates. /// class UpdateComparer : IComparer { /// /// Compares two objects and returns a value indicating whether one is /// less than, equal to or greater than the other. /// /// First object to compare /// Second object to compare. /// Compare result. public int Compare( object x, object y) { ZipUpdate zx = x as ZipUpdate; ZipUpdate zy = y as ZipUpdate; int result; if (zx == null) { if (zy == null) { result = 0; } else { result = -1; } } else if (zy == null) { result = 1; } else { int xCmdValue = ((zx.Command == UpdateCommand.Copy) || (zx.Command == UpdateCommand.Modify)) ? 0 : 1; int yCmdValue = ((zy.Command == UpdateCommand.Copy) || (zy.Command == UpdateCommand.Modify)) ? 0 : 1; result = xCmdValue - yCmdValue; if (result == 0) { long offsetDiff = zx.Entry.Offset - zy.Entry.Offset; if (offsetDiff < 0) { result = -1; } else if (offsetDiff == 0) { result = 0; } else { result = 1; } } } return result; } } void RunUpdates() { long sizeEntries = 0; long endOfStream = 0; bool directUpdate = false; long destinationPosition = 0; // NOT SFX friendly ZipFile workFile; if ( IsNewArchive ) { workFile = this; workFile.baseStream_.Position = 0; directUpdate = true; } else if ( archiveStorage_.UpdateMode == FileUpdateMode.Direct ) { workFile = this; workFile.baseStream_.Position = 0; directUpdate = true; // Sort the updates by offset within copies/modifies, then adds. // This ensures that data required by copies will not be overwritten. updates_.Sort(new UpdateComparer()); } else { workFile = ZipFile.Create(archiveStorage_.GetTemporaryOutput()); workFile.UseZip64 = UseZip64; if (key != null) { workFile.key = (byte[])key.Clone(); } } try { foreach ( ZipUpdate update in updates_ ) { if (update != null) { switch (update.Command) { case UpdateCommand.Copy: if (directUpdate) { CopyEntryDirect(workFile, update, ref destinationPosition); } else { CopyEntry(workFile, update); } break; case UpdateCommand.Modify: // TODO: Direct modifying of an entry will take some legwork. ModifyEntry(workFile, update); break; case UpdateCommand.Add: if (!IsNewArchive && directUpdate) { workFile.baseStream_.Position = destinationPosition; } AddEntry(workFile, update); if (directUpdate) { destinationPosition = workFile.baseStream_.Position; } break; } } } if ( !IsNewArchive && directUpdate ) { workFile.baseStream_.Position = destinationPosition; } long centralDirOffset = workFile.baseStream_.Position; foreach ( ZipUpdate update in updates_ ) { if (update != null) { sizeEntries += workFile.WriteCentralDirectoryHeader(update.OutEntry); } } byte[] theComment = (newComment_ != null) ? newComment_.RawComment : ZipConstants.ConvertToArray(comment_); using ( ZipHelperStream zhs = new ZipHelperStream(workFile.baseStream_) ) { zhs.WriteEndOfCentralDirectory(updateCount_, sizeEntries, centralDirOffset, theComment); } endOfStream = workFile.baseStream_.Position; // And now patch entries... foreach ( ZipUpdate update in updates_ ) { if (update != null) { // If the size of the entry is zero leave the crc as 0 as well. // The calculated crc will be all bits on... if ((update.CrcPatchOffset > 0) && (update.OutEntry.CompressedSize > 0)) { workFile.baseStream_.Position = update.CrcPatchOffset; workFile.WriteLEInt((int)update.OutEntry.Crc); } if (update.SizePatchOffset > 0) { workFile.baseStream_.Position = update.SizePatchOffset; if (update.OutEntry.LocalHeaderRequiresZip64) { workFile.WriteLeLong(update.OutEntry.Size); workFile.WriteLeLong(update.OutEntry.CompressedSize); } else { workFile.WriteLEInt((int)update.OutEntry.CompressedSize); workFile.WriteLEInt((int)update.OutEntry.Size); } } } } } catch { workFile.Close(); if (!directUpdate && (workFile.Name != null)) { File.Delete(workFile.Name); } throw; } if (directUpdate) { workFile.baseStream_.SetLength(endOfStream); workFile.baseStream_.Flush(); isNewArchive_ = false; ReadEntries(); } else { baseStream_.Close(); Reopen(archiveStorage_.ConvertTemporaryToFinal()); } } void CheckUpdating() { if ( updates_ == null ) { throw new InvalidOperationException("BeginUpdate has not been called"); } } #endregion #region ZipUpdate class /// /// Represents a pending update to a Zip file. /// class ZipUpdate { #region Constructors public ZipUpdate(string fileName, ZipEntry entry) { command_ = UpdateCommand.Add; entry_ = entry; filename_ = fileName; } [Obsolete] public ZipUpdate(string fileName, string entryName, CompressionMethod compressionMethod) { command_ = UpdateCommand.Add; entry_ = new ZipEntry(entryName); entry_.CompressionMethod = compressionMethod; filename_ = fileName; } [Obsolete] public ZipUpdate(string fileName, string entryName) : this(fileName, entryName, CompressionMethod.Deflated) { // Do nothing. } [Obsolete] public ZipUpdate(IStaticDataSource dataSource, string entryName, CompressionMethod compressionMethod) { command_ = UpdateCommand.Add; entry_ = new ZipEntry(entryName); entry_.CompressionMethod = compressionMethod; dataSource_ = dataSource; } public ZipUpdate(IStaticDataSource dataSource, ZipEntry entry) { command_ = UpdateCommand.Add; entry_ = entry; dataSource_ = dataSource; } public ZipUpdate(ZipEntry original, ZipEntry updated) { throw new ZipException("Modify not currently supported"); /* command_ = UpdateCommand.Modify; entry_ = ( ZipEntry )original.Clone(); outEntry_ = ( ZipEntry )updated.Clone(); */ } public ZipUpdate(UpdateCommand command, ZipEntry entry) { command_ = command; entry_ = ( ZipEntry )entry.Clone(); } /// /// Copy an existing entry. /// /// The existing entry to copy. public ZipUpdate(ZipEntry entry) : this(UpdateCommand.Copy, entry) { // Do nothing. } #endregion /// /// Get the for this update. /// /// This is the source or original entry. public ZipEntry Entry { get { return entry_; } } /// /// Get the that will be written to the updated/new file. /// public ZipEntry OutEntry { get { if ( outEntry_ == null ) { outEntry_ = (ZipEntry)entry_.Clone(); } return outEntry_; } } /// /// Get the command for this update. /// public UpdateCommand Command { get { return command_; } } /// /// Get the filename if any for this update. Null if none exists. /// public string Filename { get { return filename_; } } /// /// Get/set the location of the size patch for this update. /// public long SizePatchOffset { get { return sizePatchOffset_; } set { sizePatchOffset_ = value; } } /// /// Get /set the location of the crc patch for this update. /// public long CrcPatchOffset { get { return crcPatchOffset_; } set { crcPatchOffset_ = value; } } /// /// Get/set the size calculated by offset. /// Specifically, the difference between this and next entry's starting offset. /// public long OffsetBasedSize { get { return _offsetBasedSize; } set { _offsetBasedSize = value; } } public Stream GetSource() { Stream result = null; if ( dataSource_ != null ) { result = dataSource_.GetSource(); } return result; } #region Instance Fields ZipEntry entry_; ZipEntry outEntry_; UpdateCommand command_; IStaticDataSource dataSource_; string filename_; long sizePatchOffset_ = -1; long crcPatchOffset_ = -1; long _offsetBasedSize = -1; #endregion } #endregion #endregion #region Disposing #region IDisposable Members void IDisposable.Dispose() { Close(); } #endregion void DisposeInternal(bool disposing) { if ( !isDisposed_ ) { isDisposed_ = true; entries_ = new ZipEntry[0]; if ( IsStreamOwner && (baseStream_ != null) ) { lock(baseStream_) { baseStream_.Close(); } } PostUpdateCleanup(); } } /// /// Releases the unmanaged resources used by the this instance and optionally releases the managed resources. /// /// true to release both managed and unmanaged resources; /// false to release only unmanaged resources. protected virtual void Dispose(bool disposing) { DisposeInternal(disposing); } #endregion #region Internal routines #region Reading /// /// Read an unsigned short in little endian byte order. /// /// Returns the value read. /// /// The stream ends prematurely /// ushort ReadLEUshort() { int data1 = baseStream_.ReadByte(); if ( data1 < 0 ) { throw new EndOfStreamException("End of stream"); } int data2 = baseStream_.ReadByte(); if ( data2 < 0 ) { throw new EndOfStreamException("End of stream"); } return unchecked((ushort)((ushort)data1 | (ushort)(data2 << 8))); } /// /// Read a uint in little endian byte order. /// /// Returns the value read. /// /// An i/o error occurs. /// /// /// The file ends prematurely /// uint ReadLEUint() { return (uint)(ReadLEUshort() | (ReadLEUshort() << 16)); } ulong ReadLEUlong() { return ReadLEUint() | ((ulong)ReadLEUint() << 32); } #endregion // NOTE this returns the offset of the first byte after the signature. long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData) { using ( ZipHelperStream les = new ZipHelperStream(baseStream_) ) { return les.LocateBlockWithSignature(signature, endLocation, minimumBlockSize, maximumVariableData); } } /// /// Search for and read the central directory of a zip file filling the entries array. /// /// /// An i/o error occurs. /// /// /// The central directory is malformed or cannot be found /// void ReadEntries() { // Search for the End Of Central Directory. When a zip comment is // present the directory will start earlier // // The search is limited to 64K which is the maximum size of a trailing comment field to aid speed. // This should be compatible with both SFX and ZIP files but has only been tested for Zip files // If a SFX file has the Zip data attached as a resource and there are other resources occuring later then // this could be invalid. // Could also speed this up by reading memory in larger blocks. if (baseStream_.CanSeek == false) { throw new ZipException("ZipFile stream must be seekable"); } long locatedEndOfCentralDir = LocateBlockWithSignature(ZipConstants.EndOfCentralDirectorySignature, baseStream_.Length, ZipConstants.EndOfCentralRecordBaseSize, 0xffff); if (locatedEndOfCentralDir < 0) { throw new ZipException("Cannot find central directory"); } // Read end of central directory record ushort thisDiskNumber = ReadLEUshort(); ushort startCentralDirDisk = ReadLEUshort(); ulong entriesForThisDisk = ReadLEUshort(); ulong entriesForWholeCentralDir = ReadLEUshort(); ulong centralDirSize = ReadLEUint(); long offsetOfCentralDir = ReadLEUint(); uint commentSize = ReadLEUshort(); if ( commentSize > 0 ) { byte[] comment = new byte[commentSize]; StreamUtils.ReadFully(baseStream_, comment); comment_ = ZipConstants.ConvertToString(comment); } else { comment_ = string.Empty; } bool isZip64 = false; // Check if zip64 header information is required. if ( (thisDiskNumber == 0xffff) || (startCentralDirDisk == 0xffff) || (entriesForThisDisk == 0xffff) || (entriesForWholeCentralDir == 0xffff) || (centralDirSize == 0xffffffff) || (offsetOfCentralDir == 0xffffffff) ) { isZip64 = true; long offset = LocateBlockWithSignature(ZipConstants.Zip64CentralDirLocatorSignature, locatedEndOfCentralDir, 0, 0x1000); if ( offset < 0 ) { throw new ZipException("Cannot find Zip64 locator"); } // number of the disk with the start of the zip64 end of central directory 4 bytes // relative offset of the zip64 end of central directory record 8 bytes // total number of disks 4 bytes ReadLEUint(); // startDisk64 is not currently used ulong offset64 = ReadLEUlong(); uint totalDisks = ReadLEUint(); baseStream_.Position = (long)offset64; long sig64 = ReadLEUint(); if ( sig64 != ZipConstants.Zip64CentralFileHeaderSignature ) { throw new ZipException(string.Format("Invalid Zip64 Central directory signature at {0:X}", offset64)); } // NOTE: Record size = SizeOfFixedFields + SizeOfVariableData - 12. ulong recordSize = ReadLEUlong(); int versionMadeBy = ReadLEUshort(); int versionToExtract = ReadLEUshort(); uint thisDisk = ReadLEUint(); uint centralDirDisk = ReadLEUint(); entriesForThisDisk = ReadLEUlong(); entriesForWholeCentralDir = ReadLEUlong(); centralDirSize = ReadLEUlong(); offsetOfCentralDir = (long)ReadLEUlong(); // NOTE: zip64 extensible data sector (variable size) is ignored. } entries_ = new ZipEntry[entriesForThisDisk]; // SFX/embedded support, find the offset of the first entry vis the start of the stream // This applies to Zip files that are appended to the end of an SFX stub. // Or are appended as a resource to an executable. // Zip files created by some archivers have the offsets altered to reflect the true offsets // and so dont require any adjustment here... // TODO: Difficulty with Zip64 and SFX offset handling needs resolution - maths? if ( !isZip64 && (offsetOfCentralDir < locatedEndOfCentralDir - (4 + (long)centralDirSize)) ) { offsetOfFirstEntry = locatedEndOfCentralDir - (4 + (long)centralDirSize + offsetOfCentralDir); if (offsetOfFirstEntry <= 0) { throw new ZipException("Invalid embedded zip archive"); } } baseStream_.Seek(offsetOfFirstEntry + offsetOfCentralDir, SeekOrigin.Begin); for (ulong i = 0; i < entriesForThisDisk; i++) { if (ReadLEUint() != ZipConstants.CentralHeaderSignature) { throw new ZipException("Wrong Central Directory signature"); } int versionMadeBy = ReadLEUshort(); int versionToExtract = ReadLEUshort(); int bitFlags = ReadLEUshort(); int method = ReadLEUshort(); uint dostime = ReadLEUint(); uint crc = ReadLEUint(); long csize = (long)ReadLEUint(); long size = (long)ReadLEUint(); int nameLen = ReadLEUshort(); int extraLen = ReadLEUshort(); int commentLen = ReadLEUshort(); int diskStartNo = ReadLEUshort(); // Not currently used int internalAttributes = ReadLEUshort(); // Not currently used uint externalAttributes = ReadLEUint(); long offset = ReadLEUint(); byte[] buffer = new byte[Math.Max(nameLen, commentLen)]; StreamUtils.ReadFully(baseStream_, buffer, 0, nameLen); string name = ZipConstants.ConvertToStringExt(bitFlags, buffer, nameLen); ZipEntry entry = new ZipEntry(name, versionToExtract, versionMadeBy, (CompressionMethod)method); entry.Crc = crc & 0xffffffffL; entry.Size = size & 0xffffffffL; entry.CompressedSize = csize & 0xffffffffL; entry.Flags = bitFlags; entry.DosTime = (uint)dostime; entry.ZipFileIndex = (long)i; entry.Offset = offset; entry.ExternalFileAttributes = (int)externalAttributes; if ((bitFlags & 8) == 0) { entry.CryptoCheckValue = (byte)(crc >> 24); } else { entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff); } if (extraLen > 0) { byte[] extra = new byte[extraLen]; StreamUtils.ReadFully(baseStream_, extra); entry.ExtraData = extra; } entry.ProcessExtraData(false); if (commentLen > 0) { StreamUtils.ReadFully(baseStream_, buffer, 0, commentLen); entry.Comment = ZipConstants.ConvertToStringExt(bitFlags, buffer, commentLen); } entries_[i] = entry; } } /// /// Locate the data for a given entry. /// /// /// The start offset of the data. /// /// /// The stream ends prematurely /// /// /// The local header signature is invalid, the entry and central header file name lengths are different /// or the local and entry compression methods dont match /// long LocateEntry(ZipEntry entry) { return TestLocalHeader(entry, HeaderTest.Extract); } #if !NETCF_1_0 Stream CreateAndInitDecryptionStream(Stream baseStream, ZipEntry entry) { CryptoStream result = null; if ( (entry.Version < ZipConstants.VersionStrongEncryption) || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) { PkzipClassicManaged classicManaged = new PkzipClassicManaged(); OnKeysRequired(entry.Name); if (HaveKeys == false) { throw new ZipException("No password available for encrypted stream"); } result = new CryptoStream(baseStream, classicManaged.CreateDecryptor(key, null), CryptoStreamMode.Read); CheckClassicPassword(result, entry); } else { #if !NET_1_1 && !NETCF_2_0 if (entry.Version == ZipConstants.VERSION_AES) { // OnKeysRequired(entry.Name); if (HaveKeys == false) { throw new ZipException("No password available for AES encrypted stream"); } int saltLen = entry.AESSaltLen; byte[] saltBytes = new byte[saltLen]; int saltIn = baseStream.Read(saltBytes, 0, saltLen); if (saltIn != saltLen) throw new ZipException("AES Salt expected " + saltLen + " got " + saltIn); // byte[] pwdVerifyRead = new byte[2]; baseStream.Read(pwdVerifyRead, 0, 2); int blockSize = entry.AESKeySize / 8; // bits to bytes ZipAESTransform decryptor = new ZipAESTransform(rawPassword_, saltBytes, blockSize, false); byte[] pwdVerifyCalc = decryptor.PwdVerifier; if (pwdVerifyCalc[0] != pwdVerifyRead[0] || pwdVerifyCalc[1] != pwdVerifyRead[1]) throw new Exception("Invalid password for AES"); result = new ZipAESStream(baseStream, decryptor, CryptoStreamMode.Read); } else #endif { throw new ZipException("Decryption method not supported"); } } return result; } Stream CreateAndInitEncryptionStream(Stream baseStream, ZipEntry entry) { CryptoStream result = null; if ( (entry.Version < ZipConstants.VersionStrongEncryption) || (entry.Flags & (int)GeneralBitFlags.StrongEncryption) == 0) { PkzipClassicManaged classicManaged = new PkzipClassicManaged(); OnKeysRequired(entry.Name); if (HaveKeys == false) { throw new ZipException("No password available for encrypted stream"); } // Closing a CryptoStream will close the base stream as well so wrap it in an UncompressedStream // which doesnt do this. result = new CryptoStream(new UncompressedStream(baseStream), classicManaged.CreateEncryptor(key, null), CryptoStreamMode.Write); if ( (entry.Crc < 0) || (entry.Flags & 8) != 0) { WriteEncryptionHeader(result, entry.DosTime << 16); } else { WriteEncryptionHeader(result, entry.Crc); } } return result; } static void CheckClassicPassword(CryptoStream classicCryptoStream, ZipEntry entry) { byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize]; StreamUtils.ReadFully(classicCryptoStream, cryptbuffer); if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) { throw new ZipException("Invalid password"); } } #endif static void WriteEncryptionHeader(Stream stream, long crcValue) { byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize]; Random rnd = new Random(); rnd.NextBytes(cryptBuffer); cryptBuffer[11] = (byte)(crcValue >> 24); stream.Write(cryptBuffer, 0, cryptBuffer.Length); } #endregion #region Instance Fields bool isDisposed_; string name_; string comment_; string rawPassword_; Stream baseStream_; bool isStreamOwner; long offsetOfFirstEntry; ZipEntry[] entries_; byte[] key; bool isNewArchive_; // Default is dynamic which is not backwards compatible and can cause problems // with XP's built in compression which cant read Zip64 archives. // However it does avoid the situation were a large file is added and cannot be completed correctly. // Hint: Set always ZipEntry size before they are added to an archive and this setting isnt needed. UseZip64 useZip64_ = UseZip64.Dynamic ; #region Zip Update Instance Fields ArrayList updates_; long updateCount_; // Count is managed manually as updates_ can contain nulls! Hashtable updateIndex_; IArchiveStorage archiveStorage_; IDynamicDataSource updateDataSource_; bool contentsEdited_; int bufferSize_ = DefaultBufferSize; byte[] copyBuffer_; ZipString newComment_; bool commentEdited_; IEntryFactory updateEntryFactory_ = new ZipEntryFactory(); #endregion #endregion #region Support Classes /// /// Represents a string from a which is stored as an array of bytes. /// class ZipString { #region Constructors /// /// Initialise a with a string. /// /// The textual string form. public ZipString(string comment) { comment_ = comment; isSourceString_ = true; } /// /// Initialise a using a string in its binary 'raw' form. /// /// public ZipString(byte[] rawString) { rawComment_ = rawString; } #endregion /// /// Get a value indicating the original source of data for this instance. /// True if the source was a string; false if the source was binary data. /// public bool IsSourceString { get { return isSourceString_; } } /// /// Get the length of the comment when represented as raw bytes. /// public int RawLength { get { MakeBytesAvailable(); return rawComment_.Length; } } /// /// Get the comment in its 'raw' form as plain bytes. /// public byte[] RawComment { get { MakeBytesAvailable(); return (byte[])rawComment_.Clone(); } } /// /// Reset the comment to its initial state. /// public void Reset() { if ( isSourceString_ ) { rawComment_ = null; } else { comment_ = null; } } void MakeTextAvailable() { if ( comment_ == null ) { comment_ = ZipConstants.ConvertToString(rawComment_); } } void MakeBytesAvailable() { if ( rawComment_ == null ) { rawComment_ = ZipConstants.ConvertToArray(comment_); } } /// /// Implicit conversion of comment to a string. /// /// The to convert to a string. /// The textual equivalent for the input value. static public implicit operator string(ZipString zipString) { zipString.MakeTextAvailable(); return zipString.comment_; } #region Instance Fields string comment_; byte[] rawComment_; bool isSourceString_; #endregion } /// /// An enumerator for Zip entries /// class ZipEntryEnumerator : IEnumerator { #region Constructors public ZipEntryEnumerator(ZipEntry[] entries) { array = entries; } #endregion #region IEnumerator Members public object Current { get { return array[index]; } } public void Reset() { index = -1; } public bool MoveNext() { return (++index < array.Length); } #endregion #region Instance Fields ZipEntry[] array; int index = -1; #endregion } /// /// An is a stream that you can write uncompressed data /// to and flush, but cannot read, seek or do anything else to. /// class UncompressedStream : Stream { #region Constructors public UncompressedStream(Stream baseStream) { baseStream_ = baseStream; } #endregion /// /// Close this stream instance. /// public override void Close() { // Do nothing } /// /// Gets a value indicating whether the current stream supports reading. /// public override bool CanRead { get { return false; } } /// /// Write any buffered data to underlying storage. /// public override void Flush() { baseStream_.Flush(); } /// /// Gets a value indicating whether the current stream supports writing. /// public override bool CanWrite { get { return baseStream_.CanWrite; } } /// /// Gets a value indicating whether the current stream supports seeking. /// public override bool CanSeek { get { return false; } } /// /// Get the length in bytes of the stream. /// public override long Length { get { return 0; } } /// /// Gets or sets the position within the current stream. /// public override long Position { get { return baseStream_.Position; } set { } } /// /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. /// /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. /// The zero-based byte offset in buffer at which to begin storing the data read from the current stream. /// The maximum number of bytes to be read from the current stream. /// /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. /// /// The sum of offset and count is larger than the buffer length. /// Methods were called after the stream was closed. /// The stream does not support reading. /// buffer is null. /// An I/O error occurs. /// offset or count is negative. public override int Read(byte[] buffer, int offset, int count) { return 0; } /// /// Sets the position within the current stream. /// /// A byte offset relative to the origin parameter. /// A value of type indicating the reference point used to obtain the new position. /// /// The new position within the current stream. /// /// An I/O error occurs. /// The stream does not support seeking, such as if the stream is constructed from a pipe or console output. /// Methods were called after the stream was closed. public override long Seek(long offset, SeekOrigin origin) { return 0; } /// /// Sets the length of the current stream. /// /// The desired length of the current stream in bytes. /// The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. /// An I/O error occurs. /// Methods were called after the stream was closed. public override void SetLength(long value) { } /// /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. /// /// An array of bytes. This method copies count bytes from buffer to the current stream. /// The zero-based byte offset in buffer at which to begin copying bytes to the current stream. /// The number of bytes to be written to the current stream. /// An I/O error occurs. /// The stream does not support writing. /// Methods were called after the stream was closed. /// buffer is null. /// The sum of offset and count is greater than the buffer length. /// offset or count is negative. public override void Write(byte[] buffer, int offset, int count) { baseStream_.Write(buffer, offset, count); } #region Instance Fields Stream baseStream_; #endregion } /// /// A is an /// whose data is only a part or subsection of a file. /// class PartialInputStream : Stream { #region Constructors /// /// Initialise a new instance of the class. /// /// The containing the underlying stream to use for IO. /// The start of the partial data. /// The length of the partial data. public PartialInputStream(ZipFile zipFile, long start, long length) { start_ = start; length_ = length; // Although this is the only time the zipfile is used // keeping a reference here prevents premature closure of // this zip file and thus the baseStream_. // Code like this will cause apparently random failures depending // on the size of the files and when garbage is collected. // // ZipFile z = new ZipFile (stream); // Stream reader = z.GetInputStream(0); // uses reader here.... zipFile_ = zipFile; baseStream_ = zipFile_.baseStream_; readPos_ = start; end_ = start + length; } #endregion /// /// Read a byte from this stream. /// /// Returns the byte read or -1 on end of stream. public override int ReadByte() { if (readPos_ >= end_) { // -1 is the correct value at end of stream. return -1; } lock( baseStream_ ) { baseStream_.Seek(readPos_++, SeekOrigin.Begin); return baseStream_.ReadByte(); } } /// /// Close this partial input stream. /// /// /// The underlying stream is not closed. Close the parent ZipFile class to do that. /// public override void Close() { // Do nothing at all! } /// /// Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. /// /// An array of bytes. When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. /// The zero-based byte offset in buffer at which to begin storing the data read from the current stream. /// The maximum number of bytes to be read from the current stream. /// /// The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. /// /// The sum of offset and count is larger than the buffer length. /// Methods were called after the stream was closed. /// The stream does not support reading. /// buffer is null. /// An I/O error occurs. /// offset or count is negative. public override int Read(byte[] buffer, int offset, int count) { lock(baseStream_) { if (count > end_ - readPos_) { count = (int) (end_ - readPos_); if (count == 0) { return 0; } } baseStream_.Seek(readPos_, SeekOrigin.Begin); int readCount = baseStream_.Read(buffer, offset, count); if (readCount > 0) { readPos_ += readCount; } return readCount; } } /// /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. /// /// An array of bytes. This method copies count bytes from buffer to the current stream. /// The zero-based byte offset in buffer at which to begin copying bytes to the current stream. /// The number of bytes to be written to the current stream. /// An I/O error occurs. /// The stream does not support writing. /// Methods were called after the stream was closed. /// buffer is null. /// The sum of offset and count is greater than the buffer length. /// offset or count is negative. public override void Write(byte[] buffer, int offset, int count) { throw new NotSupportedException(); } /// /// When overridden in a derived class, sets the length of the current stream. /// /// The desired length of the current stream in bytes. /// The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. /// An I/O error occurs. /// Methods were called after the stream was closed. public override void SetLength(long value) { throw new NotSupportedException(); } /// /// When overridden in a derived class, sets the position within the current stream. /// /// A byte offset relative to the origin parameter. /// A value of type indicating the reference point used to obtain the new position. /// /// The new position within the current stream. /// /// An I/O error occurs. /// The stream does not support seeking, such as if the stream is constructed from a pipe or console output. /// Methods were called after the stream was closed. public override long Seek(long offset, SeekOrigin origin) { long newPos = readPos_; switch ( origin ) { case SeekOrigin.Begin: newPos = start_ + offset; break; case SeekOrigin.Current: newPos = readPos_ + offset; break; case SeekOrigin.End: newPos = end_ + offset; break; } if ( newPos < start_ ) { throw new ArgumentException("Negative position is invalid"); } if ( newPos >= end_ ) { throw new IOException("Cannot seek past end"); } readPos_ = newPos; return readPos_; } /// /// Clears all buffers for this stream and causes any buffered data to be written to the underlying device. /// /// An I/O error occurs. public override void Flush() { // Nothing to do. } /// /// Gets or sets the position within the current stream. /// /// /// The current position within the stream. /// An I/O error occurs. /// The stream does not support seeking. /// Methods were called after the stream was closed. public override long Position { get { return readPos_ - start_; } set { long newPos = start_ + value; if ( newPos < start_ ) { throw new ArgumentException("Negative position is invalid"); } if ( newPos >= end_ ) { throw new InvalidOperationException("Cannot seek past end"); } readPos_ = newPos; } } /// /// Gets the length in bytes of the stream. /// /// /// A long value representing the length of the stream in bytes. /// A class derived from Stream does not support seeking. /// Methods were called after the stream was closed. public override long Length { get { return length_; } } /// /// Gets a value indicating whether the current stream supports writing. /// /// false /// true if the stream supports writing; otherwise, false. public override bool CanWrite { get { return false; } } /// /// Gets a value indicating whether the current stream supports seeking. /// /// true /// true if the stream supports seeking; otherwise, false. public override bool CanSeek { get { return true; } } /// /// Gets a value indicating whether the current stream supports reading. /// /// true. /// true if the stream supports reading; otherwise, false. public override bool CanRead { get { return true; } } #if !NET_1_0 && !NET_1_1 && !NETCF_1_0 /// /// Gets a value that determines whether the current stream can time out. /// /// /// A value that determines whether the current stream can time out. public override bool CanTimeout { get { return baseStream_.CanTimeout; } } #endif #region Instance Fields ZipFile zipFile_; Stream baseStream_; long start_; long length_; long readPos_; long end_; #endregion } #endregion } #endregion #region DataSources /// /// Provides a static way to obtain a source of data for an entry. /// public interface IStaticDataSource { /// /// Get a source of data by creating a new stream. /// /// Returns a to use for compression input. /// Ideally a new stream is created and opened to achieve this, to avoid locking problems. Stream GetSource(); } /// /// Represents a source of data that can dynamically provide /// multiple data sources based on the parameters passed. /// public interface IDynamicDataSource { /// /// Get a data source. /// /// The to get a source for. /// The name for data if known. /// Returns a to use for compression input. /// Ideally a new stream is created and opened to achieve this, to avoid locking problems. Stream GetSource(ZipEntry entry, string name); } /// /// Default implementation of a for use with files stored on disk. /// public class StaticDiskDataSource : IStaticDataSource { /// /// Initialise a new instnace of /// /// The name of the file to obtain data from. public StaticDiskDataSource(string fileName) { fileName_ = fileName; } #region IDataSource Members /// /// Get a providing data. /// /// Returns a provising data. public Stream GetSource() { return File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read); } #endregion #region Instance Fields string fileName_; #endregion } /// /// Default implementation of for files stored on disk. /// public class DynamicDiskDataSource : IDynamicDataSource { /// /// Initialise a default instance of . /// public DynamicDiskDataSource() { } #region IDataSource Members /// /// Get a providing data for an entry. /// /// The entry to provide data for. /// The file name for data if known. /// Returns a stream providing data; or null if not available public Stream GetSource(ZipEntry entry, string name) { Stream result = null; if ( name != null ) { result = File.Open(name, FileMode.Open, FileAccess.Read, FileShare.Read); } return result; } #endregion } #endregion #region Archive Storage /// /// Defines facilities for data storage when updating Zip Archives. /// public interface IArchiveStorage { /// /// Get the to apply during updates. /// FileUpdateMode UpdateMode { get; } /// /// Get an empty that can be used for temporary output. /// /// Returns a temporary output /// Stream GetTemporaryOutput(); /// /// Convert a temporary output stream to a final stream. /// /// The resulting final /// Stream ConvertTemporaryToFinal(); /// /// Make a temporary copy of the original stream. /// /// The to copy. /// Returns a temporary output that is a copy of the input. Stream MakeTemporaryCopy(Stream stream); /// /// Return a stream suitable for performing direct updates on the original source. /// /// The current stream. /// Returns a stream suitable for direct updating. /// This may be the current stream passed. Stream OpenForDirectUpdate(Stream stream); /// /// Dispose of this instance. /// void Dispose(); } /// /// An abstract suitable for extension by inheritance. /// abstract public class BaseArchiveStorage : IArchiveStorage { #region Constructors /// /// Initializes a new instance of the class. /// /// The update mode. protected BaseArchiveStorage(FileUpdateMode updateMode) { updateMode_ = updateMode; } #endregion #region IArchiveStorage Members /// /// Gets a temporary output /// /// Returns the temporary output stream. /// public abstract Stream GetTemporaryOutput(); /// /// Converts the temporary to its final form. /// /// Returns a that can be used to read /// the final storage for the archive. /// public abstract Stream ConvertTemporaryToFinal(); /// /// Make a temporary copy of a . /// /// The to make a copy of. /// Returns a temporary output that is a copy of the input. public abstract Stream MakeTemporaryCopy(Stream stream); /// /// Return a stream suitable for performing direct updates on the original source. /// /// The to open for direct update. /// Returns a stream suitable for direct updating. public abstract Stream OpenForDirectUpdate(Stream stream); /// /// Disposes this instance. /// public abstract void Dispose(); /// /// Gets the update mode applicable. /// /// The update mode. public FileUpdateMode UpdateMode { get { return updateMode_; } } #endregion #region Instance Fields FileUpdateMode updateMode_; #endregion } /// /// An implementation suitable for hard disks. /// public class DiskArchiveStorage : BaseArchiveStorage { #region Constructors /// /// Initializes a new instance of the class. /// /// The file. /// The update mode. public DiskArchiveStorage(ZipFile file, FileUpdateMode updateMode) : base(updateMode) { if ( file.Name == null ) { throw new ZipException("Cant handle non file archives"); } fileName_ = file.Name; } /// /// Initializes a new instance of the class. /// /// The file. public DiskArchiveStorage(ZipFile file) : this(file, FileUpdateMode.Safe) { } #endregion #region IArchiveStorage Members /// /// Gets a temporary output for performing updates on. /// /// Returns the temporary output stream. public override Stream GetTemporaryOutput() { if ( temporaryName_ != null ) { temporaryName_ = GetTempFileName(temporaryName_, true); temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); } else { // Determine where to place files based on internal strategy. // Currently this is always done in system temp directory. temporaryName_ = Path.GetTempFileName(); temporaryStream_ = File.Open(temporaryName_, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); } return temporaryStream_; } /// /// Converts a temporary to its final form. /// /// Returns a that can be used to read /// the final storage for the archive. public override Stream ConvertTemporaryToFinal() { if ( temporaryStream_ == null ) { throw new ZipException("No temporary stream has been created"); } Stream result = null; string moveTempName = GetTempFileName(fileName_, false); bool newFileCreated = false; try { temporaryStream_.Close(); File.Move(fileName_, moveTempName); File.Move(temporaryName_, fileName_); newFileCreated = true; File.Delete(moveTempName); result = File.Open(fileName_, FileMode.Open, FileAccess.Read, FileShare.Read); } catch(Exception) { result = null; // Try to roll back changes... if ( !newFileCreated ) { File.Move(moveTempName, fileName_); File.Delete(temporaryName_); } throw; } return result; } /// /// Make a temporary copy of a stream. /// /// The to copy. /// Returns a temporary output that is a copy of the input. public override Stream MakeTemporaryCopy(Stream stream) { stream.Close(); temporaryName_ = GetTempFileName(fileName_, true); File.Copy(fileName_, temporaryName_, true); temporaryStream_ = new FileStream(temporaryName_, FileMode.Open, FileAccess.ReadWrite); return temporaryStream_; } /// /// Return a stream suitable for performing direct updates on the original source. /// /// The current stream. /// Returns a stream suitable for direct updating. /// If the is not null this is used as is. public override Stream OpenForDirectUpdate(Stream stream) { Stream result; if ((stream == null) || !stream.CanWrite) { if (stream != null) { stream.Close(); } result = new FileStream(fileName_, FileMode.Open, FileAccess.ReadWrite); } else { result = stream; } return result; } /// /// Disposes this instance. /// public override void Dispose() { if ( temporaryStream_ != null ) { temporaryStream_.Close(); } } #endregion #region Internal routines static string GetTempFileName(string original, bool makeTempFile) { string result = null; if ( original == null ) { result = Path.GetTempFileName(); } else { int counter = 0; int suffixSeed = DateTime.Now.Second; while ( result == null ) { counter += 1; string newName = string.Format("{0}.{1}{2}.tmp", original, suffixSeed, counter); if ( !File.Exists(newName) ) { if ( makeTempFile) { try { // Try and create the file. using ( FileStream stream = File.Create(newName) ) { } result = newName; } catch { suffixSeed = DateTime.Now.Second; } } else { result = newName; } } } } return result; } #endregion #region Instance Fields Stream temporaryStream_; string fileName_; string temporaryName_; #endregion } /// /// An implementation suitable for in memory streams. /// public class MemoryArchiveStorage : BaseArchiveStorage { #region Constructors /// /// Initializes a new instance of the class. /// public MemoryArchiveStorage() : base(FileUpdateMode.Direct) { } /// /// Initializes a new instance of the class. /// /// The to use /// This constructor is for testing as memory streams dont really require safe mode. public MemoryArchiveStorage(FileUpdateMode updateMode) : base(updateMode) { } #endregion #region Properties /// /// Get the stream returned by if this was in fact called. /// public MemoryStream FinalStream { get { return finalStream_; } } #endregion #region IArchiveStorage Members /// /// Gets the temporary output /// /// Returns the temporary output stream. public override Stream GetTemporaryOutput() { temporaryStream_ = new MemoryStream(); return temporaryStream_; } /// /// Converts the temporary to its final form. /// /// Returns a that can be used to read /// the final storage for the archive. public override Stream ConvertTemporaryToFinal() { if ( temporaryStream_ == null ) { throw new ZipException("No temporary stream has been created"); } finalStream_ = new MemoryStream(temporaryStream_.ToArray()); return finalStream_; } /// /// Make a temporary copy of the original stream. /// /// The to copy. /// Returns a temporary output that is a copy of the input. public override Stream MakeTemporaryCopy(Stream stream) { temporaryStream_ = new MemoryStream(); stream.Position = 0; StreamUtils.Copy(stream, temporaryStream_, new byte[4096]); return temporaryStream_; } /// /// Return a stream suitable for performing direct updates on the original source. /// /// The original source stream /// Returns a stream suitable for direct updating. /// If the passed is not null this is used; /// otherwise a new is returned. public override Stream OpenForDirectUpdate(Stream stream) { Stream result; if ((stream == null) || !stream.CanWrite) { result = new MemoryStream(); if (stream != null) { stream.Position = 0; StreamUtils.Copy(stream, result, new byte[4096]); stream.Close(); } } else { result = stream; } return result; } /// /// Disposes this instance. /// public override void Dispose() { if ( temporaryStream_ != null ) { temporaryStream_.Close(); } } #endregion #region Instance Fields MemoryStream temporaryStream_; MemoryStream finalStream_; #endregion } #endregion } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipHelperStream.cs000066400000000000000000000417131446222606700266730ustar00rootroot00000000000000// ZipHelperStream.cs // // Copyright 2006, 2007 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; using System.Text; namespace ICSharpCode.SharpZipLib.Zip { /// /// Holds data pertinent to a data descriptor. /// public class DescriptorData { /// /// Get /set the compressed size of data. /// public long CompressedSize { get { return compressedSize; } set { compressedSize = value; } } /// /// Get / set the uncompressed size of data /// public long Size { get { return size; } set { size = value; } } /// /// Get /set the crc value. /// public long Crc { get { return crc; } set { crc = (value & 0xffffffff); } } #region Instance Fields long size; long compressedSize; long crc; #endregion } class EntryPatchData { public long SizePatchOffset { get { return sizePatchOffset_; } set { sizePatchOffset_ = value; } } public long CrcPatchOffset { get { return crcPatchOffset_; } set { crcPatchOffset_ = value; } } #region Instance Fields long sizePatchOffset_; long crcPatchOffset_; #endregion } /// /// This class assists with writing/reading from Zip files. /// internal class ZipHelperStream : Stream { #region Constructors /// /// Initialise an instance of this class. /// /// The name of the file to open. public ZipHelperStream(string name) { stream_ = new FileStream(name, FileMode.Open, FileAccess.ReadWrite); isOwner_ = true; } /// /// Initialise a new instance of . /// /// The stream to use. public ZipHelperStream(Stream stream) { stream_ = stream; } #endregion /// /// Get / set a value indicating wether the the underlying stream is owned or not. /// /// If the stream is owned it is closed when this instance is closed. public bool IsStreamOwner { get { return isOwner_; } set { isOwner_ = value; } } #region Base Stream Methods public override bool CanRead { get { return stream_.CanRead; } } public override bool CanSeek { get { return stream_.CanSeek; } } #if !NET_1_0 && !NET_1_1 && !NETCF_1_0 public override bool CanTimeout { get { return stream_.CanTimeout; } } #endif public override long Length { get { return stream_.Length; } } public override long Position { get { return stream_.Position; } set { stream_.Position = value; } } public override bool CanWrite { get { return stream_.CanWrite; } } public override void Flush() { stream_.Flush(); } public override long Seek(long offset, SeekOrigin origin) { return stream_.Seek(offset, origin); } public override void SetLength(long value) { stream_.SetLength(value); } public override int Read(byte[] buffer, int offset, int count) { return stream_.Read(buffer, offset, count); } public override void Write(byte[] buffer, int offset, int count) { stream_.Write(buffer, offset, count); } /// /// Close the stream. /// /// /// The underlying stream is closed only if is true. /// override public void Close() { Stream toClose = stream_; stream_ = null; if (isOwner_ && (toClose != null)) { isOwner_ = false; toClose.Close(); } } #endregion // Write the local file header // TODO: ZipHelperStream.WriteLocalHeader is not yet used and needs checking for ZipFile and ZipOuptutStream usage void WriteLocalHeader(ZipEntry entry, EntryPatchData patchData) { CompressionMethod method = entry.CompressionMethod; bool headerInfoAvailable = true; // How to get this? bool patchEntryHeader = false; WriteLEInt(ZipConstants.LocalHeaderSignature); WriteLEShort(entry.Version); WriteLEShort(entry.Flags); WriteLEShort((byte)method); WriteLEInt((int)entry.DosTime); if (headerInfoAvailable == true) { WriteLEInt((int)entry.Crc); if ( entry.LocalHeaderRequiresZip64 ) { WriteLEInt(-1); WriteLEInt(-1); } else { WriteLEInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.CompressedSize); WriteLEInt((int)entry.Size); } } else { if (patchData != null) { patchData.CrcPatchOffset = stream_.Position; } WriteLEInt(0); // Crc if ( patchData != null ) { patchData.SizePatchOffset = stream_.Position; } // For local header both sizes appear in Zip64 Extended Information if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) { WriteLEInt(-1); WriteLEInt(-1); } else { WriteLEInt(0); // Compressed size WriteLEInt(0); // Uncompressed size } } byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); if (name.Length > 0xFFFF) { throw new ZipException("Entry name too long."); } ZipExtraData ed = new ZipExtraData(entry.ExtraData); if (entry.LocalHeaderRequiresZip64 && (headerInfoAvailable || patchEntryHeader)) { ed.StartNewEntry(); if (headerInfoAvailable) { ed.AddLeLong(entry.Size); ed.AddLeLong(entry.CompressedSize); } else { ed.AddLeLong(-1); ed.AddLeLong(-1); } ed.AddNewEntry(1); if ( !ed.Find(1) ) { throw new ZipException("Internal error cant find extra data"); } if ( patchData != null ) { patchData.SizePatchOffset = ed.CurrentReadIndex; } } else { ed.Delete(1); } byte[] extra = ed.GetEntryData(); WriteLEShort(name.Length); WriteLEShort(extra.Length); if ( name.Length > 0 ) { stream_.Write(name, 0, name.Length); } if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) { patchData.SizePatchOffset += stream_.Position; } if ( extra.Length > 0 ) { stream_.Write(extra, 0, extra.Length); } } /// /// Locates a block with the desired . /// /// The signature to find. /// Location, marking the end of block. /// Minimum size of the block. /// The maximum variable data. /// Eeturns the offset of the first byte after the signature; -1 if not found public long LocateBlockWithSignature(int signature, long endLocation, int minimumBlockSize, int maximumVariableData) { long pos = endLocation - minimumBlockSize; if ( pos < 0 ) { return -1; } long giveUpMarker = Math.Max(pos - maximumVariableData, 0); // TODO: This loop could be optimised for speed. do { if ( pos < giveUpMarker ) { return -1; } Seek(pos--, SeekOrigin.Begin); } while ( ReadLEInt() != signature ); return Position; } /// /// Write Zip64 end of central directory records (File header and locator). /// /// The number of entries in the central directory. /// The size of entries in the central directory. /// The offset of the dentral directory. public void WriteZip64EndOfCentralDirectory(long noOfEntries, long sizeEntries, long centralDirOffset) { long centralSignatureOffset = stream_.Position; WriteLEInt(ZipConstants.Zip64CentralFileHeaderSignature); WriteLELong(44); // Size of this record (total size of remaining fields in header or full size - 12) WriteLEShort(ZipConstants.VersionMadeBy); // Version made by WriteLEShort(ZipConstants.VersionZip64); // Version to extract WriteLEInt(0); // Number of this disk WriteLEInt(0); // number of the disk with the start of the central directory WriteLELong(noOfEntries); // No of entries on this disk WriteLELong(noOfEntries); // Total No of entries in central directory WriteLELong(sizeEntries); // Size of the central directory WriteLELong(centralDirOffset); // offset of start of central directory // zip64 extensible data sector not catered for here (variable size) // Write the Zip64 end of central directory locator WriteLEInt(ZipConstants.Zip64CentralDirLocatorSignature); // no of the disk with the start of the zip64 end of central directory WriteLEInt(0); // relative offset of the zip64 end of central directory record WriteLELong(centralSignatureOffset); // total number of disks WriteLEInt(1); } /// /// Write the required records to end the central directory. /// /// The number of entries in the directory. /// The size of the entries in the directory. /// The start of the central directory. /// The archive comment. (This can be null). public void WriteEndOfCentralDirectory(long noOfEntries, long sizeEntries, long startOfCentralDirectory, byte[] comment) { if ( (noOfEntries >= 0xffff) || (startOfCentralDirectory >= 0xffffffff) || (sizeEntries >= 0xffffffff) ) { WriteZip64EndOfCentralDirectory(noOfEntries, sizeEntries, startOfCentralDirectory); } WriteLEInt(ZipConstants.EndOfCentralDirectorySignature); // TODO: ZipFile Multi disk handling not done WriteLEShort(0); // number of this disk WriteLEShort(0); // no of disk with start of central dir // Number of entries if ( noOfEntries >= 0xffff ) { WriteLEUshort(0xffff); // Zip64 marker WriteLEUshort(0xffff); } else { WriteLEShort(( short )noOfEntries); // entries in central dir for this disk WriteLEShort(( short )noOfEntries); // total entries in central directory } // Size of the central directory if ( sizeEntries >= 0xffffffff ) { WriteLEUint(0xffffffff); // Zip64 marker } else { WriteLEInt(( int )sizeEntries); } // offset of start of central directory if ( startOfCentralDirectory >= 0xffffffff ) { WriteLEUint(0xffffffff); // Zip64 marker } else { WriteLEInt(( int )startOfCentralDirectory); } int commentLength = (comment != null) ? comment.Length : 0; if ( commentLength > 0xffff ) { throw new ZipException(string.Format("Comment length({0}) is too long can only be 64K", commentLength)); } WriteLEShort(commentLength); if ( commentLength > 0 ) { Write(comment, 0, comment.Length); } } #region LE value reading/writing /// /// Read an unsigned short in little endian byte order. /// /// Returns the value read. /// /// An i/o error occurs. /// /// /// The file ends prematurely /// public int ReadLEShort() { int byteValue1 = stream_.ReadByte(); if (byteValue1 < 0) { throw new EndOfStreamException(); } int byteValue2 = stream_.ReadByte(); if (byteValue2 < 0) { throw new EndOfStreamException(); } return byteValue1 | (byteValue2 << 8); } /// /// Read an int in little endian byte order. /// /// Returns the value read. /// /// An i/o error occurs. /// /// /// The file ends prematurely /// public int ReadLEInt() { return ReadLEShort() | (ReadLEShort() << 16); } /// /// Read a long in little endian byte order. /// /// The value read. public long ReadLELong() { return (uint)ReadLEInt() | ((long)ReadLEInt() << 32); } /// /// Write an unsigned short in little endian byte order. /// /// The value to write. public void WriteLEShort(int value) { stream_.WriteByte(( byte )(value & 0xff)); stream_.WriteByte(( byte )((value >> 8) & 0xff)); } /// /// Write a ushort in little endian byte order. /// /// The value to write. public void WriteLEUshort(ushort value) { stream_.WriteByte(( byte )(value & 0xff)); stream_.WriteByte(( byte )(value >> 8)); } /// /// Write an int in little endian byte order. /// /// The value to write. public void WriteLEInt(int value) { WriteLEShort(value); WriteLEShort(value >> 16); } /// /// Write a uint in little endian byte order. /// /// The value to write. public void WriteLEUint(uint value) { WriteLEUshort(( ushort )(value & 0xffff)); WriteLEUshort(( ushort )(value >> 16)); } /// /// Write a long in little endian byte order. /// /// The value to write. public void WriteLELong(long value) { WriteLEInt(( int )value); WriteLEInt(( int )(value >> 32)); } /// /// Write a ulong in little endian byte order. /// /// The value to write. public void WriteLEUlong(ulong value) { WriteLEUint(( uint )(value & 0xffffffff)); WriteLEUint(( uint )(value >> 32)); } #endregion /// /// Write a data descriptor. /// /// The entry to write a descriptor for. /// Returns the number of descriptor bytes written. public int WriteDataDescriptor(ZipEntry entry) { if (entry == null) { throw new ArgumentNullException("entry"); } int result=0; // Add data descriptor if flagged as required if ((entry.Flags & (int)GeneralBitFlags.Descriptor) != 0) { // The signature is not PKZIP originally but is now described as optional // in the PKZIP Appnote documenting trhe format. WriteLEInt(ZipConstants.DataDescriptorSignature); WriteLEInt(unchecked((int)(entry.Crc))); result+=8; if (entry.LocalHeaderRequiresZip64) { WriteLELong(entry.CompressedSize); WriteLELong(entry.Size); result+=16; } else { WriteLEInt((int)entry.CompressedSize); WriteLEInt((int)entry.Size); result+=8; } } return result; } /// /// Read data descriptor at the end of compressed data. /// /// if set to true [zip64]. /// The data to fill in. /// Returns the number of bytes read in the descriptor. public void ReadDataDescriptor(bool zip64, DescriptorData data) { int intValue = ReadLEInt(); // In theory this may not be a descriptor according to PKZIP appnote. // In practise its always there. if (intValue != ZipConstants.DataDescriptorSignature) { throw new ZipException("Data descriptor signature not found"); } data.Crc = ReadLEInt(); if (zip64) { data.CompressedSize = ReadLELong(); data.Size = ReadLELong(); } else { data.CompressedSize = ReadLEInt(); data.Size = ReadLEInt(); } } #region Instance Fields bool isOwner_; Stream stream_; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipInputStream.cs000066400000000000000000000473731446222606700265630ustar00rootroot00000000000000// ZipInputStream.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 2010-05-25 Z-1663 Fixed exception when testing local header compressed size of -1 using System; using System.IO; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip.Compression; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; #if !NETCF_1_0 using ICSharpCode.SharpZipLib.Encryption; #endif namespace ICSharpCode.SharpZipLib.Zip { /// /// This is an InflaterInputStream that reads the files baseInputStream an zip archive /// one after another. It has a special method to get the zip entry of /// the next file. The zip entry contains information about the file name /// size, compressed size, Crc, etc. /// It includes support for Stored and Deflated entries. ///
///
Author of the original java version : Jochen Hoenicke ///
/// /// This sample shows how to read a zip file /// /// using System; /// using System.Text; /// using System.IO; /// /// using ICSharpCode.SharpZipLib.Zip; /// /// class MainClass /// { /// public static void Main(string[] args) /// { /// using ( ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { /// /// ZipEntry theEntry; /// const int size = 2048; /// byte[] data = new byte[2048]; /// /// while ((theEntry = s.GetNextEntry()) != null) { /// if ( entry.IsFile ) { /// Console.Write("Show contents (y/n) ?"); /// if (Console.ReadLine() == "y") { /// while (true) { /// size = s.Read(data, 0, data.Length); /// if (size > 0) { /// Console.Write(new ASCIIEncoding().GetString(data, 0, size)); /// } else { /// break; /// } /// } /// } /// } /// } /// } /// } /// } /// /// public class ZipInputStream : InflaterInputStream { #region Instance Fields /// /// Delegate for reading bytes from a stream. /// delegate int ReadDataHandler(byte[] b, int offset, int length); /// /// The current reader this instance. /// ReadDataHandler internalReader; Crc32 crc = new Crc32(); ZipEntry entry; long size; int method; int flags; string password; #endregion #region Constructors /// /// Creates a new Zip input stream, for reading a zip archive. /// /// The underlying providing data. public ZipInputStream(Stream baseInputStream) : base(baseInputStream, new Inflater(true)) { internalReader = new ReadDataHandler(ReadingNotAvailable); } /// /// Creates a new Zip input stream, for reading a zip archive. /// /// The underlying providing data. /// Size of the buffer. public ZipInputStream( Stream baseInputStream, int bufferSize ) : base(baseInputStream, new Inflater(true), bufferSize) { internalReader = new ReadDataHandler(ReadingNotAvailable); } #endregion /// /// Optional password used for encryption when non-null /// /// A password for all encrypted entries in this public string Password { get { return password; } set { password = value; } } /// /// Gets a value indicating if there is a current entry and it can be decompressed /// /// /// The entry can only be decompressed if the library supports the zip features required to extract it. /// See the ZipEntry Version property for more details. /// public bool CanDecompressEntry { get { return (entry != null) && entry.CanDecompress; } } /// /// Advances to the next entry in the archive /// /// /// The next entry in the archive or null if there are no more entries. /// /// /// If the previous entry is still open CloseEntry is called. /// /// /// Input stream is closed /// /// /// Password is not set, password is invalid, compression method is invalid, /// version required to extract is not supported /// public ZipEntry GetNextEntry() { if (crc == null) { throw new InvalidOperationException("Closed."); } if (entry != null) { CloseEntry(); } int header = inputBuffer.ReadLeInt(); if (header == ZipConstants.CentralHeaderSignature || header == ZipConstants.EndOfCentralDirectorySignature || header == ZipConstants.CentralHeaderDigitalSignature || header == ZipConstants.ArchiveExtraDataSignature || header == ZipConstants.Zip64CentralFileHeaderSignature) { // No more individual entries exist Close(); return null; } // -jr- 07-Dec-2003 Ignore spanning temporary signatures if found // Spanning signature is same as descriptor signature and is untested as yet. if ( (header == ZipConstants.SpanningTempSignature) || (header == ZipConstants.SpanningSignature) ) { header = inputBuffer.ReadLeInt(); } if (header != ZipConstants.LocalHeaderSignature) { throw new ZipException("Wrong Local header signature: 0x" + String.Format("{0:X}", header)); } short versionRequiredToExtract = (short)inputBuffer.ReadLeShort(); flags = inputBuffer.ReadLeShort(); method = inputBuffer.ReadLeShort(); uint dostime = (uint)inputBuffer.ReadLeInt(); int crc2 = inputBuffer.ReadLeInt(); csize = inputBuffer.ReadLeInt(); size = inputBuffer.ReadLeInt(); int nameLen = inputBuffer.ReadLeShort(); int extraLen = inputBuffer.ReadLeShort(); bool isCrypted = (flags & 1) == 1; byte[] buffer = new byte[nameLen]; inputBuffer.ReadRawBuffer(buffer); string name = ZipConstants.ConvertToStringExt(flags, buffer); entry = new ZipEntry(name, versionRequiredToExtract); entry.Flags = flags; entry.CompressionMethod = (CompressionMethod)method; if ((flags & 8) == 0) { entry.Crc = crc2 & 0xFFFFFFFFL; entry.Size = size & 0xFFFFFFFFL; entry.CompressedSize = csize & 0xFFFFFFFFL; entry.CryptoCheckValue = (byte)((crc2 >> 24) & 0xff); } else { // This allows for GNU, WinZip and possibly other archives, the PKZIP spec // says these values are zero under these circumstances. if (crc2 != 0) { entry.Crc = crc2 & 0xFFFFFFFFL; } if (size != 0) { entry.Size = size & 0xFFFFFFFFL; } if (csize != 0) { entry.CompressedSize = csize & 0xFFFFFFFFL; } entry.CryptoCheckValue = (byte)((dostime >> 8) & 0xff); } entry.DosTime = dostime; // If local header requires Zip64 is true then the extended header should contain // both values. // Handle extra data if present. This can set/alter some fields of the entry. if (extraLen > 0) { byte[] extra = new byte[extraLen]; inputBuffer.ReadRawBuffer(extra); entry.ExtraData = extra; } entry.ProcessExtraData(true); if ( entry.CompressedSize >= 0 ) { csize = entry.CompressedSize; } if ( entry.Size >= 0 ) { size = entry.Size; } if (method == (int)CompressionMethod.Stored && (!isCrypted && csize != size || (isCrypted && csize - ZipConstants.CryptoHeaderSize != size))) { throw new ZipException("Stored, but compressed != uncompressed"); } // Determine how to handle reading of data if this is attempted. if (entry.IsCompressionMethodSupported()) { internalReader = new ReadDataHandler(InitialRead); } else { internalReader = new ReadDataHandler(ReadingNotSupported); } return entry; } /// /// Read data descriptor at the end of compressed data. /// void ReadDataDescriptor() { if (inputBuffer.ReadLeInt() != ZipConstants.DataDescriptorSignature) { throw new ZipException("Data descriptor signature not found"); } entry.Crc = inputBuffer.ReadLeInt() & 0xFFFFFFFFL; if ( entry.LocalHeaderRequiresZip64 ) { csize = inputBuffer.ReadLeLong(); size = inputBuffer.ReadLeLong(); } else { csize = inputBuffer.ReadLeInt(); size = inputBuffer.ReadLeInt(); } entry.CompressedSize = csize; entry.Size = size; } /// /// Complete cleanup as the final part of closing. /// /// True if the crc value should be tested void CompleteCloseEntry(bool testCrc) { StopDecrypting(); if ((flags & 8) != 0) { ReadDataDescriptor(); } size = 0; if ( testCrc && ((crc.Value & 0xFFFFFFFFL) != entry.Crc) && (entry.Crc != -1)) { throw new ZipException("CRC mismatch"); } crc.Reset(); if (method == (int)CompressionMethod.Deflated) { inf.Reset(); } entry = null; } /// /// Closes the current zip entry and moves to the next one. /// /// /// The stream is closed /// /// /// The Zip stream ends early /// public void CloseEntry() { if (crc == null) { throw new InvalidOperationException("Closed"); } if (entry == null) { return; } if (method == (int)CompressionMethod.Deflated) { if ((flags & 8) != 0) { // We don't know how much we must skip, read until end. byte[] tmp = new byte[4096]; // Read will close this entry while (Read(tmp, 0, tmp.Length) > 0) { } return; } csize -= inf.TotalIn; inputBuffer.Available += inf.RemainingInput; } if ( (inputBuffer.Available > csize) && (csize >= 0) ) { inputBuffer.Available = (int)((long)inputBuffer.Available - csize); } else { csize -= inputBuffer.Available; inputBuffer.Available = 0; while (csize != 0) { long skipped = base.Skip(csize); if (skipped <= 0) { throw new ZipException("Zip archive ends early."); } csize -= skipped; } } CompleteCloseEntry(false); } /// /// Returns 1 if there is an entry available /// Otherwise returns 0. /// public override int Available { get { return entry != null ? 1 : 0; } } /// /// Returns the current size that can be read from the current entry if available /// /// Thrown if the entry size is not known. /// Thrown if no entry is currently available. public override long Length { get { if ( entry != null ) { if ( entry.Size >= 0 ) { return entry.Size; } else { throw new ZipException("Length not available for the current entry"); } } else { throw new InvalidOperationException("No current entry"); } } } /// /// Reads a byte from the current zip entry. /// /// /// The byte or -1 if end of stream is reached. /// public override int ReadByte() { byte[] b = new byte[1]; if (Read(b, 0, 1) <= 0) { return -1; } return b[0] & 0xff; } /// /// Handle attempts to read by throwing an . /// /// The destination array to store data in. /// The offset at which data read should be stored. /// The maximum number of bytes to read. /// Returns the number of bytes actually read. int ReadingNotAvailable(byte[] destination, int offset, int count) { throw new InvalidOperationException("Unable to read from this stream"); } /// /// Handle attempts to read from this entry by throwing an exception /// int ReadingNotSupported(byte[] destination, int offset, int count) { throw new ZipException("The compression method for this entry is not supported"); } /// /// Perform the initial read on an entry which may include /// reading encryption headers and setting up inflation. /// /// The destination to fill with data read. /// The offset to start reading at. /// The maximum number of bytes to read. /// The actual number of bytes read. int InitialRead(byte[] destination, int offset, int count) { if ( !CanDecompressEntry ) { throw new ZipException("Library cannot extract this entry. Version required is (" + entry.Version.ToString() + ")"); } // Handle encryption if required. if (entry.IsCrypted) { #if NETCF_1_0 throw new ZipException("Encryption not supported for Compact Framework 1.0"); #else if (password == null) { throw new ZipException("No password set."); } // Generate and set crypto transform... PkzipClassicManaged managed = new PkzipClassicManaged(); byte[] key = PkzipClassic.GenerateKeys(ZipConstants.ConvertToArray(password)); inputBuffer.CryptoTransform = managed.CreateDecryptor(key, null); byte[] cryptbuffer = new byte[ZipConstants.CryptoHeaderSize]; inputBuffer.ReadClearTextBuffer(cryptbuffer, 0, ZipConstants.CryptoHeaderSize); if (cryptbuffer[ZipConstants.CryptoHeaderSize - 1] != entry.CryptoCheckValue) { throw new ZipException("Invalid password"); } if (csize >= ZipConstants.CryptoHeaderSize) { csize -= ZipConstants.CryptoHeaderSize; } else if ( (entry.Flags & (int)GeneralBitFlags.Descriptor) == 0 ) { throw new ZipException(string.Format("Entry compressed size {0} too small for encryption", csize)); } #endif } else { #if !NETCF_1_0 inputBuffer.CryptoTransform = null; #endif } if ((csize > 0) || ((flags & (int)GeneralBitFlags.Descriptor) != 0)) { if ((method == (int)CompressionMethod.Deflated) && (inputBuffer.Available > 0)) { inputBuffer.SetInflaterInput(inf); } internalReader = new ReadDataHandler(BodyRead); return BodyRead(destination, offset, count); } else { internalReader = new ReadDataHandler(ReadingNotAvailable); return 0; } } /// /// Read a block of bytes from the stream. /// /// The destination for the bytes. /// The index to start storing data. /// The number of bytes to attempt to read. /// Returns the number of bytes read. /// Zero bytes read means end of stream. public override int Read(byte[] buffer, int offset, int count) { if ( buffer == null ) { throw new ArgumentNullException("buffer"); } if ( offset < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); #endif } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "Cannot be negative"); #endif } if ( (buffer.Length - offset) < count ) { throw new ArgumentException("Invalid offset/count combination"); } return internalReader(buffer, offset, count); } /// /// Reads a block of bytes from the current zip entry. /// /// /// The number of bytes read (this may be less than the length requested, even before the end of stream), or 0 on end of stream. /// /// /// An i/o error occured. /// /// /// The deflated stream is corrupted. /// /// /// The stream is not open. /// int BodyRead(byte[] buffer, int offset, int count) { if ( crc == null ) { throw new InvalidOperationException("Closed"); } if ( (entry == null) || (count <= 0) ) { return 0; } if ( offset + count > buffer.Length ) { throw new ArgumentException("Offset + count exceeds buffer size"); } bool finished = false; switch (method) { case (int)CompressionMethod.Deflated: count = base.Read(buffer, offset, count); if (count <= 0) { if (!inf.IsFinished) { throw new ZipException("Inflater not finished!"); } inputBuffer.Available = inf.RemainingInput; // A csize of -1 is from an unpatched local header if ((flags & 8) == 0 && (inf.TotalIn != csize && csize != 0xFFFFFFFF && csize != -1 || inf.TotalOut != size)) { throw new ZipException("Size mismatch: " + csize + ";" + size + " <-> " + inf.TotalIn + ";" + inf.TotalOut); } inf.Reset(); finished = true; } break; case (int)CompressionMethod.Stored: if ( (count > csize) && (csize >= 0) ) { count = (int)csize; } if ( count > 0 ) { count = inputBuffer.ReadClearTextBuffer(buffer, offset, count); if (count > 0) { csize -= count; size -= count; } } if (csize == 0) { finished = true; } else { if (count < 0) { throw new ZipException("EOF in stored block"); } } break; } if (count > 0) { crc.Update(buffer, offset, count); } if (finished) { CompleteCloseEntry(true); } return count; } /// /// Closes the zip input stream /// public override void Close() { internalReader = new ReadDataHandler(ReadingNotAvailable); crc = null; entry = null; base.Close(); } } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipNameTransform.cs000066400000000000000000000205361446222606700270540ustar00rootroot00000000000000// ZipNameTransform.cs // // Copyright 2005 John Reilly // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. using System; using System.IO; using System.Text; using ICSharpCode.SharpZipLib.Core; namespace ICSharpCode.SharpZipLib.Zip { /// /// ZipNameTransform transforms names as per the Zip file naming convention. /// /// The use of absolute names is supported although its use is not valid /// according to Zip naming conventions, and should not be used if maximum compatability is desired. public class ZipNameTransform : INameTransform { #region Constructors /// /// Initialize a new instance of /// public ZipNameTransform() { } /// /// Initialize a new instance of /// /// The string to trim from the front of paths if found. public ZipNameTransform(string trimPrefix) { TrimPrefix = trimPrefix; } #endregion /// /// Static constructor. /// static ZipNameTransform() { char[] invalidPathChars; #if NET_1_0 || NET_1_1 || NETCF_1_0 invalidPathChars = Path.InvalidPathChars; #else invalidPathChars = Path.GetInvalidPathChars(); #endif int howMany = invalidPathChars.Length + 2; InvalidEntryCharsRelaxed = new char[howMany]; Array.Copy(invalidPathChars, 0, InvalidEntryCharsRelaxed, 0, invalidPathChars.Length); InvalidEntryCharsRelaxed[howMany - 1] = '*'; InvalidEntryCharsRelaxed[howMany - 2] = '?'; howMany = invalidPathChars.Length + 4; InvalidEntryChars = new char[howMany]; Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length); InvalidEntryChars[howMany - 1] = ':'; InvalidEntryChars[howMany - 2] = '\\'; InvalidEntryChars[howMany - 3] = '*'; InvalidEntryChars[howMany - 4] = '?'; } /// /// Transform a windows directory name according to the Zip file naming conventions. /// /// The directory name to transform. /// The transformed name. public string TransformDirectory(string name) { name = TransformFile(name); if (name.Length > 0) { if ( !name.EndsWith("/") ) { name += "/"; } } else { throw new ZipException("Cannot have an empty directory name"); } return name; } /// /// Transform a windows file name according to the Zip file naming conventions. /// /// The file name to transform. /// The transformed name. public string TransformFile(string name) { if (name != null) { string lowerName = name.ToLower(); if ( (trimPrefix_ != null) && (lowerName.IndexOf(trimPrefix_) == 0) ) { name = name.Substring(trimPrefix_.Length); } name = name.Replace(@"\", "/"); name = WindowsPathUtils.DropPathRoot(name); // Drop any leading slashes. while ((name.Length > 0) && (name[0] == '/')) { name = name.Remove(0, 1); } // Drop any trailing slashes. while ((name.Length > 0) && (name[name.Length - 1] == '/')) { name = name.Remove(name.Length - 1, 1); } // Convert consecutive // characters to / int index = name.IndexOf("//"); while (index >= 0) { name = name.Remove(index, 1); index = name.IndexOf("//"); } name = MakeValidName(name, '_'); } else { name = string.Empty; } return name; } /// /// Get/set the path prefix to be trimmed from paths if present. /// /// The prefix is trimmed before any conversion from /// a windows path is done. public string TrimPrefix { get { return trimPrefix_; } set { trimPrefix_ = value; if (trimPrefix_ != null) { trimPrefix_ = trimPrefix_.ToLower(); } } } /// /// Force a name to be valid by replacing invalid characters with a fixed value /// /// The name to force valid /// The replacement character to use. /// Returns a valid name static string MakeValidName(string name, char replacement) { int index = name.IndexOfAny(InvalidEntryChars); if (index >= 0) { StringBuilder builder = new StringBuilder(name); while (index >= 0 ) { builder[index] = replacement; if (index >= name.Length) { index = -1; } else { index = name.IndexOfAny(InvalidEntryChars, index + 1); } } name = builder.ToString(); } if (name.Length > 0xffff) { throw new PathTooLongException(); } return name; } /// /// Test a name to see if it is a valid name for a zip entry. /// /// The name to test. /// If true checking is relaxed about windows file names and absolute paths. /// Returns true if the name is a valid zip name; false otherwise. /// Zip path names are actually in Unix format, and should only contain relative paths. /// This means that any path stored should not contain a drive or /// device letter, or a leading slash. All slashes should forward slashes '/'. /// An empty name is valid for a file where the input comes from standard input. /// A null name is not considered valid. /// public static bool IsValidName(string name, bool relaxed) { bool result = (name != null); if ( result ) { if ( relaxed ) { result = name.IndexOfAny(InvalidEntryCharsRelaxed) < 0; } else { result = (name.IndexOfAny(InvalidEntryChars) < 0) && (name.IndexOf('/') != 0); } } return result; } /// /// Test a name to see if it is a valid name for a zip entry. /// /// The name to test. /// Returns true if the name is a valid zip name; false otherwise. /// Zip path names are actually in unix format, /// and should only contain relative paths if a path is present. /// This means that the path stored should not contain a drive or /// device letter, or a leading slash. All slashes should forward slashes '/'. /// An empty name is valid where the input comes from standard input. /// A null name is not considered valid. /// public static bool IsValidName(string name) { bool result = (name != null) && (name.IndexOfAny(InvalidEntryChars) < 0) && (name.IndexOf('/') != 0) ; return result; } #region Instance Fields string trimPrefix_; #endregion #region Class Fields static readonly char[] InvalidEntryChars; static readonly char[] InvalidEntryCharsRelaxed; #endregion } } quickroute-linux-upstream-2.5/3rdparty/SharpZipLib/Zip/ZipOutputStream.cs000066400000000000000000000632511446222606700267550ustar00rootroot00000000000000// ZipOutputStream.cs // // Copyright (C) 2001 Mike Krueger // Copyright (C) 2004 John Reilly // // This file was translated from java, it was part of the GNU Classpath // Copyright (C) 2001 Free Software Foundation, Inc. // // 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. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Linking this library statically or dynamically with other modules is // making a combined work based on this library. Thus, the terms and // conditions of the GNU General Public License cover the whole // combination. // // As a special exception, the copyright holders of this library give you // permission to link this library with independent modules to produce an // executable, regardless of the license terms of these independent // modules, and to copy and distribute the resulting executable under // terms of your choice, provided that you also meet, for each linked // independent module, the terms and conditions of the license of that // module. An independent module is a module which is not derived from // or based on this library. If you modify this library, you may extend // this exception to your version of the library, but you are not // obligated to do so. If you do not wish to do so, delete this // exception statement from your version. // HISTORY // 22-12-2009 Z-1649 Added AES support // 22-02-2010 Z-1648 Zero byte entries would create invalid zip files // 27-07-2012 Z-1724 Compressed size was incorrect in local header when CRC and Size are known using System; using System.IO; using System.Collections; using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.SharpZipLib.Zip.Compression; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; namespace ICSharpCode.SharpZipLib.Zip { /// /// This is a DeflaterOutputStream that writes the files into a zip /// archive one after another. It has a special method to start a new /// zip entry. The zip entries contains information about the file name /// size, compressed size, CRC, etc. /// /// It includes support for Stored and Deflated entries. /// This class is not thread safe. ///
///
Author of the original java version : Jochen Hoenicke ///
/// This sample shows how to create a zip file /// /// using System; /// using System.IO; /// /// using ICSharpCode.SharpZipLib.Core; /// using ICSharpCode.SharpZipLib.Zip; /// /// class MainClass /// { /// public static void Main(string[] args) /// { /// string[] filenames = Directory.GetFiles(args[0]); /// byte[] buffer = new byte[4096]; /// /// using ( ZipOutputStream s = new ZipOutputStream(File.Create(args[1])) ) { /// /// s.SetLevel(9); // 0 - store only to 9 - means best compression /// /// foreach (string file in filenames) { /// ZipEntry entry = new ZipEntry(file); /// s.PutNextEntry(entry); /// /// using (FileStream fs = File.OpenRead(file)) { /// StreamUtils.Copy(fs, s, buffer); /// } /// } /// } /// } /// } /// /// public class ZipOutputStream : DeflaterOutputStream { #region Constructors /// /// Creates a new Zip output stream, writing a zip archive. /// /// /// The output stream to which the archive contents are written. /// public ZipOutputStream(Stream baseOutputStream) : base(baseOutputStream, new Deflater(Deflater.DEFAULT_COMPRESSION, true)) { } /// /// Creates a new Zip output stream, writing a zip archive. /// /// The output stream to which the archive contents are written. /// Size of the buffer to use. public ZipOutputStream( Stream baseOutputStream, int bufferSize ) : base(baseOutputStream, new Deflater(Deflater.DEFAULT_COMPRESSION, true), bufferSize) { } #endregion /// /// Gets a flag value of true if the central header has been added for this archive; false if it has not been added. /// /// No further entries can be added once this has been done. public bool IsFinished { get { return entries == null; } } /// /// Set the zip file comment. /// /// /// The comment text for the entire archive. /// /// /// The converted comment is longer than 0xffff bytes. /// public void SetComment(string comment) { // TODO: Its not yet clear how to handle unicode comments here. byte[] commentBytes = ZipConstants.ConvertToArray(comment); if (commentBytes.Length > 0xffff) { throw new ArgumentOutOfRangeException("comment"); } zipComment = commentBytes; } /// /// Sets the compression level. The new level will be activated /// immediately. /// /// The new compression level (1 to 9). /// /// Level specified is not supported. /// /// public void SetLevel(int level) { deflater_.SetLevel(level); defaultCompressionLevel = level; } /// /// Get the current deflater compression level /// /// The current compression level public int GetLevel() { return deflater_.GetLevel(); } /// /// Get / set a value indicating how Zip64 Extension usage is determined when adding entries. /// /// Older archivers may not understand Zip64 extensions. /// If backwards compatability is an issue be careful when adding entries to an archive. /// Setting this property to off is workable but less desirable as in those circumstances adding a file /// larger then 4GB will fail. public UseZip64 UseZip64 { get { return useZip64_; } set { useZip64_ = value; } } /// /// Write an unsigned short in little endian byte order. /// private void WriteLeShort(int value) { unchecked { baseOutputStream_.WriteByte((byte)(value & 0xff)); baseOutputStream_.WriteByte((byte)((value >> 8) & 0xff)); } } /// /// Write an int in little endian byte order. /// private void WriteLeInt(int value) { unchecked { WriteLeShort(value); WriteLeShort(value >> 16); } } /// /// Write an int in little endian byte order. /// private void WriteLeLong(long value) { unchecked { WriteLeInt((int)value); WriteLeInt((int)(value >> 32)); } } /// /// Starts a new Zip entry. It automatically closes the previous /// entry if present. /// All entry elements bar name are optional, but must be correct if present. /// If the compression method is stored and the output is not patchable /// the compression for that entry is automatically changed to deflate level 0 /// /// /// the entry. /// /// /// if entry passed is null. /// /// /// if an I/O error occured. /// /// /// if stream was finished /// /// /// Too many entries in the Zip file
/// Entry name is too long
/// Finish has already been called
///
public void PutNextEntry(ZipEntry entry) { if ( entry == null ) { throw new ArgumentNullException("entry"); } if (entries == null) { throw new InvalidOperationException("ZipOutputStream was finished"); } if (curEntry != null) { CloseEntry(); } if (entries.Count == int.MaxValue) { throw new ZipException("Too many entries for Zip file"); } CompressionMethod method = entry.CompressionMethod; int compressionLevel = defaultCompressionLevel; // Clear flags that the library manages internally entry.Flags &= (int)GeneralBitFlags.UnicodeText; patchEntryHeader = false; bool headerInfoAvailable; // No need to compress - definitely no data. if (entry.Size == 0) { entry.CompressedSize = entry.Size; entry.Crc = 0; method = CompressionMethod.Stored; headerInfoAvailable = true; } else { headerInfoAvailable = (entry.Size >= 0) && entry.HasCrc && entry.CompressedSize >= 0; // Switch to deflation if storing isnt possible. if (method == CompressionMethod.Stored) { if (!headerInfoAvailable) { if (!CanPatchEntries) { // Can't patch entries so storing is not possible. method = CompressionMethod.Deflated; compressionLevel = 0; } } else // entry.size must be > 0 { entry.CompressedSize = entry.Size; headerInfoAvailable = entry.HasCrc; } } } if (headerInfoAvailable == false) { if (CanPatchEntries == false) { // Only way to record size and compressed size is to append a data descriptor // after compressed data. // Stored entries of this form have already been converted to deflating. entry.Flags |= 8; } else { patchEntryHeader = true; } } if (Password != null) { entry.IsCrypted = true; if (entry.Crc < 0) { // Need to append a data descriptor as the crc isnt available for use // with encryption, the date is used instead. Setting the flag // indicates this to the decompressor. entry.Flags |= 8; } } entry.Offset = offset; entry.CompressionMethod = (CompressionMethod)method; curMethod = method; sizePatchPos = -1; if ( (useZip64_ == UseZip64.On) || ((entry.Size < 0) && (useZip64_ == UseZip64.Dynamic)) ) { entry.ForceZip64(); } // Write the local file header WriteLeInt(ZipConstants.LocalHeaderSignature); WriteLeShort(entry.Version); WriteLeShort(entry.Flags); WriteLeShort((byte)entry.CompressionMethodForHeader); WriteLeInt((int)entry.DosTime); // TODO: Refactor header writing. Its done in several places. if (headerInfoAvailable) { WriteLeInt((int)entry.Crc); if ( entry.LocalHeaderRequiresZip64 ) { WriteLeInt(-1); WriteLeInt(-1); } else { WriteLeInt(entry.IsCrypted ? (int)entry.CompressedSize + ZipConstants.CryptoHeaderSize : (int)entry.CompressedSize); WriteLeInt((int)entry.Size); } } else { if (patchEntryHeader) { crcPatchPos = baseOutputStream_.Position; } WriteLeInt(0); // Crc if ( patchEntryHeader ) { sizePatchPos = baseOutputStream_.Position; } // For local header both sizes appear in Zip64 Extended Information if ( entry.LocalHeaderRequiresZip64 || patchEntryHeader ) { WriteLeInt(-1); WriteLeInt(-1); } else { WriteLeInt(0); // Compressed size WriteLeInt(0); // Uncompressed size } } byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); if (name.Length > 0xFFFF) { throw new ZipException("Entry name too long."); } ZipExtraData ed = new ZipExtraData(entry.ExtraData); if (entry.LocalHeaderRequiresZip64) { ed.StartNewEntry(); if (headerInfoAvailable) { ed.AddLeLong(entry.Size); ed.AddLeLong(entry.CompressedSize); } else { ed.AddLeLong(-1); ed.AddLeLong(-1); } ed.AddNewEntry(1); if ( !ed.Find(1) ) { throw new ZipException("Internal error cant find extra data"); } if ( patchEntryHeader ) { sizePatchPos = ed.CurrentReadIndex; } } else { ed.Delete(1); } #if !NET_1_1 && !NETCF_2_0 if (entry.AESKeySize > 0) { AddExtraDataAES(entry, ed); } #endif byte[] extra = ed.GetEntryData(); WriteLeShort(name.Length); WriteLeShort(extra.Length); if ( name.Length > 0 ) { baseOutputStream_.Write(name, 0, name.Length); } if ( entry.LocalHeaderRequiresZip64 && patchEntryHeader ) { sizePatchPos += baseOutputStream_.Position; } if ( extra.Length > 0 ) { baseOutputStream_.Write(extra, 0, extra.Length); } offset += ZipConstants.LocalHeaderBaseSize + name.Length + extra.Length; // Fix offsetOfCentraldir for AES if (entry.AESKeySize > 0) offset += entry.AESOverheadSize; // Activate the entry. curEntry = entry; crc.Reset(); if (method == CompressionMethod.Deflated) { deflater_.Reset(); deflater_.SetLevel(compressionLevel); } size = 0; if (entry.IsCrypted) { #if !NET_1_1 && !NETCF_2_0 if (entry.AESKeySize > 0) { WriteAESHeader(entry); } else #endif { if (entry.Crc < 0) { // so testing Zip will says its ok WriteEncryptionHeader(entry.DosTime << 16); } else { WriteEncryptionHeader(entry.Crc); } } } } /// /// Closes the current entry, updating header and footer information as required /// /// /// An I/O error occurs. /// /// /// No entry is active. /// public void CloseEntry() { if (curEntry == null) { throw new InvalidOperationException("No open entry"); } long csize = size; // First finish the deflater, if appropriate if (curMethod == CompressionMethod.Deflated) { if (size >= 0) { base.Finish(); csize = deflater_.TotalOut; } else { deflater_.Reset(); } } // Write the AES Authentication Code (a hash of the compressed and encrypted data) if (curEntry.AESKeySize > 0) { baseOutputStream_.Write(AESAuthCode, 0, 10); } if (curEntry.Size < 0) { curEntry.Size = size; } else if (curEntry.Size != size) { throw new ZipException("size was " + size + ", but I expected " + curEntry.Size); } if (curEntry.CompressedSize < 0) { curEntry.CompressedSize = csize; } else if (curEntry.CompressedSize != csize) { throw new ZipException("compressed size was " + csize + ", but I expected " + curEntry.CompressedSize); } if (curEntry.Crc < 0) { curEntry.Crc = crc.Value; } else if (curEntry.Crc != crc.Value) { throw new ZipException("crc was " + crc.Value + ", but I expected " + curEntry.Crc); } offset += csize; if (curEntry.IsCrypted) { if (curEntry.AESKeySize > 0) { curEntry.CompressedSize += curEntry.AESOverheadSize; } else { curEntry.CompressedSize += ZipConstants.CryptoHeaderSize; } } // Patch the header if possible if (patchEntryHeader) { patchEntryHeader = false; long curPos = baseOutputStream_.Position; baseOutputStream_.Seek(crcPatchPos, SeekOrigin.Begin); WriteLeInt((int)curEntry.Crc); if ( curEntry.LocalHeaderRequiresZip64 ) { if ( sizePatchPos == -1 ) { throw new ZipException("Entry requires zip64 but this has been turned off"); } baseOutputStream_.Seek(sizePatchPos, SeekOrigin.Begin); WriteLeLong(curEntry.Size); WriteLeLong(curEntry.CompressedSize); } else { WriteLeInt((int)curEntry.CompressedSize); WriteLeInt((int)curEntry.Size); } baseOutputStream_.Seek(curPos, SeekOrigin.Begin); } // Add data descriptor if flagged as required if ((curEntry.Flags & 8) != 0) { WriteLeInt(ZipConstants.DataDescriptorSignature); WriteLeInt(unchecked((int)curEntry.Crc)); if ( curEntry.LocalHeaderRequiresZip64 ) { WriteLeLong(curEntry.CompressedSize); WriteLeLong(curEntry.Size); offset += ZipConstants.Zip64DataDescriptorSize; } else { WriteLeInt((int)curEntry.CompressedSize); WriteLeInt((int)curEntry.Size); offset += ZipConstants.DataDescriptorSize; } } entries.Add(curEntry); curEntry = null; } void WriteEncryptionHeader(long crcValue) { offset += ZipConstants.CryptoHeaderSize; InitializePassword(Password); byte[] cryptBuffer = new byte[ZipConstants.CryptoHeaderSize]; Random rnd = new Random(); rnd.NextBytes(cryptBuffer); cryptBuffer[11] = (byte)(crcValue >> 24); EncryptBlock(cryptBuffer, 0, cryptBuffer.Length); baseOutputStream_.Write(cryptBuffer, 0, cryptBuffer.Length); } #if !NET_1_1 && !NETCF_2_0 private static void AddExtraDataAES(ZipEntry entry, ZipExtraData extraData) { // Vendor Version: AE-1 IS 1. AE-2 is 2. With AE-2 no CRC is required and 0 is stored. const int VENDOR_VERSION = 2; // Vendor ID is the two ASCII characters "AE". const int VENDOR_ID = 0x4541; //not 6965; extraData.StartNewEntry(); // Pack AES extra data field see http://www.winzip.com/aes_info.htm //extraData.AddLeShort(7); // Data size (currently 7) extraData.AddLeShort(VENDOR_VERSION); // 2 = AE-2 extraData.AddLeShort(VENDOR_ID); // "AE" extraData.AddData(entry.AESEncryptionStrength); // 1 = 128, 2 = 192, 3 = 256 extraData.AddLeShort((int)entry.CompressionMethod); // The actual compression method used to compress the file extraData.AddNewEntry(0x9901); } // Replaces WriteEncryptionHeader for AES // private void WriteAESHeader(ZipEntry entry) { byte[] salt; byte[] pwdVerifier; InitializeAESPassword(entry, Password, out salt, out pwdVerifier); // File format for AES: // Size (bytes) Content // ------------ ------- // Variable Salt value // 2 Password verification value // Variable Encrypted file data // 10 Authentication code // // Value in the "compressed size" fields of the local file header and the central directory entry // is the total size of all the items listed above. In other words, it is the total size of the // salt value, password verification value, encrypted data, and authentication code. baseOutputStream_.Write(salt, 0, salt.Length); baseOutputStream_.Write(pwdVerifier, 0, pwdVerifier.Length); } #endif /// /// Writes the given buffer to the current entry. /// /// The buffer containing data to write. /// The offset of the first byte to write. /// The number of bytes to write. /// Archive size is invalid /// No entry is active. public override void Write(byte[] buffer, int offset, int count) { if (curEntry == null) { throw new InvalidOperationException("No open entry."); } if ( buffer == null ) { throw new ArgumentNullException("buffer"); } if ( offset < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("offset"); #else throw new ArgumentOutOfRangeException("offset", "Cannot be negative"); #endif } if ( count < 0 ) { #if NETCF_1_0 throw new ArgumentOutOfRangeException("count"); #else throw new ArgumentOutOfRangeException("count", "Cannot be negative"); #endif } if ( (buffer.Length - offset) < count ) { throw new ArgumentException("Invalid offset/count combination"); } crc.Update(buffer, offset, count); size += count; switch (curMethod) { case CompressionMethod.Deflated: base.Write(buffer, offset, count); break; case CompressionMethod.Stored: if (Password != null) { CopyAndEncrypt(buffer, offset, count); } else { baseOutputStream_.Write(buffer, offset, count); } break; } } void CopyAndEncrypt(byte[] buffer, int offset, int count) { const int CopyBufferSize = 4096; byte[] localBuffer = new byte[CopyBufferSize]; while ( count > 0 ) { int bufferCount = (count < CopyBufferSize) ? count : CopyBufferSize; Array.Copy(buffer, offset, localBuffer, 0, bufferCount); EncryptBlock(localBuffer, 0, bufferCount); baseOutputStream_.Write(localBuffer, 0, bufferCount); count -= bufferCount; offset += bufferCount; } } /// /// Finishes the stream. This will write the central directory at the /// end of the zip file and flush the stream. /// /// /// This is automatically called when the stream is closed. /// /// /// An I/O error occurs. /// /// /// Comment exceeds the maximum length
/// Entry name exceeds the maximum length ///
public override void Finish() { if (entries == null) { return; } if (curEntry != null) { CloseEntry(); } long numEntries = entries.Count; long sizeEntries = 0; foreach (ZipEntry entry in entries) { WriteLeInt(ZipConstants.CentralHeaderSignature); WriteLeShort(ZipConstants.VersionMadeBy); WriteLeShort(entry.Version); WriteLeShort(entry.Flags); WriteLeShort((short)entry.CompressionMethodForHeader); WriteLeInt((int)entry.DosTime); WriteLeInt((int)entry.Crc); if ( entry.IsZip64Forced() || (entry.CompressedSize >= uint.MaxValue) ) { WriteLeInt(-1); } else { WriteLeInt((int)entry.CompressedSize); } if ( entry.IsZip64Forced() || (entry.Size >= uint.MaxValue) ) { WriteLeInt(-1); } else { WriteLeInt((int)entry.Size); } byte[] name = ZipConstants.ConvertToArray(entry.Flags, entry.Name); if (name.Length > 0xffff) { throw new ZipException("Name too long."); } ZipExtraData ed = new ZipExtraData(entry.ExtraData); if ( entry.CentralHeaderRequiresZip64 ) { ed.StartNewEntry(); if ( entry.IsZip64Forced() || (entry.Size >= 0xffffffff) ) { ed.AddLeLong(entry.Size); } if ( entry.IsZip64Forced() || (entry.CompressedSize >= 0xffffffff) ) { ed.AddLeLong(entry.CompressedSize); } if ( entry.Offset >= 0xffffffff ) { ed.AddLeLong(entry.Offset); } ed.AddNewEntry(1); } else { ed.Delete(1); } #if !NET_1_1 && !NETCF_2_0 if (entry.AESKeySize > 0) { AddExtraDataAES(entry, ed); } #endif byte[] extra = ed.GetEntryData(); byte[] entryComment = (entry.Comment != null) ? ZipConstants.ConvertToArray(entry.Flags, entry.Comment) : new byte[0]; if (entryComment.Length > 0xffff) { throw new ZipException("Comment too long."); } WriteLeShort(name.Length); WriteLeShort(extra.Length); WriteLeShort(entryComment.Length); WriteLeShort(0); // disk number WriteLeShort(0); // internal file attributes // external file attributes if (entry.ExternalFileAttributes != -1) { WriteLeInt(entry.ExternalFileAttributes); } else { if (entry.IsDirectory) { // mark entry as directory (from nikolam.AT.perfectinfo.com) WriteLeInt(16); } else { WriteLeInt(0); } } if ( entry.Offset >= uint.MaxValue ) { WriteLeInt(-1); } else { WriteLeInt((int)entry.Offset); } if ( name.Length > 0 ) { baseOutputStream_.Write(name, 0, name.Length); } if ( extra.Length > 0 ) { baseOutputStream_.Write(extra, 0, extra.Length); } if ( entryComment.Length > 0 ) { baseOutputStream_.Write(entryComment, 0, entryComment.Length); } sizeEntries += ZipConstants.CentralHeaderBaseSize + name.Length + extra.Length + entryComment.Length; } using ( ZipHelperStream zhs = new ZipHelperStream(baseOutputStream_) ) { zhs.WriteEndOfCentralDirectory(numEntries, sizeEntries, offset, zipComment); } entries = null; } #region Instance Fields /// /// The entries for the archive. /// ArrayList entries = new ArrayList(); /// /// Used to track the crc of data added to entries. /// Crc32 crc = new Crc32(); /// /// The current entry being added. /// ZipEntry curEntry; int defaultCompressionLevel = Deflater.DEFAULT_COMPRESSION; CompressionMethod curMethod = CompressionMethod.Deflated; /// /// Used to track the size of data for an entry during writing. /// long size; /// /// Offset to be recorded for each entry in the central header. /// long offset; /// /// Comment for the entire archive recorded in central header. /// byte[] zipComment = new byte[0]; /// /// Flag indicating that header patching is required for the current entry. /// bool patchEntryHeader; /// /// Position to patch crc /// long crcPatchPos = -1; /// /// Position to patch size. /// long sizePatchPos = -1; // Default is dynamic which is not backwards compatible and can cause problems // with XP's built in compression which cant read Zip64 archives. // However it does avoid the situation were a large file is added and cannot be completed correctly. // NOTE: Setting the size for entries before they are added is the best solution! UseZip64 useZip64_ = UseZip64.Dynamic; #endregion } } quickroute-linux-upstream-2.5/GPSDeviceReaders/000077500000000000000000000000001446222606700216365ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/000077500000000000000000000000001446222606700245505ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/APIs.cs000066400000000000000000000204111446222606700256710ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Runtime.InteropServices; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public class APIs { [DllImport("setupapi.dll", CharSet = CharSet.Auto)] public static extern IntPtr SetupDiGetClassDevs( // 1st form using a ClassGUID ref Guid ClassGuid, int Enumerator, IntPtr hwndParent, int Flags ); [DllImport(@"setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern Boolean SetupDiEnumDeviceInterfaces( IntPtr hDevInfo, //ref DevinfoData devInfo, uint devInfo, ref Guid interfaceClassGuid, UInt32 memberIndex, ref DeviceInterfaceData deviceInterfaceData ); [DllImport("setupapi.dll", SetLastError = true)] public static extern bool SetupDiGetDeviceInterfaceDetail( IntPtr lpDeviceInfoSet, ref DeviceInterfaceData oInterfaceData, IntPtr lpDeviceInterfaceDetailData, //To get the nRequiredSize uint nDeviceInterfaceDetailDataSize, ref uint nRequiredSize, ref DevinfoData deviceInfoData); [DllImport("setupapi.dll", SetLastError = true)] public static extern bool SetupDiGetDeviceInterfaceDetail( IntPtr lpDeviceInfoSet, ref DeviceInterfaceData oInterfaceData, ref DeviceInterfaceDetailData oDetailData, //We have the size -> send struct uint nDeviceInterfaceDetailDataSize, ref uint nRequiredSize, ref DevinfoData deviceInfoData); [DllImport("setupapi.dll", CharSet = CharSet.Auto)] public static extern int CM_Get_Device_ID( IntPtr hDeviceInstance, IntPtr Buffer, int BufferLen, int ulFlags ); [DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr CreateFile( string fileName, [MarshalAs(UnmanagedType.U4)] FileAccess fileAccess, [MarshalAs(UnmanagedType.U4)] FileShare fileShare, IntPtr securityAttributes, [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition, int flags, IntPtr template ); [DllImport("kernel32.dll", SetLastError = true)] public static extern int CloseHandle(IntPtr hObject); [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool WriteFile( IntPtr hHandle, IntPtr lpBuffer, int nNumberOfBytesToWrite, out int lpNumberOfBytesWritten, IntPtr lpOverlapped ); [DllImport("kernel32.dll", SetLastError = true)] public static extern bool ReadFile( IntPtr hFile, byte[] lpBuffer, int nNumberOfBytesToRead, ref int lpNumberOfBytesRead, IntPtr lpOverlapped ); [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool DeviceIoControl( [MarshalAs(UnmanagedType.U4)] int hDevice, [MarshalAs(UnmanagedType.U4)] uint dwIoControlCode, IntPtr lpInBuffer, [MarshalAs(UnmanagedType.U4)]uint nInBufferSize, IntPtr lpOutBuffer, [MarshalAs(UnmanagedType.U4)]uint nOutBufferSize, [MarshalAs(UnmanagedType.U4)]out int lpBytesReturned, [MarshalAs(UnmanagedType.U4)]uint lpOverlapped); [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct DeviceInterfaceData { public int Size; public Guid InterfaceClassGuid; public int Flags; public int Reserved; public void Init() { this.Size = Marshal.SizeOf(typeof(DeviceInterfaceData)); } } [StructLayout(LayoutKind.Sequential)] public struct Overlapped { public int Internal; public int InternalHigh; public int Offset; public int OffsetHigh; public System.IntPtr hEvent; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct DevinfoData { public int Size; public Guid ClassGuid; public IntPtr DevInst; public int Reserved; } /// /// Access to the path for a device /// [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct DeviceInterfaceDetailData { public int Size; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string DevicePath; } [Flags] public enum DeviceFlags : int { DigCFDefault = 1, DigCFPresent = 0x02, // return only devices that are currently present DigCFAllClasses = 4, // gets all classes, ignores the guid... DigCFProfile = 8, // gets only classes that are part of the current hardware profile DigCDDeviceInterface = 0x10, // Return devices that expose interfaces of the interface class that are specified by ClassGuid. } public enum CRErrorCodes { CR_SUCCESS = 0, CR_DEFAULT, CR_OUT_OF_MEMORY, CR_INVALID_POINTER, CR_INVALID_FLAG, CR_INVALID_DEVNODE, CR_INVALID_RES_DES, CR_INVALID_LOG_CONF, CR_INVALID_ARBITRATOR, CR_INVALID_NODELIST, CR_DEVNODE_HAS_REQS, CR_INVALID_RESOURCEID, CR_DLVXD_NOT_FOUND, // WIN 95 ONLY CR_NO_SUCH_DEVNODE, CR_NO_MORE_LOG_CONF, CR_NO_MORE_RES_DES, CR_ALREADY_SUCH_DEVNODE, CR_INVALID_RANGE_LIST, CR_INVALID_RANGE, CR_FAILURE, CR_NO_SUCH_LOGICAL_DEV, CR_CREATE_BLOCKED, CR_NOT_SYSTEM_VM, // WIN 95 ONLY CR_REMOVE_VETOED, CR_APM_VETOED, CR_INVALID_LOAD_TYPE, CR_BUFFER_SMALL, CR_NO_ARBITRATOR, CR_NO_REGISTRY_HANDLE, CR_REGISTRY_ERROR, CR_INVALID_DEVICE_ID, CR_INVALID_DATA, CR_INVALID_API, CR_DEVLOADER_NOT_READY, CR_NEED_RESTART, CR_NO_MORE_HW_PROFILES, CR_DEVICE_NOT_THERE, CR_NO_SUCH_VALUE, CR_WRONG_TYPE, CR_INVALID_PRIORITY, CR_NOT_DISABLEABLE, CR_FREE_RESOURCES, CR_QUERY_VETOED, CR_CANT_SHARE_IRQ, CR_NO_DEPENDENT, CR_SAME_RESOURCES, CR_NO_SUCH_REGISTRY_KEY, CR_INVALID_MACHINENAME, // NT ONLY CR_REMOTE_COMM_FAILURE, // NT ONLY CR_MACHINE_UNAVAILABLE, // NT ONLY CR_NO_CM_SERVICES, // NT ONLY CR_ACCESS_DENIED, // NT ONLY CR_CALL_NOT_IMPLEMENTED, CR_INVALID_PROPERTY, CR_DEVICE_INTERFACE_ACTIVE, CR_NO_SUCH_DEVICE_INTERFACE, CR_INVALID_REFERENCE_STRING, CR_INVALID_CONFLICT_LIST, CR_INVALID_INDEX, CR_INVALID_STRUCTURE_SIZE, NUM_CR_RESULTS, } public const int CM_REGISTRY_HARDWARE = 0; public const int ERROR_INSUFFICIENT_BUFFER = 122; public const int ERROR_INVALID_DATA = 13; public const int ERROR_INVALID_PARAMETER = 87; public const int ERROR_INVALID_HANDLE = 6; public const int ERROR_NO_MORE_ITEMS = 259; public const int KEY_QUERY_VALUE = 1; public const int RegDisposition_OpenExisting = 1; public const int INVALID_HANDLE_VALUE = -1; public const int MAXIMUM_USB_STRING_LENGTH = 255; public const int ASYNC_DATA_SIZE = 64; } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/D1001_Lap_Type.cs000066400000000000000000000020221446222606700273550ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class D1001_Lap_Type { public uint Index { get; set; } public uint StartTime { get; set; } public uint TotalTime { get; set; } public float TotalDist { get; set; } public float MaxSpeed { get; set; } public D_Position_Type Begin { get; set; } public D_Position_Type End { get; set; } public ushort Calories { get; set; } public byte AvgHeartRate { get; set; } public byte MaxHeartRate { get; set; } public byte Intensity { get; set; } #region Derived properties public DateTime StartTimeAsDateTime { get { return GarminUtil.GetDateTimeFromElapsedSeconds(StartTime); } } public UInt32 FinishTime { get { return StartTime + TotalTime/100; } } public DateTime FinishTimeAsDateTime { get { return StartTimeAsDateTime.AddSeconds((int)(TotalTime/100)); } } #endregion } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/D1002_Workout_Type.cs000066400000000000000000000003561446222606700303240ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class D1002_Workout_Type { public uint NumValidSteps { get; set; } public Sport_Type SportType { get; set; } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/D1010_Run_Type.cs000066400000000000000000000011151446222606700274070ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class D1010_Run_Type { public UInt32 TrackIndex { get; set; } public UInt32 FirstLapIndex { get; set; } public UInt32 LastLapIndex { get; set; } public Sport_Type SportType { get; set; } public Program_Type ProgramType { get; set; } public Multisport Multisport { get; set; } public byte Unused { get; set; } public D_Virtual_partner VirtualPartner { get; set; } public D1002_Workout_Type Workout { get; set; } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/D303_Trk_Point_Type.cs000066400000000000000000000006721446222606700305070ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class D303_Trk_Point_Type { public D_Position_Type Position { get; set; } public uint Time { get; set; } public float Altitude { get; set; } public byte HeartRate { get; set; } public DateTime TimeAsDateTime { get { return GarminUtil.GetDateTimeFromElapsedSeconds(Time); } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/D_Position_Type.cs000066400000000000000000000010521446222606700301450ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class D_Position_Type { public int Latitude { get; set; } public int Longitude { get; set; } #region Derived properties public double LatitudeAsDegrees { get { return Latitude * (180 / Math.Pow(2, 31)); } set { throw new NotImplementedException(); } } public double LongitudeAsDegrees { get { return Longitude * (180 / Math.Pow(2, 31)); } } #endregion } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/D_Virtual_partner.cs000066400000000000000000000003401446222606700305200ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class D_Virtual_partner { public uint Time { get; set; } public float Distance { get; set; } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSession.cs000066400000000000000000000046321446222606700276650ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { [Serializable] public class GarminSession { public GarminSession(D1010_Run_Type run, IList laps, IList trackpoints) { Run = run; Laps = laps; Trackpoints = trackpoints; } public D1010_Run_Type Run { get; private set; } public IList Laps { get; private set; } public IList Trackpoints { get; private set; } public DateTime StartTime { get { return Laps[0].StartTimeAsDateTime; } } public DateTime FinishTime { get { return Laps[Laps.Count - 1].FinishTimeAsDateTime; } } public GarminSessionHeader GetHeader() { return new GarminSessionHeader() { StartTime = StartTime, FinishTime = FinishTime, NumberOfLaps = Laps.Count }; } } [Serializable] public class GarminSessionHeader : IComparable, IComparable { public DateTime StartTime { get; set; } public DateTime FinishTime { get; set; } public int NumberOfLaps { get; set; } public string Key { get { return string.Format("{0:yyyyMMddHHmmss}-{1:yyyyMMddHHmmss}-{2}", StartTime, FinishTime, NumberOfLaps); } } #region IComparable Members public int CompareTo(GarminSessionHeader other) { if (NumberOfLaps == 0 && other.NumberOfLaps == 0) return 0; if (NumberOfLaps == 0 && other.NumberOfLaps > 0) return 1; if (NumberOfLaps > 0 && other.NumberOfLaps == 0) return -1; var startTimeComparison = StartTime.CompareTo(other.StartTime); return startTimeComparison != 0 ? startTimeComparison : FinishTime.CompareTo(other.FinishTime); } #endregion #region IComparable Members public int CompareTo(object obj) { var other = obj as GarminSessionHeader; if (other != null) { return CompareTo(other); } else { return -1; } } #endregion public override string ToString() { return NumberOfLaps > 0 ? StartTime.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss") : ""; } } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.Designer.cs000066400000000000000000000062641446222606700331300ustar00rootroot00000000000000namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { partial class GarminSessionSelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GarminSessionSelector)); this.ok = new System.Windows.Forms.Button(); this.activityLabel = new System.Windows.Forms.Label(); this.sessionsComboBox = new System.Windows.Forms.ComboBox(); this.cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // activityLabel // resources.ApplyResources(this.activityLabel, "activityLabel"); this.activityLabel.Name = "activityLabel"; // // sessionsComboBox // resources.ApplyResources(this.sessionsComboBox, "sessionsComboBox"); this.sessionsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.sessionsComboBox.FormattingEnabled = true; this.sessionsComboBox.Name = "sessionsComboBox"; // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // GarminSessionSelector // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.cancel); this.Controls.Add(this.sessionsComboBox); this.Controls.Add(this.activityLabel); this.Controls.Add(this.ok); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "GarminSessionSelector"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Label activityLabel; private System.Windows.Forms.ComboBox sessionsComboBox; private System.Windows.Forms.Button cancel; } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.cs000066400000000000000000000014251446222606700313630ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public partial class GarminSessionSelector : Form { public GarminSessionSelector(IEnumerable sessionHeaders) { InitializeComponent(); sessionsComboBox.DataSource = sessionHeaders; } public GarminSessionHeader SelectedSessionHeader { get { return sessionsComboBox.SelectedItem as GarminSessionHeader; } } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.da.resx000066400000000000000000000143131446222606700323220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 48, 13 &Løbepas Afbryd Vælg løbepas quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.de.resx000066400000000000000000000144751446222606700323370ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 42, 13 &Einheit: Abbrechen GPS Gerät erneut lesen Einheit wählen quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.fi.resx000066400000000000000000000144771446222606700323470ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 41, 13 &Sessio: Peruuta Lue uudelleen GPS -laitteelta Valitse sessio quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.fr.resx000066400000000000000000000141061446222606700323450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler &Session : Relire le GPS Sélectionner la session quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.it.resx000066400000000000000000000145101446222606700323510ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 50, 13 &Sessione Cancella Leggi nuovamente l'unità GPS Seleziona la sessione quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.lt.resx000066400000000000000000000146441446222606700323640ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai 58, 13 &Treniruotė: Atšaukti Iš naujo nuskaityti GPS imtuvą Pasirinkti treniruotę quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.no.resx000066400000000000000000000142161446222606700323540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt &Økt: Les av GPS-enhet på nytt Velg økt OK quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.resx000066400000000000000000000252361446222606700317450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 324, 21 6, 13 &Session: 3 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 GarminSessionSelector 260, 53 75, 23 OK cancel 344, 89 True activityLabel 0 Cancel 178, 53 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 12, 9 47, 13 sessionsComboBox 1 0 $this CenterParent Select session $this $this System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 75, 23 ok System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 2 12, 27 True quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.ru.resx000066400000000000000000000142761446222606700323740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ОК &Сессия: Отмена Перечитать данные GPS Выберите сессию quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.sv.resx000066400000000000000000000143011446222606700323630ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 33, 13 &Pass: Avbryt Välj pass quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminUSBPacket.cs000066400000000000000000000047001446222606700300170ustar00rootroot00000000000000using System; using System.Runtime.InteropServices; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public struct GarminUSBPacket { // Byte Number Byte Description Notes // 0 Packet Type USB Protocol Layer = 0, Application Layer = 20 // 1-3 Reserved Must be set to 0 // 4-5 Packet ID // 6-7 Reserved Must be set to 0 // 8-11 Data Size // 12+ Data public byte type; public byte reserved1; public byte reserved2; public byte reserved3; public UInt16 id; public byte reserved4; public byte reserved5; public UInt32 size; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public byte[] data; public GarminUSBPacket(byte[] buffer) { type = buffer[0]; id = BitConverter.ToUInt16(buffer, 4); size = BitConverter.ToUInt32(buffer, 8); data = new byte[buffer.Length - 12]; Array.Copy(buffer, 12, data, 0, buffer.Length - 12); reserved1 = 0; reserved2 = 0; reserved3 = 0; reserved4 = 0; reserved5 = 0; } public GarminUSBPacket(byte type, UInt16 id) { this.type = type; this.id = id; size = 0; data = null; reserved1 = 0; reserved2 = 0; reserved3 = 0; reserved4 = 0; reserved5 = 0; } public GarminUSBPacket(byte type, UInt16 id, UInt32 size, byte[] data) { this.type = type; this.id = id; this.size = size; this.data = data; reserved1 = 0; reserved2 = 0; reserved3 = 0; reserved4 = 0; reserved5 = 0; } public byte Type { set { type = value; } get { return type; } } public UInt16 Id { set { id = value; } get { return id; } } public UInt32 Size { set { size = value; } get { return size; } } public byte[] Data { set { data = value; } get { return data; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminUSBReader.cs000066400000000000000000000710421446222606700300150ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; using QuickRoute.Common; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public delegate void ProgressDelegate(ReadType readType, int step, int maxSteps, double partCompleted); public delegate void CompletedDelegate(); public delegate void ErrorDelegate(Exception ex); public class GarminUSBReader { // singleton implementation private static readonly GarminUSBReader instance = new GarminUSBReader(); public static GarminUSBReader Instance { get { return instance; } } private readonly object locker = new object(); private bool abortingThreadNow; private int step; private int maxSteps; private ReadType readType; private IntPtr handle; private Int16 usbPacketSize; private IDictionary cachedSessionHeaders = new Dictionary(); private string CachedSessionsFileName { get { return Path.Combine(CacheDirectory, "CachedSessions.bin"); } } public string cacheDirectory; public string CacheDirectory { get { return cacheDirectory; } set { cacheDirectory = value; if (!Directory.Exists(cacheDirectory)) { try { Directory.CreateDirectory(cacheDirectory); } catch (Exception) { } } if (File.Exists(CachedSessionsFileName)) { try { cachedSessionHeaders = CommonUtil.DeserializeFromFile>(CachedSessionsFileName); } catch (Exception) { } } } } private Thread workingThread; private GarminUSBReader() { } private bool readingNow; public bool ReadingNow { get { lock(locker) { return readingNow; } } private set { lock (locker) { readingNow = value; } } } #region Events public event ProgressDelegate Progress; public event CompletedDelegate Completed; public event ErrorDelegate Error; #endregion #region Enums private enum Packet_Type { USB_Protocol_Layer = 0, Application_Layer = 20 } private enum L000_Packet_Id { Pid_Protocol_Array = 253, Pid_Product_Rqst = 254, Pid_Product_Data = 255, Pid_Ext_Product_Data = 248 } private enum L001_Packet_Id { Pid_Command_Data = 10, Pid_Xfer_Cmplt = 12, Pid_Date_Time_Data = 14, Pid_Position_Data = 17, Pid_Prx_Wpt_Data = 19, Pid_Records = 27, Pid_Rte_Hdr = 29, Pid_Rte_Wpt_Data = 30, Pid_Almanac_Data = 31, Pid_Trk_Data = 34, Pid_Wpt_Data = 35, Pid_Pvt_Data = 51, Pid_Rte_Link_Data = 98, Pid_Trk_Hdr = 99, Pid_FlightBook_Record = 134, Pid_Lap = 149, Pid_Wpt_Cat = 152, Pid_Run = 990, Pid_Workout = 991, Pid_Workout_Occurrence = 992, Pid_Fitness_User_Profile = 993, Pid_Workout_Limits = 994, Pid_Course = 1061, Pid_Course_Lap = 1062, Pid_Course_Point = 1063, Pid_Course_Trk_Hdr = 1064, Pid_Course_Trk_Data = 1065, Pid_Course_Limits = 1066 } private enum A010_Command_Id_Type { Cmnd_Abort_Transfer = 0, /* abort current transfer */ Cmnd_Transfer_Alm = 1, /* transfer almanac */ Cmnd_Transfer_Posn = 2, /* transfer position */ Cmnd_Transfer_Prx = 3, /* transfer proximity waypoints */ Cmnd_Transfer_Rte = 4, /* transfer routes */ Cmnd_Transfer_Time = 5, /* transfer time */ Cmnd_Transfer_Trk = 6, /* transfer track log */ Cmnd_Transfer_Wpt = 7, /* transfer waypoints */ Cmnd_Turn_Off_Pwr = 8, /* turn off power */ Cmnd_Start_Pvt_Data = 49, /* start transmitting PVT data */ Cmnd_Stop_Pvt_Data = 50, /* stop transmitting PVT data */ Cmnd_FlightBook_Transfer = 92, /* transfer flight records */ Cmnd_Transfer_Laps = 117, /* transfer fitness laps */ Cmnd_Transfer_Wpt_Cats = 121, /* transfer waypoint categories */ Cmnd_Transfer_Runs = 450, /* transfer fitness runs */ Cmnd_Transfer_Workouts = 451, /* transfer workouts */ Cmnd_Transfer_Workout_Occurrences = 452, /* transfer workout occurrences */ Cmnd_Transfer_Fitness_User_Profile = 453, /* transfer fitness user profile */ Cmnd_Transfer_Workout_Limits = 454, /* transfer workout limits */ Cmnd_Transfer_Courses = 561, /* transfer fitness courses */ Cmnd_Transfer_Course_Laps = 562, /* transfer fitness course laps */ Cmnd_Transfer_Course_Points = 563, /* transfer fitness course points */ Cmnd_Transfer_Course_Tracks = 564, /* transfer fitness course tracks */ Cmnd_Transfer_Course_Limits = 565 /* transfer fitness course limits */ } #endregion #region Constants private const int MAX_BUFFER_SIZE = 4096; private const int RECORDS_TYPE_LENGTH = 2; #endregion #region Public properties and methods public bool IsConnected { get { if (ReadingNow) return true; var connected = true; try { StartUSBCommunication(); } catch { connected = false; } finally { StopUSBCommunication(); } return connected; } } public string deviceName; public string DeviceName { get { return deviceName ?? "Garmin Forerunner"; } } public void CancelRead() { try { if (handle != IntPtr.Zero) { // Send Cancel to device SendA010Command((UInt16)A010_Command_Id_Type.Cmnd_Abort_Transfer); } } catch (Exception) { } finally { StopUSBCommunication(); } AbortThread(); } public void BeginReadData() { if (ReadingNow) throw new ReadingNowException(); abortingThreadNow = false; workingThread = new Thread(ReadData); workingThread.Start(); } public bool CachedSessionsExists { get { return CacheDirectory != null && Directory.Exists(CacheDirectory) && Directory.GetFiles(CacheDirectory).Length > 0; } } public IEnumerable GetSessionHeadersFromCache() { return cachedSessionHeaders.Values; } public GarminSession GetSessionFromCache(GarminSessionHeader sessionHeader) { if (!cachedSessionHeaders.ContainsKey(sessionHeader.Key)) return null; try { return CommonUtil.DeserializeFromFile(GetSessionFileName(sessionHeader)); } catch (Exception) { return null; } } #endregion #region Private methods private void ReadData() { Exception exception = null; var completed = false; try { StartUSBCommunication(); maxSteps = 4; // first get device information step = 1; readType = ReadType.ProductData; var deviceInfo = GetDeviceInformation(); deviceName = deviceInfo == null ? "Garmin Forerunner" : deviceInfo.ProductDescription; // then get runs... step = 2; readType = ReadType.Runs; var runs = GetRuns(); // ... and laps step = 3; readType = ReadType.Laps; var laps = GetLaps(); // based on the runs and laps, check if there are any non-cached sessions present var newSessionFound = false; foreach (var session in CreateSessions(runs, laps, null, false)) { var key = session.GetHeader().Key; if (!cachedSessionHeaders.ContainsKey(key)) { newSessionFound = true; break; } } if (newSessionFound) { // there is at least one new session found, download the trackpoints for all sessions and save to cache step = 4; readType = ReadType.Tracks; var tracks = GetTracks(); foreach (var session in CreateSessions(runs, laps, tracks, true)) { var sessionHeader = session.GetHeader(); CommonUtil.SerializeToFile(session, GetSessionFileName(sessionHeader)); if (!cachedSessionHeaders.ContainsKey(sessionHeader.Key)) cachedSessionHeaders.Add(sessionHeader.Key, sessionHeader); } CommonUtil.SerializeToFile(cachedSessionHeaders, CachedSessionsFileName); } completed = true; } catch (Exception e) { exception = e; } finally { StopUSBCommunication(); if (completed) SendCompleted(); if (exception != null) SendError(exception); } } public void AbortThread() { abortingThreadNow = true; try { if (workingThread != null && workingThread.IsAlive) { workingThread.Abort(); } } catch (ThreadAbortException) { while (workingThread.ThreadState == ThreadState.Running) { Thread.Sleep(100); } workingThread = null; } } private GarminUSBDeviceInformation GetDeviceInformation() { // A000 Product data and A001 Protocol Capability Protocol var p = new GarminUSBPacket((byte)Packet_Type.Application_Layer, (ushort)L000_Packet_Id.Pid_Product_Rqst); SendPacket(p); SendProgress(0); var packet = GetPacket(); if (packet.Id == (short)L000_Packet_Id.Pid_Product_Data) { var c = new char[packet.Data.Length - 4]; Array.Copy(packet.Data, 4, c, 0, packet.Data.Length - 4); return new GarminUSBDeviceInformation() { ProductId = BitConverter.ToUInt16(packet.Data, 0), SoftwareVersion = BitConverter.ToInt16(packet.Data, 2), ProductDescription = GetStringFromNullTerminatedCharArray(c) }; } return null; } private IList GetRuns() { var runs = new List(); // Retrive Runs SendA010Command((UInt16)A010_Command_Id_Type.Cmnd_Transfer_Runs); SendProgress(0); var packet = GetPacket(); UInt16 numberOfExpectedRecords = 0; UInt16 numberOfRecords = 0; while (packet.Id != 0 && packet.Id != (short)L001_Packet_Id.Pid_Xfer_Cmplt) { if (packet.Id == (short)L001_Packet_Id.Pid_Records) { numberOfExpectedRecords = BitConverter.ToUInt16(packet.Data, 0); } else if (packet.Id == (short)L001_Packet_Id.Pid_Run) { numberOfRecords++; SendProgress((double)numberOfRecords / numberOfExpectedRecords); runs.Add(CreateRun(packet.Data)); } packet = GetPacket(); } SendProgress(1); return runs; } private IList GetLaps() { var laps = new List(); // Retrive Laps SendA010Command((UInt16)A010_Command_Id_Type.Cmnd_Transfer_Laps); SendProgress(0); var packet = GetPacket(); UInt16 numberOfExpectedRecords = 0; UInt16 numberOfRecords = 0; while (packet.Id != 0 && packet.Id != (short)L001_Packet_Id.Pid_Xfer_Cmplt) { if (packet.Id == (short)L001_Packet_Id.Pid_Records) { numberOfExpectedRecords = BitConverter.ToUInt16(packet.Data, 0); } else if (packet.Id == (short)L001_Packet_Id.Pid_Lap) { numberOfRecords++; SendProgress((double)numberOfRecords / numberOfExpectedRecords); laps.Add(CreateLap(packet.Data)); } packet = GetPacket(); } SendProgress(1); return laps; } private IDictionary> GetTracks() { var tracks = new Dictionary>(); // Retrive Tracks SendA010Command((UInt16)A010_Command_Id_Type.Cmnd_Transfer_Trk); SendProgress(0); var packet = GetPacket(); UInt16 numberOfExpectedRecords = 0; UInt16 numberOfRecords = 0; UInt16 trackKey = 0; var validTrack = true; while ((numberOfRecords < numberOfExpectedRecords || numberOfExpectedRecords == 0) && packet.Id != (short)L001_Packet_Id.Pid_Xfer_Cmplt) { // would rather exit on thePacket.Id == 0, but there is something fishy with Garmin devices setting the id to 0 sometimes if (packet.Id == (short)L001_Packet_Id.Pid_Records) { numberOfExpectedRecords = BitConverter.ToUInt16(packet.Data, 0); } else if (packet.Id == (short)L001_Packet_Id.Pid_Trk_Hdr) { numberOfRecords++; // D311_Trk_Hdr_Type trackKey = BitConverter.ToUInt16(packet.Data, 0); if (!tracks.ContainsKey(trackKey)) { tracks.Add(trackKey, new List()); validTrack = true; } else { validTrack = false; } } else if (packet.Id == (short)L001_Packet_Id.Pid_Trk_Data) { numberOfRecords++; SendProgress((double)numberOfRecords / numberOfExpectedRecords); if (validTrack) tracks[trackKey].Add(CreateTrackpoint(packet.Data)); } packet = GetPacket(); } SendProgress(1); return tracks; } private void StartUSBCommunication() { ReadingNow = true; var guid = new Guid("2C9C45C2-8E7D-4C08-A12D-816BBAE722C0"); string deviceId; const int portIndex = 0; IntPtr hDevInfoSet = APIs.SetupDiGetClassDevs(ref guid, 0, IntPtr.Zero, (int)(APIs.DeviceFlags.DigCDDeviceInterface | APIs.DeviceFlags.DigCFPresent)); APIs.DeviceInterfaceDetailData mDetailedData = GetDeviceInfo(hDevInfoSet, guid, out deviceId, portIndex); handle = APIs.CreateFile(mDetailedData.DevicePath, FileAccess.Read | FileAccess.Write, FileShare.None, IntPtr.Zero, FileMode.Open, 0x00000080, IntPtr.Zero); // Did we get a handle? if ((int)handle < 0) { throw new GarminUsbException(Strings.ErrorFindingDevice); } IntPtr usbPacketSizePointer = Marshal.AllocHGlobal(sizeof(Int16)); int bytesReturned; bool r = APIs.DeviceIoControl( handle.ToInt32(), CTL_CODE(0x00000022, 0x851, 0, 0), IntPtr.Zero, 0, usbPacketSizePointer, (uint)sizeof(int), out bytesReturned, 0); if (!r) { throw new GarminUsbException(Strings.ErrorCommunicatingWithDevice); } usbPacketSize = (Int16)Marshal.PtrToStructure(usbPacketSizePointer, typeof(Int16)); Marshal.FreeHGlobal(usbPacketSizePointer); // Tell the device that we are starting a session. var startSessionPacket = new GarminUSBPacket {Id = 5}; SendPacket(startSessionPacket); GarminUSBPacket packet; while (true) { packet = GetPacket(); if (packet.Type == 0 && packet.Id == 6) { break; } } } private void StopUSBCommunication() { try { if (handle != IntPtr.Zero) { APIs.CloseHandle(handle); handle = IntPtr.Zero; } } finally { ReadingNow = false; } } private void SendA010Command(UInt16 command) { var data = BitConverter.GetBytes(command); var p = new GarminUSBPacket((byte)Packet_Type.Application_Layer, (UInt16)L001_Packet_Id.Pid_Command_Data, RECORDS_TYPE_LENGTH, data); SendPacket(p); } private void SendPacket(GarminUSBPacket aPacket) { var bytesToWrite = 12 + (int)aPacket.Size; int theBytesReturned; IntPtr pPacket = Marshal.AllocHGlobal(bytesToWrite); Marshal.StructureToPtr(aPacket, pPacket, false); bool r = APIs.WriteFile(handle, pPacket, bytesToWrite, out theBytesReturned, IntPtr.Zero); Marshal.FreeHGlobal(pPacket); if (!r) { throw new GarminUsbException(Strings.ErrorCommunicatingWithDevice); } // If the packet size was an exact multiple of the USB packet size, we must make a final write call with no data if (bytesToWrite % usbPacketSize == 0) { r = APIs.WriteFile(handle, IntPtr.Zero, 0, out theBytesReturned, IntPtr.Zero); if (!r) { throw new GarminUsbException(Strings.ErrorCommunicatingWithDevice); } } } private GarminUSBPacket GetPacket() { GarminUSBPacket packet; var bufferSize = 0; var buffer = new byte[0]; while (true) { // Read async data until the driver returns less than the // max async data size, which signifies the end of a packet var tempBuffer = new byte[APIs.ASYNC_DATA_SIZE]; int bytesReturned; IntPtr pInBuffer = Marshal.AllocHGlobal(0); IntPtr pOutBuffer = Marshal.AllocHGlobal(APIs.ASYNC_DATA_SIZE); bool r = APIs.DeviceIoControl( handle.ToInt32(), CTL_CODE(0x00000022, 0x850, 0, 0), pInBuffer, 0, pOutBuffer, APIs.ASYNC_DATA_SIZE, out bytesReturned, 0); Marshal.Copy(pOutBuffer, tempBuffer, 0, APIs.ASYNC_DATA_SIZE); Marshal.FreeHGlobal(pInBuffer); Marshal.FreeHGlobal(pOutBuffer); if (!r) { throw new GarminUsbException(Strings.ErrorCommunicatingWithDevice); } bufferSize += APIs.ASYNC_DATA_SIZE; var newBuffer = new byte[bufferSize]; if (buffer.Length > 0) { Array.Copy(buffer, 0, newBuffer, 0, buffer.Length); } Array.Copy(tempBuffer, 0, newBuffer, bufferSize - APIs.ASYNC_DATA_SIZE, tempBuffer.Length); buffer = newBuffer; if (bytesReturned != APIs.ASYNC_DATA_SIZE) { packet = new GarminUSBPacket(buffer); break; } } // If this was a small "signal" packet, read a real // packet using ReadFile if (packet.Type == 0 && packet.Id == 2) { var newBuffer = new byte[MAX_BUFFER_SIZE]; var bytesReturned = 0; // A full implementation would keep reading (and queueing) // packets until the driver returns a 0 size buffer. bool r = APIs.ReadFile(handle, newBuffer, MAX_BUFFER_SIZE, ref bytesReturned, IntPtr.Zero); if (!r) { throw new GarminUsbException(Strings.ErrorCommunicatingWithDevice); } return new GarminUSBPacket(newBuffer); } return packet; } private static uint CTL_CODE(uint deviceType, uint function, uint method, uint access) { return ((deviceType << 16) | (access << 14) | (function << 2) | method); } private static APIs.DeviceInterfaceDetailData GetDeviceInfo(IntPtr hDevInfoSet, Guid deviceGUID, out string deviceID, int devicePortIndex) { // Get a Device Interface Data structure. // -------------------------------------- APIs.DeviceInterfaceData interfaceData = new APIs.DeviceInterfaceData(); APIs.CRErrorCodes crResult; IntPtr startingDevice; APIs.DevinfoData infoData = new APIs.DevinfoData(); APIs.DeviceInterfaceDetailData detailData = new APIs.DeviceInterfaceDetailData(); bool result = true; IntPtr ptrInstanceBuf; uint requiredSize = 0; interfaceData.Init(); infoData.Size = Marshal.SizeOf(typeof(APIs.DevinfoData)); detailData.Size = Marshal.SizeOf(typeof(APIs.DeviceInterfaceDetailData)); result = APIs.SetupDiEnumDeviceInterfaces( hDevInfoSet, 0, ref deviceGUID, (uint)devicePortIndex, ref interfaceData); if (!result) { if (Marshal.GetLastWin32Error() == APIs.ERROR_NO_MORE_ITEMS) { deviceID = string.Empty; return new APIs.DeviceInterfaceDetailData(); } else { throw new ApplicationException("[CCore::GetDeviceInfo] Error when retriving device info"); } } //Get a DevInfoDetailData and DeviceInfoData // ------------------------------------------ // First call to get the required size. result = APIs.SetupDiGetDeviceInterfaceDetail( hDevInfoSet, ref interfaceData, IntPtr.Zero, 0, ref requiredSize, ref infoData); // Create the buffer. detailData.Size = 5; // Call with the correct buffer result = APIs.SetupDiGetDeviceInterfaceDetail( hDevInfoSet, ref interfaceData, ref detailData, // ref devDetailBuffer, requiredSize, ref requiredSize, ref infoData); if (!result) { System.Windows.Forms.MessageBox.Show(Marshal.GetLastWin32Error().ToString()); throw new ApplicationException("[CCore::GetDeviceInfo] Can not get SetupDiGetDeviceInterfaceDetail"); } startingDevice = infoData.DevInst; //Get current device data ptrInstanceBuf = Marshal.AllocHGlobal(1024); crResult = (APIs.CRErrorCodes)APIs.CM_Get_Device_ID(startingDevice, ptrInstanceBuf, 1024, 0); if (crResult != APIs.CRErrorCodes.CR_SUCCESS) throw new ApplicationException("[CCore::GetDeviceInfo] Error calling CM_Get_Device_ID: " + crResult); // We have the pnp string of the parent device. deviceID = Marshal.PtrToStringAuto(ptrInstanceBuf); Marshal.FreeHGlobal(ptrInstanceBuf); return detailData; } private void SendProgress(double partCompleted) { if (Progress != null) Progress(readType, step, maxSteps, partCompleted); } private void SendCompleted() { if (Completed != null) Completed(); } private void SendError(Exception ex) { if (Error != null && !abortingThreadNow) Error(ex); } private static string GetStringFromNullTerminatedCharArray(char[] c) { string s = new string(c); return s.Remove(s.IndexOf("\0")); } private static D1010_Run_Type CreateRun(byte[] data) { return new D1010_Run_Type { TrackIndex = BitConverter.ToUInt16(data, 0), FirstLapIndex = BitConverter.ToUInt16(data, 2), LastLapIndex = BitConverter.ToUInt16(data, 4), SportType = GetSportType(data[6]), ProgramType = GetProgramType(data[7]), Multisport = GetMultisport(data[8]), VirtualPartner = new D_Virtual_partner { Time = BitConverter.ToUInt32(data, 16), Distance = BitConverter.ToSingle(data, 20) }, Workout = new D1002_Workout_Type { NumValidSteps = BitConverter.ToUInt32(data, 24) } }; } private static Sport_Type GetSportType(byte value) { switch (value) { case 0: return Sport_Type.Running; case 1: return Sport_Type.Biking; default: return Sport_Type.Other; } } private static Program_Type GetProgramType(byte value) { switch (value) { case 1: return Program_Type.Virtual_Partner; case 2: return Program_Type.Workout; case 3: return Program_Type.Auto_Multisport; default: return Program_Type.None; } } private static Multisport GetMultisport(byte value) { switch (value) { case 1: return Multisport.Yes; case 2: return Multisport.YesAndLastInGroup; default: return Multisport.No; } } private static D1001_Lap_Type CreateLap(byte[] data) { return new D1001_Lap_Type() { Index = BitConverter.ToUInt32(data, 0), StartTime = BitConverter.ToUInt32(data, 4), TotalTime = BitConverter.ToUInt32(data, 8), TotalDist = BitConverter.ToSingle(data, 12), MaxSpeed = BitConverter.ToSingle(data, 16), Begin = new D_Position_Type() { Latitude = BitConverter.ToInt32(data, 20), Longitude = BitConverter.ToInt32(data, 24) }, End = new D_Position_Type() { Latitude = BitConverter.ToInt32(data, 28), Longitude = BitConverter.ToInt32(data, 32) }, Calories = BitConverter.ToUInt16(data, 36), AvgHeartRate = data[38], MaxHeartRate = data[39], Intensity = data[40] }; } private static D303_Trk_Point_Type CreateTrackpoint(byte[] data) { return new D303_Trk_Point_Type() { Position = new D_Position_Type() { Latitude = BitConverter.ToInt32(data, 0), Longitude = BitConverter.ToInt32(data, 4) }, Time = BitConverter.ToUInt32(data, 8), Altitude = BitConverter.ToSingle(data, 12), HeartRate = data[20] }; } private string GetSessionFileName(GarminSessionHeader sessionHeader) { return Path.Combine(CacheDirectory, sessionHeader.Key + ".bin"); } public List CreateSessions(IList runs, IList laps, IDictionary> tracks, bool excludeSessionsWithoutTrackpoints) { var sessions = new List(); foreach (var run in runs) { // No tracks if trackIndex == 65535 if (run.TrackIndex != 65535 && (!excludeSessionsWithoutTrackpoints || (tracks != null && tracks.ContainsKey(run.TrackIndex)))) { sessions.Add(new GarminSession(run, GetLapsForRun(run, laps), GetTrackpointsForRun(run, tracks))); } } return sessions; } private static IList GetLapsForRun(D1010_Run_Type run, IEnumerable laps) { var lapsForRun = new List(); foreach (var lap in laps) { if (lap.Index >= run.FirstLapIndex && lap.Index <= run.LastLapIndex) { lapsForRun.Add(lap); } } return lapsForRun; } private static IList GetTrackpointsForRun(D1010_Run_Type run, IDictionary> tracks) { return tracks != null && tracks.ContainsKey(run.TrackIndex) ? tracks[run.TrackIndex] : new List(); } #endregion private class GarminUSBDeviceInformation { public UInt16 ProductId { get; set; } public Int16 SoftwareVersion { get; set; } public string ProductDescription { get; set; } } } public class GarminUsbException : Exception { public GarminUsbException(string message) : base(message) { } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminUSBReader.csproj000066400000000000000000000265771446222606700307250ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {FFEC4820-9B6B-47E9-8594-B71A52081C1E} Library Properties QuickRoute.GPSDeviceReaders.GarminUSBReader QuickRoute.GPSDeviceReaders.GarminUSBReader 3.5 publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false false true v4.5 true full false bin\Debug\ TRACE;DEBUG prompt 4 true pdbonly false bin\Release\ TRACE prompt 4 true true bin\x86\Debug\ TRACE;DEBUG true full x86 prompt 4 false bin\x86\Release\ TRACE pdbonly x86 prompt 4 false true GarminSessionSelector.cs GarminSessionSelector.cs Designer GarminSessionSelector.cs Designer GarminSessionSelector.cs Designer GarminSessionSelector.cs Designer GarminSessionSelector.cs Designer ProgressIndicator.cs ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer Designer ProgressIndicator.cs ResXFileCodeGenerator Resources.Designer.cs Designer Designer ProgressIndicator.cs GarminSessionSelector.cs Designer ResXFileCodeGenerator Strings.Designer.cs Designer Designer Designer True Resources.resx True SettingsSingleFileGenerator Settings.Designer.cs True Settings.settings True Form ProgressIndicator.cs Form GarminSessionSelector.cs True True Strings.resx False .NET Framework 2.0 %28x86%29 true False .NET Framework 3.0 %28x86%29 false False .NET Framework 3.5 false Designer Designer Designer Designer Designer Designer Designer Designer Designer {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E} QuickRoute.Common quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminUSBReader.sln000066400000000000000000000016261446222606700302050ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GarminUSBReader", "GarminUSBReader.csproj", "{8CC961B1-C721-4F7E-894A-D51FAA8C06E1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {8CC961B1-C721-4F7E-894A-D51FAA8C06E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8CC961B1-C721-4F7E-894A-D51FAA8C06E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {8CC961B1-C721-4F7E-894A-D51FAA8C06E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {8CC961B1-C721-4F7E-894A-D51FAA8C06E1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/GarminUtil.cs000066400000000000000000000005121446222606700271500ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public static class GarminUtil { public static DateTime GetDateTimeFromElapsedSeconds(uint secondsElapsed) { var d = new DateTime(1989, 12, 31, 0, 0, 0, DateTimeKind.Utc); return d.AddSeconds(secondsElapsed); } } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Multisport.cs000066400000000000000000000005251446222606700272630ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public enum Multisport { No = 0, /* Not a MultiSport run */ Yes = 1, /* Part of a MultiSport session */ YesAndLastInGroup = 2 /* The last of a MultiSport session */ }; } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Program_Type.cs000066400000000000000000000005031446222606700275050ustar00rootroot00000000000000namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public enum Program_Type { None = 0, Virtual_Partner = 1, /* Completed with Virtual Partner */ Workout = 2, /* Completed as part of a workout */ Auto_Multisport = 3 /* Completed as part of an auto MultiSport */ }; }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.Designer.cs000066400000000000000000000071451446222606700323060ustar00rootroot00000000000000namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { partial class ProgressIndicator { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressIndicator)); this.status = new System.Windows.Forms.Label(); this.progressBar = new System.Windows.Forms.ProgressBar(); this.cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // status // this.status.AccessibleDescription = null; this.status.AccessibleName = null; resources.ApplyResources(this.status, "status"); this.status.Font = null; this.status.Name = "status"; // // progressBar // this.progressBar.AccessibleDescription = null; this.progressBar.AccessibleName = null; resources.ApplyResources(this.progressBar, "progressBar"); this.progressBar.BackgroundImage = null; this.progressBar.Font = null; this.progressBar.Name = "progressBar"; // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.btnCancel_Click); // // ProgressIndicator // this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.ControlBox = false; this.Controls.Add(this.cancel); this.Controls.Add(this.progressBar); this.Controls.Add(this.status); this.Font = null; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ProgressIndicator"; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label status; private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Button cancel; } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.cs000066400000000000000000000051541446222606700305450ustar00rootroot00000000000000using System; using System.Windows.Forms; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public partial class ProgressIndicator : Form { private readonly GarminUSBReader garminUSBReader; public ProgressIndicator(GarminUSBReader garminUSBReader) { InitializeComponent(); this.garminUSBReader = garminUSBReader; status.Text = ""; } protected override void OnLoad(EventArgs e) { BindEventHandlers(); base.OnLoad(e); } private void BindEventHandlers() { garminUSBReader.Progress += GarminUSBReader_Progress; garminUSBReader.Completed += GarminUSBReader_Completed; garminUSBReader.Error += GarminUSBReader_Error; } private void UnbindEventHandlers() { garminUSBReader.Progress -= GarminUSBReader_Progress; garminUSBReader.Completed -= GarminUSBReader_Completed; garminUSBReader.Error -= GarminUSBReader_Error; } private void GarminUSBReader_Error(Exception ex) { if (InvokeRequired) { BeginInvoke(new ErrorDelegate(GarminUSBReader_Error), ex); return; } UnbindEventHandlers(); MessageBox.Show(this, ex.Message, Strings.USBReadError, MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.Abort; } private void GarminUSBReader_Progress(ReadType readType, int step, int maxSteps, double partCompleted) { if (InvokeRequired) { BeginInvoke(new ProgressDelegate(GarminUSBReader_Progress), readType, step, maxSteps, partCompleted); return; } status.Text = string.Format(Strings.Status, step, maxSteps, GetReadTypeString(readType)); progressBar.Value = (int)(100 * partCompleted); } private void GarminUSBReader_Completed() { if (InvokeRequired) { BeginInvoke(new CompletedDelegate(GarminUSBReader_Completed)); return; } UnbindEventHandlers(); DialogResult = DialogResult.OK; Close(); } private void btnCancel_Click(object sender, EventArgs e) { garminUSBReader.CancelRead(); DialogResult = DialogResult.Cancel; } private static string GetReadTypeString(ReadType readType) { switch (readType) { case ReadType.ProductData: return Strings.ProductData; case ReadType.Runs: return Strings.Runs; case ReadType.Laps: return Strings.Laps; case ReadType.Tracks: return Strings.Tracks; } return ""; } } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.da.resx000066400000000000000000000137251446222606700315070ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Læser data... Læser Garmin enhed Afbryd quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.de.resx000066400000000000000000000137261446222606700315140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lese Daten... Lese Garmin Gerät Abbrechen quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.fi.resx000066400000000000000000000143111446222606700315110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 76, 13 Lukee dataa... Peruuta Lukee Garmin -laitteelta quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.fr.resx000066400000000000000000000137431446222606700315320ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lecture des données.... Annuler Lire l'appareil Garmin quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.it.resx000066400000000000000000000137471446222606700315430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Sto leggendo i dati ... Lettura dispositivo Garmin Cancella quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.lt.resx000066400000000000000000000137511446222606700315410ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Nuskaitomi duomenys... Nuskaitomas Garmin laikrodis Atšaukti quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.no.resx000066400000000000000000000137231446222606700315350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Leser data... Leser Garmin-enhet Avbryt quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.resx000066400000000000000000000233321446222606700311170ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 CenterParent 325, 23 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 cancel 133, 54 12, 9 2 0 Reading data... System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ProgressIndicator $this System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Reading Garmin device status 2 1 Cancel 350, 88 $this 6, 13 92, 23 0 15, 25 1 True progressBar $this 80, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.ru.resx000066400000000000000000000143541446222606700315500ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 93, 13 Чтение данных... Отмена Чтение устройства Garmin quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ProgressIndicator.sv.resx000066400000000000000000000143001446222606700315410ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 66, 13 Läser data... Avbryt Läser Garmin-enhet quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Properties/000077500000000000000000000000001446222606700267045ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Properties/AssemblyInfo.cs000066400000000000000000000023631446222606700316320ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("GarminUSBReader")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GarminUSBReader")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("c03232a5-a47b-4f1b-a858-9c3cb9e87e29")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyFileVersion("2.4")] quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Properties/Resources.Designer.cs000066400000000000000000000055401446222606700327500ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.GPSDeviceReaders.GarminUSBReader.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickRoute.GPSDeviceReaders.GarminUSBReader.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Properties/Resources.resx000066400000000000000000000127541446222606700315720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Properties/Settings.Designer.cs000066400000000000000000000021441446222606700325730ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.GPSDeviceReaders.GarminUSBReader.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Properties/Settings.settings000066400000000000000000000003711446222606700322670ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ReadType.cs000066400000000000000000000002251446222606700266130ustar00rootroot00000000000000namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public enum ReadType { ProductData, Runs, Laps, Tracks, } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/ReadingNowException.cs000066400000000000000000000002111446222606700310050ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public class ReadingNowException : Exception { } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Sport_Type.cs000066400000000000000000000002201446222606700272010ustar00rootroot00000000000000namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { public enum Sport_Type { Running = 0, Biking = 1, Other } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.Designer.cs000066400000000000000000000142451446222606700302750ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.GPSDeviceReaders.GarminUSBReader { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Strings { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Strings() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickRoute.GPSDeviceReaders.GarminUSBReader.Strings", typeof(Strings).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to almanac. /// internal static string Almanac { get { return ResourceManager.GetString("Almanac", resourceCulture); } } /// /// Looks up a localized string similar to date and time. /// internal static string DateAndTime { get { return ResourceManager.GetString("DateAndTime", resourceCulture); } } /// /// Looks up a localized string similar to Could not communicate with Garmin USB device. Please make sure that it's properly installed.. /// internal static string ErrorCommunicatingWithDevice { get { return ResourceManager.GetString("ErrorCommunicatingWithDevice", resourceCulture); } } /// /// Looks up a localized string similar to Could not find Garmin USB device. Please make sure that it's properly installed.. /// internal static string ErrorFindingDevice { get { return ResourceManager.GetString("ErrorFindingDevice", resourceCulture); } } /// /// Looks up a localized string similar to laps. /// internal static string Laps { get { return ResourceManager.GetString("Laps", resourceCulture); } } /// /// Looks up a localized string similar to positions. /// internal static string Position { get { return ResourceManager.GetString("Position", resourceCulture); } } /// /// Looks up a localized string similar to product data. /// internal static string ProductData { get { return ResourceManager.GetString("ProductData", resourceCulture); } } /// /// Looks up a localized string similar to runs. /// internal static string Runs { get { return ResourceManager.GetString("Runs", resourceCulture); } } /// /// Looks up a localized string similar to Step {0} of {1}: reading {2}.... /// internal static string Status { get { return ResourceManager.GetString("Status", resourceCulture); } } /// /// Looks up a localized string similar to routes. /// internal static string Tracks { get { return ResourceManager.GetString("Tracks", resourceCulture); } } /// /// Looks up a localized string similar to USB Read Error. /// internal static string USBReadError { get { return ResourceManager.GetString("USBReadError", resourceCulture); } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.da.resx000066400000000000000000000155041446222606700274740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 kalender dato og tid Kan ikke kommunikere med Garmin USB-enheden. Undersøg om den er korrekt tilsluttet. Kan ikke finde Garmin USB-enheden. Undersøg om den er korrekt tilsluttet. mellemtider positioner produkt data løbepas Trin {0} af {1}: læser {2}... ruter USB læsefejl quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.de.resx000066400000000000000000000155721446222606700275050ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Kalender Datum und Uhrzeit Kommunikation mit Garmin USB Gerät fehlgeschlagen. Bitte überprüfen ob das Gerät korrekt installiert ist. Garmin USB Gerät nicht gefunden. Bitte überprüfen ob das Gerät korrekt installiert ist. Zwischenzeiten Positionen Produktdaten Läufe Schritt {0} von {1}: lese {2}... Strecken USB Lesefehler quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.fi.resx000066400000000000000000000155251446222606700275110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 kalenteri Päivämäärä ja kellonaika Garmin USB -laitteeseen ei saada yhteyttä. Varmista, että laite on oikein asennettu. Garmin USB -laitetta ei löydy. Vramista, että laite on oikein asennettu. kierrokset sijainnit tuotedata juoksut Vaihe {0} {1}:sta, lukee {2}... reitit USB -lukuvirhe quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.fr.resx000066400000000000000000000151541446222606700275200ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Almanach Date et heure Impossible d'établir la connexion avec le GPS Garmin. Vérifiez qu'il est correctement installé. Impossible de trouver le GPS Garmin. Vérifiez qu'il est correctement installé. Etape {0} de {1} : lecture {2}... Traces Erreur de la lecture USB Données produites quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.it.resx000066400000000000000000000155711446222606700275300ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Calendario Data ed ora Non posso comunicare con il dispositivo USB Garmin. Verificare che sia installato correttamente. Non riesco a trovare il dispositivo USB Garmin. Verificare che sia installato correttamente. giri posizione informazioni del dispositivo attività Passo {0} di {1}: lettura {2}... percorsi Errore di lettura USB quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.lt.resx000066400000000000000000000155411446222606700275300ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 kalendorius data ir laikas Nėra ryšio su Garmin USB prietaisu. Prašau patikrinti, ar jis tinkamai prijungtas. Garmin USB prietaisas nerastas. Prašau patikrinti, ar jis tinkamai prijungtas. etapai koordinatės laikrodžio duomenys treniruotės Žingsnis {0} iš {1}: {2}... trasos USB nuskaitymo klaida quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.no.resx000066400000000000000000000154601446222606700275250ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 kalender dato og tid Kan ikke kommunisere med Garmin USB-enhet. Sjekk at den er riktig installert. Finner ingen Garmin USB-enhet. Sjekk at den er riktig installert. mellomtider posisjoner produkt-data økter Trinn {0} av {1}: leser {2}... ruter USB lesefeil quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.resx000066400000000000000000000155111446222606700271070ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 almanac date and time Could not communicate with Garmin USB device. Please make sure that it's properly installed. Could not find Garmin USB device. Please make sure that it's properly installed. laps positions product data runs Step {0} of {1}: reading {2}... routes USB Read Error quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.ru.resx000066400000000000000000000157661446222606700275500ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 альманах дата и время Но удаётся установить связь с устройством Garmin. Пожалуйста, убедитесь, что оно установлено корректно. USB-порт устройства Garmin не обнаружен. Пожалуйста, убедитесь, что оно установлено корректно. отрезки позиции данные продукта Шаг {0} из {1}: чтение {2}... пути Ошибка чтения USB quickroute-linux-upstream-2.5/GPSDeviceReaders/GarminUSBReader/Strings.sv.resx000066400000000000000000000155401446222606700275400ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 almanacka datum och tid Kan inte kommunicera med USB-ansluten Garmin-enhet. Se till att enheten är korrekt installerad. Kan inte hitta USB-ansluten Garmin-enhet. Se till att enheten är korrekt installerad. mellantider positioner produktinformation pass Steg {0} av {1}: läser {2}... rutter USB-läsfel quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/000077500000000000000000000000001446222606700254215ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/GH615M.cs000066400000000000000000000156521446222606700266300ustar00rootroot00000000000000using System; using QuickRoute.GPSDeviceReaders.SerialPortDeviceReader; namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { public class GH615MDeviceInfo : IGH615MDeviceInfo { private readonly String _deviceName; private readonly String _version; private readonly String _firmware; private readonly String _name; private readonly int _waypointsCount; private readonly int _tracksCount; private readonly int _routesCount; public GH615MDeviceInfo(String deviceName, String version, String firmware, String name, int waypointsCount, int tracksCount, int routesCount) { _deviceName = deviceName; _version = version; _firmware = firmware; _name = name; _waypointsCount = waypointsCount; _tracksCount = tracksCount; _routesCount = routesCount; } public String DeviceName { get { return _deviceName; } } public String Version { get { return _version; } } public String Firmware { get { return _firmware; } } public String Name { get { return _name; } } public int WayPointsCount { get { return _waypointsCount; } } public int TracksCount { get { return _tracksCount; } } public int RoutesCount { get { return _routesCount; } } } public class GH615MTrackPoint : IGH615MTrackPoint { public GH615MTrackPoint(Decimal latitude, Decimal longitude, int altitude, int speed, int pulse, DateTime time) { _latitude = latitude; _longitude = longitude; _altitude = altitude; _speed = speed; _pulse = pulse; _time = time; } private readonly Decimal _latitude; private readonly Decimal _longitude; private readonly int _altitude; private readonly int _speed; private readonly int _pulse; private readonly DateTime _time; public Decimal Latitude { get { return _latitude; } } public Decimal Longitude { get { return _longitude; } } public int Altitude { get { return _altitude; } } public int Speed { get { return _speed; } } public int Pulse { get { return _pulse; } } public DateTime Time { get { return _time; } } public static GH615MTrackPoint FromByteArray(byte[] buffer, int offset, DateTime timeOffset) { Int32 latitudeValue = HexUtils.ToInt32(buffer, offset + 0); Int32 longitudeValue = HexUtils.ToInt32(buffer, offset + 4); Int16 altitude = HexUtils.ToInt16(buffer, offset + 8); Int16 speed = HexUtils.ToInt16(buffer, offset + 10); byte pulse = buffer[offset + 12]; int interval = HexUtils.ToInt16(buffer, offset + 13); Decimal latitude = new Decimal(latitudeValue) / new Decimal(1000000); if (latitudeValue < 0) { latitude = new Decimal(latitudeValue) / new Decimal(1000000) - new Decimal(4294.967295D); } Decimal longitude = new Decimal(longitudeValue) / new Decimal(1000000); if (longitudeValue < 0) { longitude = new Decimal(longitudeValue) / new Decimal(1000000) - new Decimal(4294.967295D); } DateTime time = timeOffset.Add(new TimeSpan(0, 0, 0, 0, 100 * interval)); return new GH615MTrackPoint(latitude, longitude, altitude, speed, pulse, time); } } public class GH615MTrack : IGH615MTrack { private readonly IGH615MTrackPoint[] _points; private readonly IGH615MTrackInfo _info; public GH615MTrack(IGH615MTrackInfo info, IGH615MTrackPoint[] points) { _info = info; _points = points; } public IGH615MTrackPoint[] GetTrackPoints() { if (_points == null) { return new IGH615MTrackPoint[] { }; } return _points; } public IGH615MTrackInfo GetTrackInfo() { return _info; } } public class GH615MTrackInfo : IGH615MTrackInfo { private DateTime _date; private readonly int _duration; private readonly int _distance; private readonly int _calories; private readonly int _topSpeed; private readonly int _maxPulse; private readonly int _avgPulse; private readonly Int32 _trackPointsCount; private readonly Int16 _id; public GH615MTrackInfo(DateTime date, int duration, int distance, int calories, int topSpeed, int maxPuls, int avgPuls, int trackPointsCount, Int16 id) { _date = date; _duration = duration; _distance = distance; _calories = calories; _topSpeed = topSpeed; _maxPulse = maxPuls; _avgPulse = avgPuls; _trackPointsCount = trackPointsCount; _id = id; } public DateTime Date { get { return _date; } } public int Duration { get { return _duration; } } public int Distance { get { return _distance; } } public int Calories { get { return _calories; } } public int TopSpeed { get { return _topSpeed; } } public int MaxPulse { get { return _maxPulse; } } public int AvgPulse { get { return _avgPulse; } } public Int16 Id { get { return _id; } } public Int32 TrackPointsCount { get { return _trackPointsCount; } } public static GH615MTrackInfo FromByteArray(byte[] buffer, int offset, Int16? id) { int year = 2000 + buffer[offset + 0]; int month = buffer[offset + 1]; int day = buffer[offset + 2]; int hour = buffer[offset + 3]; int minute = buffer[offset + 4]; int second = buffer[offset + 5]; var date = new DateTime(year, month, day, hour, minute, second); int duration = HexUtils.ToInt32(buffer, offset + 6) / 10; int distance = HexUtils.ToInt32(buffer, offset + 10); int calories = HexUtils.ToInt16(buffer, offset + 14); int topSpeed = HexUtils.ToInt16(buffer, offset + 16); int maxPuls = buffer[offset + 18]; int avgPuls = buffer[offset + 19]; int trackpointCount = HexUtils.ToInt16(buffer, offset + 20); if (id == null) { id = HexUtils.ToInt16(buffer, offset + 22); } return new GH615MTrackInfo(date, duration, distance, calories, topSpeed, maxPuls, avgPuls, trackpointCount, id.Value); } public override String ToString() { return String.Format("{0}, {1} m, {2} min", _date.ToString("s"), _distance, (_duration / 60.0).ToString("F2")); } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/GH615MSerialPortCommand.cs000066400000000000000000000270321446222606700321270ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using QuickRoute.GPSDeviceReaders.SerialPortDeviceReader; namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { class GH615MError : Exception { public GH615MError() { } public GH615MError(string message) : base(message) { } public GH615MError(string message, Exception e) : base(message, e) { } } class GH615MCommunicationError : GH615MError { public GH615MCommunicationError() { } public GH615MCommunicationError(string message) : base(message) { } public GH615MCommunicationError(string message, Exception e) : base(message, e) { } } public class CheckGH615MPortCommand : SerialPortCommand { private bool _status; private static readonly byte[] Header = new byte[] { 0xBF, 0x00, 0x08, 0x47, 0x48, 0x2D, 0x36, 0x31, 0x35, 0x4D, 0x00, 0x55 }; public CheckGH615MPortCommand() : base(DefaultSleepTime, Header.Length) { } override protected byte[] GetCommandBuffer() { return new byte[] { 0x02, 0x00, 0x01, 0xBF, 0xBE }; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, Header, Header.Length)) { _status = true; } } public bool IsOk() { return _status; } } public class GetDeviceInfoCommand : SerialPortCommand { private GH615MDeviceInfo _info; private static readonly byte[] Header = new byte[] { 0x85, 0x00 }; public GetDeviceInfoCommand() : base(1000) { } override protected byte[] GetCommandBuffer() { return new byte[] { 0x02, 0x00, 0x01, 0x85, 0x84 }; } override protected void ProcessBuffer(byte[] buffer) { if (!CompareFirstN(buffer, Header, Header.Length)) { throw new GH615MCommunicationError("Wrong Header in GetDeviceInfoCommand"); } var zero = new String(new[] { '\0' }); var deviceName = Encoding.UTF8.GetString(buffer, 3, 9).Replace(zero, ""); var version = String.Format("{0}.{1}", Convert.ToString(buffer[26], 16).PadLeft(2, '0'), Convert.ToString(buffer[27], 16).PadLeft(2, '0')); var firmware = Encoding.UTF8.GetString(buffer, 28, 16); var name = Encoding.UTF8.GetString(buffer, 45, 9).Replace(zero, ""); int waypointsCount = buffer[66]; int tracksCount = buffer[67]; int routesCount = buffer[68]; _info = new GH615MDeviceInfo(deviceName, version, firmware, name, waypointsCount, tracksCount, routesCount); } public IGH615MDeviceInfo GetDeviceInfo() { return _info; } } public class GetTracksListCommand : SerialPortCommand { private GH615MTrackInfo[] _infos = new GH615MTrackInfo[] { }; private static readonly byte[] Header = new byte[] { 0x78 }; override protected byte[] GetCommandBuffer() { return new byte[] { 0x02, 0x00, 0x01, 0x78, 0x79 }; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, Header, Header.Length) && buffer.Length > 4 && (buffer.Length - 4) % 24 == 0) { int tracksCount = (buffer.Length - (Header.Length + 2 + 1)) / 24; _infos = new GH615MTrackInfo[tracksCount]; int offset = Header.Length + 2; for (int i = 0; i < tracksCount; i++) { GH615MTrackInfo info = GH615MTrackInfo.FromByteArray(buffer, offset, null); _infos[i] = info; offset += 24; } } } public IGH615MTrackInfo[] GetTracksInfo() { return _infos; } } public class StartLoadTrackCommand : SerialPortCommand { private static readonly byte[] End = new byte[] { 0x8A, 0x00, 0x00, 0x00 }; private readonly LoadStatus _status; public StartLoadTrackCommand(Int16 id) : base(1000) { _status = new LoadStatus(id); } override protected byte[] GetCommandBuffer() { var commandHeader = new byte[] { 0x02, 0x00 }; var command = new byte[commandHeader.Length /* header */ + 2 /* payload */ + 2 /* numberOfTracks */ + 2 /* id */ + 1 /* checkSum */]; Array.Copy(commandHeader, 0, command, 0, commandHeader.Length); int offset = commandHeader.Length; byte[] payload = HexUtils.GetBytes((Int16)(512 + 896)); Array.Copy(payload, 0, command, offset, payload.Length); offset += 2; byte[] numberOfTracks = HexUtils.GetBytes((Int16)1); Array.Copy(numberOfTracks, 0, command, offset, numberOfTracks.Length); offset += 2; byte[] idBytes = HexUtils.GetBytes(_status.Id); Array.Copy(idBytes, 0, command, offset, idBytes.Length); offset += 2; command[offset] = HexUtils.CheckSum(command, commandHeader.Length, 2 /* payload */ + 2 /* numberOfTracks */ + 2 /* id */ ); return command; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, End, End.Length)) { _status.FirstLoadedPointNumber = 0; _status.LastLoadedPointNumber = -1; _status.IsFinished = true; return; } if (buffer.Length >= 3 + 22) { _status.TrackInfo = GH615MTrackInfo.FromByteArray(buffer, 3, _status.Id); Int16 from = HexUtils.ToInt16(buffer, 3 + 22); Int16 to = HexUtils.ToInt16(buffer, 3 + 22 + 2); if (_status.LastLoadedPointNumber + 1 != from) { throw new GH615MCommunicationError(String.Format("Loading error! Expected points from {0}, but get from {1} to {2}!", _status.LastLoadedPointNumber + 1, from, to)); } int offset = 3 + 22 + 4; DateTime timeOffset = _status.TrackInfo.Date; if (_status.TrackPoints.Count > 0) { timeOffset = _status.TrackPoints[_status.TrackPoints.Count-1].Time; } for (int i = 0; i <= to - from; i++) { GH615MTrackPoint point = GH615MTrackPoint.FromByteArray(buffer, offset, timeOffset); _status.TrackPoints.Add(point); timeOffset = point.Time; offset += 15; } _status.FirstLoadedPointNumber = from; _status.LastLoadedPointNumber = to; } } public LoadStatus Status { get { return _status; } } } public interface ILoadStatus { IGH615MTrackInfo TrackInfo { get; } Int16 LastLoadedPointNumber { get; } Int32 LastLoadedPointsCount { get; } } public class LoadStatus : ILoadStatus { private Int16 _from; private Int16 _to = -1; private readonly List _trackPoints = new List(); public LoadStatus(Int16 id) { Id = id; } public Int16 Id { get; private set; } public IGH615MTrackInfo TrackInfo { get; set; } public List TrackPoints { get { return _trackPoints; } } public Int16 LastLoadedPointNumber { get { return _to; } set { _to = value; } } public Int16 FirstLoadedPointNumber { get { return _from; } set { _from = value; } } public Int32 LastLoadedPointsCount { get { return _to - _from + 1; } } public bool IsFinished { get; set; } } public class ContinueLoadTracksCommand : SerialPortCommand { private static readonly byte[] End = new byte[] { 0x8A, 0x00, 0x00, 0x00 }; private static readonly byte[] Command = new byte[] { 0x02, 0x00, 0x01, 0x81, 0x80 }; private readonly LoadStatus _status; public ContinueLoadTracksCommand(LoadStatus status) : base(1000) { _status = status; } public LoadStatus Status { get { return _status; } } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, End, End.Length)) { _status.FirstLoadedPointNumber = 0; _status.LastLoadedPointNumber = -1; _status.IsFinished = true; return; } var from = HexUtils.ToInt16(buffer, 3 + 22); var to = HexUtils.ToInt16(buffer, 3 + 22 + 2); if (_status.LastLoadedPointNumber + 1 != from) { throw new GH615MCommunicationError(String.Format("Loading error! Expected points from {0}, but get from {1} to {2}!", _status.LastLoadedPointNumber + 1, from, to)); } int offset = 3 + 22 + 4; DateTime timeOffset = _status.TrackInfo.Date; if (_status.TrackPoints.Count > 0) { timeOffset = _status.TrackPoints[_status.TrackPoints.Count-1].Time; } for (int i = 0; i <= to - from; i++) { GH615MTrackPoint point = GH615MTrackPoint.FromByteArray(buffer, offset, timeOffset); _status.TrackPoints.Add(point); timeOffset = point.Time; offset += 15; } _status.FirstLoadedPointNumber = from; _status.LastLoadedPointNumber = to; } } public class DeleteAllTracksCommand : SerialPortCommand { private static readonly byte[] End = new byte[] { 0x79, 0x00, 0x00, 0x00 }; private static readonly byte[] Command = new byte[] { 0x02, 0x00, 0x03, 0x79, 0x00, 0x64, 0x1E }; public DeleteAllTracksCommand() : base(3000) { } public bool IsOk { get; private set; } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, End, End.Length) && buffer.Length == End.Length) { IsOk = true; } } } public class DeleteAllWayPointsCommand : SerialPortCommand { private static readonly byte[] End = new byte[] { 0x75, 0x00, 0x00, 0x00 }; private static readonly byte[] Command = new byte[] { 0x02, 0x00, 0x03, 0x75, 0x00, 0x64, 0x12 }; public DeleteAllWayPointsCommand() : base(3000) { } public bool IsOk { get; private set; } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, End, End.Length) && buffer.Length == End.Length) { IsOk = true; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MReader.cs000066400000000000000000000352571446222606700315470ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO.Ports; using System.Threading; using QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.Properties; using QuickRoute.GPSDeviceReaders.SerialPortDeviceReader; namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { public delegate void ProgressDelegate(string message, int percent); public delegate void ReadCompletedDelegate(); public delegate void ReadErrorDelegate(Exception e); public class GlobalSatGH615MReader { public event ProgressDelegate ProgressChanged; public event ReadCompletedDelegate ReadCompleted; public event ReadErrorDelegate ReadError; public GlobalSatGH615MReader() { Port = Settings.Default.PortName; } private Thread _thread; private String _portName; private readonly SerialPort _commport = new SerialPort(); private IGH615MDeviceInfo _deviceInfo; private IGH615MTrackInfo[] _tracksInfo = new IGH615MTrackInfo[] {}; private readonly IDictionary _tracks = new Dictionary(); public bool IsConnected { get; private set; } public String Port { get { return _portName; } set { if (_portName == value) { return; } ClearCache(); _portName = value; CheckPort(); } } public IGH615MDeviceInfo GetDeviceInfo() { if (_deviceInfo == null) { if (!IsConnected) { return null; } using (var session = new SerialPortSession(_commport)) { var cmd = new GetDeviceInfoCommand(); cmd.Execute(session.Port); _deviceInfo = cmd.GetDeviceInfo(); } } return _deviceInfo; } public IGH615MTrackInfo[] GetTracksInfo() { if (_tracksInfo == null) { if (!IsConnected) { return null; } using (var session = new SerialPortSession(_commport)) { var cmd = new GetTracksListCommand(); cmd.Execute(session.Port); _tracksInfo = cmd.GetTracksInfo(); Array.Reverse(_tracksInfo); } } return _tracksInfo; } public IGH615MTrack GetTrack(IGH615MTrackInfo info) { return GetTrack(info.Id); } public IGH615MTrack GetTrack(Int16 id) { lock (this) { if (_tracks.ContainsKey(id)) { return _tracks[id]; } if (!IsConnected) { return null; } GH615MTrack result = null; using (var session = new SerialPortSession(_commport)) { var startLoadCommand = new StartLoadTrackCommand(id); startLoadCommand.Execute(session.Port); var total = startLoadCommand.Status.TrackInfo.TrackPointsCount; var current = startLoadCommand.Status.LastLoadedPointsCount; SendProgressChanged(String.Format("Read track data... ({0}/{1})", current, total), current, total); if (startLoadCommand.Status.IsFinished) { if (startLoadCommand.Status.TrackInfo != null) { result = new GH615MTrack(startLoadCommand.Status.TrackInfo, startLoadCommand.Status.TrackPoints.ToArray()); } } else { var command = new ContinueLoadTracksCommand(startLoadCommand.Status); do { command.Execute(session.Port); current += startLoadCommand.Status.LastLoadedPointsCount; SendProgressChanged(String.Format("Read track data... ({0}/{1})", current, total), current, total); } while (!command.Status.IsFinished); result = new GH615MTrack(command.Status.TrackInfo, command.Status.TrackPoints.ToArray()); } SendReadCompleted(); } if (result != null) { _tracks.Add(id, result); } return result; } } public IGH615MTrack[] GetTracks(IGH615MTrackInfo[] infos) { var ids = new Int16[infos.Length]; for (Int16 i = 0; i < infos.Length; i++) { ids[i] = infos[i].Id; } return GetTracks(ids); } public IGH615MTrack[] GetTracks(Int16[] ids) { var tracks = new List(); foreach (var id in ids) { var track = GetTrack(id); tracks.Add(track); } return tracks.ToArray(); } public void DeleteAllTracks() { if (!IsConnected) { return; } using (var session = new SerialPortSession(_commport)) { var cmd = new DeleteAllTracksCommand(); cmd.Execute(session.Port); } } public IGH615MWayPoint[] GetWayPoints() { // TODO: load waypoints // 'getWaypoints' : '0200017776', //def getWaypoints(self): // response = self._querySerial('getWaypoints') // waypoints = Utilities.chop(response[6:-2], 36) #trim junk // return [Waypoint().fromHex(waypoint) for waypoint in waypoints] // //class Waypoint(Point): // def __init__(self, latitude = 0, longitude = 0, altitude = 0, title = '', type = 0): // self.altitude = altitude // self.title = title // self.type = type // super(Waypoint, self).__init__(latitude, longitude) // def __str__(self): // return "%s (%f,%f)" % (self.title, self.latitude, self.longitude) // def __hex__(self): // return "%(title)s00%(type)s%(altitude)s%(latitude)s%(longitude)s" % { // 'latitude' : hex(self.latitude), // 'longitude' : hex(self.longitude), // 'altitude' : Utilities.dec2hex(self.altitude,4), // 'type' : Utilities.dec2hex(self.type,2), // 'title' : Utilities.chr2hex(self.title.ljust(6)[:6]) // } // def fromHex(self, hex): // if len(hex) == 36: // def safeConvert(c): // #if hex == 00 chr() converts it to space, not \x00 // if c == '00': // return ' ' // else: // return Utilities.hex2chr(c) // self.latitude = Coordinate().fromHex(hex[20:28]) // self.longitude = Coordinate().fromHex(hex[28:36]) // self.altitude = Utilities.hex2dec(hex[16:20]) // self.title = safeConvert(hex[0:2])+safeConvert(hex[2:4])+safeConvert(hex[4:6])+safeConvert(hex[6:8])+safeConvert(hex[8:10])+safeConvert(hex[10:12]) // self.type = Utilities.hex2dec(hex[12:16]) // return self // else: // raise GH600ParseException(self.__class__.__name__, len(hex), 36) return null; } public void DeleteAllWayPoints() { if (!IsConnected) { return; } using (var session = new SerialPortSession(_commport)) { var cmd = new DeleteAllWayPointsCommand(); cmd.Execute(session.Port); } } private void ClearCache() { _tracks.Clear(); _deviceInfo = null; _tracksInfo = null; } private void CheckPort() { if (string.IsNullOrEmpty(_portName)) { IsConnected = false; return; } try { if (_commport.IsOpen) { _commport.Close(); } _commport.PortName = _portName; _commport.BaudRate = 57600; _commport.DataBits = 8; _commport.StopBits = StopBits.One; _commport.Parity = Parity.None; _commport.ReadTimeout = 500; _commport.WriteTimeout = 500; using (var session = new SerialPortSession(_commport)) { var checkCommand = new CheckGH615MPortCommand(); checkCommand.Execute(session.Port); IsConnected = checkCommand.IsOk(); if (IsConnected) { Settings.Default.PortName = _portName; Settings.Default.Save(); } } } catch (Exception) { IsConnected = false; } } public void RescanPort() { SendProgressChanged("Clear cache...", 0, 2); ClearCache(); SendProgressChanged(String.Format("Re-read device on port {0}...", Port), 1, 2); CheckPort(); try { var info = GetDeviceInfo(); if (info != null) { SendProgressChanged(String.Format("Device found on {0}.", Port), 2, 2); SendReadCompleted(); return; } } catch (Exception e) { SendReadError(e); } SendProgressChanged("Device not found! Check connection and device mode.", 2, 2); SendReadCompleted(); } public void ScanPorts() { var portNames = SerialPortUtil.GetLatestPortsList(); if (portNames == null) { return; } var total = portNames.Length; for (var i = 0; i < portNames.Length; i++) { var portName = portNames[i]; try { SendProgressChanged(String.Format("Scaning port {0}...", portName), i, total); Port = portName; var info = GetDeviceInfo(); var tracksInfo = GetTracksInfo(); if (info != null) { SendProgressChanged(String.Format("Device found on {0}. Number of tracks: {1}", portName, tracksInfo.Length), total, total); SendReadCompleted(); return; } } catch (Exception e) { SendReadError(e); } } SendProgressChanged("Device not found! Check connection and device mode.", total, total); SendReadCompleted(); } private void StartReadThread(ThreadStart threadStartMethod) { StopReadPortThread(); var myThread = new ThreadStart(threadStartMethod); _thread = new Thread(myThread); _thread.Start(); } public void StartRescanPortThread() { StartReadThread(RescanPort); } public void StartReadTrackThread(IGH615MTrackInfo info) { var worker = new ReadTrackWorker(this, info); StartReadThread(worker.ReadTrack); } class ReadTrackWorker { private readonly IGH615MTrackInfo _info; private readonly GlobalSatGH615MReader _reader; public ReadTrackWorker(GlobalSatGH615MReader reader, IGH615MTrackInfo info) { _reader = reader; _info = info; } public void ReadTrack() { _reader.GetTrack(_info); } } public void StopReadPortThread() { try { if (_thread != null && _thread.IsAlive) { _thread.Abort(); } } catch (ThreadAbortException) { if (_thread != null) { while (_thread.ThreadState == ThreadState.Running) { } } _thread = null; } } private void SendProgressChanged(string message, int value, int max) { var percent = ((value / (Single)max) * 100); if (percent > 100) { percent = 100; } if (ProgressChanged != null) { ProgressChanged(message, (int)percent); } } private void SendReadCompleted() { if (ReadCompleted != null) { ReadCompleted(); } } private void SendReadError(Exception e) { if (ReadError != null) { ReadError(e); } } public void Cancel() { StopReadPortThread(); } } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MReader.csproj000066400000000000000000000147361446222606700324410ustar00rootroot00000000000000 Debug AnyCPU 9.0.30729 2.0 {81633CC3-9C5E-4C93-A9A6-876F6AE40883} Library Properties QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader v2.0 512 3.5 true full false bin\x86\Debug\ DEBUG;TRACE prompt 4 x86 true pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE true full x86 prompt bin\x86\Release\ TRACE true pdbonly x86 prompt Form GlobalSatGH615MTrackSelector.cs Form ProgressIndicator.cs GlobalSatGH615MTrackSelector.cs Designer ProgressIndicator.cs ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ResXFileCodeGenerator Resources.Designer.cs Designer True Resources.resx True SettingsSingleFileGenerator Settings.Designer.cs True Settings.settings True {11A24507-A39E-42A2-9662-0416E8A31597} SerialPortDeviceReader GlobalSatGH615MTrackSelector.Designer.cs000066400000000000000000000112631446222606700345610ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReadernamespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { partial class GlobalSatGH615MTrackSelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.cbSelectedTrack = new System.Windows.Forms.ComboBox(); this.lblSelectedTarck = new System.Windows.Forms.Label(); this.btnOk = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button(); this.btnScan = new System.Windows.Forms.Button(); this.SuspendLayout(); // // cbSelectedTrack // this.cbSelectedTrack.FormattingEnabled = true; this.cbSelectedTrack.Location = new System.Drawing.Point(12, 29); this.cbSelectedTrack.Name = "cbSelectedTrack"; this.cbSelectedTrack.Size = new System.Drawing.Size(473, 24); this.cbSelectedTrack.TabIndex = 12; // // lblSelectedTarck // this.lblSelectedTarck.AutoSize = true; this.lblSelectedTarck.Location = new System.Drawing.Point(12, 9); this.lblSelectedTarck.Name = "lblSelectedTarck"; this.lblSelectedTarck.Size = new System.Drawing.Size(62, 17); this.lblSelectedTarck.TabIndex = 13; this.lblSelectedTarck.Text = "Session:"; // // btnOk // this.btnOk.Location = new System.Drawing.Point(259, 70); this.btnOk.Name = "btnOk"; this.btnOk.Size = new System.Drawing.Size(110, 30); this.btnOk.TabIndex = 14; this.btnOk.Text = "OK"; this.btnOk.UseVisualStyleBackColor = true; this.btnOk.Click += new System.EventHandler(this.btnOk_Click); // // btnCancel // this.btnCancel.Location = new System.Drawing.Point(375, 70); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(110, 30); this.btnCancel.TabIndex = 15; this.btnCancel.Text = "Cancel"; this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); // // btnScan // this.btnScan.Location = new System.Drawing.Point(87, 70); this.btnScan.Name = "btnScan"; this.btnScan.Size = new System.Drawing.Size(166, 30); this.btnScan.TabIndex = 1; this.btnScan.Text = "Re-read GPS unit"; this.btnScan.UseVisualStyleBackColor = true; this.btnScan.Click += new System.EventHandler(this.btnScan_Click); // // GlobalSatGH615MTrackSelector // this.AcceptButton = this.btnOk; this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(497, 116); this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnScan); this.Controls.Add(this.btnOk); this.Controls.Add(this.lblSelectedTarck); this.Controls.Add(this.cbSelectedTrack); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "GlobalSatGH615MTrackSelector"; this.Text = "Select session"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ComboBox cbSelectedTrack; private System.Windows.Forms.Label lblSelectedTarck; private System.Windows.Forms.Button btnOk; private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnScan; } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MTrackSelector.cs000066400000000000000000000061001446222606700330730ustar00rootroot00000000000000#region Namespace Inclusions using System; using System.Windows.Forms; #endregion namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { public partial class GlobalSatGH615MTrackSelector : Form { #region Local Variables private GlobalSatGH615MReader _deviceReader; #endregion #region Constructor public GlobalSatGH615MTrackSelector() { // Build the form InitializeComponent(); // Enable/disable controls based on the current state SetGUIState(true); } #endregion #region Local Methods private void SetGUIState(bool enabled) { if (enabled) { btnScan.Enabled = true; if (_deviceReader != null && _deviceReader.IsConnected) { cbSelectedTrack.Enabled = true; btnOk.Enabled = true; } } else { btnOk.Enabled = false; btnScan.Enabled = false; cbSelectedTrack.Enabled = false; } } #endregion #region Local Properties public GlobalSatGH615MReader DeviceReader { get { return _deviceReader; } set { _deviceReader = value; cbSelectedTrack.DataSource = _deviceReader.GetTracksInfo(); } } public IGH615MTrackInfo SelectedTrack { get { return cbSelectedTrack.SelectedItem as IGH615MTrackInfo; } set { cbSelectedTrack.SelectedItem = value; } } #endregion private void btnScan_Click(object sender, EventArgs e) { using (var progressIndicator = new ProgressIndicator(_deviceReader)) { cbSelectedTrack.DataSource = null; cbSelectedTrack.Items.Clear(); cbSelectedTrack.Enabled = false; _deviceReader.StartRescanPortThread(); progressIndicator.ShowDialog(); cbSelectedTrack.DataSource = _deviceReader.GetTracksInfo(); cbSelectedTrack.Enabled = (cbSelectedTrack.Items.Count > 0); btnOk.Enabled = (cbSelectedTrack.Items.Count > 0); } } private void btnOk_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; if (cbSelectedTrack.SelectedItem != null) { using (var progressIndicator = new ProgressIndicator(_deviceReader)) { _deviceReader.StartReadTrackThread(cbSelectedTrack.SelectedItem as IGH615MTrackInfo); progressIndicator.ShowDialog(); } } Close(); } private void btnCancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } } } GlobalSatGH615MTrackSelector.resx000066400000000000000000000132661446222606700334030ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/IGH615M.cs000066400000000000000000000037331446222606700267360ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { public interface IGH615MDeviceInfo { string DeviceName { get; } string Firmware { get; } string Name { get; } int RoutesCount { get; } int TracksCount { get; } string Version { get; } int WayPointsCount { get; } } public interface IGH615MTrackInfo { Int16 Id { get; } DateTime Date { get; } int Duration { get; } int Distance { get; } int AvgPulse { get; } int MaxPulse { get; } int Calories { get; } int TopSpeed { get; } Int32 TrackPointsCount { get; } } public interface IGH615MTrack { IGH615MTrackPoint[] GetTrackPoints(); IGH615MTrackInfo GetTrackInfo(); } public interface IGH615MTrackPoint { Decimal Latitude { get; } Decimal Longitude { get; } int Altitude { get; } int Speed { get; } int Pulse { get; } DateTime Time { get; } } public enum GH615MWayPointType { Dot = 0, House, Triangle, Tunnel, Cross, Fish, Light, Car, Comm, Redcross, Tree, Bus, Copcar, Trees, Restaurant, Seven, Parking, Repairs, Mail, Dollar, Govoffice, Church, Grocery, Heart, Book, Gas, Grill, Lookout, Flag, Plane, Bird, Dawn, Restroom, Wtf, Mantaray, Information, Blank } public interface IGH615MWayPoint { Decimal Latitude { get; } Decimal Longitude { get; } int Altitude { get; } GH615MWayPointType Type { get; } String Title{ get; } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.Designer.cs000066400000000000000000000057751446222606700331660ustar00rootroot00000000000000namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { partial class ProgressIndicator { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressIndicator)); this.status = new System.Windows.Forms.Label(); this.progressBar = new System.Windows.Forms.ProgressBar(); this.cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // status // resources.ApplyResources(this.status, "status"); this.status.Name = "status"; // // progressBar // resources.ApplyResources(this.progressBar, "progressBar"); this.progressBar.Name = "progressBar"; // // cancel // this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.cancel, "cancel"); this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.btnCancel_Click); // // ProgressIndicator // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.ControlBox = false; this.Controls.Add(this.cancel); this.Controls.Add(this.progressBar); this.Controls.Add(this.status); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ProgressIndicator"; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label status; private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Button cancel; } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.cs000066400000000000000000000044351446222606700314170ustar00rootroot00000000000000using System; using System.Windows.Forms; namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader { public partial class ProgressIndicator : Form { private readonly GlobalSatGH615MReader _gsGH615MReader; public ProgressIndicator(GlobalSatGH615MReader gsGH615MReader) { InitializeComponent(); _gsGH615MReader = gsGH615MReader; gsGH615MReader.ProgressChanged += _GH615M_ProgressChanged; gsGH615MReader.ReadCompleted += _GH615M_ReadCompleted; gsGH615MReader.ReadError += _GH615M_ReadError; status.Text = ""; } public GlobalSatGH615MReader GsGH615MReader { get { return _gsGH615MReader; } } void _GH615M_ReadError(Exception e) { if (InvokeRequired) { var arg = new object[1]; arg[0] = e; BeginInvoke(new ReadErrorDelegate(_GH615M_ReadError), arg); return; } MessageBox.Show(this, e.Message, "Read error", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.Abort; } void _GH615M_ProgressChanged(string message, int percent) { try { if (InvokeRequired) { var arg = new object[2]; arg[0] = message; arg[1] = percent; BeginInvoke(new ProgressDelegate(_GH615M_ProgressChanged), arg); return; } status.Text = message; progressBar.Value = percent; } catch (Exception) { // do nothing } } void _GH615M_ReadCompleted() { if (InvokeRequired) { BeginInvoke(new ReadCompletedDelegate(_GH615M_ReadCompleted)); return; } DialogResult = DialogResult.OK; Close(); } private void btnCancel_Click(object sender, EventArgs e) { _gsGH615MReader.Cancel(); DialogResult = DialogResult.Cancel; } } }quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.da.resx000066400000000000000000000137411446222606700323560ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Læser data... Afbryd Læser GlobalSat GH-615M device quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.de.resx000066400000000000000000000137261446222606700323650ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lese Daten... Lese Garmin Gerät Abbrechen quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.fr.resx000066400000000000000000000137431446222606700324030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lecture des données.... Annuler Lire l'appareil Garmin quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.it.resx000066400000000000000000000137521446222606700324100ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lettura dati... Cancella Lettura dispositivo GlobalSat GH-615M quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.no.resx000066400000000000000000000137231446222606700324060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Leser data... Leser Garmin-enhet Avbryt quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.resx000066400000000000000000000243711446222606700317740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True 16, 11 4, 0, 4, 0 105, 17 0 Reading data... status System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 20, 31 4, 4, 4, 4 433, 28 1 progressBar System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 177, 66 4, 4, 4, 4 123, 28 2 Cancel cancel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 True 8, 16 467, 108 4, 4, 4, 4 CenterParent Reading GlobalSat GH-615M device ProgressIndicator System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.ru.resx000066400000000000000000000143541446222606700324210ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 93, 13 Чтение данных... Отмена Чтение устройства Garmin quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.sv.resx000066400000000000000000000143001446222606700324120ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 66, 13 Läser data... Avbryt Läser Garmin-enhet quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Properties/000077500000000000000000000000001446222606700275555ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Properties/AssemblyInfo.cs000066400000000000000000000026341446222606700325040ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("GlobalSatGH615MReader")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("GlobalSatGH615MReader")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("effa9609-336e-4178-9f9f-129f44861782")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] Resources.Designer.cs000066400000000000000000000055541446222606700335470ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Properties//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Properties/Resources.resx000066400000000000000000000127541446222606700324430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Properties/Settings.Designer.cs000066400000000000000000000030311446222606700334400ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] public string PortName { get { return ((string)(this["PortName"])); } set { this["PortName"] = value; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Properties/Settings.settings000066400000000000000000000007001446222606700331340ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/Settings.cs000066400000000000000000000024331446222606700275520ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.Properties { // This class allows you to handle specific events on the settings class: // The SettingChanging event is raised before a setting's value is changed. // The PropertyChanged event is raised after a setting's value is changed. // The SettingsLoaded event is raised after the setting values are loaded. // The SettingsSaving event is raised before the setting values are saved. internal sealed partial class Settings { public Settings() { // // To add event handlers for saving and changing settings, uncomment the lines below: // // this.SettingChanging += this.SettingChangingEventHandler; // // this.SettingsSaving += this.SettingsSavingEventHandler; // } private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { // Add code to handle the SettingChangingEvent event here. } private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { // Add code to handle the SettingsSaving event here. } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/GlobalSatGH615MReader/app.config000066400000000000000000000015031446222606700273670ustar00rootroot00000000000000
quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/000077500000000000000000000000001446222606700272545ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/IRegSE.cs000066400000000000000000000020171446222606700306610ustar00rootroot00000000000000using System; namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { public interface IRegSEDeviceInfo { string DeviceName { get; } string Name { get; } string SoftwareVersion { get; } string HardwareVersion { get; } int TrackPointsCount { get; } } public interface IRegSETrackInfo { DateTime Date { get; } int Duration { get; } Int32 NumbetOfTrackPoints { get; } } public interface IRegSETrack { IRegSETrackPoint[] GetTrackPoints(); IRegSETrackInfo GetTrackInfo(); } public enum RegSEPointType { TrackPoint = 0, TrackStart = 1, WayPoint = 2, OverSpeed = 4 } public interface IRegSETrackPoint { DateTime Time { get; } Decimal Latitude { get; } Decimal Longitude { get; } int Altitude { get; } Int16 Type { get; } bool HasMark(RegSEPointType type); } } JJConnectRegistratorSEReader.cs000066400000000000000000000322651446222606700351520ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReaderusing System; using System.Collections.Generic; using System.IO.Ports; using System.Threading; using QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader.Properties; using QuickRoute.GPSDeviceReaders.SerialPortDeviceReader; namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { public delegate void ProgressDelegate(string message, int percent); public delegate void ReadCompletedDelegate(); public delegate void ReadErrorDelegate(Exception e); public class JJConnectRegistratorSEReader { public event ProgressDelegate ProgressChanged; public event ReadCompletedDelegate ReadCompleted; public event ReadErrorDelegate ReadError; public JJConnectRegistratorSEReader() { Port = Settings.Default.PortName; } private Thread _thread; private String _portName; private readonly SerialPort _commport = new SerialPort(); private IRegSEDeviceInfo _deviceInfo; private List _tracks; private List _trackInfos; private bool _loadCompleted; public bool IsConnected { get; private set; } public String Port { get { return _portName; } set { if (_portName == value) { return; } ClearCache(); _portName = value; CheckPort(); } } public IRegSEDeviceInfo GetDeviceInfo() { if (_deviceInfo == null) { if (!IsConnected) { return null; } using (var session = new SerialPortSession(_commport)) { var deviceNameCommand = new DeviceNameCommand(); deviceNameCommand.Execute(session.Port); var deviceName = deviceNameCommand.GetDeviceName(); var nameCommand = new NameCommand(); nameCommand.Execute(session.Port); var name = nameCommand.GetName(); var numberOfPointsCommand = new NumOfPointsCommand(); ; numberOfPointsCommand.Execute(session.Port); var numberOfPoints = numberOfPointsCommand.GetNumOfPoints(); var softwareVersionCommand = new SoftwareVersionCommand(); ; softwareVersionCommand.Execute(session.Port); var softwareVersion = softwareVersionCommand.GetVersion(); var hardwareVersionCommand = new HardwareVersionCommand(); ; hardwareVersionCommand.Execute(session.Port); var hardwareVersion = hardwareVersionCommand.GetVersion(); _deviceInfo = new RegSEDeviceInfo(deviceName, name, softwareVersion, hardwareVersion, numberOfPoints); } } return _deviceInfo; } public List GetTracksInfo() { lock (this) { if (_tracks != null) { return _trackInfos; } LoadTracks(); return _trackInfos; } } public List GetTracks() { if (_tracks != null) { return _tracks; } LoadTracks(); return _tracks; } private void LoadTracks() { lock (this) { _loadCompleted = false; if (!IsConnected) { SendReadError(new RegSEError("No connection with device!")); SendReadCompleted(); return; } using (var session = new SerialPortSession(_commport)) { var getNumOfPointsCommand = new NumOfPointsCommand(); getNumOfPointsCommand.Execute(session.Port); int total = getNumOfPointsCommand.GetNumOfPoints(); int current = 0; var loadPointsCommand = new LoadPointsCommand(current*16); loadPointsCommand.Execute(session.Port); var points = new List(); points.AddRange(loadPointsCommand.GetPoints()); current += loadPointsCommand.GetPoints().Count; SendProgressChanged(String.Format("Read track data... ({0}/{1})", current, total), current, total); do { loadPointsCommand = new LoadPointsCommand(current*16); loadPointsCommand.Execute(session.Port); points.AddRange(loadPointsCommand.GetPoints()); current += loadPointsCommand.GetPoints().Count; SendProgressChanged(String.Format("Read track data... ({0}/{1})", current, total), current, total); } while (current < total); // split into tracks if (points.Count > 0) { _tracks = new List(); _trackInfos = new List(); var startPoint = points[0]; if (!startPoint.HasMark(RegSEPointType.TrackStart)) { SendReadError(new RegSEError("First point does not marked as track's start point!")); SendReadCompleted(); return; } var startPointIndex = 0; var numOfPoints = 0; for (var i = 1; i < points.Count; i++) { numOfPoints++; IRegSETrackPoint point = points[i]; if (point.HasMark(RegSEPointType.TrackStart)) { var duration = (int) (points[i - 1].Time - startPoint.Time).TotalSeconds; IRegSETrackInfo trackInfo = new RegSETrackInfo(startPoint.Time, duration, numOfPoints); _trackInfos.Add(trackInfo); _tracks.Add(new RegSETrack(trackInfo, points.GetRange(startPointIndex, numOfPoints).ToArray())); startPoint = point; startPointIndex = i; numOfPoints = 0; } } { var duration = (int) (points[points.Count - 1].Time - startPoint.Time).TotalSeconds; IRegSETrackInfo trackInfo = new RegSETrackInfo(startPoint.Time, duration, numOfPoints); _trackInfos.Add(trackInfo); _tracks.Add(new RegSETrack(trackInfo, points.GetRange(startPointIndex, numOfPoints).ToArray())); } } _loadCompleted = true; SendReadCompleted(); } } } public void DeleteTracks() { if (!IsConnected) { return; } using (var session = new SerialPortSession(_commport)) { var cmd = new DeleteAllTracksCommand(); cmd.Execute(session.Port); } } private void ClearCache() { _tracks = null; _trackInfos = null; _deviceInfo = null; } private void CheckPort() { if (string.IsNullOrEmpty(_portName)) { IsConnected = false; return; } try { if (_commport.IsOpen) { _commport.Close(); } _commport.PortName = _portName; _commport.BaudRate = 57600; _commport.DataBits = 8; _commport.StopBits = StopBits.One; _commport.Parity = Parity.None; _commport.ReadTimeout = 500; _commport.WriteTimeout = 500; using (var session = new SerialPortSession(_commport)) { var checkCommand = new CheckRegSEPortCommand(); checkCommand.Execute(session.Port); IsConnected = checkCommand.IsOk(); if (IsConnected) { Settings.Default.PortName = _portName; Settings.Default.Save(); } } } catch (Exception) { IsConnected = false; } } public void RescanPort() { SendProgressChanged("Clear cache...", 0, 2); ClearCache(); SendProgressChanged(String.Format("Re-read device on port {0}...", Port), 1, 2); CheckPort(); try { var info = GetDeviceInfo(); if (info != null) { SendProgressChanged(String.Format("Device found on {0}.", Port), 2, 2); SendReadCompleted(); return; } } catch (Exception e) { SendReadError(e); } SendProgressChanged("Device not found! Check connection and device mode.", 2, 2); SendReadCompleted(); } public void ScanPorts() { var portNames = SerialPortUtil.GetLatestPortsList(); if (portNames == null) { return; } var total = portNames.Length; for (var i = 0; i < portNames.Length; i++) { var portName = portNames[i]; try { SendProgressChanged(String.Format("Scaning port {0}...", portName), i, total); Port = portName; if (IsConnected) { SendProgressChanged(String.Format("Device found on {0}.", portName), total, total); SendReadCompleted(); return; } } catch (Exception e) { SendReadError(e); } } SendProgressChanged("Device not found! Check connection and device mode.", total, total); SendReadCompleted(); } private void StartReadThread(ThreadStart threadStartMethod) { StopReadPortThread(); var myThread = new ThreadStart(threadStartMethod); _thread = new Thread(myThread); _thread.Start(); } public void StartRescanPortThread() { StartReadThread(RescanPort); } public void StartLoadTracks() { StartReadThread(LoadTracks); } public void StopReadPortThread() { try { if (_thread != null && _thread.IsAlive) { _thread.Abort(); } } catch (ThreadAbortException) { if (_thread != null) { while (_thread.ThreadState == ThreadState.Running) { } } _thread = null; } } private void SendProgressChanged(string message, int value, int max) { var percent = ((value / (Single)max) * 100); if (percent > 100) { percent = 100; } if (ProgressChanged != null) { ProgressChanged(message, (int)percent); } } private void SendReadCompleted() { if (ReadCompleted != null) { ReadCompleted(); } } private void SendReadError(Exception e) { if (ReadError != null) { ReadError(e); } } public bool LoadCompleted { get { return _loadCompleted; } } public void Cancel() { StopReadPortThread(); } } } JJConnectRegistratorSEReader.csproj000066400000000000000000000141111446222606700360330ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader Debug AnyCPU 9.0.30729 2.0 {E91D684B-2DD8-4C50-8111-1940BFB427EE} Library Properties QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader v2.0 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt bin\x86\Release\ TRACE true pdbonly x86 prompt Form JJConnectRegistratorSETrackSelector.cs Form ProgressIndicator.cs True True Settings.settings SettingsSingleFileGenerator Settings.Designer.cs {11A24507-A39E-42A2-9662-0416E8A31597} SerialPortDeviceReader JJConnectRegistratorSETrackSelector.cs JJConnectRegistratorSETrackSelector.cs Designer ProgressIndicator.cs ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer ProgressIndicator.cs Designer JJConnectRegistratorSETrackSelector.Designer.cs000066400000000000000000000116521446222606700402510ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReadernamespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { partial class JJConnectRegistratorSETrackSelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(JJConnectRegistratorSETrackSelector)); this.cbSelectedTrack = new System.Windows.Forms.ComboBox(); this.lblSelectedTarck = new System.Windows.Forms.Label(); this.btnOk = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button(); this.btnScan = new System.Windows.Forms.Button(); this.SuspendLayout(); // // cbSelectedTrack // this.cbSelectedTrack.AccessibleDescription = null; this.cbSelectedTrack.AccessibleName = null; resources.ApplyResources(this.cbSelectedTrack, "cbSelectedTrack"); this.cbSelectedTrack.BackgroundImage = null; this.cbSelectedTrack.Font = null; this.cbSelectedTrack.FormattingEnabled = true; this.cbSelectedTrack.Name = "cbSelectedTrack"; // // lblSelectedTarck // this.lblSelectedTarck.AccessibleDescription = null; this.lblSelectedTarck.AccessibleName = null; resources.ApplyResources(this.lblSelectedTarck, "lblSelectedTarck"); this.lblSelectedTarck.Font = null; this.lblSelectedTarck.Name = "lblSelectedTarck"; // // btnOk // this.btnOk.AccessibleDescription = null; this.btnOk.AccessibleName = null; resources.ApplyResources(this.btnOk, "btnOk"); this.btnOk.BackgroundImage = null; this.btnOk.Font = null; this.btnOk.Name = "btnOk"; this.btnOk.UseVisualStyleBackColor = true; this.btnOk.Click += new System.EventHandler(this.btnOk_Click); // // btnCancel // this.btnCancel.AccessibleDescription = null; this.btnCancel.AccessibleName = null; resources.ApplyResources(this.btnCancel, "btnCancel"); this.btnCancel.BackgroundImage = null; this.btnCancel.Font = null; this.btnCancel.Name = "btnCancel"; this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); // // btnScan // this.btnScan.AccessibleDescription = null; this.btnScan.AccessibleName = null; resources.ApplyResources(this.btnScan, "btnScan"); this.btnScan.BackgroundImage = null; this.btnScan.Font = null; this.btnScan.Name = "btnScan"; this.btnScan.UseVisualStyleBackColor = true; this.btnScan.Click += new System.EventHandler(this.btnScan_Click); // // JJConnectRegistratorSETrackSelector // this.AcceptButton = this.btnOk; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnScan); this.Controls.Add(this.btnOk); this.Controls.Add(this.lblSelectedTarck); this.Controls.Add(this.cbSelectedTrack); this.Font = null; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = null; this.Name = "JJConnectRegistratorSETrackSelector"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ComboBox cbSelectedTrack; private System.Windows.Forms.Label lblSelectedTarck; private System.Windows.Forms.Button btnOk; private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnScan; } }JJConnectRegistratorSETrackSelector.cs000066400000000000000000000053221446222606700365070ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader#region Namespace Inclusions using System; using System.Windows.Forms; #endregion namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { public partial class JJConnectRegistratorSETrackSelector : Form { #region Local Variables private JJConnectRegistratorSEReader _deviceReader; #endregion #region Constructor public JJConnectRegistratorSETrackSelector() { // Build the form InitializeComponent(); // Enable/disable controls based on the current state SetGUIState(true); } #endregion #region Local Methods private void SetGUIState(bool enabled) { if (enabled) { btnScan.Enabled = true; if (_deviceReader != null && _deviceReader.IsConnected) { cbSelectedTrack.Enabled = true; btnOk.Enabled = true; } } else { btnOk.Enabled = false; btnScan.Enabled = false; cbSelectedTrack.Enabled = false; } } #endregion #region Local Properties public JJConnectRegistratorSEReader DeviceReader { get { return _deviceReader; } set { _deviceReader = value; cbSelectedTrack.DataSource = _deviceReader.GetTracks(); } } public IRegSETrack SelectedTrack { get { return cbSelectedTrack.SelectedItem as IRegSETrack; } set { cbSelectedTrack.SelectedItem = value; } } #endregion private void btnScan_Click(object sender, EventArgs e) { using (var progressIndicator = new ProgressIndicator(_deviceReader)) { cbSelectedTrack.DataSource = null; cbSelectedTrack.Items.Clear(); cbSelectedTrack.Enabled = false; _deviceReader.StartRescanPortThread(); progressIndicator.ShowDialog(); cbSelectedTrack.DataSource = _deviceReader.GetTracksInfo(); cbSelectedTrack.Enabled = (cbSelectedTrack.Items.Count > 0); btnOk.Enabled = (cbSelectedTrack.Items.Count > 0); } } private void btnOk_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void btnCancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } } }JJConnectRegistratorSETrackSelector.da.resx000066400000000000000000000142201446222606700374430ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Session: OK Genindlæs GPS-enhed Vælg session Afbryd JJConnectRegistratorSETrackSelector.resx000066400000000000000000000304401446222606700370620ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 281, 57 lblSelectedTarck System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 13 Session: 14 OK 194, 57 356, 21 $this System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 cbSelectedTrack JJConnectRegistratorSETrackSelector 2, 2, 2, 2 $this 2, 2, 2, 2 15 2 $this 2, 2, 2, 2 $this btnCancel Re-read GPS unit 6, 13 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 82, 24 1 65, 57 4 373, 94 12 1 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 9, 24 9, 7 47, 13 Select session 124, 24 2, 0, 2, 0 2, 2, 2, 2 82, 24 btnScan $this btnOk True Cancel 2, 2, 2, 2 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True ProgressIndicator.Designer.cs000066400000000000000000000060041446222606700347240ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReadernamespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { partial class ProgressIndicator { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressIndicator)); this.status = new System.Windows.Forms.Label(); this.progressBar = new System.Windows.Forms.ProgressBar(); this.cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // status // resources.ApplyResources(this.status, "status"); this.status.Name = "status"; // // progressBar // resources.ApplyResources(this.progressBar, "progressBar"); this.progressBar.Name = "progressBar"; // // cancel // this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.cancel, "cancel"); this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.btnCancel_Click); // // ProgressIndicator // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.ControlBox = false; this.Controls.Add(this.cancel); this.Controls.Add(this.progressBar); this.Controls.Add(this.status); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ProgressIndicator"; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label status; private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Button cancel; } }quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.cs000066400000000000000000000044221446222606700332460ustar00rootroot00000000000000using System; using System.Windows.Forms; namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { public partial class ProgressIndicator : Form { private readonly JJConnectRegistratorSEReader _regSEReader; public ProgressIndicator(JJConnectRegistratorSEReader regSEReader) { InitializeComponent(); _regSEReader = regSEReader; regSEReader.ProgressChanged += _RegSE_ProgressChanged; regSEReader.ReadCompleted += _RegSE_ReadCompleted; regSEReader.ReadError += _RegSE_ReadError; status.Text = ""; } public JJConnectRegistratorSEReader RegSEReader { get { return _regSEReader; } } void _RegSE_ReadError(Exception e) { if (InvokeRequired) { var arg = new object[1]; arg[0] = e; BeginInvoke(new ReadErrorDelegate(_RegSE_ReadError), arg); return; } MessageBox.Show(this, e.Message, "Read error", MessageBoxButtons.OK, MessageBoxIcon.Error); DialogResult = DialogResult.Abort; } void _RegSE_ProgressChanged(string message, int percent) { try { if (InvokeRequired) { var arg = new object[2]; arg[0] = message; arg[1] = percent; BeginInvoke(new ProgressDelegate(_RegSE_ProgressChanged), arg); return; } status.Text = message; progressBar.Value = percent; } catch (Exception) { // do nothing } } void _RegSE_ReadCompleted() { if (InvokeRequired) { BeginInvoke(new ReadCompletedDelegate(_RegSE_ReadCompleted)); return; } DialogResult = DialogResult.OK; Close(); } private void btnCancel_Click(object sender, EventArgs e) { _regSEReader.Cancel(); DialogResult = DialogResult.Cancel; } } }ProgressIndicator.da.resx000066400000000000000000000137511446222606700341330ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Læser data... Afbryd Læser JJ-Connect Registrator SE device ProgressIndicator.de.resx000066400000000000000000000137261446222606700341410ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lese Daten... Lese Garmin Gerät Abbrechen ProgressIndicator.fr.resx000066400000000000000000000137431446222606700341570ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lecture des données.... Annuler Lire l'appareil Garmin ProgressIndicator.it.resx000066400000000000000000000137621446222606700341650ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lettura dati... Cancella Lettura dispositivo JJ-Connect Registrator SE ProgressIndicator.no.resx000066400000000000000000000137231446222606700341620ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Leser data... Leser Garmin-enhet Avbryt quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.resx000066400000000000000000000244011446222606700336210ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True 16, 11 4, 0, 4, 0 105, 17 0 Reading data... status System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 20, 31 4, 4, 4, 4 433, 28 1 progressBar System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 177, 66 4, 4, 4, 4 123, 28 2 Cancel cancel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 True 8, 16 467, 108 4, 4, 4, 4 CenterParent Reading JJ-Connect Registrator SE device ProgressIndicator System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ProgressIndicator.ru.resx000066400000000000000000000143541446222606700341750ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 93, 13 Чтение данных... Отмена Чтение устройства Garmin ProgressIndicator.sv.resx000066400000000000000000000143001446222606700341660ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 66, 13 Läser data... Avbryt Läser Garmin-enhet quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/Properties/000077500000000000000000000000001446222606700314105ustar00rootroot00000000000000AssemblyInfo.cs000066400000000000000000000026521446222606700342600ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/Propertiesusing System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("JJConnectRegistratorSEReader")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("JJConnectRegistratorSEReader")] [assembly: AssemblyCopyright("")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("705866a4-f89a-4c2e-813a-f884ceb1ee10")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] Settings.Designer.cs000066400000000000000000000030401446222606700352140ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/Properties//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] public string PortName { get { return ((string)(this["PortName"])); } set { this["PortName"] = value; } } } } Settings.settings000066400000000000000000000006531446222606700347170ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/Properties quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/RegSE.cs000066400000000000000000000122361446222606700305540ustar00rootroot00000000000000using System; using QuickRoute.GPSDeviceReaders.SerialPortDeviceReader; namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { public class RegSEDeviceInfo : IRegSEDeviceInfo { private readonly String _deviceName; private readonly String _name; private readonly string _softwareVersion; private readonly string _hardwareVersion; private readonly int _trackPointsCount; public RegSEDeviceInfo(String deviceName, String name, string softwareVersion, string hardwareVersion, int trackPointsCount) { _deviceName = deviceName; _trackPointsCount = trackPointsCount; _hardwareVersion = hardwareVersion; _softwareVersion = softwareVersion; _name = name; } public String DeviceName { get { return _deviceName; } } public String Name { get { return _name; } } public string SoftwareVersion { get { return _softwareVersion; } } public string HardwareVersion { get { return _hardwareVersion; } } public int TrackPointsCount { get { return _trackPointsCount; } } } public class RegSETrackPoint : IRegSETrackPoint { public RegSETrackPoint(DateTime time, Decimal latitude, Decimal longitude, int altitude, Int16 type) { _time = time; _latitude = latitude; _longitude = longitude; _altitude = altitude; _type = type; } private readonly Decimal _latitude; private readonly Decimal _longitude; private readonly int _altitude; private readonly DateTime _time; private readonly Int16 _type; public Decimal Latitude { get { return _latitude; } } public Decimal Longitude { get { return _longitude; } } public int Altitude { get { return _altitude; } } public Int16 Type { get { return _type; } } public DateTime Time { get { return _time; } } public bool HasMark(RegSEPointType type) { return (_type & (int) type) == 1; } public static RegSETrackPoint FromByteArray(byte[] buffer, int offset) { //* 16 Byte Blocke //* Byte 0-1: little endian 16bit, flags: 1=TRACK_START, 2=WAYPOINT,4=OVER_SPEED //* Byte 2-5: little endian 32bit: timestamp //* Byte 6-9: little endian 32bit: lattitude in Grad, wenn man es durch 10000000 dividiert //* Byte 10-13: little endian 32bit: longitude in Grad, wenn man es durch 10000000 dividiert //* Byte 14-15: little endian 16bit: altitude var type = HexUtils.ToInt16LE(buffer, offset + 0); var timeCode = HexUtils.ToInt32LE(buffer, offset + 2); int sec = (((timeCode) >> 0) & 0x3F); int min = (((timeCode) >> 6) & 0x3F); int hours = (((timeCode) >> 12) & 0x1F); int day = (((timeCode) >> 17) & 0x1F); int month = (((timeCode) >> 22) & 0x0F); int year = (((timeCode) >> 26) & 0x3F); var time = new DateTime(2000 + year, month, day, hours, min, sec); var latitudeValue = HexUtils.ToInt32LE(buffer, offset + 6); var longitudeValue = HexUtils.ToInt32LE(buffer, offset + 10); var altitude = HexUtils.ToInt16LE(buffer, offset + 14); var latitude = new Decimal(latitudeValue) / new Decimal(10000000); var longitude = new Decimal(longitudeValue) / new Decimal(10000000); return new RegSETrackPoint(time, latitude, longitude, altitude, type); } } public class RegSETrack : IRegSETrack { private readonly IRegSETrackPoint[] _points; private readonly IRegSETrackInfo _info; public RegSETrack(IRegSETrackInfo info, IRegSETrackPoint[] points) { _info = info; _points = points; } public IRegSETrackPoint[] GetTrackPoints() { if (_points == null) { return new IRegSETrackPoint[] { }; } return _points; } public IRegSETrackInfo GetTrackInfo() { return _info; } public override String ToString() { return _info.ToString(); } } public class RegSETrackInfo : IRegSETrackInfo { private DateTime _date; private readonly int _duration; private readonly Int32 _numberOfTrackPoints; public RegSETrackInfo(DateTime date, int duration, int trackPointsCount) { _date = date; _duration = duration; _numberOfTrackPoints = trackPointsCount; } public DateTime Date { get { return _date; } } public int Duration { get { return _duration; } } public Int32 NumbetOfTrackPoints { get { return _numberOfTrackPoints; } } public override String ToString() { return String.Format("{0}, {1} min", _date.ToString("s"), (_duration / 60.0).ToString("F2")); } } } RegSESerialPortCommand.cs000066400000000000000000000212261446222606700340000ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReaderusing System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using QuickRoute.GPSDeviceReaders.SerialPortDeviceReader; namespace QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader { class RegSEError : Exception { public RegSEError() { } public RegSEError(string message) : base(message) { } public RegSEError(string message, Exception e) : base(message, e) { } } class RegSECommunicationError : RegSEError { public RegSECommunicationError() { } public RegSECommunicationError(string message) : base(message) { } public RegSECommunicationError(string message, Exception e) : base(message, e) { } } public class CheckRegSEPortCommand : SerialPortCommand { private bool _status; private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL\r\n@AL,2,3\r\n@AL,2,3\r\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,LoginOK\n@AL,2,3\n"); public CheckRegSEPortCommand() : base(DefaultSleepTime, Header.Length) { } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, Header, Header.Length)) { _status = true; } } public bool IsOk() { return _status; } } public class DeviceNameCommand : SerialPortCommand { private String _deviceName; private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL,7,1\r\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,7,1,"); public DeviceNameCommand() : base(1000) { } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (!CompareFirstN(buffer, Header, Header.Length) || buffer.Length < Header.Length + 1) { throw new RegSECommunicationError("Wrong Header in NameCommand"); } var zero = new String(new[] { '\0' }); _deviceName = Encoding.UTF8.GetString(buffer, Header.Length, buffer.Length - (Header.Length + 1)).Replace(zero, ""); } public String GetDeviceName() { return _deviceName; } } public class SoftwareVersionCommand : SerialPortCommand { private String _version; private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL,8,2\r\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,8,2,"); public SoftwareVersionCommand() : base(1000) { } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (!CompareFirstN(buffer, Header, Header.Length) || buffer.Length < Header.Length + 1) { throw new RegSECommunicationError("Wrong Header in HardwareVersionCommand"); } var zero = new String(new[] { '\0' }); _version = Encoding.UTF8.GetString(buffer, Header.Length, buffer.Length - (Header.Length + 1)).Replace(zero, ""); } public String GetVersion() { return _version; } } public class HardwareVersionCommand : SerialPortCommand { private String _version; private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL,8,1\r\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,8,1,"); public HardwareVersionCommand() : base(1000) { } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (!CompareFirstN(buffer, Header, Header.Length) || buffer.Length < Header.Length + 1) { throw new RegSECommunicationError("Wrong Header in HardwareVersionCommand"); } var zero = new String(new[] { '\0' }); _version = Encoding.UTF8.GetString(buffer, Header.Length, buffer.Length - (Header.Length + 1)).Replace(zero, ""); } public String GetVersion() { return _version; } } public class NameCommand : SerialPortCommand { private String _name; private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL,7,2\r\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,7,2,"); public NameCommand() : base(1000) { } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (!CompareFirstN(buffer, Header, Header.Length) || buffer.Length < Header.Length + 1) { throw new RegSECommunicationError("Wrong Header in NameCommand"); } var zero = new String(new[] { '\0' }); _name = Encoding.UTF8.GetString(buffer, Header.Length, buffer.Length - (Header.Length + 1)).Replace(zero, ""); } public String GetName() { return _name; } } public class NumOfPointsCommand : SerialPortCommand { private int _numOfPoints; private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL,5,2\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,5,2,"); public NumOfPointsCommand() : base(1000) { } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (!CompareFirstN(buffer, Header, Header.Length) || buffer.Length < Header.Length + 1) { throw new RegSECommunicationError("Wrong Header in NumOfPointsCommand"); } try { _numOfPoints = int.Parse((Encoding.UTF8.GetString(buffer, Header.Length, buffer.Length - (Header.Length + 1)))) / 16; } catch (Exception e) { throw new RegSECommunicationError("Wrong number of points in NumOfPointsCommand", e); } } public int GetNumOfPoints() { return _numOfPoints; } } public class LoadPointsCommand : SerialPortCommand { private readonly int _offset; private List _points = new List(); public LoadPointsCommand(int offset) : base(1000) { _offset = offset; } override protected byte[] GetCommandBuffer() { return ASCIIEnc.GetBytes("@AL,5,3," + _offset + "\r\n"); ; } override protected void ProcessBuffer(byte[] buffer) { var tail = ASCIIEnc.GetBytes("@AL,5,3," + _offset + "\n"); var pointsBufferLength = buffer.Length - (tail.Length + tail.Length + 2); // "@AL,CS,XX," + _offset + "\n" + "@AL,5,3," + _offset + "\n" if (!CompareLastN(buffer, tail, tail.Length) || pointsBufferLength % 16 != 0) { throw new RegSECommunicationError("Wrong data in LoadPointsCommand"); } for (int offset = 0; offset < pointsBufferLength; offset += 16) { RegSETrackPoint point = RegSETrackPoint.FromByteArray(buffer, offset); _points.Add(point); } } public List GetPoints() { return _points; } } public class DeleteAllTracksCommand : SerialPortCommand { private static readonly byte[] Command = ASCIIEnc.GetBytes("@AL,5,6\r\n"); private static readonly byte[] Header = ASCIIEnc.GetBytes("@AL,5,6\n"); public DeleteAllTracksCommand() : base(3000) { } public bool IsOk { get; private set; } override protected byte[] GetCommandBuffer() { return Command; } override protected void ProcessBuffer(byte[] buffer) { if (CompareFirstN(buffer, Header, Header.Length) && buffer.Length == Header.Length) { IsOk = true; } } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/JJConnectRegistratorSEReader/app.config000066400000000000000000000015321446222606700312240ustar00rootroot00000000000000
quickroute-linux-upstream-2.5/GPSDeviceReaders/PolarRS800CXReader.sln000066400000000000000000000026641446222606700255140ustar00rootroot00000000000000Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PolarRS800CXReader", "PolarRS800CXReader\PolarRS800CXReader.csproj", "{D3448966-5499-4F7F-8999-6484B27B56C9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PolarRS800CXReaderTest", "PolarRS800CXReader.Test\PolarRS800CXReaderTest.csproj", "{B4E51364-A825-4A53-A277-33AD290C8660}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D3448966-5499-4F7F-8999-6484B27B56C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D3448966-5499-4F7F-8999-6484B27B56C9}.Debug|Any CPU.Build.0 = Debug|Any CPU {D3448966-5499-4F7F-8999-6484B27B56C9}.Release|Any CPU.ActiveCfg = Release|Any CPU {D3448966-5499-4F7F-8999-6484B27B56C9}.Release|Any CPU.Build.0 = Release|Any CPU {B4E51364-A825-4A53-A277-33AD290C8660}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B4E51364-A825-4A53-A277-33AD290C8660}.Debug|Any CPU.Build.0 = Debug|Any CPU {B4E51364-A825-4A53-A277-33AD290C8660}.Release|Any CPU.ActiveCfg = Release|Any CPU {B4E51364-A825-4A53-A277-33AD290C8660}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal quickroute-linux-upstream-2.5/GPSDeviceReaders/SerialPortDeviceReader/000077500000000000000000000000001446222606700261655ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/SerialPortDeviceReader/Properties/000077500000000000000000000000001446222606700303215ustar00rootroot00000000000000quickroute-linux-upstream-2.5/GPSDeviceReaders/SerialPortDeviceReader/Properties/AssemblyInfo.cs000066400000000000000000000026741446222606700332540ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("SerialPortDeviceReader")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Yandex")] [assembly: AssemblyProduct("SerialPortDeviceReader")] [assembly: AssemblyCopyright("Copyright © Yandex 2010")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("da70f204-416e-4330-b96b-cce37d2e933c")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] quickroute-linux-upstream-2.5/GPSDeviceReaders/SerialPortDeviceReader/SerialPortCommand.cs000066400000000000000000000066451446222606700321120ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Threading; using System.IO.Ports; namespace QuickRoute.GPSDeviceReaders.SerialPortDeviceReader { class SerialPortCommandError : Exception { public SerialPortCommandError() { } public SerialPortCommandError(string message) : base(message) { } public SerialPortCommandError(string message, Exception e) : base(message, e) { } } abstract public class SerialPortCommand { protected static readonly ASCIIEncoding ASCIIEnc = new ASCIIEncoding(); public static int DefaultMaxBufferSize = 1024 * 1000; public static int DefaultSleepTime = 300; private readonly List _buffer = new List(); private readonly int _maxBufferSize = DefaultMaxBufferSize; private readonly int _sleepTime = DefaultSleepTime; protected SerialPortCommand() : this(DefaultSleepTime, DefaultMaxBufferSize) { } protected SerialPortCommand(int sleepTime) : this(sleepTime, DefaultMaxBufferSize) { } protected SerialPortCommand(int sleepTime, int maxBufferSize) { _sleepTime = Math.Abs(sleepTime); _maxBufferSize = maxBufferSize; } public void Execute(SerialPort commport) { if (!commport.IsOpen) { throw new SerialPortCommandError("Port not opened!"); } Write(commport); Thread.Sleep(_sleepTime); Read(commport); ProcessBuffer(_buffer.ToArray()); _buffer.Clear(); } private void Write(SerialPort commport) { byte[] commandBuffer = GetCommandBuffer(); commport.DiscardInBuffer(); commport.DiscardOutBuffer(); commport.Write(commandBuffer, 0, commandBuffer.Length); } abstract protected byte[] GetCommandBuffer(); private void Read(SerialPort commport) { while (commport.BytesToRead > 0 && _buffer.Count <= _maxBufferSize) { _buffer.Add((byte)commport.ReadByte()); } } virtual protected void ProcessBuffer(byte[] buffer) { // Look in the byte array for useful information } public static bool CompareFirstN(byte[] buf1, byte[] buf2, int n) { int len = Math.Abs(n); if (buf1 == null || buf2 == null || buf1.Length < len || buf2.Length < len) { return false; } for (int i = 0; i < len; i++) { if (buf1[i] != buf2[i]) { return false; } } return true; } public static bool CompareLastN(byte[] buf1, byte[] buf2, int n) { int len = Math.Abs(n); if (buf1 == null || buf2 == null || buf1.Length < len || buf2.Length < len) { return false; } for (int i = 0; i < len; i++) { if (buf1[buf1.Length - 1 - i] != buf2[buf2.Length - 1 - i]) { return false; } } return true; } } } quickroute-linux-upstream-2.5/GPSDeviceReaders/SerialPortDeviceReader/SerialPortDeviceReader.csproj000066400000000000000000000057741446222606700337530ustar00rootroot00000000000000 Debug AnyCPU 9.0.30729 2.0 {11A24507-A39E-42A2-9662-0416E8A31597} Library Properties QuickRoute.GPSDeviceReaders.SerialPortDeviceReader QuickRoute.GPSDeviceReaders.SerialPortDeviceReader v2.0 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt bin\x86\Release\ TRACE true pdbonly x86 prompt quickroute-linux-upstream-2.5/GPSDeviceReaders/SerialPortDeviceReader/SerialPortUtil.cs000066400000000000000000000167251446222606700314510ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO.Ports; namespace QuickRoute.GPSDeviceReaders.SerialPortDeviceReader { public static class SerialPortUtil { public static String[] GetLatestPortsList() { var portNames = SerialPort.GetPortNames(); Array.Sort(portNames, new AlphanumComparator()); return portNames; } } public class SerialPortSession : IDisposable { public SerialPort Port { get; private set; } public SerialPortSession(SerialPort serialPort) { Port = serialPort; if (!Port.IsOpen) { Port.Open(); } } public void Dispose() { Port.Close(); } } public class AlphanumComparator : IComparer { public int Compare(String s1, String s2) { if (s1 == null) { return 0; } if (s2 == null) { return 0; } int len1 = s1.Length; int len2 = s2.Length; int marker1 = 0; int marker2 = 0; // Walk through two the strings with two markers. while (marker1 < len1 && marker2 < len2) { char ch1 = s1[marker1]; char ch2 = s2[marker2]; // Some buffers we can build up characters in for each chunk. var space1 = new char[len1]; int loc1 = 0; var space2 = new char[len2]; int loc2 = 0; // Walk through all following characters that are digits or // characters in BOTH strings starting at the appropriate marker. // Collect char arrays. do { space1[loc1++] = ch1; marker1++; if (marker1 < len1) { ch1 = s1[marker1]; } else { break; } } while (char.IsDigit(ch1) == char.IsDigit(space1[0])); do { space2[loc2++] = ch2; marker2++; if (marker2 < len2) { ch2 = s2[marker2]; } else { break; } } while (char.IsDigit(ch2) == char.IsDigit(space2[0])); // If we have collected numbers, compare them numerically. // Otherwise, if we have strings, compare them alphabetically. var str1 = new string(space1); var str2 = new string(space2); int result; if (char.IsDigit(space1[0]) && char.IsDigit(space2[0])) { int thisNumericChunk = int.Parse(str1); int thatNumericChunk = int.Parse(str2); result = thisNumericChunk.CompareTo(thatNumericChunk); } else { result = str1.CompareTo(str2); } if (result != 0) { return result; } } return len1 - len2; } } public static class HexUtils { public static byte[] GetBytes(Int16 value) { var valueBytes = BitConverter.GetBytes(value); if (BitConverter.IsLittleEndian) { Array.Reverse(valueBytes); } return valueBytes; } public static byte[] GetBytes(Int32 value) { byte[] valueBytes = BitConverter.GetBytes(value); if (BitConverter.IsLittleEndian) { Array.Reverse(valueBytes); } return valueBytes; } public static Int16 ToInt16(byte[] buffer, int offset) { if (BitConverter.IsLittleEndian) { var copy = new byte[2]; Array.Copy(buffer, offset, copy, 0, 2); Array.Reverse(copy); return BitConverter.ToInt16(copy, 0); } return BitConverter.ToInt16(buffer, offset); } public static Int32 ToInt32(byte[] buffer, int offset) { if (BitConverter.IsLittleEndian) { var copy = new byte[4]; Array.Copy(buffer, offset, copy, 0, 4); Array.Reverse(copy); return BitConverter.ToInt32(copy, 0); } return BitConverter.ToInt32(buffer, offset); } public static Int64 ToInt64(byte[] buffer, int offset) { if (BitConverter.IsLittleEndian) { var copy = new byte[8]; Array.Copy(buffer, offset, copy, 0, 8); Array.Reverse(copy); return BitConverter.ToInt64(copy, 0); } return BitConverter.ToInt64(buffer, offset); } public static byte CheckSum(byte[] bytes, int offset, int length) { byte checkSum = 0; for (var i = offset; i < offset + length; i++) { checkSum ^= bytes[i]; } return checkSum; } public static byte[] GetBytesLE(Int16 value) { var valueBytes = BitConverter.GetBytes(value); if (!BitConverter.IsLittleEndian) { Array.Reverse(valueBytes); } return valueBytes; } public static byte[] GetBytesLE(Int32 value) { byte[] valueBytes = BitConverter.GetBytes(value); if (!BitConverter.IsLittleEndian) { Array.Reverse(valueBytes); } return valueBytes; } public static Int16 ToInt16LE(byte[] buffer, int offset) { if (!BitConverter.IsLittleEndian) { var copy = new byte[2]; Array.Copy(buffer, offset, copy, 0, 2); Array.Reverse(copy); return BitConverter.ToInt16(copy, 0); } return BitConverter.ToInt16(buffer, offset); } public static Int32 ToInt32LE(byte[] buffer, int offset) { if (!BitConverter.IsLittleEndian) { var copy = new byte[4]; Array.Copy(buffer, offset, copy, 0, 4); Array.Reverse(copy); return BitConverter.ToInt32(copy, 0); } return BitConverter.ToInt32(buffer, offset); } public static Int64 ToInt64LE(byte[] buffer, int offset) { if (!BitConverter.IsLittleEndian) { var copy = new byte[8]; Array.Copy(buffer, offset, copy, 0, 8); Array.Reverse(copy); return BitConverter.ToInt64(copy, 0); } return BitConverter.ToInt64(buffer, offset); } } } quickroute-linux-upstream-2.5/Graphics/000077500000000000000000000000001446222606700203175ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Graphics/About form background.psd000066400000000000000000027411411446222606700251370ustar00rootroot000000000000008BPS`8BIM8BIM%\/{gdպ8BIM$9 application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2008-06-07T21:15:27+02:00 2009-11-03T01:41:22+01:00 2009-11-03T01:41:22+01:00 uuid:1A993C8BC634DD11B3BADDAA85DDE585 uuid:0ABA091C10C8DE119926BAF09325637A 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;65FF78A4ED1EFFD1F4E5FC448C09496F 484 183 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;C555CB0BD07B9DC2E8CCC319D71AF08C 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMnullbaseNameTEXTUserboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM 8BIM <p qJFIFHH Adobe_CMAdobed            <" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?4G%@w=??(qҩkkh2I>DZ %Qjx 1Qu 4I0yB|3&;52W NSlk^bPƱU37bwkSVUW<>֞M)z&$i!#sd(b&)c2zl8Oo%uG\Wek}7{/WU >ji$ !;lBڞC/Exd? Bl61#IF_2FF 閂?S0'T79'τp1j?9WVrDp5õKHb]7 -7аuvNyK裾HlD\Ѷ&9~Fu׺Z6H :n:<eR7iLe%$ ŀ5s6uLw<W~kǂ w1?9qobjCzQ2o/>䄐v5Q>ѩ$O&-y$ٳM1#CQ&yMT'm9]>|~hC~~$T6Ƶĝ$D {ni9َ2>1潣mwp0<q8nz;Z}Zߔ4Uլ×r87ь3upsgx HBqiƘ9%]Xǹ\>;OhtehuvGkH]zy-&y2C{ +#dNh8U6KʿG֋e׬kfPGp8x/ S@vI{E4pLfsG$'_ՌvD1hݽ?yɫsKY;N#^KO-zl~.9|7wSlgyN8 }OR=@>sL81OJgZZw򿔈=43@xnO(}:NH#ZٛCZgȏHf7sը @l0@?_d:]-LD(wkvx' w#py1&@^kOĴ#HyO"@R-i5D5]l *Kmt"H]1#`ցGqmN@pxJH>#?<|׹r xX^e~ԡ43:V祻Ӿ,[:t>e8kKq>0|TYc͎xrqpuE h&x]ҜXj|8Μ>խVRk tjn=nu.wȮuW^OuƾKC2OY[wSc=5K'FYyޓl5nJ|31R1ŖRɃ6)Cc!K\oFL}\[\4Sp#YEwbd蹹ĸs\÷߷sަũ8Nl/9ppk݌݌qWu 4O ;^5l7`YnkkZ֍a@> p~{6{wӋ5A}EL#Y.Ln%\U .tOg{uC-hH0EniZCAdͬ6Ildj>$V]9&Z`ʦH:Lrjit;kr,"A:5"(Mx&x1:wFGOo]?x"Ʊog`[kq! Ws  Gv{§8^C@#L:b]/sZZك7=<&a? fnqR]n♛#iתB-=5?r~j?bOWgz5ded41;ڛU"ߌ:#ֶ :Zٵbdmyʟ/. L<]8=wߋI0I·4\KgM~/jw61y4'0=v$w{Svj|AS<|N-x'Rx\ $ %W2a:T ( sq_~g;I-;@qDx'O#}~dD^]gN"~NNq3:n߮"uQ~㯏]uWMt%'Oay#1E߂ W8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2009:11:03 01:41:22&(.HH8BIMmoptOHTargetSettingsMttCObjc NativeQuadBl longGrn longORd longTrnsbool addMetadatabool fileFormatenum FileFormatPNG24 interlacedbool noMatteColorbooltransparencyDitherAlgorithmenumDitherAlgorithmNonetransparencyDitherAmountlong8BIM-msetnullVersionlong8BIMms4w8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong( WFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong( WLCntlong8BIMRoll8BIMmfriEh((((8BIMnorm(Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp(8BIMnormY (Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpTV?ȅ(8BIMnormY(Layer 48BIMluniLayer 48BIMlnsrlayr8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpYj||jG\ 38BIMnorm(+t(Q8BIMlfx2nullScl UntF#Prc@YmasterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H@($@($~@TU{xX@_X3}2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@F\)\@>çGVD7>%-;9F5<4@N?/;OZ^Ygneea_K<0RSRJE?.--V[EIUOIRPQWkvqoiidigvx{|oePPUT_cwbhm`dQKanZcTQOZJ>6?OurXYe`beikKGUfj^Y`k_p^\QOJ5_[WwkbONaWU:9'.;B':]YSD88@=Dckp`iB6>8VTSWU^XUY=HBA5.74@=42)1, ٙ, ɜ  ջۘ мĿ$ݲ Ϩݻ z3 奫prGEfȫ 6^ڢ}U+#  񵳵뵶齼 򻹺ѸETȮ̹ʼğpz۷xTGػ ܺȻ ׿ ͻAֹ軼ȺƸsn˺ ^ 㽿ο  ̹۽ зny϶ ȴҔ ÇlֿTIֹ̤ ڽο ԹɞԾ¿4lq޽ּ¿M 񵱨 ߰ע٤ 糳3۬Է, ޳ 䳵ݒ  T ֱǭѥͩ즱juҩ ԰ Ȝd ž̺ڬ ֦ʖz̾Ϙ غ謪Χיܟ諧 ߿Т   Ϻ ؾˆ ׼殦 ֺ&նҭ׶øxۣѰ ﹸ'  ݸe&Pdؿ(껻¼ײ Ęܰmﹹ rݷ  J۹ *¼üȼ վ"B￸޶ɴŸЬɮzɼ B7dϿ_߻  +/˅莳 ȳ S; q7 ѮڻֱͰÝ򾩦ծ/ͤwj񷭯Dzu< p&M  0҉匲Ҿľ  M3'Ԯҭպůڞʯ౮Ϊ{̪ ߼청  D汴 3l  !В蠠 $Vֽ Y  뺽+ƻؼ꿹ƺ㶂Ž޺$ܼ WŢ̬   (˯ⳬʧ|z鰸񳨲     )~ ™زþ ծ մrt 4E 򴩯ɮ5   ͢p J(:c഼ֻ纺٪ į|ú мԵԱp@pJW᷵ Կʕ #D 8>ǿ¾4̾ѽ 뽿aչػĹzv Ȯ Ӽϼ5޾鿻⭸ͺ°Žؽ/ι ¶d' ݹÇ蘑Ž본  շ׸*ֺڹܷ    Ѹ⹉)  !ִ& Ʊ  Au˼u묮  ܱ ްr    Ҋʇ   ٴ ߩK&N󲳵 ةȰ|vֺ ܴͭʱ 켿J,ڭ ǰ٬ ¶ϯLJ 뮹Ŭ  ,# Ѯ ܰ‰  ޢӠu}/2ʞě]ն — 磝蟧]yo  (RikET ѭ   Ę}9 ߰묱 ڭ⿼(& ſ۲  ʲ Ͼ½0aսؿ 긲°o Ӱ ܮ ߸ߡ汳 Uȯó౨ڵ   ϶ ɫ볲j Ȭ 򵦰   ɚ  ۯӰ̤ɻ ¤  جƢ a߲ɬ  䙷ǔԡ  ͌ B   Σۦ/ϒҏޠ ߜ!Ӳ  ب)屲u߻ ⵹ ]U繷 )۬uůňZ Ū Ͽ  ms ť+؝ʗƵؖڛݢﯥ馟ם夨߾ئ u ࣟ, ؝Ա օִ)  ۦ복ѻ سޱޖՎ乪%׬  ԵŴί  ֽ 迿#ژʐ忾іiݽ ⽾ָ˽ ڿ #䧍՚Ğkǔͬ  ̯춭صv|n ht:߲麹Aެ³ֶʴű붵{ 췯ĵ޿⠏|q]cͽs6 Φ6ᮚt ͺ ܱտǕx ױuabYnrϰ Ȓ 晌|} ڶ󺴴  ÿ nw|}{'޲ ȏ s1ОΟĪ{  ׹ Ļ4\!ljt~%şy Ͳ 1ض뺇汃о۷뻹ѿ ȾLn"̹҆BѮ}Ȯݽе-軰모*ҷֳɨl~ݔrf܋ ¾ ׿ӿ ùܼžө 2ѷɫƽ-䳲ugllð\b"Ӽ̣pȓɾ}}󵁜 Դڏ욭3ڧµzĤ{|]Ҵ޴~rĚܱĜȫ߲}wïﵯݴ u   ݘ,תuƔsVڿХߪ辞չԷݽz n ⡥񮠢ﺝ ۠ƪ{U}ώRå|ʙ|ZdطsŢɾy|ٰ響ۨݰ k  ϤۊὖaиOӪꩯԗҙፂyƟљNm̮Ϯ ³ ɖ1חݞȭӬݸͤ"ɑѷ㮳MS º $Өѕ뽼 ϩ𬟺ȵͷ׽$hЖ҅ɢḸ޼\ HѮ3 Ъ ӱüo  ۬Τ$ʨۧģ'븵͒ թɲԟ ׭٫볱 ܢ߸#  бȩ؍ܴ'ܸ󵵯ϰԴۭ [ ۛ '̝/ ٘ަ g꿹ۏ繳༸ɳѢ÷ͳ(پݝΜ칦Ǵϳ۹ɽý#¿˼½¼ĺ¶ º歺۸·мĸڻ 侺ⱪ  ̖ 벬 ʎμ  ƠמC ֣񨞙͜ᤧ+א׬뤨 ޛͣ ֣ĥ增 չ + u_ȝ ﶲĦ ކ  ۼ ̽ڗ Ͼѽ ķƷ崸 ଽ繽ߦ!νὺ а Ȭô֖ ȧ α Mҭخŧ؜̱鮯ƍ 7*Ě  ً+ɩ?|ﻰʥΫˀ{պ  緰)J艰ԗΞ 櫸ĨϣOU v(Ҹ:2핻ꗓߛ ~  崻պ հݫ̅ɺ)Όխ У ܘҴ  ̆ ѝ wԆ³ɮ !tŮǪ˝ɒ  \Ĺ  ٸ  ӀݭԜȾºȿ #% żōT  ݔά$ $-ۿ ܇ڏ ҟ    eґgг ߨɘq˪밨࢝Ƥ ɚр ᐐ.歅Ŗѐ皪 Շˍ3#ݳҶ!㬱,͠qqѫČ̝ڮCɺĤ>*>ҿ򢚐߶Ϣ ŴϹº־ ݘ_ꕲ  FLEHEਝ տʸֻ  ׺xۚ缹 ת`{ - ի驪洲ϰΝq5+xⲱ묠 ׼ hr/x{xߴi " Mx󥊤ޢ  둚&㥥Ҥ֠ʱΣ켬ִyD î ϔ֦t˫  渪^~޻( ׿൛ʶ חƿ ɺУȌμةۭʺϼ ſý߾}Íƻ ǿթ۹ŕ޿ԨԮīƿߴԯ ƴټIJש沒½탣Ϋų񹶵u։ӝ wuǵ  ޤy ⭳^ŰӸ뺺 ¹ŸųϮ ʲ⪝Ǹ Ó곱 Ǵ¡ﴳӸ J   Ѻ˒S  ʸ Ӎ֭ ֲӧɴ г굗Ւ|Ժݳ   ǽ Ʒ ļ򸰳̺Ҽ ֺ͎Ϡ V̿ ̡Ŗٮ&϶ܳ˙ Ҷ  ᮹ þ̴ԯvѨ|׷ ږ窆㶹񻸺Ƨ̫  ʣ  %Ӟ ʋ ,ன  %ƨĤߢƞĶ弦 ׁȒ﨟 $*轙ʝ% ʹ`%ʜ۹ӳ& Ȇ ׹۷𺳹!Ǻ5˦ʯҬգڱ  ǯ"Ĵ󷵵ХÞ趵:ȫɵ޷۸õĴ 󫟣ϲ'ݑצ© !( 該}岡 а 㪥'˧͹ȾЯٽؑ¯,Эܶٷ밭Œɭz ᱭ׼辯 񷰷ʦ鼾ߴ  '~$ƱԼ掠  ߨ& ܴ۬度 ᱭ P N"֧α窬pֈ-՟eȭъ.߭ߗ!tŽ ]+7J!Ű˵x’"Ω[zó̼v۩{,/TľyדǸɶ&n*qĽ۹ ҵ Ì/¹ɺA˛rbnƤ~ڸ` ش뻵lﲶ² ͼ 2ܻѴ׼{ 뫰Ź{bȗ î홫Ȯ !  %Օ ux1ߟ߿ 񻚮ƍ򳭭ƥ ˦ 簪 Ǟجࢢ — Vܔ񿙟Е Ѯ{p} $ ĭ܏  )܏і򽗏ν 뷴̴浲˴  赲޶'֤󿑈ഷ˲ ڵ䷿ݷ 氷ڮ  ύiNߣ|ouu~ ʲ  ۧ(ݼ   ⿽ %8мz|w{}üڢwE  (ɥ➝ŝպ碚ٞܥ \$ɪ|uplY  ,   Ė|ߜt (Ѫث󭬧֪ ӟϧ髮ƾ ީ۲簬 +  Ƽ  *ôӶ붳Ҵ緳 Ͷ ٰ󷶺״ñ ǯڿ黸3Ŀȯ½½  鱰ݼ кž |跴Hþ  å ݿÿs󱨴6ЫҰά貫Ǣ ̲ؼı ѣ ӂ25I#   3ÞٺקӜꫦӦܦ1 񨭧Ϡ    ˾Ⱦ ƾ   " ʿᲱg} ՟ե򨢨ԙ͞蠨㟞ݥĭ堣 v %ʼn  A ŷ ¨ Ũ;΢ ʸ⼿˻ٹ齾*V'ǻ߿ɂ̿ӓֻѻ ϼ ׺w,q! ɽFо͕ݽѾ žȵ˷ 붷  -4! ͭѸܽ½ йۭ 󾶹ȷ ޹ݲ؛ !g  O  %ż  Kɩ ­ܰ %ᡭ߫ڬَܭ ~  ĥ {ϑ ÜޥƗf Ùۢ! ̰ ϯƿĽƻԷ" bw6ŲβУ۲ⷳ˦ū 㫰(֪̭/]䰭寬͠魭" u+ҥ  ϰЦﭳ0įݱ׮ܶѭުȰ % '+XIJŽ ڢ¾ Ƽ1i#ضػ鴳 繾ٰ'ϗ¸ ܷǾߺŽ~.v޼ʻܸع ûҽƘ#ͺ ͼ ͡ خ Գֶ  ǯc/ 㪳   ׎ ڱ TA_- ͪf Ωѵ  బ   ܩگ֢r   ɏޖ  ۿ  ̵ŬШZҲ嶶  ɩ 4f毵 Ӯծ 񷴲ŶԮ)ڹ™{ ,\%l׸ 뼵 ޾ 㲹 $ w5! ܓ ڙ yءߚ𧟛 ݥ   ڣ  \$  Ŀ굷곷 ű  n0չ˾$買ºҼN ⺹ݗʹ  ۻ uݸ 7,渻 л Ⱥὼ쾼̼ +ƽ ż½ 繷  ƹظոε޹ж  ͺ ׺ ή  굯$Ьϳ䴫ݲhݧǴ⯵𸯧 ߬븳\wu Zq@$1͸ꩩľ"ܦ ĩˬͨ֩bp٫1 ȹ бļ¼m2 Ҟٸ [   Μ 窨 ͗Õ͠ɡҠ֣ £  Ѧ̬ 歩   ں᭸[븷 ij گͳ ۩ȵҷ骮ܴ黷滼 ļմü ⻽˻Ŵߺݹ͵ӳھ      ȵ 歰  稬췯˯ 뭯 ھٵӫ ⬲ нڵ    =$ bs   ߼Ѫ  ɰ׭箨 ȼųָЩ毶e毵 ´ڸwkQO:=OMJFBPUaVDPebi_xwoloa_MorrmmgNEA`hVVgcrnurzyzxww~~~qabjfi|oiilj`\es`kc`VhYA9=S}}giz{ij{zX[pyytinrmxkfb^V>ddbxwibmbbQD18(KN0=egRG59GLEkktesNDMTrojnotg`hW[\`XNVNZ`SIBDC ;ä,Ψȝ֞͒ ίǥp٠ۮ yqܳѦ`9##(h߹xE-1>cY}́݌Μƫ ؞b㿡̝۟úȱʙĦ ̱ʄQ,"*F!Rҁ昣ԟq ߚޜ漖۠ùéԝΰ ɤҔެݡھK wJ1)6gv2!։}z{ۮ۾ﳧùAIĭħƣ˹ڪȾɚޡؚ gᨹޗ ĪE,3T!zb}xƠ]ֺؙߺɨM ף αܴХޫܜ埽ƹ _kަ߱Ơ ۄ пr(3~Ӗ̓pʸ稢ˡګ桰, ݜϱ͵ ېӢکը Й읦ݏk3ˡUyʐڗdٗƵƣם⼙ŸǖTݣǬ ҲϨԲĤҢ ʽŻӥӰ➿ݨ^vÕ ˾I=ߛ> ΁oĸi׷˸ݢ˜ġ涶Œ Ϝ ݞެ̬߯趠 µ ՝ fY:l֛ȟ!tvת韨ಡטǢ͏ަžؤ÷ӱꩨ ޫϢY|ڪ٬圣Z:˔Qgu߽iܦƿ뵻ΣӚϜ ʫƝҡޛ Ǹᦦכ#שЙ՞÷ ¹ǧx8ƭx } й覆 ȡŽ äͲß"Ν긭Ǫޯ ә溢ڽƫ1Эkb 0uɛWڮƭޜ ܑP&٤ҩžfzޢ۪̪ ҡФة̯Ҝ૵˿:`ʹݧhk~ݍv՜Ϯ梪ب ͩ׳ΰ'ၐˡ窏󼜿 ξľȮ dzamP0}޾b 鳰&ƥՠޛܠ޼Pdűҫ*أãĿ έ­ ļ ֢ ЫҫmҠcW*ևq IQĮ Ҩ̰и 2٢ ͝dz 䮪zܝ п䳯ϫ"FqȭМc ۢt"Uio򞕿ٻ㧨æ ǢEޛd ܞRΗߣ޺ɨžUϩ٤᪯ 񮠼ſ 񪤡ўݞ-hޜ,뼯Ynsi©ڞ䰫 Įٌ줦ړS? ݟ̫ȏݑk;зãTןvݹ¸զتӢ̱ɥݢ؍.٠٪(Ehtjeġᵙٱͤ鳳ɨX AϪ pԛĕn|+M'ͪܛ۸Ѹω׮鶛̬ʡޢ |oܞLk&n}qܪ_ůϯӛži\ܶdڜ ԞĴϫΦ۩yɿŮ M3ӿ'峧ꢫڰcS ڝҿИę٥ໟ{җT "_oխrԲ✜̯Vϲ 帷 Ʀϲ.Drݟ漲-ǪԮp"x 糫 ͷ ֲή ۴"ť@'^ꬳ Va؜sܾr׵ʴ ܵͳ %VZ랊 ̮ݬߤc V ƫƚߣ Ĥ תʯ֤՝) ү3@@ڈ2,sĶ˲ȝޥηղ$ĭЪѽϬ С۱լt»yަ詯 ْ Ϻ ڣ⺾ םֱ*ڑqܛnP$ %VڝeD'`կϥץ ۜ˸ 䰨rr ҨĮӥ nע ejӹ ³ǜ Ȫћխ է4j۩߷ ٝ܆rf,"$<=5>9"Sףޝՠ٠ѧΨɼɲᬳe ܿާߡ Ѭùɝᷫ {bܘӕٲӅzpګrm@$@[Ħ.Jªķ奣Ϻá ך2 S֨æ˾ 氻 ԭ ̠ם¬Ҷ¿g|}"٥%ҍۯֲ߬ڰʳơԹ(ҡж˾5U ~֤ձܧŦ軴 μߎبȹۦ ϔƾۢ_ocvaŤ՝ֶ鷬߾HFq˭觳BL|tо㭟ʔܝݞΤڦҖƼ⾢̙ ʺƿg y Ԩܜ$Ƣ৫դ & %ζ蠢/}ͷƽ4ߝȊÛԝ ľ ׫ ڰɺ㱛 sAh{ԟŽӂ̀| ð֊ˤ֯ 軫 %᮱Ξ͊Լ}ơο.Ο⬸֩ʣĻџ ݨ¢ګd%{ ݞۖg*պL޿ާ Ďš覼 /堢Mʜј ﺏ͹Ⱦ͠ލ֦ע ѭ ߚة֧ 䟷ᪧ ˋִɜF"Ǭګ)¿ڷɩݛި ԝѢ !ݛ٣ɹƾѢ&۩ܜس֟ң鳨ҷÜν԰HEHDd ǰ ΤмBȄʉکRj֡ƴߜ뫡 ե缟ۥ ˯꺝"B㷡ĭڝ ԣݯ쵤d<7@CAD?2.9qȬ ّ:( ٚ  ԕﻢ aj ƥУDzԑU(,࠶í ҥʹٳ񽦮Ŭv''Eaӹc6(C ̕ Ϫ͟֍ֈ_(駣Q՘֧ խ ঞҧ§˄{Ovٓ׷ߡ ¾)߽дçG(t˳\+]ʚڡ ʪ ƽW9Ԅ 딢s瓶赘ؠ 離 f1l˥ՠ  夲Ģ׶3*=Ùɤʚ}(ᖉ h뻜䜴V5 Ǟդ ֡ؽ Ǵǿԛkf5*fʟ ɾ!ȠZм/HĠ߲ݎ(F־ ؾb  dzvɞ˩E1òҫƻj̾ٺϩĴ̰ v鯳۟שȧ ڶ (šNktE5X՞ ప<7Ơݣ֔)U ԝ  ܞM=ϩ祸Ҙڟܛp#f٥ ؛ ўƙ Ϩ`-o۫ާș̾Mͯ ĝ α ̫ܷٞ J[ ֹ̄&^׺ϣ ݨǡЩ νx̖ܴͤttߘǚʺ"G訞๷W:؝  Ȯڳ٩ߙ ߥNZ걚ԠƧ ̃Sϰҽዛ̭ζָ轫ڲ  udΖ [ӥӞګȦ*ij^ ٳ"ו3S׭Н൙ޢӘ؛˥ßެۜЬ 嚸Ƹ͘[̚ųѥݭS1qџ 짣пǝ7=ĺ ȧ۞ ݴȩѯ ν ƳݚʑȨ· ¾糝 븣3PƲ0﷠ ܕ ̸ ĵ-Ыà~&nǾǞƺع ͳԺƟȈƝǰ ͠ΜʙڮϬܚҡ ׹ͺ %ģړwΝƣ * ʞܪ 碳綿ε䦣寵ǯ`Űb ϼҭƴǹۤϧ"ܟѦǻ 榠ȕﮫ 9հj*̏|ʏģҽХײ۠Цۢʿo셦M ٺEӒ ٿӝƪutدꟾɤ Ԡȹ ;C+\Ψ߯Ũ ޠ#ɹƗç{cƚНĶ` ²ӥڧЬȰߵҧҖ騴³J>)֬6IoRܧЪ ȩ򰯱 ʵ$Ѭ]ژ oͭ򾧺ݡ]t;Ŀġbǿ׬ ̥P<%j<'ʯZ,Edxrpa %엚dnƮ o 㻶 δ` c1K{þ ϨߵĿ&msࠦװǠٚȹȫŻśƺ,ƶۉ$c|i(ۙݡ �<--@gpq̺ ̟漯+հݮ_VѿV!͙ĿɶịX07Zۢڮ♷ uʣӖƛԶ ǬРěڳe+zϱºʾQ7㔶ԚP]fh{yqJ?I8(5>+**./03+2>bhcwgDfڼ̦߯ۢиɸĺŅF馨ע ,ٓ˱샡uxbt,)qݥХ ֠͢йv ާ(Jȵ¿q<՛vŴƫӪzcl_0*0!,;',3+)<]_h~Z^nڶ߮ӿٯ ¤h ϝƫ՜ أݳ߰ͥ,(v*%Ԡ Ƶ奄mٙߢ Ӣ٣秤ܷי#ӣ48ѽqXϝ䡻֬'ܟǕeZjm^>AE@* <<#5>.5IpvoߪƱ՝ǒ꽞Ԭu#P]N+?=2.2AA7;>>LVPTmlwҡ1ҠḖֱawɩ"H%4 Ϊԥ ǟտμȫܸޝ'vڬ[êФ Оݦ`Ďʥ]+RSE6:(!##/=@4NsmIðԚԮѦư̯knRFߥP+u颪޵ֱ ˶̧أıޝۚàץ܅G^tqzc}dqͭȪ,m7ӿeYi[51E>72,*,%*,WdXR+l 6ЬǙͼ^ҏ<1 RƩ bۣи կޤTpޞܦ੦ olݧx+轖vgoç˟ùÝEƯEIsREn 4A 3,%$1KKLhyaTčr뭵&l^۱|̔˷٠糲ÏʾƼ{iˍvĦ̞ ἲZ쓣}{"ʡm~zd;CQ2$1#&53225C7-E__bY3Bz֏鵌ߦq a||i,侀άݙڥڠ RWj٧埱Ú|ƾũ#Iѿ벬ͬ•̮޹lqæ-дʬѸ]汫ҴAߖ͛umhRTFCOW*&$"->rn\XRDPOvj\ngnyvޯ|me{udQ^ؒ Ϸ˯ߵ饤맨֭ۯذɷ!ÞÔZ7*n2Ȳν̣nkߴ-ϋja}īx^eh+,֨CβԌYXjmZDSR1(+&*0/'$ '3AN][Ydldoa> &unowy맯ܢs7ʢxwȣȡڧߪ١㷝Żν⪦s𥆐uCDڝ3U֦ӬͯntvӪplѦո{ѯzkxvŽҦơἤœѾiŶqpq\`e88=;-% )x£iiӵҺ\Դt+՗ ؽn` mxڧ ͫգ Ϝͬԥʷ ťʢ荵_23%L3Á֫}dƖxem™ʭYШ~zʼǹܲwz~ᾩ쿞oi}÷хE3lp)] Ý¿ s 攭ˍĜٕ⺜˿ ʘl᠘Yu}΢ ֏໤˕fc߅RՖűy{u{rbpjj$cI|Ȣӱ~rɨzn[ڟpШңťحӮV ꝱ¹ȟk  ɸ  袮boY%ȸŝśϲʢʤ}jyPۄxktǶس<=ʟ`lˮyƷ湳ͪҜk#ݫ3Ƹ´ȼЯm۝޼ Φœ hv#c舻馤ٴɧϮy´1Ǩ,?ݬߩܯnܴ՘̧#͟T0ތ̼ٹоDTżܬɩ֥ȭ ޙ b$Zۼ%۸Τ磞¤έo~Yjۢעu#ɜˠԩ#IΥ௘Ĭ׈{ʲѢ۵$bܳ혼&V˺ ӧаึઠϩբJñ֠ݏ9J먡3ǪؾОoTlĴЙo깸(IޡڰƞسNj˔ՠ ѯĽȴߗêm#α ޝ?EܮͣߜϺȹ"ꧡ˯ˢ4\ܞ æ״ß桌%չϢL˦ 񟾨 ɿߝ_̢ܟA=좰dߜؤʜۜ }͡աŧ磌 ƣ&𢉉ԱǓƶ ޤˮ԰¼大 ԴײբИ™ᷡĢʬV/sК'Ęӣú١ިpɘԮ֟ў$ϬXaK}ضڋdΫϾ۩b̍Ɵ i}ˬϡ帧ןЧv. 婝ϟ&ߠaﭰ/ũܬ֜ͦ|euoirʟhڻ d 몡Ҙߝmgɩgб/ť᳙)ʪޑsսܜ#Θ?𡤦Ӹw]ˣϭǫЊ ح̱ퟭĩ͠ ҍ˾.p ֣ ݦ槩נʟ"ݙ'7Ǣɵӱ׼О˜ ܮԙܢϣ­ٔ™䛸ŭᇩ3lř ۠߯ߣӰנժߴ Ъ I&qɵYƠ深Ǵ ܯ ՚ϣɥ¬C "fɏ??[sPȧֱ+볦ꢫ\u~ݖ 먦םޠ ϝ P%SuE췿 в Oɘי + u_n39<6.0Hʜݔ)Ģp鮚ؼ۳ ۝ ?!=^QczL%)sm3Ӝگcѧ ȩ̣ ˝ڞП㲯اq!pVVBĭ ɣ͟ΚĸȬ ӢtN/"+ sREFœ!o׬ΦиǮ ly 墵÷ ͱԠز3*D 狒 ʤȻ֨ɢJz悔̫ٺ!д̾hbâ'yߛ֞ П̠ 󧢥z/0||ʬ#W&`Ļ}䴔Ԡij̥ҩ¥ 衬נٍo@0̏ʻ߬ |ԇy++ϡ̚¨̠ꭱ֍9uiԿՅ&)rT˹ǚ Ů˜ŗ5ʸF xנV%дܭܠᒐ4> ճ˧˝\> ёZ? g↨Ϯ’Ǜីٶ(ӯB1tx ΞŮ׏д֮ gqb 򨖷ڷ Ԫ󳢫&̼߭ءȭԬ৪Ш楶t㡥ک|ݳϲј򼝺(ʼޮv؏ҡZ  Mޜ ť ܥhˣ ,դʫﯜ忠ϥޤ 񣚥3D檽n M1𩯨Х겧ũiՓ؟Y ޢޮٙ⡪ iL] 6<ǘٞ ܲȐ$TjЫhʣ{#\蒪ȖמΛ ݤϤŦ˿xZʥ} g.Р f 껮Ѷ뵘ƹ \ThّQᖔܦϜʲ ؞͸˨%ig+Ajٛb y'Ǹҡûՙ篬ߜøߘ#RЁs^0; hiê ˛ѵ԰Y$ݠƩϓɤН΢ԥ ʾ #*ʷ꣠#ߜí m̨ġܞޞ_q\yIEɏ¡޸ܥءa:/ ݛǮ趭ǾܽЧ [Ξڡ֢ޥ|Xn|VEϟأ Őˬ|稇V2 Өէܷm†W ݿٛ}.䱅_|N6姆#§غݦʆ&Δ{RA Ӥԟky$2%ǡ¨Ơӟ 褪מ쟱,QBḍ&塳柮¶䙅&ᬶטΈلQZ심ߐơڴpͽ岒.4Dֿ맢ɬbw٭Ȩ˟>+>XzT羔~) 詢ٱȋǐ޻*lߟĪɢ᳘ ɩƍٝﱾwj Ũ Kϣǝ¬}᧹ĿAGHEuܠ˩asѢ Ӝӡ웷ˎř} ٘䶟ģțPaʪу堔vc n҈⤦Qh ,Ѩ Ἑ͠\0w+|ڡџԥ | ТսѧץĎüځۃث\ѵ㫱ʫ۫ʚ馵/ʹזсJ0ęnqsq ` ꡵ ΥۦMuĤȩߟզkے)וҷⵛ֨갛Ӻʹ/ߡ5\ݍɄ¸'Ԣ׳̰yݝڪ5&5F׬Ŧڛ йз կ ƶ ֧^à ٗ⧽ળ妞 ١ мзxӴT,ۤԱѩ ژޠآݦ:>LL$%Ju÷Ȟ⩪ ݦ; נ砎 a˨ ͘ڡ ǩL׍἗§V(;ӷɴȱܼ ˳ˡ¬-m"͙c4'>gһ޻Ь͠ ɡקזz ܞͧcӧ LޖǷrԦˬŭ ʡ؝O6ݢӋƅWJgwx~v诚¤ԫ,÷ɝ} lyLxe^^ڡ߻bոԞϽ 纡ǣ貶s{峞૟t]^k`jkԲ 譢םס ſ&đӗ¼Ȳ`˼a5% ϤHͮӤ۞ ׸Ơ챢O 들˯xGDPF&.l۪य़ȪTxvރ ѩŶϥΏȭƛ櫚xbƌn 쵱L!͟ Ȝ؞3(} ;ʰ䥔˲n8'BS*Nͣೝ wY_mڣ ٳ ݳ癣♮`ԲT&Űޢ 㱫ݧر 򿛺*?Ӣ!񹁖Լb/@Y}Uܠ$˰|sţJb̩ 󫩠צ ޜ'ᐘJ+לĥiѨ ӛר֦ۧ΢ê r+Fùڿ!ȗǦu6/;?32MsӸ Ѯ~297."$&7bwmz91ߵ|2z M&ܛϨӧ۟ 痤&߼="XϬ0!vǽ ﭢ¼ ޢƧ'ם֦ҫİd׮nêa)'5Z}ʫtɂp}v Ӓ#ߪ ܝ  &Ɍ"-7صәޡܣСŏ P OƟ͚§ם"꺠ߥ§X.|4ٛ}uKHQ}͑~u{񍞕ơɧISƹ調ܜ͔5ɒm(hż#mջǘ2u۝ڶ ѯ ِʕ]+5P栳׽!סর齡NjtڬР5Šz£լ_aUpԪԔeިڊ%➝ᢑ,ެὪj .Kd۴ݛī|沗НB&n)˜ާĬ Щ׼ʠ خzyj6㶎ЦByeo㜁īp ׭įͭfF 3cЦ}:9殭l֩ sa 軮2ȻȢWʡ剁ӭ pm&줅͌rOMܫ㧓3]ʡ ~D0Ǿs6έg>42ACdǩע 󯤪ִ 꽸%֢맪oˠCq ԢͰ},ѼݟFQ" Ȱ]մ?Kyϐ֥ݸt)~kL92@BKPCCMS_M<O\]cau}spiib^RjspgniQB?VWMSg_dk{o{w{ypu~|~~~|yq`\Z\h{}ggak[Z[_pai__O]XE8:Oznbferd^pnMYhvuqebhmubcZ\QC^baxti`c`WN:00)EH,C[cR@84EFEehigoGCPSjdmlorjh`UVaZ[KQRTQJDF;Ay ¸o)ٞwfx|vpeX ɲnzq}Ej~ -!Ȉ´#Ɩǩ#}pՆxed]Be[pdxyKXc\$xjuzlaMḿ]_ĵoӅvgҼ#wuhd{]پ~Ѭxzyrrnlltb~ztd, pfz ժpwjQ/AVt4ZZQo}xos]sbEfr۸ܯDэmz\G~D ~Ғk}ߓ||x{spp Jɽyr _bX/a|Μпټڬv{rC[:uzXrxW/yvxxP#yzyxohuwaQ lskl nyz nVŬvgbFTnd*3ùۆxx} CV]bY|ha/Gqjl |pz `a婈mcr s j n q~sxp>"wa܁Oо ni5UmVY\t bfgkohj^pc`efaZp_󾞜鐡o cl Zжr}Լ઼ppYcL~FjUBv~hd{tX gdؖYue~{RX[dqeyec㥞qҖzhř^넌> ϸ prJ5f>RPUm_ǘhvs~J/I܌~tcft~}ܬ~OKzulzla` |iwu] ҽ nvwPe r;X>7͑hθxowM _k oxt{ɉf ׶ms'vaMh|~ˣ t߲i:ƣ|p~~ > ʱ3yJ`u}YcAΫFVEivkXkz~k, j dxʳr큓 Pqm]ZLw 䛖 g|^esjb@Զ}etmmp^TPimwd|-QgZ` m[onнcі_؞hn[dTnn}fa|rR rq䄦_P_|j ¥ٽsqfjw Rwd7o 纺 edF{ƳB{;xdnklli¶`Tq}lx c f}΁zbfRZi ܜesnh|疸dhuɸĺh =en̓(vZLliubχivySsmdzxsr~B֥w]o^уa\ZCfű䪜b{۴l1wجcnźѕ}v!+GKxZɗtgߋl^qtc zdkcstٳa3umrQVRc`GM:K]WTЭ̴mtogN~pиsz}鶼|¢c 2x b~`xfmw^ ~rybmJro̯mh3Lh٤vyt\s릙뱖njs_lŘwt{yԵ}pfNxsU bj~c{؊} ⏴R_Y|&h|qxf6.Mfy_Xš~Sb 㲣ͰjoxqӉڬy|dʴnpfu~uzʃ3i|#5ԥ|-bbnyvrgvqwf qyЬ"jå:RWivD׀^ Мw΂` `cov٪J ԢP}_EĘī&rwiebjdˑqhPdag{QMpy(nipxӛ { 򻠥 jl d^|zm}vhlv[n[Y xw }޷vof p lx d~b`|znq0pjsqe ~Ҡr{tԇzgvs"olbfKL~e dbv|_kgXvytslnzhHaidd fF[wnv˓vbxIpy @j yplf}ki~g/Hbc ߕwu|y{˛wzl tހ| |J܁qsÑ"SDyw g{OR}g>u qz~jrvnd)Sɑf¤ntyhggkm鱃qi gK.h୵zrkϋ_xg~vqf܇}nvv=Epy٫p^fpVA.g/xMo'xla^Əo􅺲Fdݎa۝elomڮ{jmn u\w/f](ʬw{zxw\kڥ{bZʼn6vsydd bxtѤ{wswf8̣vo M3k'Ԉvyrl{xz~‚F Wqe]wpkY_hpebΔhf-Qٹ]|r]{yxs!mM[e֏xqtzt.D!zyixjLח(ywu)g{syxxy}x 첲v}zSnLfrv a物~ bljmaq!vVmSes} dد&iՐ$r} Ɍ hl%Vw_cx|fG>V q|oC TʣymbEpޝzplޣ o zpdu qqx k+pYLfշɯiwtopesr{עkb$5;~qyǶq|X kҋń{jrДL-Fvw]dxG M[Tq h婥f `nғ}o er|qswxfi]S!R匦bu~uXlhؾεb{򾂯mybpiff |dtpvf Ղtv#" we̷y銓|r~Ѷ7klnr t crgxDzbl}s _C޽tkzy{נ_ fztͳTxa铕ovnehht֦x֨g¤ߪsoyUq}XB5qѺOsvl |񾡧ezpy{ 0 j] X6j~;øeݹl~kǵldqs*M`\xhsrnՃᴔk ql{sz^wkڈh{dq$*|it lq{ ˜w~yhdC ѩ|z{梗p|{ϪkrfKƂ|Ũ[lăzljǼ(kϵwvKzs㭚pv&7]atv۴nr\}f۔\ܦMgtvshk鳦 Wwqìmr˦zx;ouq\qdۍ~ d͑#Jq9x~qtL/3S NssvϘ%ړzivUcgӀosm礞s^znZl їne s[Oǰpc粛qs Юvc$nf uzjeǼopc&`gpcRbBdeܴ񷛣4îextHcduprn Ѫt{ npfdgÂf{҅b ^!.h{ 𷜣r|zϞe IƮoX} IXeS۔zd*௪fбJhpwQDMiۮ-hg}k~eyvx}otufn񽠥i z_i jvmll|ݨcf"A, iѢ 챡q{s~k~bKU̚jths {QkUj 𨚓}y||yԝձ fr%db ΰB+5,Cۇkdcp vٵ v||s֒%Ș[ag >~bfRk`znjϮ ӕ ? ʯeͳ_ fűfd&msiwj|l`Si̧h`yir|}V+[g|~S|^R,@9A+7bgԸsicۛլה+ͨ~aUx׊@Tt^V\kjACjTkŶ£fkŀ_md upx\a̽ pz }iaĆÔï *Wӟuw%7?)A5+_VEƯդY^ۋl|bh{kךo|/Jutvm $D|`D`d>kcg~} ξ`pf!Gngs׺qrd㓨 ѱmylvءi嶑Թ ttŞ}||PWB|D/*?^jRlodɏpe{јSS\nn]ܔs认~ y[Fo eye `Oi=~r׷^)Wg x~madn`~l_ aln{tppinʯƎiŵ r\l淖|uzQ25@'fOnn&oqzV]¯\#RTFq_tbu~ps`etHl[cϯbVLn h|pef iuk݆gg ;s{f} "tH|zgVjҨGGȶQ $?Mb0mwi|ll\RWUFüȾ}푅om]u~Xji{ejb'CyeaR?Tvܱ{m dsnyhq gwb߳|A}oȐ}`2CxܴB.90@.rdph dlL re_ڭ+_I-a[}mvtr{}LI}^ҰԻo۶sPwrhRDCFLgm1MbrZlyʍb } lv_ntꍳqjoĻŪgZfqkv_i}CMRF:$I4scw{rh~y|'g|{wxn]dsjtsc ~Ƨx2\]lJpbƣRʰɂuty\@'!+.Gnr@w~yqnqqvY|΃js~ln~zfxmj||{x kGnzgwn 7a?»uξ^_ck|ϻbjnƆs||zy{%̧n[s5u~ҸH$;[rgs ^yiϗTZ늄Vƈ`^XͶf{ƾ^lӳX/3>quuvTRgqz\lttyy|zZSsuvpxc±|kcy_Xlori^a XCluljumsvog`܁}Ѯty~zxӰdZc|y~~9brt~ET$hs-tnmntQ{w~?_bphWǬv-@hd*4TLPXȩq^TSLϫ~{vW[w~~rg鏦Pa `iΌo=]qptv}x_ ~ԃtfƀl…re!`fwqGalt2ք|tztwvf:.7EF>0/3Cb{D<v{n@I΁yo-mw˿ϣRiHADJF+Gsrr>񻠇^dz,ed)@ñ˿tXiuzt{slӹk,(mnj kyuk|exhtaӍepkղzrPByٽe3myݧutx9NouywdFRSpxx[HHLkZrhlX۾aK{||yyowrrqEssxy|yyK4D=7@7?U~pg͕uqŞ|{=U}zzwq{{~{wvwwthm;^ߓmm35N&f̱~`mQ x﹯k V~LochZqs~cғeawl lc^Lȡh(~]fuձm]ouչpyb587=rqQ*g:duk56/>I7m_Pkx{AMW`,V+%A|yMZ΢}wz_/}||qoqȨYsh"=gͩrk i~+f} gٹkldtЦh wr m{AsWKzިldbb||զz}lHB6ncHlOu&w_uNOıK}kc_XcRɥuWCyx{|xs8hw{{ެ{ϯsh cȮ rmymj"ǜrjmlefe˖sxa EHa_vEsrcĉcoڽzsCWi>?Z}za1vSez`>_Zb׳rmvvSR ngmk"xeJרmĒk;T򺟦|gwupsmyrv ^le:80xŕp(nƏu|pngmԯj.72M?Jemi'x$cgr;NpԷty{wxswt|C/`럊#vzs`} ə r`Ώp͙zirn]޲xgmԑmeLcb|m_wkm2z]LgmgeA&Mqx ]uA|g㳬ƿmfÈaيs~thԩi ̘ of~ȳї\yWi!f |}kbknXfc-tdulytàKd ѡsy%ف~zjt ewk𶘚|Ŷe|mdf{wsmk ie֢odsvyڬikvq|tzzgm&{}wvSҥz o~mѴpt ⽼žiyftj^]Ўjlyxntxy$`']oz{ߣ^Blh_ӷgwyrrv~º~ƒpG b庲zzޥxjɧ^Mig 3V~kv׏uqyhtfm}Źghz%`fahzzo/x~udʳspT2ǥtZcnhb\8рDÔ ` zlv]di{;Ӫym=?tcΥpω_d(zꢲ}~֦^ffdpc#[괦jpsqV>,u~yo}n}zG ~Ūg`lh|Σxj| L7^"R{ocJ j~s}}Шxrvmߍih"^㮶l~u踁oݴgmc _~zlor}Uמ_Itb~vzye1aVvk ì\qnкhk{Ԫbh\mỷl{to ླlr>}iՍ` ȁ `rvlxq<̟|C #جzޱC/6mѿ}Iu~uu+q߈qm|-JʢY nokeވj d ¶vb|i_k⍚uloi |sh [~epi^tj t+u_cR ]cWzjcX`mqu*y^l-n֪ۀ`–}cl d ټcOhc7hhfͽaWād|v~ u~ wy~tܢp fbeeywq t|숵[h\rZfvƾt~pdpokhaNpإʣ} mvhϒBP,acs|cssmq~k - >mp jr‡]ַj GThkpnwl}{XF*:t uoQ[ׯ ^2Rame nnpl hni umsn.f'6A;]lbK_X1|s#ųtHPXgZoswws kl}hMzݛw8K} Kqq^l Ouqd}g Yr;Wһ+kv`vwsj|3 nd~ǹ{Ҭ;G?@DS` xۭc[ws5lEܨB zjc)_fvbahq*苗 zem| {vdi- {dmS7\v﷬/I rrUg|xÍjh(]ܜK/ug~s([vP gPp _n;Od uYŎ xpw[m{vq&\֢wjsmfx~spvsµujl̦mlajQlׯȇx}ƂJdWc(tù͢\xiٵbtu aBcЮ mr zYRjp=oq^~sp$Дjbg[oo m_qff벼٬wp0 xv~T݇u y׸g~ŕo9Lgr9|tnߑ]lz iL}nv( w5 Уn]cesqy+iăb}Qȿpuϣ&6R{Ǥjz3g ͮwдPvCVa p}qpr㻡OYсBH fȖg d;r| ݔ]j _E+p)ץxr\Vtco f㨝}rt(RH/ikbBs вjI]}ds\庡QgZf:p\cO Fry acxirq`4^ĩ$`jyTFomfmrz ge !'{ݫmߟc}zȭ {avmϑxYQtVdnuth89-khPkq|_̐bsgjr>j괳 bkxی~ouĵt QhgxklrxmtrphMJxvz{rͷcXKn QŶ`G}eؓr umstw{yiǏzed詻 nouj~a~nheZkgMl.Ӏ]7=5*q|~}u׭eubsx{crAykWwnY|ɨb`F ianochlL}ut̶ zżx2)ϝkvrj h ixfif,=%Qtx~{uܴ~mghl~ r_@[}eru~H{:xMVfƉd|gb]t~u{okhT˛Fukh{y˿ *rvf=+>xdZS9~Ą~θ owk}tyssegtx`yQaP vsi^Nev~ْvpyԘLՁ せt Olf3YuA|u7IHEfd&gws}uqlc dteI˘kevyu Fb`͢phb`gyyly}ygXx DrFZ{ +pvm c]hjH-j,cimh skVm} lht{mtqpcѡMtt}Bjnv|˷m;X􅂮}vhl{d`ΖsO$bݧsd|nWerj f ɚ[ww 9{}X] 㷡]ziu dyڵ(tЂrϟhI򼓂{v{zxqpswy ylFSlgVxF}y{w bd ӊo{p ^vcdq2RO۾ceiqsؼ{{}~hsltpvsþ'vtymOcؼ~܏qsz{u{|y~|x fayiƾ}Kw]8efl`Ňsr9s__׏\ 鹐 u޷ ຯbnپ_ĝi FUP˺w഍tpo~ ku`kczhRryzpxud _p"J{uqzz(cts~yqossxbХxs lk搊lgpSFi|݃^ Wsub߉Yy` Æe_c l`zeSg^k ̆}kbͳŔfo[%=Z}vn8?s}~yx{JSzʤc ݮ|@ ]xqՎQejHfqi | {vcj~; Vo5`  pǺ wIUn&BRktnԫYhߣׁϩ[|ڶ$Ь}zu~|zwIV^1ٓl[ ltwŋHFM†g}dhsxbƣsqI~] iߴ K`΃b+fӣ|woԆ箎8h}jlߡ hw!~Ėz{}etUo귧t vwJvՋhqM|mt`es(`syζmfje¸mr tybk ɽkowǘl֫nli|k!`Ǘd܊ MTlꇹ毦~ʚ Tlo{np Yfi٘guwtϼf+rmb`wzn|gl~gg oqtQ}yuHhbЇcxɻ j}H쫝v解bXm 7 iOget[Vs${scmxyltsqqԠyf d lj-ۙ\H)p鼢ܓsA%d޳deč}诣t򹜣̀uh]fgmo|>[CSa Tm(hd\d ˀn{o]L jY仧xžxĸ|hx~v믟{z|es˲iy^|}grlhUB׍q Zܗf}xtʹ{ɻj }un b ~_f {pp oǞ¬z~V܃irv}U\Uy6 dqhl&flRĹ'/|X_fβchmtd vɒ҅#p tr>igIӺMhڬJksh ,2i f `\Nzsh[.p`ZtizOR֭qQ"޿8ňh}q˙yq _z} qhGhu tmlskւq븮ڜtiu]g n 뼤n(}qvvtkpyᵵjvzl lnݻm{g fx{b|lw"Һash^ ^%neg}"8n!9ozLűmyfnmSò۔x̃ sj` uukޒ{eflʫ_ӣikb~㺜눲ug2JwcX+ 6pjھwhlnmz]ueh\εb]v|hswu]r] e\̳݌dzhuδSu!;|gnw{n Ƈpf` friv eihuӋ±|f hb8vmѢvxvvs[ǤÛMkpn|meoctb{ gdfbl\|ݒxospÿr*Z+ ~4߮~ctx dxnԂsszʻeuonsYhkkdp u{jiYogw៽{sof{.M L icTbx{zzvtɋmLbopsW yb肆wc qk~a\ˊv_Ɛq mxyi Κt a lH\zunta fmԖ`róz$ ;dsUŮvwc` kw~CBBir vttmu_kݨpx贞 l%rׄsY/bF cd~a궬 oJΊzwwi~u`wk_ި ʧreLZL_zyٜnݺtm }ybw}y ld%iZswo3 dnQoic՟縣 kig̶j}ij}}cdq``q^FxupȡovЋuiUwup td|h}޻n̥m̎vjfsǃ gjbb嵩i~d}lduqMin|mcm@}wr~ad״bCx r纨v}\yd_旓wtz蹩 }en 裙o}gr!]~]MȜve{љqriyiwvc~y}A|]ktj{eHmj^f|vw eb uY`xhl\or\@^Gs|el}M _P+ qkqΫ~rru}jXGztЇiĊwzɇᠢl rpY کaytvtgk)a\рOALzDチmut.6h4dÁy{o{ixZt|rsUtt"ruTzewjv߄֦i u駗\hsp+fOgXPScV7hӓf/+}]shऌfwun ^v`ɼ mx aet|򫛞 cN ëj]^|R0nj򪑎LOmG]@qn kdnޡo ޺m}̪rxk|wgXnEd ɨaΠyۦ xRԢfr[qTdc)ӍNrOvY^gmew{x s'`Әzxduj5X_z~iׂc{~c_acutpꠃ̟~[- 1i҅ffrW0`󢌑xLbRÄӝet'~inuVY{vzulhbkr|g΅cyeiaj jg oϕjZ갢>}lm}_/s}a~wht_׎zKޢw|ykثt ͨ{(ǬŢzL{nw#yhĞlnn xqk hԊݤpphqjbw؜]uχJrgmtfುV htsl yܯX_od~h~tjzig ǚYmrvcbgtetsm]{󩇎K~õgtnٷ聓bVKUl |ep y|q&Mb괣 phJv`{ {QN{^󻏉Jaxq{[ӁvlrZuϰq| aٺڿi hQCi1a|rԚՃjhMc^ eZl {^SSgsydgNI]ܥ}djncw6sRqhmtuys^g Er xi li\wvwr|e hΈ{n̬}jxѵ}liͬe$sjYy`풗lmra^pOɏm{us)̑Mi} P"xƏ se ؜ M?]^ ei{ᨢRxiDžnjxo^ \'gjܥ}kɗs Ꮕ ǖiT|4f fs̈lo2}1EfymX`toitf 楟 ֭}pe kt餣ߩɖygs&{ gizס ]n{e| hR,\%l {S hh˔| vdc^zrb͠﨔ho~Ôxqxvbgw~}yiq $Xrbupgq w5! ni4jtf̢acolhv ϙnrszxjd$瘍p{o껪lv&sHw|𷨬q` {b{ mےfx ȌjZt}X݂hذpy5}ygqPkvwt  pxjo ӘgrlRsjgǧaoЏ qt쥕  Us dacv |щnit}pvd\Icdo\v{ii h  `w-guvǪvdף~|mpج}`z`+򹟥j] isf嶜~y<R kő潥im {n0#retcr|Sʹh `qӒpzL ܓfˍ[rs }zx\nۺȚ`jt`{N~dLtզ}usjg}ep djWbz{sxsm7ddqojm[f׺auYa7fzaftbHc}A~_pɟff{u¨daC nonjrlxfyQRj`[hgth mc)Ǣl弸J[ݴQlOWqcrkdhew8ݞ ŝouUMM^stl vmËihlh]8friii^hyeKFsuul Ycj ɯ*WlbК ԥ j`c hlJ nh~ [Kx%ڂmeg|~7Ӓ쇗p>TFnbabiDĀvsuxUcd} j iv驲kɅx{e OL ]uo ܮYd돩9$fmpixw#bsƣ]XCswVIHnp Um mx Uo"q諝Y~h |{Wkvsdk ^KZyv jGWnغcnv͙N_SxFdhF{{PB%l:|xd⽑riphۊ;bڃxitכ gc ֌UrpStr"c}|̍靉~ahoe席KaL[\REG||x~f<ӓes⼛yqljsyx~ckdz촧~ p}n{wީuqpv̈pdJԱhe vi3gjut| ̟LNUU|sw zssott ʌmu&i}wzzxqHYiޣ|cupwMwzlj hDp\Pggvܿeu{ġvjtÖIrJvkSwz th`p ix}uqv ڝixǵzx{unl{fҝv뛓 ؙ]{ʻpY뙍iQjSwcdxO {cѼip솈w￧a?l oޣe y^l vqzuxֺ `\z{IlfbJ]{auc O{pcQ j kۜkq拇`gș qfue >͸ɗl tlxlRySJ{'Jq{x nlw{p t~e qk }oqΣqkd.}ϡyqpequ"\YVM :] saz Jcyir hptΡfu [xi{ q`}ߖgzeomzDZK Z _a |Xdra lgtg~ nne$~zh|๏iyʓj wdԃz ne ip]{i~ مMvY\H ck ndUuq"tvgR y \ h epk MdTExc|k hx=^ UXjuq?~ v~i_ [}Qh|e$hcwۓa =$z fjߛ8ژuo yҚ h^  vo躜ycVPwwo gr }mcffMbjt{mx ȼw،ﯤQ(+hrvllRnr\S>8\\UT`ValkQatzzxvocQY\gnsd\FJXPigljapwiY`otytts{~rjwtlefsZV[~tv|v\]b|p|qwyxxyvRYyy}aixoW<:9!;S5=NUS98:GKWl{NLU^szw~r|{{qQ_mYH>E;0 *ַӮ v$x IJơ¦ðک鯪֬ ǿԌt3zҔ вձ߭ -ыА xdh&⫷γ³̴۳ ᰭ˩ ̰кݳ²tۯ鴶 g> 鵵붲կݲ 󵹿ʹۺ춾ʽĺ ˫齼+ę㐒¾ذ$$ 콼 Ǽ !ۡ鐼 ٯپ   Ǻ򫞞ա㟡죣柠 ̣ğᓀ ի d\     峑 ê`%(f  բʿ؛۹ɾѦϽd Όӱ ŭw箰ةʬn 婬LQ ʯ "2$*$ٶO _V   ᮰ź ϰ ˰g9 l©ʹu~ϴݪx4ýԷ Q gܜ̆޸l M  ݷ ͳٷ齺 λؽ쵳ߧճ}sõy̹嵻  켻 ӻ ٦y ?N Ϋķ ܲ´ N ǫ ޴ tzݽȯ? Dz 麷Ź𯫵ɹҸ ҺسRk Ͷ  ͱ&P   컪ݤ륞䫢r֧ܤǴ1꽧Ϊ  鯰g| ͏˫˷ Ӽ¼ڦ 妣 ۠ص禨򰦬 魨ÏѤ ˻ ܫ୪% ӏ ﶩ !ֺ'ó¶ީ 꺷حձŸh۱y=ֵ&  Ԁ۷~ђ% ᄏŽ ȱ ޝֶ¶ ѽބ繽 ;cDļ ǻ(»ּོ "?з˳贲倯ѹ ~S(givս  8.˧鳐 ˵ ]6 - ٮ&ήۭͨ쯨} ưޭ5 Gګ'񱯲&Ӫ(ھͼ x:  ó'ھʵ ¼ƶ״嶴⥀(ȯϿа9DɵEô Ǵҹ !ζϻ๸Tߵìń Ⱥø$Wݶ̴ +ђ䄹# ϭ էӫ᫨췤quץϦ ê  𩠤Ꮁ " tݹ ٳ֥  ܰv U 첪 6WƳ׼  Ѽ ſ Եžvs > GY| ܿз꿾Ŷڻ ҷ 缻Į}s ɲ ̻Ƿ!#`4o(徺 %нλ׶ ƹúuz #.ѻɼ?Ծڳw='l"Ž 30Ξ Ǭ +ݴ.𴱲  خ9 ɯouٽ̩ í)ڭ ڲ& Ҏ( !ݻ$ڶ Ǹ뱴ⶵ빺-}ܰ ܾ˹:  뼰ԷšՆľ  ˺Ž `h%m Ҳӗ   ۳>孲"Ǥ ֢ 괩t| ؞  𪭲 a]<֤mЧ   ɀ 'öʍ%CѴ 嵶ӭﰮ 氰 赴|l ² ͯ ȹٹ 鸻⹻(㸼pF灘7[ 边Ŀ 캷ӚتԱooŹ ظƸ(d|   ⿖Wq駣ﶫx  ᣬ 駭͞ר߱ 鳬ؾϭ ݶʽ5Һ שý  ɻ ͹ǽ:  ћŽغ ' ت   Ϟ ޶ ǭ ĝ ̶܎ԠŸ÷ 鲴پĶ 帻칳ퟫլ  Z ߺ »ϸ   .ߣƯ͎  ƦՀ  Zeުū 椱*⪿nÕفç 賲Ȣȸ̻ܪ ޫ#{6)8뵮 *۷ے &7 ۨ 庎˷& P9 𱴸 Ŀο Ǵɛɘ޷̸ 帻 ߬꼲հҵϸ¢ a϶ 캺κǴϲ잾}羰 ҷ  (䶺񴶸 ݿ    )ޗᕲE Ȱ ࿹ B T ڧ"ؓ嘸ҋʰ&kçЮаͮ«IJ򲭬 ìʵ  寤l!dʿͫyy}{ w"(覮ئո.ǩݡ 3ٹĽ﹮ԽŪ_dm"/ӽﹴ!ɶ򶝧Κ Sнü  Ƶ쭡ȫsڣǟwzzeX]z¶ $߬֯ͧv௸ ɸڶ 벻·  Ĺ ތ vgbzos-~ 0ǾȮ٫jy 䵽 pûÉv{/˺ȸ Εäޭɶֹε?฻ѸzO뺼80y  !{L{ۼa =ӧȬzʏvpɃ>ҠL쵳߮ ̮$ׯ 3սʟfbc$ʸx~m(׾ئnn~֓kƲҬʭ=켰浶ۤݪۙƻ ߴ㨬<ȝʣxΘҾǾRvtxؾxΧäu̲  ϦFtT ý <˞wЧ¦˩K䭥ƶ˟ܗۼģܿØѦ~̴t%𷱵]|© ť뭤 ߤ  ή#ۨzf܂ڭ}zI֧exq`ۦqݷҕuqqtyªj͚æתȥͼʢĿȪ  ؎ɑҲֺEđ̀ɤ"˯V뤜Q맟 ᨨ qؾÄꩭ7뭳뛷˩±㪐Ԣ˨AE拏̰  o źᜐ īёŦ ➽ظ ̱R)ʈ ҝ )ٽǘzͭݴļн ϫ\ ج۵󛰰 ȯոܩ ˯ѵհ ޾ۥ稧摴Ҥݮ  ҵʲ̩ ʸ#ߔə䳶೷ ̲ⱻ Ÿ$ٶܘۜ.ٛ԰β ȳ毷ﲲҡ⵰ܭ&֭DzΩǝ𮭲寵 Dzͺſ ù յ ¾ ù ӳ Ϝ 컵 ɭ חи   묦 Уh㧡贈붰է(ܞ Ӥٛ Ҥڨ٤ν x+l청(Ѭ ۟Ʋ 㸷 s󹺻ԛ 뺸ʷְ᮵ Ũʱ Ԯ&Ьڸ鹶з۶  빹 ĵ ÷Ԙ 󷳺  Ĺ nȕ鷺׵ 񹳸 ͦ˷𶷶ȕζ .R );%ˏØ Ќ5Ӻ g+"Ӯ§ӭǃ}н *Fߠ 鷝Α ֭ܦ佨䫲ټ- ޽y~҅}zҝ ŭ ܳˬ篮Ʌس º̵ ͬ Ҹی糴󸯯 뛾 dž   |č ߲x湱άǢ Ћڬ ]Ѡů ίڙӲ º׸ #z, ս ƽ^˗ ӗ$Լֿ $,ӿθ 㪧 ʒ  |軡ϐcұҠͥ٥؛uΫ秳۠ ۚŧѨ⦥ߝؒ-筇ؿwڼ·ʼnf ڹԼ&qͱ%óܷ鱨ڇܲȶ ˣɱ: ]Ү밸缰޹%⿬&3R᳦ԚΣǷൾ{׳  ݉^Ƿ ,&녚 ϯ !|!z ٩ ٕ ܨ ⷀ ߻#[GG 㯮򶧵ޣݱ ҰͬfF^(ƫ ޶ íᅂ䉌q1ʥASʢsX(0砢暑ؔƄ  ЗȽ&Ϯ¸Ӷѭʺ⳶ k㹾ӱݵôȩXc 䧱vٷ Әɷj#΂ҷ۫hޑ+λ̸쿷仺Ҿ ̹չⳲ豑 ⷴᄌ  칸շʼ -L㹶#˞릅 {    uIﶯѮ趵Ѯ ⻶αٳꫬ帢¥~  ٩¶xӁ : mr~߯ Αݝ趲П  v!Ƴļ 㻾׹⳱ ¦٢  ̴ Ѻ   5㻿ǿ þ Ψ浞Yz  χټ 殪;  ̽ǿپܠŋܻԽŐ۽   ʩḼ ௩ö װ ڨ ִ ƪ׳˓ް  ݑ 䪩xШ ݕ鼓׺ ® ʩ ڣ񭬨ǒv ư 쩥樮  õ  ߿ է[ ̾  %Ο ԋ *( ؘ  ح潾 ︵̳ Y%̼ ϿĴ dz ȼ Ǵä׶ Į߀ֳƷ p#鲴Νܕǥᴹ 곶ָ粴#ٙ;ܷǟ  % !𰬥ة𮫭(޳ ʲ}Ųɫ յ¯(ߔǶÞ ͮ ( ՘䣗颣  ܻ &Ƕଧ¼洷ĸɴѸ+IJᄌ垙   붷ȩ؏᮸ ͧйƸ ػ 4'ѷƽ˸ɥ⿩)孕  غ 񴚗 ἼںӶF=K4׹āy瘗##V ΜR $̻}’ʲƻùv繷 i񻳬êǖzԪ ߬SnͭtyÝ Ǵ毖 : Ң {kӞ Vo,# ͪڶ%cIɣxҶ}u}˽ |k "եr鴪Š묨ꧣƹ $ڹsɶͫϴg Ҿ륟 Ž !繜׾Ͼݨ ʱ$̼ƾԷg&-䧔ۨ̓ܯźϯƸ  ɾòFÖپє"ƯxrŮ䧏ƥ  ʤˡ   穛޲S՚Ɍü؞߿;ޫE+    族П}~;|stӹңȥչ  кζݸ ױɴҲԱ ﰴ൮  ָڪ 6*U軉{tuټΈˬC  (ؿѵ߶µī ѯдޮ ԰Գ˯޲ =գ~~¼{aǚ̧Ĺ p  ڴ * \ :ͱ{xÝ}ð߱ ֡˯Ӹ¿uG  ݮ'Ǻ޽¿ͼۼ֔糽﾿渻뺖~vþľ Ͽ Ʀ+տ߿Ӿ ֽ  ¿ ﯛǤള +׵路ŴҴⷯ ٵ ޿ɵߵ ˪  L ÿ  B筭/Ӫ櫨Ω૨  랙 ˦ܩ 𴪭 ꯬ꮩj# )#«˺5ļž»¼ž¸ bӿ̰%ѶǾļ )fe ָ    <Ǟȟ ң襠ǜߤ󬛛 ס 颞 Ř  6  ª ίʪ<Ϭ꺳Х÷ľѣϹ淹ٹu߽ 鵷ֲ紱ͬ𶲰̮ ܬ θ֑ 2   ΦǴ 󷮪eͮ߶⩬ݰoų޶  ,8@ ʥξ Ըϯ װح4`-m ԫ߳ݾƠ{Ĺղ՜̴ھþ  Ҹ *P- 齺Ů_滻ƾҮμ־ͺUI   -   ^O ӧתݯٳ $à؜Խ཭ŭޱҳ  ߦ U7ͩ  kі ܢߥר؜ѧ܊m Ɲ˘ݦ ͼ  ؚ䰮% ϳ ݻ߻ gqתٿӫ̡ޱؾۻذ Ͱ 춭ೱ |󾳵ڶ˱쪮䲴! ϳ"۵!ظ਴ꬵ >.방%ڱ청򺮲ӥ۶RǶѦԨ쮶֩ ʱè٨ %'S8!۶  ɾô ¼4 ި#뺲輵򷳳ɺ粶߾'ݞݷӹշ󹵷 ޶͸㳼滽ý^;˹ ˺ڼչϹ ĺ ѻѸ} zι    ׾te ᯷湹ȭ緯 ޭ  緫 *` ꫱ޯ $    (t7e˭ԯe󳭱 ũ⼷  ѯĶ֭ ],JB䲲!q  yõ ֺ S9  Ωɸɶ*Iͻ߶ A*:]  ۺۨ  㻾ĺ IJ a,I<ڱ ± ĺ׮綸 $*c)#  ٭Һ ќ饥 0ߨѢ çݔ ͳ С ¿  7$ѽ庼dɺ ݺ   ʱ  7#tϿ  ໸ӻ½'J꽹μ8ÿͿ½+׿Ȣ߸ҹþ 'Ӽҿֺ   ƨ ڵٳǯеĵDz䳳  Ҵ ټ  ʹ4鴯ʥ 㱴 3Dz뷲嵯Գe۴ͰϴŷX Լ 괶 ÿ筧d$Kuϭln{p) &ٽ Ȼ[6&л 龾ٻͼɼiwƾ ־Ʊ  ⰷ ů]ެ˺𼱨|ߤ̳  笗 3<   ٩"֥֜쩡ܥ ˰亪м  ÿǹ ǼպǾҺػ㸻ĸt{~r~fUKqijilox{nv~zymyl~hdbg|{xxuv}}~zpnfZann}V[~jWVS>VmOSeutRKGJP`{\Xfum}unjq]s *ğʧ궔JߤѤ䱴$ ۳ ȧ ̠^3*Fo̻ɹz؜ƫԲxӠ啕鹝ߟȰζ Υ߽ݤܧ£㞽ʣ s]磏`jݕ>)!5ZƱuoq.U|ݧ͊Ŀ֢Գ֛Øܤऺڮס\ -ڦѣПaެ̼ܭU?4. ܡݣҮ١͜泟ϲﮯֱxWޘꓖͨ}L&$Q+层mn~|淚DZŬܝߧϢ (Ħ˨ ܱ üס۱ߠ ˩꽧Ϻ ۯhֻ"حi:#%8d"ʈI-!%J~彠 tњߟ樛ɪũӪʯ\ ៻ ~Ҭ⬨ Ĕ¦ˬΨףܮ{م!жjI$0V糿,١ŽȇK45IhzX8R3g k²՟d^OmĤĿݲpɹ ٠ڢޗ ﭜԤߡճڨȰ߽墱Ɵ ̷ łݳxL(%Y*սn'cޅU S mć̹O)+SżDZ Ҡ΅ɠͷ ᦹ ¡֩٩֒ ĶѤ͹Nçr7#'Ff:_ԓ\1ķ s̜X꡾d١Ó֝ 뜝˟ʱլĸɧܵ 窰־ ݾݥūg|ɭŵҼW/4c̺ 6Zӿأ9ƕ m͜ᬹ:)攡 ŜҞԜسǣwѫ緕{Ǥ乴ԤӮް ӧۮϽ#񸛼¦ƹգ̩๚؜ՠ2$w*% ὂP*$Y Jlőᝮ♿ҷO h뭶_V£f b~ ܞâͧ ơ#¡֧֝ Ͷh:gڤқt˩a>(/Wމ`҈¦̬۬ݫ֘mZ4ҟԿ 椩ֳ 署ҪڛͧȰȝ躩ٟǺܨղRZҠ rn޶I*-Ie%3╚}ޒئ ңR% Ʋ߲Ŀ 秸¢ӼѵƥהƿԤڥѳٔņΔN* 4JvYۖ~ިc票ΰ܉ů͚Ƣϳϥݱ¤ ϲգǾTĆK/'5^ӻܪԥX>+3}%ǧƸ箨׬֥ ԮO9ܯà  ɯ㪯Πz ݢ~ϯT~7թ?@>70&.0+;F0%@Q]ukj潜ȼ ݸƫަ i 䮲ᙡ)ƙܣpȮR-aDq ɯ֢ժ\Ʈ ]ܖ圾 ólנ ۤʚ̜ﱺ~)׬Ǯ@-в~E옾ƌ֭ؑߥɮd\yV6WkN7-71*-26:'!!/RaO[w}]gƛī˟n ƚᲢC.bE n ʬ-SЫŖ ұ 雾֬瘝֝췺 سV/|ϣԷs֡epttٮ0ͤ쪕xnlH 2$.%. (P1=i{ylxy| ®ķԭ~ܫ崫༖Ļ|B%9(M ֣ kUǦμƫ۞ɥԝǫe̜Ҫ檔cȢ.~ݛ_՛ޠҢ 챦m.mijwrzSA]?%+ *&@_^fZ`[ۯٮz>ǠŨΖĭyo%έ/4 ОШ3lڞ٩齰Ѥ衶Ĩ𲞺Ȣ˫ґFefsТ՞ɨ~m-ʡ}xz \DH?%" 0/5*1FGC;_C`b"oɜ<Ȯ؟Äڋ.tܪe- _ 姤릠nMȪ頞 ŰŦ ߭ ȯtˤܤ×鼰Ӝu,a_ӦڝڥڪwnDwjskw\\U)('.&~.?+:HP[V^ࢭç$wyȟ巁^ǙD 0 ȧfӃְڬ ٧gƱ  Ӣڟ xľöķƩ$eolףTǺ1d~AH:TGAXLGB323'!&0<:QP.P}}Ĝdյvcø~ +hѪn񯘽쳊 ĬĺКDz ݽn4ણŠ7%浬0Թ}m{ȻjՍt劦ӥҰX㩙DenIGO12-">BKXTb|cL[_~֔yˑs9 S~A7?ѬmM>ݫߦڬ!'j ٞ߫ĻӱΞϚ롦qئ̘֨zվΞ%>ܝ轟γصɴֿ͢}eì ܠȮ ֪Dר_=PE/4*&15,1x|@Lvԫ,^}zwӪ.=阦ͨtʹJ _𸰦  ҧ὞2䪠ƞܬ駤ڦ؍~R1MʦΚ=ư߹ָdvܯəϥy{$ɽԙ̷xv]A |ŝAẩ|u\SkrcWM>)"%$!5=574.3>UsuzwU]pojj}őߨEg>؝ţꯢٲǤůݒhߜt߲¸Ԙߜ Ҳɳ䪟Ʈسɝ۫~墰ȧM3޼<~ŝɳ~xdテlqȟ}pityy^¼̣xg¬ˢݣ⪪»řݤdwDz~]Z\JBD<8E3-*),%&,*DgoȪ M@俯 ˟eԳı󷃱 /ΠxDs~ڣۻ̻ ΚȔ޸릧ƭu90$D<~zȠpĉۣҪӸzkc׫ظ٣vu宾ɝ륐ܻܽdjΐx׊d~nUSuv¼:?MCj ľx!ߟǢaukǫ귨 ŽϚ𬨲ϩè ơ 鼝Ĩe%c^ {#ƿޢٮťslri̩ʨ}qIyj\^x>$cOռձͦuҶtdG|ݠF2̺ ʬӲѲa׻Qϟ ߼ñȪ ʳ ©  ޜrizJ"׹ѱ򦥭ЫʨȧrʡiDf壏ͫV }Jqҕӽ!ǒѺ̯ߞK@ؤݠ7 ͳ͗ǵظ¹Qܜݦޠ `j"~Ɇتܶ魳İ|wkݟ4ߟuF(ݥޢĺqIJ澶|ĹҜ4<Ϧ齣ɿݺҺ7GңâիϮ̰嵥Ԫמ`ḻpŷ ԸȠ۬в~SxĪѭ#ӡC)¦ᦢܿԾ*݋iѣ֗a֛ʤ׿ѫѵޜȮվȼˤ ֽ鶭朇Ҟx0ZӠR)ȬǷɫƠRa]Ǹ pF/ڣƣ)윶ٟઍɋۘlʲ ͜ӯ{œ٣Żձӭ䷡qDǫЫۡ;N֬⵶ۦǢԣ׼)ʢMBءܯۤ{ ٦NVꝿ 럻ΩӮĤ ʿ\Яݥܟ9H򤽰dʦ˱諫۲>XգͰɰں䖑매˨Ϳ զǩļƦ՝¼؞ ɧĞҜۮΫM5 l$Ϟޟ+EΛۻƤն(˺]և\׺stͱҾѯơ걟Ӭ֤t荪 㢩ದ߾g0޵$Ԟޢ5A欰.쯿Пgpuƾssx鮼ƒwダ΢ܲbʽٞų뷢m`{ǭaկ,ĨҰ&ɭ*Hϯޢ0ߛ@ƪloU񲭪̭Κݕګ𭖁˽ֱҴӤ ϓа+݇ʞҢ %fȨףߧ似뤻.'7Ǫ¸įȮѩ ۻ ůֱ ŢʥΔԮ̲ҹ〹*杅 ͧϢ ش­ˇ'gɔҦ֨ 禩 B*| ݞٰteݦ ¥̩h润޾`8ItȸUӦгɞh[ ݤե աL"c읡셛yQ 天ײìXĴ⠝ 󴣯 x+li641..>_򟴲߉ƙ砤(ܠv(k箛ǫү盢ۭ 5"Io[lϗX#-tRBݣjovИ̱Ƥέݪయ֫ o|&wKʰwATΪ۞޳Ƚ ̝ᵑ_ؿ mD*#+|vM.kࣶ&tޑ漱® Ĵܲ߶e ʌ͝ ӱʡݜڿ:&> օ Ƿڨ cgťŨn¯-j ڣ IJat]&Ѣ Ι̶ מ q+M~䧛釋÷š"c&XƄ걣ͣVƸij͡឵Ŭ<*lΟs]& ڎ|ɊW<4۱Й ̾ܜ$笴f&ޢpɣג,%|΂r~[ի ݭڜ薘ƷݥAƢ{ܪ  ʾ݂"c ܝ徺痦ͤ ԵĠӥå֚3i ZȦIlDZá린ӳԤ!lÜ켡[ܟ לɬٮnL ̙߫Ѽ ӗ-ʺЦ伮Ơ宩Ϊףy壦ܝ\.ߞġȿ֞͡Ļ Έ󟦥s"y  LéᚥA)褵 +ԥѧզޜ⩹ 򤙨஢;QE+-Em ͧ٤m2 8EF*"5m ګ墷٠ڛ؟uyksޚܠزՅ ؝ݐɡޙ榢 ᅳ բu0I ϥȭˣ ѱ|dĚk@-4Ml ĵ˴"ϠС]$+PŷR$ CߡӧݞQݥդ̮c K(ץwy ⽛y ޟ䦷 ۣخޮ˨1󾪦⨛J+>AƼ}𶑨֠%۴δ`͙pI85/L ؖ&ýƻjg.=z{ƣl-hС ÷ԤȵӨףܿő3i贷sвv ۟T渫 殩 д o>"!+j ԯ9˟μʙV*)$,mͮl"[֕׈Cn ų +, ô̗򟰜䊶|sXM 饵֐yh ίy ĝ%֥ãڡ~ xZ9|Ǩgtz90&6OwDZ.u"u֘Qw۠ ϶Ѱ ̳ƍ]D7H\:25 %͡ ͽⷧеO+/)˴$ҫ̱֗؞(֓ضн ӬsZ8ѝРಁ[;,73[ҟ%e˫ǘ߰5~ò _k'ϴ6Z[3ZʧX﹵¨Σ鿳mO;594W"Šڰףެ㵠ʾjqצݳݸĝԸ:ʦ֡۶ޭฎj6*3nֺGF屝.*\Ŷ ڢݢĵ'x^&?Z˰ː9-{ů ϷΪK( #2Go~f!ۣ؟ȶ¼͡鸠թɫ(ڡŠ ɱumݞK;/&L|߮ *ΨԀt֝ ۿ̩&G'^ȸ̩ۖ9 DΙ lᶩЊGB3"+1Ebuɦ}ʪ ˖Ӣԛثij(ιܥã y|pȣhE)+AKV٦Ķ4{ȡ^vʑ ;9Ҳ Ӣ꾼ç ћ&VVǺl%T(ȷhF25?Vt㶒Ŷ驦ܷ꽛*㠹ؙëЧӟœӓnޖڧz\#&-:b%әOTz Ǫޜ ן٢ ۵ jf~9'ªд}G.! 9qŰæ°鳢Ӧ ֨3סĮI۞֩ΪR[ʹ)U[q|`r}没znͲ؋|߅칶:kįö ՟ߡ䒬&Ǔ8dϾ%򳂭^11E]u\ȲŤ˪Ȥޭ!ЌF=K4ˤɌߜשó}KuѰvy* &cBg娣pwɆr5םǭ§ ŰӃ*1ȂK j4ȓ~V@"5c{pǚΣҼpŨx庒ü h 聆˝ΫǗծw*ఞYkru֣ͼ䯫 ˫פNk2SƃLO8BWڪ鬡܃͉骖 V엲۞і]o+#뻧ԿϨܟê ʍʖ}oˍq+g;ߤnr{uﲕ°*|[ ӥݫHqRi 橰y7nH;%$LU"嶞鷥ТԵڟ˷😮ꚬԪٝϱs1ԾלONּμw%aۙͲq U񤢬ʅ3ϧ Y Z"֔ڱ0Ơ|VC9.CI~x峞vqᦓ éܴ쭥з $ѥӬݳV¡zթй)*߬줚^@Kԭϯɣ 3~Е͢(G_:39HYbdꬰŪֵȳ˥դ ܔħͷ͸ gץӰƽʛ岮ۥG|Ǯr[/S١ϝ cEęÐ"޵H!O²ˬȴy͊ Ҭߩ߰_ﭡϸУ߷ վɒؒ3nƝ𳦧ؚ ڼ翣³ >rS䕿紖ϻg'֝ΣjrrS`лz@Υ~H+ ͪƫرd Ǧ ʥ Ɯ}rد ߎʹ+ʸͺ˞ѳïʻʪɞ÷̯ Ɯ$Rlϗx{[νwLQm{ya٧mnȫ ϥѤ 񑪥ڿ녈 ì Ϡ MKʣŠઠ_JͲ ϝ뙚ƱΚިȲί ϳײ-@)DϏåãե{qhyxUoᝋ~ƤǶ6 ՟ݧ䞦ՙ뷏y䣰 ҧ ݛհ(lt{ ۣx ۮ # 㗼2̑Ϡձ ߥǻܲMk=ե̴ؒйmkiRԼri  r ϴʗjä Ų*~f⊌ў .ĺȞܚٙɚҭǬ'ᵦâʦܠ ѫңֱ&VʸΟǥҜ𘠩(ǵʺӬڡ؛ݡk ˶ ʛɲ'ߨɘЫ粹'ҽêX8૵ḛЫﯤ)Iتɱ ԡ˱֩ӭ㯤ڻz 4֝Р&ߥ۩ ׭ 'eӝطâΞçMԎםΡ Πң á%½縲䲽zǡԥm9ޘܞҫƴ ߝОӟոִTѭĪƨ쿭ض 墤 ԝѭ ӟ캽'ӿ٣طWl٠½Ϧդಟ㬠ϭ˕򒮮ʮ˙ǝ˵  ӷ ٛġ2Ϳñƚ-ܞ ȱż̷㴡§ٱ蘠 ̩֤ ͪ 0Dϡ焘֞ Ĩ Ϡ͹ΎⳠҢ֯ߤҵߤחz׬ƣˬ þΟ |-t>Uݝ #ٙʦקۧϵ ԝ ۰Ľ 縝ġ ߵٙʜɡ⮘ۗեŰҾzt M.NK #ɹ’ܚϩ좼٣ϚЪpצ ܿ͟ߝϸ Ǯ̦՝ʮ㱢y S 폆֢T,ڣ ۢ 飄 ¥©̻+OܜОԱjz%ܠųפѧҴA*: Ь޾ϩ}ư { ţԽ즲Уۡ͟᭪ѹ ضӷλܰԞ튗 ͽїܛӼ ќҺ a,I< ɠȳ« ϧȯˆȢȻȦ奺џ؟تٱŬ˺ҹΙ ͘Ȱ ڥ)봦Ѹ빝٘*c)#Ɍ Ϝɚ Ԩɨ#ٱϼǷǨ '֝뵱콦 Ѵ㡨ݡ촢ɩ񡛴ɺޛ0涴͞Ѱؠ⦥  Ҳ Š龡۟츻̿Ϡ¦ԡݵ ɠ խĭΡũ՜ ꩩٯ7$整׬کP˵̣  ՞͟&⢫ڽٴ įУ鬶͹ᮍᣈ 䥧Ҹt Ŵޜ ٝ7#֬åԞјھʠӢѺ_ ʞر ʸ %ڢϤ٬ثĘʹܠذ'Jϰ͔ɕf«Ϸӹ7ť£”ٞ+䙥ݝx׸蝼 ԷǾҾ󦸬ݡ͛ ̛ئ*تЪ㜴ә۟ʐֲ7êѿڐ՝ѡ̱*ÛӝܿQԱ׿Ϭch򻵥 | ɗ Ͳ Ũʜij7βƹ׵㧯޷ݕߞ іԜ ɸ%˺ͨݞ͒ ޫV鴰Ǘ ϧ ưf8՞鹘Ȭݶ7ܲˤĎ鯡ߣ 㨠 ڥ` ʿ%ɠݸ唣Þ Ĥ㻡 ޖڢ ʢ|7~ǘ͸ޟfƻٛŧޖŭК㝹தJ 쯢ૣ奫lXסӾѾ 横 ɞ 㪵֣Ƶ䷴"I'KuЧ㡼㧫 Ϯ̥̓ʥDZјo,Ρ ⵜ.۰ݾǝ榩ʿ ⟼ԕϱZ6& ӫذ° ȡݠûιحקϵή ѹ̨ұӬд  ¾ Ľ ڦ˷ٟ 模 ѫС  Ƨݶ]ا¸ ȻޖȮĦàԤδ&Π[̼ 繛ןƲؔ©Ξç Įªڥʱ֥䲰Фߜԗʗ޶О ְ֥7? ܥŸﶛϜۛեĜ魭" Ǜ֡䶧ɽ ʾ߰ ըݨۑ̸ۣѱ۟ɶ åۤ ̛ ɭѤðl`ȷ ſ|sx}hqfMHdjkgpgwwes~{wkqk{xgb^Stui|~z|sxv|v~zv|uke][V||ihp|[X|{eOYQ=LmPVezgR?GUMVs}XUfr}nr{oggko*ey̫tތW_xn߇pȒq ֤guLjr]| oitkW ǷhُӪ򑈅~hkb{lld뺅nixzzjjxOݒd^ggu{삀m{hoȲsq͚pouڠoкfYn "nNnamh~{*1dxZwh qDhnm㹣v{{oq]]pocl -mvttxwnpni e ظ|yls_lϧ^ƣeĢ~trGk鎰 a_T x[Xe >lСodhwnz^z~_Ӂn~~birpifm(&iucint۠pimgwtbimj}cٿ񴂛H|{n񍼴z쪑wc Y~|wh kln>f T}lpnMqnzpakyccy؇hgtu怀l+j_s_UZvӼI+ۻs~u؎a}euxҴl:-otj_­v Džp}\ 衔idjvty zqmmxyݗtr_kpRȂG²"ƷumֿYhvsՖjso $`mE`gna}yyxj k jjth쐀1zzf }wZ cSp\t|iġvot{Ȁb/Ǩ?ôjԻѨUSOITa |{{ig8YCStpkʆ q hg}owւlynZ zZcWmPk vwxhؚrk}ir BF;gǪ rXwJX g]ʯ@,.C_ͪi ik>hw r jyeyzsЪd ru^pqrpm]Ʊ润#n憐M^B#ߨcywyAq]dkdckV~e ceiq |lZuk{vkćbr tϰ𿛔mə~qruvoqii|Xl{ ~٠î籡ʲzuioz2Ff =c{v*{v>Wl cmgd䖫n);zُZrt/fmoՑup˃t sʀe𴘂|kٯ`~izr_nxwؓ`di2$om)'a Ͻ绳࿧|zmBbBVibtPK~uwta_VnkrqxnO ƞN 7 j ehɛ~lvg~ j{$f~soV `gi:cyoa^(רtxtDVWԻmX ~ݫ^tX>4þh_{ pyr y_zbtd\ޤwiyhjvg^SPzfj #᫲k~q:Py|mVT} wnY* hk¿˅ temk tmkeorUͭݡlrVjh{ڜ͝ھn{wrvaSKcQ:u|sxPmswIрiEr \QMRUPmqʅmm a{i۰jþp\S  r|rI?b>IzVRqyfs}~G*NƲzesokςl Țakp゚kfFdʩàiƢ ψɲyYokwf Y ޝruD ¶!l}{jXffn9NCȱF^Ӕha©vyz? ]l} ѧwxv|qwx_~h ߷ƢnO[mwΡGɮqf5sdk ٳ2򋁅{UWu^d<Z}ל~re{ܻxyvRk y i亢hru|q} UvĖkfKy 韕Jkwb^j_ \~~{mpe}[LLnsqzpF@dQS&j}^sͧ`eܟkvPwPv\ei b \c|jmS kwȐ~l^Qe æjfٌarwv| ϰjk|@vGk嵿(}%mBftyiilgnƣπmbRbb{ ?sr qyi dw{nuКg|KcX en~gxˡ j oT߲|+ nH]zvל%qgf`lu}ܔc[kogy|e|MPgydofioϛphs\̀ϗgtRPSѼ䬝߻zupڰnO ʥ|ئcp߲ꭀ-,EFv tc ڜgt둬ljf}tdvdihwɠr|rcmrwvųi2McPS^iC}];HZZVyѫ̳tenpAtuﴯv[ |zϜwe_`Wjl Uuhskޒcwkƨ~vﵗa2f]zWꯁnqfb짚筗f_mֻvu`e ˗ktMoyZ 썮 t}dt~ˆ ^u~"W˓|sǥqpa&mtwSM_hnKl`Т]Q㳣̮fȀ}kԝyޝb|wljxٜq|zɠGLz<,קALypo]zqvgy=t`jЪpw}lluӃ!k־,yipK|ؚSѝi}g ˈy\oYxhuJoxvގc aɠNj߲{«bpUƋ7vzfl h ig~-mzz{@esy{omyJP?I{ լ}ny~atv `{\hkwortd|[[{} X}~ulސpdҗ j]^z֤y~ϻ lL[ rÂywbosAs|Zyrpqv}cГ&/G̏uխxrodf eiqlnhu{φTduuԐjyv}wgs܋g feکx̕{vuu ͦv„允qug„ |}~lkwPH`@Ƭ}mﴟ榝 ufh_w pmbphC}]pob?uлx ʂ}yܘLg̡8ɨrx}x`ntt~ ޓme~okyyWMFjjQ[nퟀtFlң! _pڢm| d~le{Ub0|c\^pAx ߰x ⦘| :ʏǭZ{}{}we{ls gmryɖ z:2yTTVqtAj㣙bv쩝ާ{׵Pm hijfZWYgX0:Eb`MO߻w#Ӯhnzmyjޯ qrt%h3*ˌ}{|. 2R񦇲~\ irhwȭ}Ǯ}﹢!vؾxq)e}|fzWXs{q|ħ(w7uϻcucj{xlrg ;f#{a}ym>,0djduױ}lu{yw vך ȹ೘ݝVkH1(ƻy39?:3Oy6*@ys n tknl"v`?qLXb_>ӵҤyrp]Ļ{&rdnv~vqot jO9ȁ|mp g j ⫀fxqx屟 w,D~4~7\)7@>+=Nr{t]vuv|f,|wD{@x9NjbEc_S` (/gunvp; ϺZrd0jq\Z]{ u{sL b˚kԧr瀻 ۯnp }sdnXԿ낽Ӯ"xhqwb9;N+?"PZMe\»¿ЦjT~ūci~oȠzs {c:g {_j0ZtvI}}fiQg lzy wZqdzj }v?hljcb pta]dmu䃓zʫ5"kh׵s{i~E[..N^@TTjn`vZkڶlavSA?~uזNekytsFj K_br㌓çgm`= br}sTzsilߣY u;dd bn|zpzؿf‡yxij_onyRqh/(6kfNyv1bdѨRRYTZFb{ݱ suu}Rcx։{G~aP`x]H 3 ly] gGs}Xx||igërf{~y cfykúsvmy&cٺY$@D1C)bvjn kxG]+`t[Yzx| aZ\n[`w\yytju'Ey_JCKVFJy\ܳ~ fkw4#sdko[NmwTo{yobmݕolWy{ҽrsngm^2h:+ >6AYiggmAbxc5 ZJʵ¬Wdqnela_3wm}}mlTOKDDFHHTMm\v`yU tpti|G;kxNL{sKN K]ty ~m _<%΃έok۶Ƹdmנ[ەd}dIڸh[8C1Ye}r~s$.{ovLFh@A߳ mf{q嘩룗?Rfaksx\ p}kHto^viƁcf}yz{tݵ%zv|8R}ujJN wǠ{re} j}z 򊄀YgDkTzXx45PKRcb\d̽n_PTZQPٶwrzc[v}뚹{)Zrgwo$ \r~ٔK Slm萄uNyc Yidg gb2zhhy|uosjׅy_Zr_u=󿫦u{xy|rQ?726@DH]vL@~{z[?M~]׮$kkպшKTXG>6boBx‰ynY^m-Ywi.@D*ggx~Un{ruqbbINNŕxAUy~~{:V{|xw"Wѱ_Xgm֤nmh ihs䬣jQcs sffg :b\iȁ?nEpyyNjr»pc3gj3FzNy1eI}dCXRh٪vqXzzu|M̸z0`b쉅x_qܗjɩlɓn,JfvӜޡl|w~v̰֊r} mzf,K;}dدq ǡeiu}ڲT><=N1ar~rjh#k|JCqثp{vvrys}j)K˦niimp] pz ޖ zc{fҼu}ooݢqh~r Ϳqo܋~ d҉_fdqUNjzt|R)_{Xvڦqr{jv7m:t j9զs|>ukΝ[b߹]|w|xaȧԢla{|=2hȼbӆyunæ򽆔}nՎj{!.|z~l{ъrajl~mr(`zz͞MhȂlhwh xxd~ 񽤦 e{vhhԉnq}yv}{ytrvsВo sz{g{jzuѮhmk釓ƒ_ }yt|rpǭvÚ rxtuھfưg תtxrvejhdcǀ||yvyꏟly"e`v|{쭷ahƔrolp}yc֟ѿ|i#%ձo⩝Ǡm۝kr ƥބhh|x|ao%Lyֵlyφtstc͘mwy k$~gOxx|n&zယ͐˶h~ŜekˤerxS){>7lDžf  ٸh|Nlg1ƥΨ~n4L{nv คdw&j~{欸fb_sgmx0a鳤}epI5/~y{~}ranX|{Z<o\|w뗿쓴p BBBJfmy\P v{{ꃃxvqltpԗn.k䯵zn}oנíxvw } g kϣbܤk~rV~Mpgʹp0dCBn拾 tгm[ Šm}~xveףV{׷skwy~ twp ܺ eɲs" cdtᇡ sq ]kq @ׯxhg!׌sʞ;75vݻÇ>ytq(ees0ަ[izvlq| j}`zK] tfpysr vΣ{ߨwo;mwjgo px+lkmT`XodH_juip(^{hiKaѧ{Аals kԺfM`oަ:qepĽfiќkjo({gp ʹ]}k򺬱al~wtxwwny~ jxglo[byѾxfˆv}zew͉Stg)%tš~ mfyiʆEC5ania%teNFؖɇ̍jxh E vJdo~ kl bĚ\ܺi ?W bs~uorlW XqkuZJsӸwzn ^伝y-[ԳsySuvq gkfpur z (H0dtbPcCIk"ȳtI^nlcDlmg|NȖ>/rie^R] Mxug\l6knƅl`t |qx^yc$|e m|!ۤm׮9DD0{=Pwt c\YZʢ ;m)O{j[ bbt g&ׇ cי[so akrq_;P Ttpw_} ydr1G vu\t}{ow}pdƗ'\bv|B0ifd}zUzĀf_K3_a{ոw rxxv [k{ym-^Οjudqԕ~f{{uuòz}fѦnmbkJ~ƶsLl[fk뼠 cj|mlm w jMucpxvɏ`ETQox] tМvo +rÓoxvtcrwccw o^vЀjxﵸڧyh7 o{Zl~һqh챓 (w}wC[op ͱÒs{fvzx{A}oz~7pQfnrv`*htcyz{ҦAN"g̤k{-w wS?Wdso ~ׯo@a1 {Ρk PLJɈ ~|n\m{s`@7c/ɣƪxUgmjlf hۦכk&SB8_c{Cw kwwmNru^pnuرnsEt8YcO ]U! nƮ{icƂv݁ N:k$q{ir7dqtxb̾񮖞zk "*ԛble}xռɩwkq_RaW_ owm)a1>=ĜtaxkȊ|Bfgv||ӹ f]Ó ]uno|ﶿmsV_U {uryv:`w pqؑuzdՏK _顇}+.lςPq {jԓu FnsI{i~!znz=lᣆ u~yio c^nbpg Tjr] G_jלЁtŠ~^Jl jyy~ k\h"l#LIx[,Ir_~օga{Arb i ^nmQ4I.fcnb rc^zw vye߸{|_mσloڙGm ⫥pin|pdҚo':Tv䠆plab~!rtگrmwk@k|1whhb~?e_ ^`wg[X F?rtzϓgˆ|*6mrW`{vmքxqziln܁wʂ tԝ jgď|u\m_RI›zh̬y ̀qverrfoi p#~x{ʕlr_pzfwqރ~ jms}Ɵ Pdvҗ⻂tldt|}isנzl~ oժћo|lwwwwz{ ﲲd IVY{lS~ Ԯ׵Qy|wƉp\xvVƀ\lp(wޞkown `疄ggyb޽ѾUQ^gnknТogI{|وrﴡ xv c ~PQvb qj̨@ {_Db_bDnjpʉp,K؊kwq} yqeqĿ]TOWcah{Ҕ]|vj݀쬜j{z~겾 槚Ychs AݵD7Ğ +1ybg{oQGs}%f zmx}lE_}Πd}e qtyh|js~߱]LNX_`gorgj⪥4ȃtߪpj 7~Љ Dn y*f@E\D\qo酄u xy~ugfmVwlȐnz docvrԃUjGotЙx`[^dY:EUsjgh㞖"j`zc}~xqyђKhvyb h}-T2MCI ſl `{iXcv|P#}sXoab lًx Oae[ tzuЯe0C4%2K_|b~oX/Ex ϕͬix|x_{jtfȫNVm 6)RN7;ݦyU{]Nf@zUu|r| fŐZ{plʀsߖhuD00*4U:}_ypfQ-_}mro qjyZeJCSE}bC_nz2 [{k١~yz|~}{{tsy}zne轭pz~fi}d鿽flqvkgzejaJ2bxg}y{|)m es oc expZz_M@FUlժyhes{f ynÕz͊h¢o{jי޾ų}pnj߂oyܙ|wDAoƵĕ} wtpiS¾ytzili ai8kaTC)#VТ_iÅ@r t||ۧdݐ_tketo}` loο yco uvlIDͼw c"ojkje`ΪYi@Wl}ohuref`rV~]O:Rr cfr(-n іa.^ fql¿nki vp٣mytiswcoTԹQxj%dž՘x{X*q߷ Zs&uطܜuFJūk p妋tv捤׬UUmZTd|zx}e|#' vhMu\7퐯ٍyU ԩp~xU|ϧgWkbKc pз9lҠP)<[w~߃RVdIswsαvvox仧 lQ+0i ]]XMn~rHtނlcfZ[ rQͱz`_ qfqϧ.fw} iy{q殱o΄w q{+\9Uv}zuwLV^me|^.ϱsuii ǰ 􅖯uz:khŦ[Hoj 굲|sюu`w$wt\rίi͒dIWۼiپUurx z|{Bgtۛvv~{xyƺiXyjfux]峦5yjritnanj_ 'srqmUTlu^ޯjþdhŃn}ޏk{wtykna rˈiɐchvqa;tgkຜ{wt{wswe\fzlԅeq䱰Jv kYjhk ~}$wqZob}avPx :mN߾ege nnmpi㠓񔎑k܎iiww{z(lzhtjlϴvhEx{` ص~ryxvѤٿfdSB ugwtp&䊁~eumgyrxmd^ jkύy\^dXk]qYT*ɦ㕫to[𑐑ma{m(cprn}PVtyɼƥYT_׺alFy {s jt bH%wxsqoxvnЉ(rvŜ|оz\qTs_uqu|͞xsȎqߖc*i^zrhpkvY97ZxWi,10/wznit9| }Ъzdnhnq ʼnyyɬhqvkVRx~o'pq̣_JpczbPQ?o݈mtsǝb_4jhhfI}exwwʛ`! ol(w{̮)@jff89h9.qxSKפk‰~?l␌fzjS|أ$wkbX̪t ve|Wє^ /?FL;#mӬ{sne7pL` =K4i{wnIibv顇j;!w{l)Pzr}\2+*X~hM>l9IsA]uulθp􁎚f{_dt |op(u~^WD|~nԭl2׳pƄIۋ^a}k>/+"#^ vqt{rs㶎 V\jBǓݴ f#reҶkw zwlЍ{k<0pasy`7_*yq[x֓>Dt~b/w|C$uꙿnus湰ԃ{r |pyv[s+yvͲLzzDxYtZk|o}k:цlp{yg`zܾĭ V䖕nۤGcJfߜr~o+be2ߔu{ۼvhyyZwLr򱂃X%HV;>V|w{s(mtS+i'ߋDw[H|{m.bapo޻YӠt߻d2o rl|epzTd{Oez yryxSxSd}Ȃc܎rll~~u~sohng]MYRPcr1㽙Zuz~}dlosb!lxM6[b@xZa`%ChmӶ~c( qpn|huWk M wi||"Wąf[tÿٴdt~!׉g~jslTR(ex olwxoo`o$qum~fwʆs:{t|[Ewt+(q{r:7>Ji}mӓ ڼְu}xlZϸƾpzxtŷ}X<3*pd vf iu{ r|qhun}kыՆrEI_I\jxeuye߸ ȿȔwx"ȊmbюQ׶|Ơ`~yҹvtJn pukvo-`p̓of8l^e൏m͎`r􉏂 Z=Nzŋzestwra Ėwnٜoz Sw}ݳjznv׎{||vwz{poqrm40\v/}{v|}z0K+|v hnzsٓV[{beZ…{\ y Ӳt|i qn} {l|dܰj^v 9dA{ٶqu}aԭeqjyfwu dpyR9L|t2M{ux@d|xvy{wtpw{}x25N_MP{y{l=wNdvvy}PH x jwʸ Ɩ^pETy`Qxr|Śe}n>D s| h ̺eniss\Tgḏ ~e_` _woyt ts@-{~}jf~ttƗAUxŬ|ssjH,m ܾ tm bm %M. n_+q ~ ۲|̻ aVKohyトodp|Ȇy||=بstzwu{hqn6yܯye1TP@}|pmqv1jxEu  룘x fՄ}INpi \ijpcϤhp4ͯiHIg wE}oxbmhwnx ԟFp|onР Wvл:ʇvղ{u~x"V=ǝ˵Z/|%jf L))EoK }bhs~Komg}mwƷmew(Gomryfx ]Ա똊 PK.}wwrprХ]gx t߹{qڶ9sso뺏P^|t#ꫠl~p^ ūlڡ Пp~~ Fjqm`hvhizo{ jo~ zjwi| xcs uttV}gؖ~ gɐp|n ֲl|no謠t~յt~jo鬣Z MmLphuinՖyo+h|vurhnhg bf,őɆi{糠u} n~fta{ s讣 e kośe _w~hqqw8FR`LmG봳ڴs^vexwe}uc^ iUf궘ϠeyЏtڳjscq~{꧜ ہfZ㼧xujoxI ts풨闔ާc`h|?m6{k ՚req^ym沘{rttr}u l˚䒃z~ qxfGӄ~ȷ¥ mwbTJ#᫝uHwl)*axtlfz<g,{ kée ¯֝@}%\v{~sBkCu}[yϜ]Ev n{нliMopi)fԹªUnB@lw _zrѲqqm}spq va( ]xz vUWSt"ͬq}~d^ǥmզ я ps PrŲ iSdl{߯"m՘Wuaz`۾aq[Һk pφjqrhyc o ՙ~{`?}gwn͏tjlcjގhomaɔᦖni p׍rpxwz~~ojky;]իpyzldqo}tjdTIrՍpa˳򣂂fdʡ󽝦gqTq֭`ĭ[mmn{|ke_|yuwd ʛɹwkzy+Յyr w8 uT߽]ҿf㩤զ fwrV Ƅ}{e hdјdf|eͩnzgbi}h cyʼn&2TŸj쑛`t~jzrz ld uql|nwwߘ}slf~`,9}cɨpqm|wqcs l|rj{oȤ溥 ֕dɠjkks hzgkd px v~hd,>C,\ޫϔwxvpzyԂzg sڱ䣡⠡ ick{Ұhp`]rhdZ zj NgĂux\6_R isv{js}ub}|wδk\xpkv ̡ w~Ȍzd eij dؐm z[쌛 auq ޿˽~ e*k pp{D"϶aiy|jM{hu{z 诡О {k lw q|fy fۖt oy~9?Uj omyfwk yu9c zиpUظ~?up/ orvsc짚 쏕VVxs{iaݩ`~uxpᝒ>vmIUxlȋؠtәxq |axsj|x }$k\oxprRv>^^bnƪ ϫrrۮdgӢqȁgebfrxzFL^`qޥqtw{ziѠh|lۃTv{~{o l{X9u㙢ߩoظt yx sjjذnmqӼ_d~^rgFy|WqlvscHփyߟwqdunun/ ӿnѽqq^gsw껨 uzЗ`͖mix{|o^\ݱ~g덡mjwswtp`bdV grvfto{fU1quipmin}}者mwv|Zk 諢n̨}^|{ ~qbs|;VJ`zqnkmp ށMPzkׅtqkwqXc k멚lnuqᢣ[o_m exZ cjzkvjY e\VI[e[N{v|}Ϫ_' pd֞~h}e}ԆztP´|e!bycofzӏإ|o Κ|wcpp̂{fr"l[OTqyJs4skŇkpjނ}rگko{njrڑWƾΨth󭜟˹wU̜hekwT>.Ӵe`^W~~'duGtTJ~Uqiw }vo汿,[̻g̨q{blԐo]jyPnbKcZVoaP~mqX \cuj qxV$ԚahrݜeȎXn]ơey YihY_ml ۦ|e1X$5s|]rphine~UuVwG{t{WML~ˀq< m{nrzoTl魞嫢vz xnf iXovU Č|"1*Kumt| l eŠswuΰfҡjZvE|`kרJigU o.٬k yыc֪/o|Ącxəftyvuۡ O^rgکaGᆏeZ6&kqwyɽiiiUm> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 2 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2hvzheU?_cIG-&BJSR]J]fWP]qwxr^ghwu`ZK[g`{wmptexqnxtpyreoteb^l|qwkfch\_pkev}op\`Xootpzty~mXSR[DVo~r`^ffXAB8%1>&0=4)*@@BMa{wxnDERVguoqhttlbNY[E=3.;)xrkze|w\D=a`]Wimqxofp~|}jvt}xclfcwsxvwz~uhiw}{~qkgg]odk|j`fYESkAKTe[@DJGPQn|xHR_k{z|pgt|c__^RdulkxX~ymZG0\[\[jbotlYqtnildYec\^g]rulY_RZ[Hjjacpo}gsxs}vmxm`kojadconvd`]`Wd|vsxss~sdeljS_xxvweGVK>K[6;KaG:2MBCLiy|m}FQ_jzpy~~kjoru^VWQc * ϧ   !       볳    ! ۨ             ȳ    Ю ӵֳ ¯      ʺ    ª    Ь           ܧ   ʰ         %ʾ|~  ' ζ}y|sst}~{x~xqsл&¦uxy||xz|vvw~}y{}~zu " yt su~y|~ynnp||y}sstݦ 㮻ɾ *֫t|}|{xxcUHA./00(5789QRcixt "ټ ôҰxu wsWD) !"$%'()+,7@Sduw Ժ.  ƹ Զ x~tr&_E! !#$&'))+,.013357FYkr t ٩ G|yz~xwpH  "#%&()*+-.0134579:<=?J`tw    к IҔ{}~}g2  "$%&()*,-/0234679;<=?ABDEJXns   94p'  !"$%'()*,./123568:;<>?ACDEGIKLN]pt v ! $?}yvwv7  !#$&=>=EPBCD<3578:<<>@ACEFGIKMNOQSUdtv+#$y~|wwI ":Naw~xyy~riYI>@BDEFHJKMNPRSUWXZ]kr   %͂}syx* ?bxt{{{||weOGHJLNNPRTVWXZ\^`akyz  " ~x|c &Pt~|y||~|p_NOQRTVWY[\^`acefjqsr     M 'Qwx~ }y|v`UWWY[]_aacegijlmtutz     9 !>o{}{y(ӵ~x|tm^[]_abdfgijlnprstt|~  ӧ 粲Ҹʹ (x, "(Z{}zw~{ӯ}wttiabdfhjklnprsuwyw~z  #>л̲ 2|{zzu' !"$5myy|yy廂yuqghjkmoqssuwy{|~~~x  +.|y||u' !"$%>tz{yy {rqlmoqstvxy{|~zz   'y'0 !#$&'Fwx}z{ ъwrstvxz||~y{ ! |y}~> "#$&()Es|{ suxz|}y} -  su|zN "#%&()*Jvststt{}z    )wvx~e !"$%'()*,Fyvwxʳwx}    r&k! !#$&'))+,.>zts뭼rv"     w: !#$&')*+-.05u~ƻw}ߧ    sY "#%&()*+-.023dy׳׫s   t,o,$%'()*,-/0234Qzy~; t  ͭ wM%'()+,./12356?APwx{{~x   #ysr933578:<<>@ACEhss y~tu ݧ -zg4579:<=>@BDEFPt t|rsy    {y~M79;<=?ABDEGHJgw yw wvy    u}|q9;<=?ACDEGIJLPprr Ȅsqp* 繴uya<>@ACEEGIKMNO_ww {*ϙwy} % º{{J@BCEFHIKMNPQSirsttst ѵsx~   $~wBDEFHJLMNPRTUW}ws s yw        x~eEGIJLNOPRTVWYb{ xwx)؜z   z}QIKLNOQSUVWY[]my~~q ںu鳧   ̲'{{|KMNOQSUWXY[]_av{y}v !~ в. 'ynNPRSUWXZ\]_abdyz|yu ߑ!  "~bRTVWXZ\^`abdfk{{s  $  [VWY[]^`aceghjp~}yu      0  "|{{yWY[]_abcegijlnuxyyt /  )ﺷ "{{|t[]_abdfhijlnprux~~v !I ->ޯ{o`abdfhjkmnprsu{}r ' -$(=ߦz{ocefhjkmoqstuwy~  v y{} ٲ ttvl|}yqݳ ݫDǻ¾Ѽӵٶ'㰨 s ے{w;}}÷=$ƽAĮ)ߦrsܖ yntz%t  о rsݑ yyspϺ=<;:976CzznxurԹ  Ҳԯ .uy{I?>=<;:876433@zxpvoêz#Ȼ  ų ѫ*{~k<<;987543310/8pwovszrop|_k:    )x}O986543210/.-+/Yxo~{oxo~mB#!r"˴   z?543210/-,+*))(2]ur|o{y}a6G ߾  ~p721/.-,+*))('&%$(:MV]UC):  ƹ %ypoe3.-,+*)('&%$##"! S   %nx}p0*))('&%$#"!!  lu~浻 { o9('&%$#"! dyqq  |yB%$#"!  l{z~r ͱ   h-! ;uulln Ѹ   [+?ct|lu{  $  Z;-Srpyxmy ĺ   yaD;/23EMfy}n{yo   ˢ|wyuspu % ˢ~qtw p Ȧ ԣu~{ox  Ұ!ø '  ''Ů)Ը$ '̺   'ĭ      Ҷ     巾    Ѷμ "     !    è   򽵺    ȵ    $ɴ# #        ݹ#     ޹#ӯ   $&  ܵ  *        8   $ʮ   ͵ &  Ź     Ư&          *Ǧ  Ҧ 멮 צ-ީο 骼߯ת ֿ*㺦  ӿ ׾˩ۨ   ȶ ӿ ٮŽձ    ߽   ݯ뼵   ͦ    ū ٷϵϼ  ̴ش Ƚ ¯ 䩹   ˺Ǵż  îﲰ ŵ    º­  æ 㿼ȼ࿵ ʾ Ű پʨغٽݾ  ڦʸ 2ܯ   ֧;ó     Щ ޴ҳ ռ    ͯѵ¦ ¦ Ҷ䵾ɯڪ ˽ƻֽ  2ѫĹfimly~|  㱱 Ħ%ܦffd}~~}wolkjljca{ ~|}޿ػлв~}frq`h~}~}xwxnamx ~}}wno ʦл%ϱ} zgt{}~|{|ue~}topoo| ަμ ԩɾ Ӷ渓}~ trnau_P@8  ??W_~}~xo "ڸ Ʀ Ŧʿ}iG7?^qnon| ո   ǽ̹ by}|eF?bp u||~  Ͽ ƾƶkgk~~~wH>gp}~ͨ ܦк ޻ ӷpvx~m/-n} ˷̿뼦8   ~~o /m}    ̿$汮Ѧ xg]]p0'76u} ٬ iys__; 3Ck|bhhzgW7V} Ϸ  ͂vSgw  'W~bTmmmsroG/v~  ų пƾybs_y  ݚy~v^~ɦݺ ˺ ȷ  ˼}u_ qsz}?}~׹  Ѽ¼ ұ~?~mptp^~~ ӽ䳶  ~}}^}܀oon) ~}  տȼݧ  ݽưj}W} pbe|}~(   詾ܲ ȷͽznhz'N} qo/~}~: ȫ ŷ YxqXu}pF w}||%ظӶ ! ̼ WgG/~޿oonlO~~˿ий "ا>% º nmU|}} pox &}~7ƴ,ݾؼֱͻ  |~ow~} ݤop{C(u~Ⱥ; ɺ 'Ͽӯ Ѧ ֯ ϯݎdzG~~p{f'O~DƶǼý  ﱦۻԕiu:hz|}{ &}ʶ1æž  ٿ߿  ʮnlwXqgwЪ}}~/гų Ƶ ľ  |fPbksf}NgǷں̽خ   ˰  y,nm}}eGɿƺɻ !$ػ Ȭ ú }zue }/ ؽ̳Ͼ-GپǸ ֯ͻȹ qpnh9dgg}%ݽ-ȿڽ翳[ѿ¼ >ίʼ ߿mnpX/az{}'G"Ѻ >Ը)豨̨~l?Yx|>9j|=¼Ƽ$ſA̶˶)ȸߦ׻ղ ~jl>_}GNenw<Ʒźٻ˾+˸&ɹɿ ի Ѹ ߳ jm/g}^Wvlg̷5δþϹúȻ-̾ϹѮȭ Ű  o~j|]@| Ⱦ̴ #ҾѺF͸Ҿȶ׿ī  ¦߄ih{ ~f@ 鲭ػƺӼDصȿԽѺ!د ܎nl|@ ݾɸ˸տɽѷ ̵Ҕzg  }}@ڵ ü#) ҝ{g  }}}8ô豹̺ 屺 si 趬x}"(   im}yx~Ҧ }~A ߪ  ueghggm:̯  ղy'uz{sݳr5hmu $&˫ôʩ ?_~~ʯ㨷 {{@wpi&׿ Ż?^}}~nlA ֽ $ ~_^}|~`f`ӷɽ   }~gW}~tx`wݻߦη     |~ 4fhr `wj (˦  ~~ 3ori~`~h մ վؽ ȳ  |}/ #q`z |W#  ׯ ж άF _[d~~}A;ο٦ή ̹  j~e XVoײ}9P𺾾䷦ѻ ᩻޴  ʳ  nlj]au  Ш~# n~տ ܴӽ긬 cw'^~qe|}} }}   ׾ sgO?~| 笰ewo3~ʹ Ӵ׽ѽװҹesw$}|}창{xvYP||}Ӷ  ͼȷ Yɶte}'|~}ýxc6v}ѽ  ׾κ IJ $ιjlO^~}~岵u,} ȷ}gkB}||ַ| p Q|ȼ  yd,~ظ~Q w~!ɻ¾ȫsXu}}{hpf, 4}%鹴Ĺ  Ԫ~eF}Ƈ}^}|}~tl訳ڥqYW g}ܦؼ     mO~~g@!1Pv~~ǾԿeWiD '~   ߿ڦ "Ƶ~{ee}}^ 1_|||ua\ R} ۿ ˼ #ԦӬǪũ ~~{T/}}u8#f~ՓhtpE }}  տ # ~|~(m}}uAkkna R}}  ڿ   }w/}}updj^ }}} ӿ  ǾȯȾG^~~( hor}{& Nv}   հ¿ ̾~||}||N8@@1 h ~{sI (hs~|   еʼƾܨ vl^7~}}}u _}n2h~}y`  dg{~ ź  Ҷ÷Խ  ²ܭsdptIW}}Ou}f i}}p4 ^lq^gn~  $æ Y:-Sr~hqk_lź   y^?8-13AMfy|eqlaɿ̶ ݭ  ˢ{qvolhj ī ͯ  ˢ}hnriѻ  ¦ ɩ ʕyp~yetĿǴ Ա!̵θը   ͽ  '̿ 'ǯ)Φ!ӶӸ& 'æ$ھѺ ˦          繵    ȷξ(Ŀ  ƺ    ν    Ʀ ½Ĩ ͻ ̻ ޴% 򽵺иԷ    ȵ     $ɴ #;       ݹ һ & Ƴ  ޹װ    "ǿ&ī  ھʵؾ  ݵ  ! Ʀ𤋮 ٷ   ڽ  ۿ% ˦  ꫾8 (м  Ш$  ߷$ոɱڿ ͮæ     ӾͶ .  ԿŹ ̻˻   ¼ ư&     quickroute-linux-upstream-2.5/Graphics/AboutBoxLogo.png000066400000000000000000000230141446222606700233710ustar00rootroot00000000000000PNG  IHDR>a pHYs+ cHRMz%u0`:o_F%IDATx}{|Ust4 -:IsG?0ܑ:8:Χ#3|-xt r5! HI ת>uTuw!~K}9ETUEggg|#B"K/=\: :'\҄F `eZ=<  )): a}<&љjz\ g,qsTHrc&B9osArЗh | r5cSw`@  cz ^p,@8l7-^E\Upr`'HdBT& $NFQ=P.li3Ҹ|{ϩ@Ÿ` f%M$nDx(bHB&J>@DZԶ 6 ܴ'xϚp(DpjnFl? jL.03\dka/d d$L ^Oh3>;qy{%mN8k(\JIGRDT6ơO@eI*0\u&|^ 0k5ͫaÇQۺjsMpfDxrI _<<*-;zό'x d"p;Mx4oƩ|q=Bmo長i !A7/0E`cSÿF>8/d\҇q&N*Jlb$bE%UP:z *lح"D۰A<fW~ߓQ(#i96wLDn~V4 IKAІ7BELi_ xn ^ԍ8[-p/u>LuZUappV|jfI0ǷZB Sx> LVJ7r (цrsQk)Yhxl]x6a+sYX1 D^bO/rϯmmgPt9V1B@.A7ͳԹMK mIdZ?^?,6i+.fJ$L_Inr?3NAS-nLMfJg <}n4%l](ky!䭱8rj-T&BaXuA2Ȁ~ZOl\hw)/~:7Sܠ3S[ْvEA;F$H,߆DH%iQۥ~HnO8Vq%_uGϦ-,l `0.h7cN]9rnf]7@nH@"A mSck$%HQ!PA>(`Q}{Ld6~w!(ai^x}l~mޙ #dтifm9C_@jxxQj;OevrHld-X6vq6Ï&aA5Mw@Ħu-B  &̲u@NU:zݱ0CגLl9/gEqfk(I3ji &c s߅RNl$W M^)Kaȣ~},4ϣo3/p*ѥR5x *LA)2:x/W{?d3 $NJZ缱`%ՉgshgW+]E(>GW(aS@:'Wज़qn}faY.0ݩh^K&jig6̯0|hWb7f=(9`7[,¸5$~fah30Ngp,n} 8/1 E&6lxmļ_@:ZǪ"EKD9y!HbmcTKנ"pfr b\r [p[5]ؘO0 0a7dcCy)F+r@0Y/t G((]3AzmlU{4>')A4cQp1 ;PX2/fЂju61A?S(wb.L&ɱ@7SH93! RL([][:!M$㩮v !p. F _2[ $['q x^{&B$4FJ +SìzͲuȤ"|:4/pLϓѼ~Ę'MY^+골RwY:6?ouR$# v,3>ͫP PU$Bb)\1U.Mܐ:d݇Y`0wTo d$։Cƥ iv! m X)):]D"ǛLii6؝٢yVsU,h Tm. $A%q)M#¸T `*T޼s+i}ڮ]~:q"~^a"CAHJA#Jfa Tc<b_8b" ̒600K .du~ئWbSivjҨƥL"5]()h: Ѐ`LTQ)aPa`J: p>V^!UM/;+a8(,ۦ0Nmgǚ(1 " nz'z f4pz#HWС$ &aw\C(2 T0NI#Y0.f=ap'}ͻڎlZ连U\ ?5]rxzB.3}JzQW8D.E7=~N8Y-a\ I" /fkQ)QIg avu}ؘ \cQ F[.=jZ,ZxӰq` /f"`Y[qy3 :!B 1k:aӇeh]fLKb%b)+SH2߿H^\qa4ߤzM`CqW ]ΩHϜ#|5;"o8i~t+.bD=N;k R_*a?PTߘ1f2)y9+ˋ6c<;t<7$c7 ] El]2_7bK,>C:O ٛ,S}Q Ol`2aB1Ż(ݦ`^W6>\fb4(fe'#Umı׹E؍;0Nʹ .[wiՆ/ &ot8Q E<kݟŊ e%Û=ĪwP ypҟ8C3~Z۞kZ^`4M?I0V _P-h05mȤw޷_\VY՘ƛ`ayg/t© JFpHL{ V8uB3ad̕J3' |Oa @0g S.C@UH軧`WgwA}* O ߨԍ^tѷrgeW+&T=KkM*h!9_js< U13EwWv 4{UXzx׺`ﮂ- Y`8 GwMR X:|v"NxDpj4L8=4k`oqf@lcK;vO2@T@)(%RNw?w) .WpEb7~3S3"JC?;w'omP}Jg6ߢNOws|jϴM;ϵ*"o GlLۜk%W<׋8F ]0qO4M(MP5DXGplZNq򁓌H2yt }0b| |`{Ziq̹" 2,j &/i* F m\E%7Tdd:)l]mwbF y[|+ V Wjj *?Vqi.Ge̜*50N4p* ͥr0P*54y9{vסjThbNWčMkPp4!:I[MH>M6EfB̘_G/P߫F-<|^EaR%wnq뻵b]ʼnXZqޫKogVCv x[ HĦ C=\ tiVܼU.E./W607x)'@s<*S`Ўŵ9gl+s)`O6y𗮑z-7 tӼE(F~X\>wN%T*RQ`eåuOPù}՚9'Ƥh5] $5]S˸nT&|V׷zՕŒ3Ur"K-<3`$2õ0uK4zup ʴq}8 %jMf=?p2Q o>Eꏌy ү-xY>_P>+7e mꈦ 5}`˵w 0mSU RMo4;+ۃwl vL%ikU]EP;]%-J%<^Ƶ,[7qR؝dw06A U]#$u{xh3Aů[*DBH5DvBkOo"I/–2;I3UM'hxhUKܨ QB!&:–N=iKh/.y0N!AU .jldg<`N.]捤XI+bO3iڄ5&xZP(fu  [T<Ӳ.AP5z#hl|s MߌzMcfT(DԙghU7A{Ԟp%~s #T[.Um1;?+gڽi ,K+hƩuYo^%(g:i='||4?kmݾZ']#3ljƙMVjL8GW`-1(:ݻtlN{(DYEi y? ﷶZ-pJ m j'vg[?]oğXr]pJ9t} v[%8RHv.~ѫӄZAѽs z3z3z33\'7zIENDB`quickroute-linux-upstream-2.5/Graphics/AdjustRoute.png000066400000000000000000000057061446222606700233060ustar00rootroot00000000000000PNG  IHDR szz pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx D){.2CEGŜd3#IXL:Ȁvb7G;!law@h>I[Ўoo%RJR Ti,>Wh=pXq7V T@ ɈƹAs8$3#V(L^pK]Z5TQ#X9pOQF+d42N]F7AP܆lp9Fv- $/ |ACKIENDB`quickroute-linux-upstream-2.5/Graphics/AlphaAdjustment.png000066400000000000000000000054631446222606700241210ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F^IDATxܓ @Ccq#wr g~Th//(1jQUIaD$/"ɛ`CSU Θk`J3IENDB`quickroute-linux-upstream-2.5/Graphics/AutoAdjustColorRangeInterval.png000066400000000000000000000056261446222606700266020ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤA 0EkAuW^Nj\CWp chÇ LfdfH233I5uIcda@,b9,h5&^Um!Tp9G}h x+taiZ[{`Nhdr:$pJgr˜63~NLe’m,q$nAIENDB`quickroute-linux-upstream-2.5/Graphics/BottomPanelVisible.png000066400000000000000000000062161446222606700245740ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx̓Kka&216m6Z Rta.eQ_ n]ŅqҢm j\J;d.ڕ f9a'0fKxyIBot4[/tPaзfpKg{'t{P0`k$Q^< W&|;{! Rue& ·_^3peՉ ЋUGS6y{4QJK# _qѲ d}#hFe78x ~EĐπ:ث̑hn?'p!˜vc bf $`n Ӌ8xzVuD'*~Ϳ_İslCIENDB`quickroute-linux-upstream-2.5/Graphics/CircleTimeRadius.png000066400000000000000000000060741446222606700242240ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FgIDATxڌӱKQ߭@i ]Oh  rNO%BCpr)rԥA?Eh,@C۫e s97AU`kX*3H%Lb{_.-fKFwc3gx> application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2010-01-02T23:42:46+01:00 2010-01-03T16:31:49+01:00 2010-01-03T16:31:49+01:00 uuid:44ABF7F3F0F7DE11A4CDBDD354E59DBF uuid:1AE2512BF3F7DE11A4CDBDD354E59DBF 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;AF00AC99E4DC7BDF74732A480550A5B7 16 16 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;26EC271C894309D0BBA2E3379EE65237 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM 8BIM08BIM-8BIM@@8BIM8BIMI Untitled-8nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM 0JFIFHH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?[A S ]^m~=29>%C[sD1Wv58j.ss־{{nsnwr/DׯͪՏ?KU.Zӿ>أoɟ3> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading .01 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 80 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 .49805 .49805 1.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.00002 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (Arial-Black) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (Arial-Black) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniR8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@2@* 22228BIMnorm$<(r8BIMTySh#X?L8?L8@'3%U@.iXS2TxLrTxt TEXTr textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (r ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 14.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 14.4 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 80 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 .49805 .49805 1.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.00002 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (TimesNewRomanPS-BoldMT) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (TimesNewRomanPS-BoldMT) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMlunir8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@ ,l@dd 8BIMnorm (Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@@ B„*%佲q "Gk [Dޡ&` 3ɖ !81p:& )NU)$:et{W6T~[V 1|; 5X u _g#b+shk hn qP!!?`P ``P @ 0@@` @ @@@@@@MMMMMM8BIMPatt8BIMTxt2K /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (TimesNewRomanPS-BoldMT) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (Arial-Black) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 3 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (r ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 1 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 14.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 14.4 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 80 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 .49805 .49805 1.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst false /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.00002 /MiterLimit 4.00006 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 1 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 1 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -11.64096 /SelectionDescent 4.29297 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -11.64096 0.0 4.29297 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -2.98047 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -11.64096 7.08094 4.29297 ] /Glyphs [ 85 3 ] /GlyphAdjustments << /Data [ << /BackFixed 1.12 >> ] /RunLengths [ 2 ] >> /VisualBounds [ -2.98047 -11.64096 4.10047 4.29297 ] /RenderedBounds [ -2.98047 -11.64096 4.10047 4.29297 ] /Invalidation [ -2.98047 -11.64096 10.82041 4.29297 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -11.64096 /SelectionDescent 4.29297 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> << /Model << /Text (R ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 1 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading .01 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 80 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 .49805 .49805 1.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst false /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.00002 /MiterLimit 4.00006 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -10.29584 /SelectionDescent 3.67969 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -10.29584 0.0 3.67969 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -4.66699 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -10.29584 10.29398 3.67969 ] /Glyphs [ 53 3 ] /GlyphAdjustments << /Data [ << /BackFixed .96 >> ] /RunLengths [ 2 ] >> /VisualBounds [ -4.66699 -10.29584 5.62699 3.67969 ] /RenderedBounds [ -4.66699 -10.29584 5.62699 3.67969 ] /Invalidation [ -4.66699 -10.29584 11.38694 3.67969 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -10.29584 /SelectionDescent 3.67969 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2O????/oSVrvFO{\FMVF?xJ,F!SmQ F\njF H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ !EߠuX-FFdO`#߃a j$ $FM/3pAxx +ֵ\e-kY-K;03SEvC U͚$LzKYHeJɺIͺ{;̴RY`}aB"IENDB`quickroute-linux-upstream-2.5/Graphics/ColorRangeInterval2.png000066400000000000000000000056101446222606700246510ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ !EߠuXzrl1ٓ% lX²~2Ʉy!&SB佷GNG xB+ֵ\ .e5Y-JK;qfX[y3qnDJ$afʄZZZGr5VrHJ&ݒyf::- xd`0IENDB`quickroute-linux-upstream-2.5/Graphics/Cursors.psd000066400000000000000000000625201446222606700224740ustar00rootroot000000000000008BPS R8BIM%8BIM$9 application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2008-06-06T16:46:03+02:00 2008-06-06T17:15:14+02:00 2008-06-06T17:15:14+02:00 uuid:A99F1668D733DD11821EA9DE9EBDB7B9 uuid:6CB91E19DB33DD11821EA9DE9EBDB7B9 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;8C8FDCDD0A0E50094FAEF70641BFFEDF 32 32 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;D66B5D415A3A915D6B06C0431953E54A 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMC Cursors nullboundsObjcRct1Top longLeftlongBtomlong Rghtlong slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong Rghtlong urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM ; ` JFIFHH Adobe_CMAdobed             "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?~]oInۅ,y.v+Un{{Jұf?-wLmX Sf}X;sgd힭Tj^kSǿ[r].ŮTgjOL_C)Ir}eY6Εc}69 ;^n{]]}?X3k7bu g]ѺVK"21 XeV}Ti*\\Lt|VOKwOۊ}hMۅk(n=MgfOm'~ΠugOp^C1jȣҡFF\t $t0/r)P6.=#~LfjrzU{ck:7ac75û[g`xV]C]싨mן]Sk܊/R]UM ֵX1ֱIO8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2008:06:06 17:15:14  &(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong_PFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong_PLCntlong8BIMRoll8BIMmfri ,  8BIMnorm(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp$ uttt8BIMnorm (Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@@ 8BIMnorm(Layer 38BIMluniLayer 38BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@$             8BIMPatt8BIMFMsk 2       quickroute-linux-upstream-2.5/Graphics/Cut.png000066400000000000000000000003251446222606700215600ustar00rootroot00000000000000PNG  IHDR(-StEXtSoftwareAdobe ImageReadyqe< PLTE~OtRNS ASIDATxTY!Bz2A_${*4*hHg2GC܃sa`t ݢgn`zG IENDB`quickroute-linux-upstream-2.5/Graphics/Donate.png000066400000000000000000000102711446222606700222400ustar00rootroot00000000000000PNG  IHDR9{ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxԖlW?}mKAan% D\D2uK&bD35?lQg ia738:E$nR (x/cFIN9<ϯL֦% %/Pf*U$V_1TLNY0}}l\f2Y bAq1͒HpYM.AfM^-G1yo(?d6B\(9^:MA[a4]b/%̙,+"Gy7#{%³]o_ľCôEyf^IL)Jg_ig۝7,64_ 3 @ KBXୁ4VT{3sDa$x{p9/S'WExB?b4+i#r#avʳR]i=Q*/'i_P- {X4HY>/cr& Yt'R?y=6@{<\ѥ&co2M9"UT,GJyE}&s2CL_@N# Ja RzH& V5fZ)\9/8(IĘN uQcÒ2Cߩ:$^d1^ޙ3YIth"CQZ[+/px0§n)c %sY)'0Ln镞~җ=TDٞguS GiCF/5}iPIENDB`quickroute-linux-upstream-2.5/Graphics/Error.png000066400000000000000000000050601446222606700221170ustar00rootroot00000000000000PNG  IHDR szz IDATXWi\UνuK2L3%q!(,Xl!(4R*RDAM(%"DcKfzw9=2*S_}[;$"E[,?`hb_z͚ 's|PZw"Hc)|'cUwl%D/ii}nCˉ5u m1TDBa|ldwC=;"?K \Yn9'ⅻџ{mƉk:?9 * (@"rȑ;~u{\j_4#KxƵs^vz)!""@ f&O /"=tܔ\~#+իb3uWӫ &AJRZRTDXXسx؉P6)ݿٻǾs=}fuD7ɫWŚ+꿶5wH*ХIV ))"( D"K.ozaUU3N'?6_qS?vz71,P,P" '*HT/@@@3#FZy.oݵs'(uI˖};He 31Sd@ѡL f(B3__|U񑑑ƺc#csTSY"  f+BK0+I@y!a1f_yZOD*9du̝mjx]M#?%09uaǥnx=V]Rhnjc0_;b-5"LBeS#NX}"9 y'>+~CCCCeŒY\pQH*)ƀ "XaP>]yx"@]wåM3?Sr}t_-3 `YHzG0i@hjD<WBX>'BXqb>0=!{,=Xj,ĖA"?ч~HMhĪ=q\ <qa-VV7ŕ:7w^>҂6ͨbkւX1SH=L&( i3b6e\Tұ*5!o41dS*Td`GGaaȷ3Ph5 1L< A> o 5 1Sj0UkDdww7,TB<ˁ=#!:& @))x@ `{Yx@uwwC sp(q(7XirZ @); hQM` \>EpQ|tdXc<{M`D{zW+K6Qzo}.\Ep,l6R&!%e tvvB5L]gߒكm7_DCL+q-MՂ;n\;8aكRTdeATWW5s"!BnP+; {yu h&O;1Q |~sWjEMC{ɼF KNQͧ,BeuM#{x<=X|kr9_J_ x"#V: JiEgr?p59o?]+E,o}wޗsO{AHm &)x {Tu-3<644 |SG[(8PvJ/l+`")3' H| \&ļ0Lc_DDϻ`dLDoYtݳO4OK䥡RiRcVMZ2@XDyaA5ldd4i2$~&On+̰a'7qEPrY<:y[jj\6+[\e7;z #L/$" Ma$HٜB+ET[+=:t]8syMl۶nJ眶fߏu?exJiȒ"`a(Kp*qes̮ _Zpag}o9[^vmy&P : &x/$8qDB H^KFOr},Ho޼/]uF޵ƺPj&3'5:kDR1\vOb"/G_/dIuVnkkz];wW]L UVj53 Kfh$ Eeܰ^2nذA3-FQ7c"TQ`vs<8ef H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ;kUA\!ml6hemlmV6X,5 6Z- 1D{/7/ɆZ3l'TV2$qX7i{UZKUX5UsfڝL;LLknK|d M^A5L"WpA6--.(vZR/@a[MIALt A;gq鼣TG1(S.} yr}K!Oɼ2󕹯xm$?%abZ!%rb o+ȇ"z63|Y[|79@t`&>_gI$b8ZKwP _ um;?7~WiI! 9IENDB`quickroute-linux-upstream-2.5/Graphics/GoogleEarthIcon.png000066400000000000000000000070651446222606700240460ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F`IDATxlKlTe{?syv>lZ҂G")VCnE\b l4jh@JL[a&J󞹝@xV$9#;jqrAóJ^Ek3w^ P$Y<2ʱ?30<$3Ϸ?w6)VYEfiEU^_tX1,B <=vmz@<QQfv~DVVA+IrN5 PzoO+k)RPQePdt:w*B8b'BPfYE>?X[ fnHU⪲^5bv0#hV_2*>t3 AenDen"|HMɅ +lG-noځ$@( S0@v yf57ֈ[M*8^|7Yv6u0 X\ಫ ꤽ&$P+׊*,SaQ 0 Pdt73L-hllp}^|mG)UOM0X6ˬ5rAgCCsH;/|wS2b*bGc BNTfX$DK!Khg-p̢L4Wo iFV&[04 P & {ģ/Xw*sw,<)nYOdIdrєg'g<[+^ͶsC[Xkz~դmZ^#qmm/(%QpT9F^C0 $[ iIENDB`quickroute-linux-upstream-2.5/Graphics/Lap.png000066400000000000000000000056711446222606700215520ustar00rootroot00000000000000PNG  IHDR szz pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx D&EnlRO-"$$iL%B[i'!7q BG' tB#N;!h@>m4⋗ b۵Ɔ@8:|0np݆U9#շ&*8%$[ *Q{<1:[ *N7VaWm1[GwtX >kҶ|OIENDB`quickroute-linux-upstream-2.5/Graphics/LineWidth.png000066400000000000000000000057321446222606700227230ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxēN0NE CcdijMb(O@P ?C(8lgw6I$-Y\b(IbA{ 8"0 .)דI,{5Y<z®JלOVg/q<^;p7m:אȪxH$BgZ($m+^0ͬIGZH>& Y̦qoCF .i7~ nf IENDB`quickroute-linux-upstream-2.5/Graphics/LineWidth.psd000066400000000000000000000563321446222606700227270ustar00rootroot000000000000008BPSQ8BIM%8BIM$9 application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2010-01-02T23:55:35+01:00 2010-01-03T16:31:35+01:00 2010-01-03T16:31:35+01:00 uuid:330097EDF1F7DE11A4CDBDD354E59DBF uuid:17E2512BF3F7DE11A4CDBDD354E59DBF 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;DBC7D7B2A61C5DE7C92AAA4D641C4B6B 16 16 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;26EC271C894309D0BBA2E3379EE65237 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMI Untitled-9nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM 0JFIFHH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?qGBȡ,&Y[cMu6Fg{YGٿ\,\gRR}lE^;veߥzLXޅӾYm8{VX.kOU~?]fRȪM̱m\z;Ӣ'I.br NOr,r!D?8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2010:01:03 16:31:35&(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongn FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongn LCntlong8BIMRoll8BIMmfriP$'08BIMnorm(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpy`@ f llll8BIMnorm(Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp?   """OFFMMMMFF   'M[kyoq'M[kyviq 'M[kyq'I[q6Iq"5p#syy"8O\ky\kO\(O(  CtoswyuiYJ;)@=>CtoswyuiYJ<$?=>CtoswyuiZK;;=<>Cio>hi?[f6[9'J<ZJjZujyuxyZlsnrxnrsnCsC                8BIMPatt8BIMFMsk 2          DDDDDDDDDDDDDDooooooooooooooFFMMMMFFquickroute-linux-upstream-2.5/Graphics/LineWidth2.png000066400000000000000000000063551446222606700230070ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx|MKQ;33:/jXMA\hQ&U)F}HѺ/ТET !-H5_GG>3N8s*պq Hhi/wrW.5$&ʽ4Wt7k:!&Gz3 L̖<(jk2bo+rb 6lz@ ({Vrys,u$8XKI^HUU':yhtX?BK^[e}. WZ,eM]I&83@ ?MdnVmϑ񙸶eJ(1}r`s}[$Ĉȶ "YU嵞GtfGm0.}zEHFUef`XDU:qT.>+Fn2œT Э;_47^o-yLٝzk;9PejWUUtw@e7OXO]IENDB`quickroute-linux-upstream-2.5/Graphics/LineWidth3.png000066400000000000000000000056571446222606700230140ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڔ0 =iMKkś X ܙaͲ&+\7x-c!v9][5 E㸱2IT|KdH* 8%럥!uI-ȫ~rd,#oaiKJ?9ټG[78\ gUЅ0І|œ@X R $P9< {N,OIENDB`quickroute-linux-upstream-2.5/Graphics/MoveMap.png000066400000000000000000000055401446222606700223750ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڜ  Źdw{$fl.}ݱ ܝL$3cY \r0a۲II$ ?3:2tБT,f}A@ɺį`YQIƱd`7_ N-| &bAA_IENDB`quickroute-linux-upstream-2.5/Graphics/PublishMap.png000066400000000000000000000064351446222606700231010ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FHIDATxt;ka2;l{0!AD,bg%l, ډHm~I Qs1Mnvfg,$)N>k-yrrVc#r͎,(*J-|*ɳB'?ڭ/"gpsNd)gͅCAFr@7$ viJŎAx#=#DΥ <;RrjP6-.xua}eT=0Z' sE6O#K&٦r\N7$:h9Q*1q;#2B>n<eBkd h׺[s #ådGM]Y5AJăv*j//%RJGmLV HkJKRJa"P7BjĚ8فQ*]gٮdV,XBZ5Yڨelxwmnf3v h՛~ZS04(WD\ixxp9 .B^u2uZ\IENDB`quickroute-linux-upstream-2.5/Graphics/QuickRoute course logotype.psd000066400000000000000000153365671446222606700262600ustar00rootroot000000000000008BPSTY_8BIM%8BIM$9 application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2008-06-07T21:10:09+02:00 2008-06-08T08:57:17+02:00 2008-06-08T08:57:17+02:00 uuid:B8E8FB4FC534DD11B3BADDAA85DDE585 uuid:B61C128E2735DD11B3BADDAA85DDE585 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;BE69D602029E3842512D5F384B27A433 1625 596 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;DFB62438F813B4777156E77A8378C139 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMITY Untitled-2YTnullboundsObjcRct1Top longLeftlongBtomlongTRghtlongYslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongTRghtlongYurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM ;nJFIFHH Adobe_CMAdobed            ;" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?ݻKyl40'-oܢXm`.t[gi-[gPr8 e9~;!3ɱ1݆.YKCG\wD{o{Y?GncvOgnnйb 5&#Fsw;7C$ alw+j} 'W86nڿKwk}Gwŷf[$;vݾ;#Sn#sw1!)un`is\OrQШCOꇟub\/p.۷Ω7@WͧQ/?Gqc9oM,.l4q$<{/A@asvo+ZG=?Ϻc \<Z+XtM1VzY5gsݻ}}Fc完\cX ߥ؁pv澖-hqncs_v}ju\zcccN x>o >EM!ƑeH 2??z7=mO2'~o*r~fZ[pE-eKP>2ZK6r#1软x'mkѥNEV!x3S?JoWg!lmYh5] ֪o ew}..` :1$J:y[Ptv!׷ݹߝ[ݞ4Z?~l, 2aYߤhL.8 @oָp{Kdo*w k@ٖKY]+mN#OQLGv?.s2tnj]M524 \G}~ױׂuwKǤzn5Z[DilV斻ADokLl˜ָnTjemn#:ZS6o#`aog ?PM֠m_?8?u ^Ie=ߚwCsC@fj?wae~1ECHs61W)Df"JRb&&BٱE9moXkIPB9,-i--`KY[1BdZ۰kZw1Ș5}ϵRU#sñl'?r/}rY''0Vn[FvRZ> #RFAk_o 1&_klѢL gg}5Z$H!1ÿuyՙ`@b=@ 'q&8b?ΤP; o2kP?7:RakA0{mM?4ɨng_ /W veXRl_ xeQoz yݧͮ%"FZ݅-k\$np-n}S*_l[ϲR,VJS7_{\XZMo.}:=F)Z+f9@w~6]ww?U1W;GRlqæX8G /R6zkF t3;i2:n-IIMw$\:kb[S~]\{s RanW_Z'ov!Ajk&>ϻ^seS 4kM2 Hް<_2he!,.ihyp?wQac\4[qi]*`(~_HKIGl1|Rewr֍dE{gI\T#?0Wr_Rfׂ_K\ b[}e͖ 9wKc@c*9Q_IŖ=eehsin mYC^8Ȭ74Ios~?MCGz__HB>>5R~ض2H cc}rHRݎ{w+mzQ=oI8g? /8?X?8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2008:06:08 08:57:17YT&(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongB$FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongB$LCntlong8BIMRoll8BIMmfri,,hTY7h-8BIMnorm(Layer 48BIMluniLayer 48BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@sGT3> C{;y8BIMnorm(Layer 38BIMluniLayer 38BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp~ OɌ˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂˂JULK];9^\\  &nx_L8 rJMghxysQXjk^Z/34iy}y'-#),=kP:5K@If =D1qrf*hMBM%..9yfTUN025D3QYWmk_huMBQ}oQyMDS;:1K^ltUd2/R_G6Jh})0=?~z@]siV:S;QAd^}y~nalnBE>oq""yzzd +&,x"-&)4' $$/60577>(A>>   * " *)'%A587  )  2/5Mrrk\ROHHHE@9FE1;!  &@7`o\RV@WTLe^D>[LyopiAdhlo~tlYhdIuzEl}S0.*E]jmlmlmmljjiaWt "+58:;:99999999515678277155679223,+(&()&   roT˨{la\WUSPIE9$AFqb]XUSQJF=%gi~rlda^[SND'U\Ysn^ZVSLFG34 &ʷ'6 ,2 (.;0"&-88:) {{j`ZOJC>742%`\[uo_c;+@&̸ \@rXC 8f yd6hsncZSHC:5.+,$a[[hgY`8(@'̸%+3  9UC .Sz]ibfv{E Ѱmf_WPE?61)&'!`\[`_NW=98*?%?'̸]:2"% NAhE屄>Qu]8Q]֖`#u3 `Oj>Pc]ZTNC>5/%"!^\\|M ; ='θ7zh4 ۿLBM+JneYs:v|3;د'r(tj҇WxYsݰ&r.pI\ ]WYSMC?6/$! [\\wE#89'ϸ6-az A?NG@ݩ|HFAuu=3:Ԫ%wxz=ӫ%xרyV@VRVSMD@6/$ W\\q>QOHZ|$5 'ϹV:؛ ߨ{0j[HlK?۪} ޭ l4 {'ڦ w $|+uY jHԧx٫2PMKD@72,0$ T\\l7|BA9K0'й; RC ߩ.HkLA۫~ ߫L 'Q=[l_t9[z8M ^uھEI E:º+#M]]c,Z\Vh ('й9`y@2SD! BM 3`t$qhu>IT`v~vU@0&"K]]_+s{%'й6/( %?1,+7-(6 $0/(<% 8?%%?6 8.3>5 /?-5(06 4,Se`^]N& G^^T$622.+"! 'ϸ9 8    \^Y] 3#ƺ  3{{}||{yxutquz}|yxvtrp0M D@AB@B@AB3546      Ѧ  coxn+sojfJ?S|-aFDDaEBS$ntLJe}_GDEdFDEr=5rI@z?Wrlqs`H_Fc]>CAfIR[E9LpoCY 8/Dy<|AqJi|_sBhz>pTb`rR2S*ZKc~HeeM,oh}_Lc|^Ldx=|oT4Zu^t.E,nXlD3`SLUVYLW>NsqxJ` WFp*jozL_{`oG_x(]hd?Z)a[cjD]f5wog}_\d|_\dv>tqEatprnsp^kLX`iSOddWZH_o)r Y=yT]bKO4}ZLO8mT]a|_HBS*0_WazWePz;sQQ9nf|]Wb|]Wa`I>ogIDYtkxrys\AU9]=TI|_rra{`pu`rsL}vw+]GzruWqyjjvh~KxJz}[\\[o\]\aYCV*``kCMaa_c[;cg̻϶CNMNOEKNNNOBξؼɹvssYl~ww}B˺׽ٸ໶@|vpHַĻؽ 孋OZ[F} o`ޣ褒ߚ г_ffekyxxzoeggetzxieffhx,ysefgenzyx{lejnr ̩m@ۢƣrbĹ ئ¼ܰŻ߶Ԭ#"*)&* $*)*"#+"(} m̷DDh`9mmNhp`v{ajݱŸ͸߷ ޞݤ<ݱbhhgn~|tgebhp|kghgj$ygcbgs|ywnhlqw ƽײ˺¹l@߮޲ྜy*Fշ0٘ڲy\m ݝ֩ UY.-z?&iM,1,XW$^E} k罪c2cour_jqqǀ}➜]^s"ژŮ瞸qޞ ژژciihowNrkH\j[a@oKemrwʱk ֢xӧڦҗشz zXRT>l ͠ѸVrFlmd@~^` ^SخذPKN^aaSJV؜ٵ ׭i*ҾŮά<қjZ^|P ̮֞ף>|'P*0eoE}hṮ\%\mv]kurٴn ܃k gV&]"ӛMY~`ypןYtn蜂EzՊ̽igjӛ_Ղqrekkjp~~{LiYGHHMYz~}njkkm}<~xkcFNaQWRQSkotyxۯ绗 ʑ~orq֪(m ʠϸĊȀVtRlbkD@xjbi\׭ծYWXW V_ԛr}{qױէi*кʦ]>ϚO9IzQ Ͷӝ֠~A-U**jz}}gݷ[[qt}\krtlշ: Ԥu Պ~"Кҳ- LFVqlӝXYfcjZ8_E[#҃ȹv΅͒lj빇Ä߷üϚxz~~yikfYmzwsddkjj{~|jJiovq}o_cj[uu|Ѭ+mݖƟͼמý±lYoA@{c3Ż׬Ѭ`__PMM[_eКvʅvyӬužh Ǵ›ycPHLGǙů\v Ƽ˙ԙ@n)G,2*P}cհYG5YG4fZmJVמo&]dsr ]U"ǘȶ. fvޟKlZfo˚7UaoahJDOFx {ʠ[ņUh^dsd۱1DΚUXm Pyhixgcqhi||Qi(hoVZliixs\yX[km֢| ݘşNZA pO s9 @8cÿ׬ϫ`__PMM[_eϚfpҩڢe kI6ĻҸIяKZBr1.01-Q/f{}]ʧ˺[Rp[RpWfpx ³Sn+9 imsoMy/djjp7ǺҸ v::مxE6Gfݷʻ硙奾⵮ s8|]Əܚצ#Κ^zEyhiigy_Yphi|{Ei(hoMVlihxoPfޖhht|ϴ"V ܚşͷsaʿô pel0 @z?ugȾ²׬ϫYWXV!XV_Ϛw즢̓uxҧ^TŮƽa pPu @^̞-'uͬh΅"771"0:$#+=&&''&,,#)<}X8to8toT;Ԭ ROTˎ\# Zn/<ͬ~сsD) [׫Ȱ ͬiĔ4bڄٖqohӞŘe}u~tGyghhfxa[ogh|{Gh(gnNUkhfxpRkߛ`uTsnɇ:Nŷf3p ѼȷŖ~l+ @ʪ3ŒتƧRMP]``SLXǗ~nݧpr˞;[VY[Xk kVvs`PJ|ɡ|T]]_`^]``^]_`_`_^L}SVZVZPn `71a"M0R 4ɡ|ɞeh`^\[Pˡǥ ʣ_س]㴻GeYЖٿ ׸ľ<xysfggfuWQ~ylfgvyt΄ 敏֑ ԏڏƎB\, ̿.7+g077/m+7/l+74O,7+i/74N,77*˓ Y    /.W&/"a'//&g#/&f#/,H$/"c'/,G$//!྆~͕ х݋  ԅ瘈؋~0%(nzG[S(10$,21$c)1 0#"-212+!'2)" .2(h%1.$/1'"+2*"(2&""'2(h%10$,211'"$1)""/)"#%1.J&1&'"+211.$/1$#"*2$d).$")212."%020%-2.I&1&)22*"(1'"$011&%2.(11#Ô 'jCVؾ (1 0;P,1$c)1 04L,1+[q+cC-(h%/H?.01xW)fh*~s-(h%10;Q,02r2b=i5-J&1(0,v[-1/G>4c+$d&Ck*1-G6-4L-.I&103ze+*bl/01q6/0v'>m/1#пԙkᛟۺᮙ䡛۞ 蘞 ɝڞ ӗݗ/ j$Wc{}m(1 03{%1$c)1 'y0.8gUQ7/(h"=Z),It:gGU[((h%102}%/6wP+Q4N_3,J&1(+yTB/.<[,_Z'$d!hVH.1.wi~xn'.I&1,q_ZG1/5xP2-MRs)1#'䧫  ^   q jaCZ_9(1&{&1$c)1 ){,11,`A.(h%/,Z*1.:h/5UD&)[*(h%1&|&/4.B){(.J&1(+P,1/,\)$>A.$d"\Ǧf,11.9m'.I&1'qȧg*/36,RD01# ʟ ǞԚʟ֙ڣ Зݣ  ՜  ߟ̘ڀל jb? ҭ;(1*z&1$c)1 ,\w+*1$q/-9)(h%00Z*1&p1UE'c)0(h%1)|&100?z&9%D7/.J&1(-cq&+00[*&%1$d).5`@%1(S:hs(.I&1*uS9(00>|(3[*#  㺄  Ŀ U b`8Ƶ(1"u!2$c)1 0,[2JS+i,)K})(h%.(S'/C:j@ !n)1(h%1"w 18FB|'1.J&1(,VZBO+'T%6O+1$d&F08JT0O@(ܾ3,I&1#p7IP6F)/'ru~%#д |Ӑдٷ  ߷gڰ ߲TA<۴ l" (1 02`+$c)1 (a0`H-(h"<ִL%SCBL301(h%102a(=5G5J+1.J&1(*nY/ִDg'21$dppB5Ӥ{$&h(.I&1,orMpd6:/*v*L,#߹ Ɓϡn˿ żӾ¹ Ļ ˸~º <ԃVM](1>?:0$c)1 /@B-1428?D85E6,1(h$3A<@60/;E1-7F5,44011(h%1>?:009E1-6E6,35011.J&1 -?<+332@<@6521$d)1A@+1517=D<01431.I&10;@==,:@$z)9E1-119/6<.1#þ Ąqķzf ÿҾ Ϻſ¼ P}g^~(10//01$c)10//0101/0/011(h%1/1/010/01101(h%10//0110/010/011/1.J&1/1001/1001 $d)1//11/1/ 011011.I&1 0//01//1A200/010010/11#Ԫ ߠp^鯲Ӱ޷㲲Ƴ ߰cXީ xɰڳ 叕9iܰao^ߗ$Y$$_z$^{$!?$~[$!=$!#$$  jth¼F \]$LԇҤʦ  ~ਃá ᾦݠ D˿å ᨩ ꫪťˡcyFi𦧧: ֵf.VhCt6I9  t9$Aчp2 j  &l{)'BIEZZᓏ Q_ȅ ᕔuX i⒏ 瘓ߎ揕ʧ     ‹t?hmn[m[k^b|yojezoa:ucilZ| czbq^hkjm5pwz/([pIӁ ~ɣ >i kŹ ^x yZf fxw׻wzcbh t{h؀Ƴ3F/ kz.JC ,  ߃ɱڕ  5"yfגձκđ ߜxnjNFeP pYpǘ\jΝʚ]O]ʚ]ēSwJyeRv ڠbzpœQgmvѢӹ&   ɼ{| fy ϡǿ  }r՛hAI oPxC| ʙVyQnxu qvy p˖ʁ } 䁬ч~ BWG}ꦀ:־`wσ~&}ghyk ۆrlӆwџiߍocn|Ys&~kĝp|sq}X*܋ylz   wІ ?m.  Ƭ Œ 暪ْ嘨Ӝ ϒ ԜأŵǒϬύ  x| ؏ s   y `v{   ֿḺ |Ż    [ սm ߳ wȺw ˒뻈܎茇󥄆΅߉d rjфZ؈59 h¶'  ]W ޲ ٣բۊݙףȗ 𨘦 ѕ 럙ؕWR  w݆ᨀ ] ۿ ۾ 羊k  Ƴ  e˾  мk€ڧ ڵ̥ 񰩫  ǣ⪪*+Ǿh|^kRXUXm\RQYb[}]_fV[ga^`_jpwm͞  ؾ  h ##r|布fl̈́fԕkd |ݹz|ݕp |؁¿ en  ’πƃّԑʎh  呒ٕÎ֐* ×pțivn֠ Re b `V@xX^z󥘙uѢ ڿw  q  :NUqŇVZ΀ҏJ\akɢp ֥ q B+l́䙕գ噕ޕ ×  ֠ d  ʖٔF `ܜk{JhsÜ挠LȡZ}'P˴ʲklJѯ f|ۢx}7ޒ X}   h {siqpqry&rսlryvxw {yÃt 8ܬ~Ծ~।~Ŋ~o Հ |~ ޅ~ׂf(@ 仓ÿ  皔  eп  瑋Ί 辏ΊꚎݾ‹壎 󞍏 ەԐ ͈䠍ŠËbǿ뷘 \y  ⇁ ߻7ǿ ݿ}|~} Ё ܁ ˁ ) ݀   Ѕٮ~Ո  ꘅ豅}~ ɼ   0c Ըd)ҿ  х }͚ ޲֗tˊ杙m Ϝ IĖ տ ؽ֚ ȕwa礘ա xԒ5%޳ ɻ׿ ] ɿ-  y_v[bajqdsmfc_uXp _u[YZ~\jp{frjbZ~{fWzޫ kΠۛ鹛 هϭ 栝ܙ˚ٞ Wɚ͚śyywmlrץ{zaV|zydy{#r֧nsh몱n_ځ͞ Ǘ4 uș~    a  |Ywv]_b;gkFgYiYwV~̛ YvupkAa`hmdlcXU򭱲樲ܩ ZD ۲ǭ 魲ï֯ ίȯ e°ë 󶱲ϮӮɯ}cod }u֤bgr~_gtmۘyݽؑ~Nrtл Ƚ õ ɿpÿ һỿҼ?}r2wܭ q{អj[kόy7tĹ}U‚sָoۮxcÎz{Ѓ ̻轿ݼѽᱪڿ۽һǾ ڼý ݻK:Լݻ6\_y^sޔTy [\[\_fP\_xūTds]{aTx_kʣ\_kx`n8dz嶸ٵ̵̑Ҹ ɳﻷӴ ѭ  QK ȮҬ9 ݿc zT    Fl|3 ̣ע ĥɮsxפɪ zU 橨  ǥ ң اUۤ  g | e X    t ﮌ ~׀ʐgb it ㏏  ͣ Eֆ  {ⴅZ`,[/j ap ͇֚  Å_pӅ޿畅~~ ޽꓁䉂 ҅捅Hڢ pvxY  ܀ @ԣu t||uwqu tx x 񴕙 sљ{˿qZīǔ ⚘ ɾ ߛۓ ǔꞗ wpꞗݨ^ÔɃo^wmfraӼWs gϡjϡjuܡ S  n{ ݪ{[w}s y  ䷊F  |MjpߎCl~NjoTk}f_exZj ~ Oioq  ڿ Ԁuӻ}ۚ՜ G{)y  ݙ!ܜgdӖ ꡚԕզ \ ky݃xmsr\kj&`Ȁkksrg g\t~f  䏄~p`ˋ?H )L  q rXc+nxq!}||zx r̲ƾ ƭ؆װšZ\ϽԜvRš  Ь"ﰯ̪ݪުX `dۀy>nZGSՌcjX_sau!Yr亗yWrfw``wciy zqXd ؾԓw]Іng ٗ߾   ӽ m   _  겻ż ò 珉ŸuֽnϺÊe3Wܺ  Ų}  ѺȻݺ ޺  鯸¸ɷ ȸ׺˷jx߷˷ ۾෱Ǯ ֯ ~ִ  荆煵]¿ҿyƴjy 5\    [ ū苍rV]`p2 ǩ٪dwqgʬ Ҥئ§ʥ uS f鼽ȫƶxƋ  |䡕z~  \T򤗗ƿдꜙE  ƕ ǖZcg~ק+KUj 蚙=Tڒ 瘒Ў즬X ƬŽ m 禆΅i Ɣ  k ȝަ٠ٛ 쬞ٛ 楕 ﳔΞv}g^XMj|˶ظLѾTVJL㞕 ڒV ɚu_˽fRz_˽fvTȅt]জ[: gǺqi2[k멨  wѦ~~   9r lkuom}co Zǔo ݄߄񫂆uKȾeRLiVӔ~ĖVPFo} EnI{ZshWP[b~{ ݋} |6վ pǑxזӞoǐxܐYh}|R xۖœRkc _ ʿ x㮇ɭ{ȿȤwˁϰw ֵވō  8ߖw i~ G_6r~Bi.ڂqz&~UP@~ׂ ̘_b@Z˲ꝋ}d]Ӿﮅؐ )gRU_rоmKsnF׉ r⽛ַz{Û֔uJҧEy ~Yzԯ͈͢ ৌ U6ֆs &zhiz8Ŋhi{7~bvXl&yjⶒjnvlkn{7ǣsi\Cvjk~h  ؽdԿb 續Ί ӈ𪑏κ ʴͣɊcp5䩏ǣװzĂK   dԼ     α~~ ӿ~# ≄5ZI[crSdu˾{ʸ nb_弛躉ៃڠjY[^WduKlLyQ |~ 닄ͅ ؋~`  ~ <#  njΦ~˷-ǧ|Ҧ 緌 G . 2pç ΰԼԱȰYޱRTi}бȻНʸᱢxɶmN˅k ȿ 찲ڹʱ糳ոױވr ΰĻ ۹Ϲ ڶĿeő輏Ew$ޘôϰǐz}lttrkqž?u  찲e ɱ粹᰺ݹ jijr   ̩|zv_[t #㻓˪~گك   Y Ȧ ƧȬ차䵛w ﶴ®ꐵ  \I ᨨ٬ê   V ߾ Wp Ҷؿ  ҿ   蝚𔕔Ȗ򶕣⡒ ÖĖ}' ԛ  驓ʞ 2 ҿvg6sZޱr\xHɁvohvfڲr\cj hmvRB hmfamfNio   z~2a     ԯ 1&t ftxԹunc~ kxkwy؀ư Ҙ ȿÿۼwZh"Ů ȕ àc(  Ҍ  ߻Ӓ,!ѿEw pǘYjѤ]Q\EuZi\_j߫eσաí ߫gj~Ŕb~~kkp     n    2p TtLins v~pvvz_`L p}̗i} ~≆  Ể필㐂݂z ӓԅzPnh [ 񙃁扂 闄}  CV wقujփsnfVtݣn&pͽ7u_k׎ypθp vSoey}   Ŀ ܳ'}a ʿ؞ ݜĜ顱 ٞޝ֟Ӝ˧Ԝ צԴ 䈍铎WaѡT  ti e ϯË 4ݯp̏1,އ ⻽k~{~~_jͶR|ӛڊ؄ ~*\ν Վӿ*^ ߑڨ βڷՕ򘘔ē Օ ]f{×ڕ оܕ>d4k y  փ  f  ${5ؾk 㖗ް {“ՖVRo$P gᵔ ڗٔ g>e   xP嵂Źu>}    W9;Xyycb\UW]dW~Yn`aXn]wW}YLw caf]jtlɜ ޒ뮦ꢨا 𼥥hN@4պU묬zةݫv|_ ǥ ڲh ڻ  歬  p1`辄te_ghᔚ݃{hhp s؁üӅ  ^4}sڝ 7lh א   kex`ƚ`Zbb}[_S }[c¬jIy`vҮ𺸴嶸͵ Ѷ謱 5Rʹm[㯰G 񴰷  ٹ᳸iе oKQi߄ wۀۀ|ۀ|w{eIT}ᐬ`㶸ʵ ֵ캾߳ ͳ[f混 s]̯  Ը 󺶷 ೸ϴi [ڗKˆқjҔpϢGqƪρp|&πɭjmДq׭shP[ rOՖ| d~ ~ ۂ}vywwu胁 utw߃} wٞ~ Є 榫+ 񇆇̅]OfL  sE ׅ׊ R2 ̿ ѷ   ό ɿ ч䓎#ܫ۽ɓ딌 Z۔Վꗎ ܏y Ͱ . ڿп̿ܰ z~~|M≄ ㈄վ Б ؍ τ _* 컿:-K 畏 ȿ  I" 譲˧ղQ#\ ВvҒҒϟ   ו Ȓ   ahݻ޻׶ؘ}u   "x h_}fhW[jVU[eU^jd_WyZ ibk fbqh]vڧ ᐗX陏 萊  쥔򾹷 ӗ!  yh oσക [`㔦a⣝Rbnoy \sԇ zuقɟ  y{  ߿ ˱  qǕwbrɀ܌]b܌[_S呪gpAc{ |tgjmb.©ܩlŧ©٥vߗrͣĿ #uʨ#竬 Ȩ  qŕs˞ޤqj}]hXmo/˃ mc  $  xh솷 PnQ}g˷xyHi%gtw6sس; bq߷bՂ(̳մ ˴nx1ճ᮵íf猑ٮ୶ µ¿ٳ ܴ VpV TkݜpclԽ_pwba^ag!İ]htd`fgy̪sмǾðx|wʶ 3Ӵɿ鸻Ͽbݺ  }`Ľ  ҷִ y۵ ȶڻ ǾʽǾ ɠPɿۺ縭Ϫuv  kyv H  ƿ 3|ѭ˵ۿ輩/שּׁ񬯮 䱲筦 ²ieʩ  M!: 7+Ϯ  ۪iק߻  ͿyCIկ      齝 ٝ՜$˖號Ә bdl θ ݺ r1 G֧ И͐ ˰پ{ a!ٿ twK  rԘתοɖ  힙٘ĖUՌ\֗ Ȗ 螙& ƞ sٙR ҿ % Ӎ   lC֏#XT ߇hnimi}zpkp }{ԋ懃 ⁈ɀՆjkûYu䢁  r酜9$  hq׍xVhg{{gׄs ßdrnʙ?rxؠ N ľ    Ђp ʿ{  {d^_Sя }fjmva‰郟n{Ř ljϋꔏ֑ˑ`n`w睊ҋ   glfao teTy_fsx^sw~i񘉊Պ   L ,GA1^ %ɬxX  y|ojue8~w Sxngnn g>[˳Ш詤ڤZ ꣦ ӯW_| ںu.쩥Ѣ ]Hߥ ߦ¤ nh> P AgHT aAՇsc|ZtAgZ{BjXRmMkSc&Zeֽ>_tIS`_|Mk6k sIRe󤖘 p惖 2!XH 9$,$ʳ    Ƴ̵ ׯղ 䳳 浣gߑ^$ ŭϫ"ބ˲ ްମߢ˲ s談Rʿۼ־¸  ǣtk^ҼؿUJ"ZJ z  ,p#`ȾȽͻ̲hw w ܿȾ ǽǻ,#YYȿǻ u@̴$  ܬu設 Ʊ}d ޜ͹ ʱڰ̱'Ι㸬DŽ˯ ڼl ͫi밳 @  &i (ò  B&͠ӛ ܞgši۪Y 񤞛š!ڙt皗 ͈[h$   쩗 jl Q o$DאؐٛӐ땷Ӑ 듸ʜ.󥙜  ퟕѕ韛d]螘  ȜݚҔڜ3آܚ „]ӽé Waɣ{tVxirl䕋Z_ӣ|&x읜eZ~qjĥlʣ|vTl覬 z܈  ր   tU’j[^qSÑrr΀—nɔ}͉\: ԉσOef ć  |쎃㚆ԇ 䍈ㆈǸ9 „ ́ ~ݎfSgLU^lfTQUT wj^hœݎlb kT)!   쨩־  ھ ޿ Ax Ff, w |g}jz~ ̖Ff,̲̑>z   ڕ ͉֎Z~U 앏Ǎ ޑ^ [t w6 Hl;˗˘wji{o~x˗i| j||Ӷ ႊ ĴӅ u }.׾  勄  ѧÅ 싂 Gtj ~i9usjnOnnOކy grmgsoNںi7һiWSyw  |沙v    ӿ ק է۰ͧ۰ ƩݰҶȴڽs`lnɉ锏Ӎ*Q͆z Ɩ ̑  0뗏ƍ؝̷ Exȍ  É荬測~ l ƶ   1ԫj g~ ~҆ |}~zĠ|z{ } u{Ӂ ѿ я}  ) 劃{竁vY^ Ȍ  uÁ  Ǡ^ 疜 畎yA  <X˯ꖖӒ"򕕎ݣk׫ hÐ ㏓ ܠ Ў ̆K9o ׺峻L  Ґ 뀷戭 5v ˕` π   =z R  Ȍǟۍג儦֕jޔ$9 ϔe   ?Ÿ   ؽ͓    ӑPk﹇ Pf ۓ qҶÖv{ zĵ  Q`|v[y^b[VlV^pHZclVX[wf ^difE]pkś 馧ء݄ͤpέ|dw [hc ڳ!lפzB[“jĬԿ 裟   ٤ʤ˨ ؉vÅg߁ܺd✳tuj܆_hn |䱕ow؀Źa  ׋v~of_ ע @X 쯃t~   ɘ[M`zfw`mmeS[LlhkwbuœʧȘar|ϭ ԙȕZ׷vٴfxkeY\l  ъ ܤѬԨ{brg Ȯ 쬱 𱱰̬   IJ۰ tGNsv阱rɗY_zHJ  ȾݾŬ x l_l]pjgp h2ȂݵҾsėlYW ſ! 'ì \P Vْo\ Hs]laɬU{&]ܐkԋoo|ߋ΃}eӵeP{ú   ǿ ƃ¡{w|s$ܶ 5ަ}~vyzܫЫyrvl » ú¶or ԼĹᵺż ݊~ 뺅 ʀ ~ˆ˷  ϲ{kʿ¥  tp~ "׳w[ ي Ʃبq䙘ҍkɸq ̵ķ㲸F괹ѵM(궸+ } ޴޳ ׮ێt)cݒ 㻘~4|v}~ֹ}⸰̿xw˙)ʖЇwӸVϕqYnlKԳD2E K⦡Լ Ɵӟ巜6ëxĽy~{~}ҹÿ{q-辐OIDQ̼wffc$lԿydQfբ`m|ڸnQ򪛷٫硥Uۙ ݳꨤB| ΚЮ ҆<٩{p|ʹly.ɤӻz}l|Z“u Raٔ{ѩs׺  e/ֲδ$Cǩ ܿŵ Ę ν ¿i{x׽߫~ouơֳl\m»踹ٱ9wĩknwƵҳ|y੢ǘch弖ɘ  ʚϮ6z旚ؽ ;  %䞚)b|}zϧ ٰ   ܆Ί跏vkyQp`r|ùњ{4Əzᵑwn봊 qΉ Tkȿۤ * f%ةYප ׬  ˃ 񔀔לtLϤSQyuyخ~j_UୈxlGknR{{}̅f䳉œ`QS\ajo̷}g~ ӡ ;ѥ΁" օݿ~qjlڎԺԾˏƸ qֿͅ Kʮٸܓv¼dz&|mˡ̣ ױ*|О*  麌z b[ur_TUu T}^gdgb` ~^t\rY ef_hxfcVr֤ 񙊇 u Dkӭj򎎏ԏyʙƛ֦a吐Է f̅ ̅хpoqpo zۨ|y ~nd^ _ʢɋj崐|porw k嵎rֆӜ~rفǟbL m ҁ )撝ю~عƚ } ţථ w|ֽ `l c׀j ZqbbT_cc&XbT]Bfw_玈urœx`â rH(|̗˼{ڣ 戙֡՞˥I݂\ڠ£  ˸뽢 e| gwy`䉳oy_b`pƓt nZwՖs"uyցˉ Ī τg|ٶۼ sz vw g猵tˢjq&Խuϖ:{u٨vʢ|Iiۀì Ҭ ޭ ɷӫۻқ rғϯҪ Ũٶ˪qyЬ]vb huec gm`h]kk!m˴ydh]dd`\n~ziox۽ǿ ~zW ۽ˮټ   ֕ց ߌӿ"œ¿לλ ¿Л °;m ׯ ”Qqu϶Ѝ쵺᮶įЕƴ̿ﲶ  ׻Ԭ Bz  הNj ކߏ   誡ٿ b ʨOf'먥 ɵ긢Ԛ Ԛi 򢞢Ց쥥ך!ꗮɛ 맶8Ϣ ϵɟߦ 㜔p΢ʸ Q   'ڬdp' 瘟께 ֝ Օ؝ڛ ؝Җܘ^֞܌왰󯝟ڟޙĜ洜ܠ$r#Ϋ ׾]ц'{Ǘȿ پ#ݳAXƼ uchegcvq&nphejs}vkr{rqҼښ𣅈 𔅈ψ q҉ Άÿ !򊋌Չ ִ؃ ꌊ  ٌ"^O lؓziٱmzᆹiĖޑ&扐pzᇶ\{×oȅٔxm{՟~  fK  dׇ  F Hfczd]Z |fʄmpZ`Ǔmj  v  ஍⋏ϊѕ̿Íϓ Ϝ͔Ӓ +` be}y{`v}rԱyk_kœ{~m zʊ  䨧Ǜ%  q }t~~ Xesg캒p s}\i뻌 ď|hĆɴ 蒂z{ۄƇ  ~蕁 zx釂|Ӏυ&}~}S_j ~ ˲~؁҄ DgW `D׋ZUk[vDh\tFi\UkNn^f!g\\sNn TIbDtǔf Mۇz  *x ݏ˅   H  > 㕒켏Л|l 嗑m7x݈אŽ׊Ҝ  ׳ɏoGBE ˓ 唒œ#  sr !jӥ~~ˆk  Fw     񘈋u⣍Áz  Ӓ  gp ]劐עŐP ݩªl lUp ׭   ȯ ;~֎̋  [֛q" ᪪窧 }%9Ȣu}ĞQ̏ и վߺlpȢ  Ъ w R֌ i    ɼŽ͆Î㊳ 銰銰˻ 壠ߡ BY"  pooĜ잝!  ԗ՚ߙ œ []rw}~gzŽuXoůwĽvR|y nӬnq_o䤱  K,Rݺƶy dž}╲ 6`  ozdS㽑h~dytɔz|dLx py Ǎ ܹ$y?߸𑅅ʅ֍ ߕZ 騆׍ΑCĈ쮃J 玆ԄokV orZēuaqΒԔpt v{vn~bg鯯n{v߭j} Y  m   ډ騄  Wq p r  {ɕp L[/vw wsͱߔÒ߬}ʴo͊ ̔zX[wˊ `{Йߚ `= mÍ ȍپɍ;k} g9}pk~f~ /avk~mkrpUAǟhg&lԙqk}miry7y'w w6yi9r{d۽'o|ɦ ۈ Ô d       x z|ׄ~ ?mꏀɧ ؇҂ q{΅Wz˖Q}~ چ_MӋ ԍ ~ q ~趓׏Ӿv@ T s 𯏐ӐÎړ˜x=[ޡĎڰnm jdU Ž  }F̽dɘп!Υa8쳋阑 쭏  ? X𗆿혆  y  ﷀ򽮝Nˇޏ ω ϠᨙGLc ҫL ؼ ]YgΎߒ  æ/ iI  ԽǶ{v ‹ʷ |ѿ :uv  󻡣򯢣ò̠ૣʠÆ}gڡׇhˢ̛ ȑy ꥠy  /jƞ!۞ ִµ 輸Ҷɴ ն ֹu } uo  T= ~  OiunZbOP|Tyjлfuda` bw]cwlUhvϛæ̧̭֧߱ŨԞ ުރnߪ 띰ht䍇  ݪ ܦ  ﭫ⨩ wنhu~{Wğdreu`•Õۅī  Ɋ  mgks XSP`J,8پ >'0 JupǑÔU]RŅoҭb{ʚn ēeœujhݻѽȾ߿޻ݼιܼѽubWj ϴ  ㎈|ۼؽyL༾ӻ ν1͹ i kʘ|zu ؂ zz̗ ̗Ƴ۸ƻ˻ݸ Ժ ۺƱ Ы~}ʯ z  𴴺òkâ 񵳱 Ժo ձg;̬ C_x ~?|{}hgKC|jmTa侇mr!k׹wUR}}qhJhiJ>}U`zr ,8 _䮅}4히  ꦢ x٣llk* Ǽ 뺾 Ǽ ӻԴ ߰dzн๽๽﻾ױԻܥܟڶͮΦ  褌͛tҿ ʦҁ馡 ] ģՎ㌒ҦHqtzO,)  ηձĩp u  zTrV  ' 壠okuѽĺPɝ}Ьyrњ с񦝠ɜΙ|{ 飜V[װahcַt| /  򚋍؇Ԯyvrd͖ !ä{›ۿ ~ _Ռc ӌ dxʝkǿՆր a$ޡڨ~ѱrG}XҡR ꘊ  žz)> Ղ㟄󲂩 W }0Ԗ   .c}ůꏎsɵ 和]Ϫ | (|¹ʎUpܟYpc / ΅ [;  H,ߨ~ۻx  |   *|򺏖辋< Oaqj\bmC[TC`sCj^pWj~ThoMfZWude}gmk›ΚhŞˢe#鶁Ȋ ĒÝퟞ}՚ңz w`WɆӜ ދc }ty_䟳yhyutt㟲 x`njy ވz؀ƶ }ÿ/ʩ  Q tr Տw   okVwNVg~ g͜{]iaMŒ]co~ ͤ(駨ɲþ֦sʩϥܺ}ayѥ  h 뢧 ~htj񦡢쨨  sEIsEILJp~TJsa݄s  lᮥЀ  ه Ж Հ Wͬm 0׌d_Zъjl|ҶZoնZ&\Ė^mz rْoz༺!޺ŵϽṼ հҺǵ b ڹlʻ ݷ ϓۣ ᰶ vrख़dz̹!誐 ̕!ꉭٌ ǡﻴ䱺ƽ޿ 趶߿㻾 ܽӼø˵yeՐ˻ n–ӳ ޱ  e췶ɤy༙wdz~ ľҼ    b9vܮձǏ~v־ء~ y϶|  󬦪ۡӧݬ d' ҥʟKޑ_s䙊JI̳yܔ| ߩ ڃ~> 򼡤ǯw㮕㎱ bƩ "bj "ȫٸ~t܅#娅.tƾ˶mnļ ̂>GA  vyԱbݐ  _ ֝؞~} ަ ըEJ  wx)̕iyuuJMcȻwy㠠 m h]uj{ 縢ßߣ ڗ۠a   ƁƔ͟{|KmٳxzȥYW w ͘l ݍlS 匊~䍎 ]Բ } ݿvpʲߌȲ̵}Lʟ 狋ݑ$ৢ{ѱ{yr ȖÅX ƚⵇ& A~浢 Г̑ȁ  T\qnXd]XqWfUYlo\Spklq[rs\eS}oҡ򛑓̖ 驐 ̍Ґ󠐏Őy fh܋ ВΫkRXyqr{鿌yÏ ͏С ﬖ锒Ǝ giⱁpw}ෘ ƀssoXcsסⲁעg׆f؁Ġ T  v ~)ᨍھ ŋl Რ  yrǔWjTi\wlox@qVrVēœnpw_}}π~ 񒁂|舂~刂Ї 䇁} Oy۽úsъ࣍hOŒ 䠭}{҂{ ʄ脧~| wqĖS]͟ȆfɂgftžzƔǔ̝pvֿ  ֔  ʚvwyz w}ͼ#svͼvҚuվ ͘ ) `k~ gߦ휅@WټoQ𞞼勮iO~&tҷvG}ȔwѢwfww Í̊ ׳䋒 󞏑勒Ҕ    YШylq{rw^\WQSQVm Ν ԥ (Ë즋ꥌos{` rgi{ ezgfpsՠkppz g̶j~jjhsg jhih~      Oq=̼uytz|j|{ |üz ܉ èƩ 鐋ӊ 󚅡 瑋ԇ|΀I~x}zp㈌뉏Z@lwS ӄȽk掌 Ŏ䆍w  З0 '#θ{s{zⴧ𴍦żlك*$ ͍1fVƔvȽd 󁢪~ 9 ߫ *Ʃꨭ٧Ӥ裨ڧÿ שּׁ ܝuĎ ؼ డͻp< s5  Ϻ   ? ҰLآᢵ5͡ݣ̡^﨤 砥ͤ i}Ўמ gg ꜤG    ֬.ЊÁ /_{h{ vzq{`otc_]uc akemv|璎:㉐ˈ򐐍Ľ ƿ w֊  攎Ë +? ‹DZي~Ҋc{٘{l|Q pʉ{e࡮ܦ[dw sʊyʼn|~ў A~~ 8   г  nqş Ge^Ŕ]_\VטUc] xYcƓvxg $ ꗑꖒՐ 镒 ϼޓцկY qɈqy fĔkqg| ї\n{{œ~l~~r t a^ z 粢 7 {fq3 q줜`&ʃdkvDŽɅŵ B} }~x}~ |d 򅃄  ~} ၁ۄͿҁ{yJ{ -»}ǃɽĈy IarNY bIَPIhXVMOXҤYBh ^xl_\bb^r\mVM]uOWj ݽ  #  d Kjr¿  ΍ Ў󜚖 ϋ ΐ̉ƍ ֑ oō* 㘏       :q ڞ  掊猙 ɥ́݌ 򕈇ϑ Q Va豏ՌvCXʼnك     Ɲ}   󩜟 諾 ֚w礛֟ǝiCӟ䝙ӌ ۝d%S]Ԟݟ ݞ򥝟  8 ҭ 醴X ٢Ƞպݧ0(L暨җӥ B;{枝ՙҘΥߧXsw̫ҳܪbЮ̰|µۮ~ۮ|灧~݀ ᎁ    Z׿ оԋսt|Mȯ 쪴fﲽcփtq[zdr[Ad}x{e s~t{q᣷Ӻyʻ ж߶ ⵱ jiK ׮ٶϹ{xˬ zĬǰʬȹvlŇ2ձ ذƶ$ hvRض hц xV׷mwkUnyIq ȓTɓuLz 4׹ 꺳 翹kG ֶ ϶¾ֿ÷Ȗn źa Ը rYێrZj~tW桜v ē~œcltp~cuW ĽŻ ؾ ǻ 鱕Έf ½ ڼ w Oc+Pc.ef/{w {x%suɔԃ ʔcgXͲΫ oŴ ף  ʹž EȨ n ۣģ mϤ¨ [ۉmʨ  տ  1`~SOw d;}b2`|ONwҩbRd&r3_|\petSB§cfTB\gstfodQ   ܲӏ  Ȗ  ݏҪ     ~|i} | 冁|˃| ހ{wn|y} ܃ TL}ڃyۃ ܱ{ ͂~ئ ԑ ȿɕׂh{!ˋᓐ߆  բ ˑ͚⊑ x壏ŚʑܑhSڑA"ٝEI6ʖ  Ɖ1좚ƒ ߉/󘇇+昉΋}󈆃ɂҝľNN؋֡0ʃy* ֣ظt Ͻ0٬ ̗՚蝝֟ "О f tі ҡ Yٛ {hcy̞ʠؚ #Ϫިϩ ϪިΫ ÷ ' G"< S kȀ  n^vn\m_ma99ol; \xy ˍnyhi{ﭢ ʠ驣, Ҥ_b^矢ߣ ֏ᣣ rlkϤڦ dl݆jvdmZĕtdۀjz֙ r{ |\§ î֌ގY ~¸ɹ NpǕaN_R|љwyљIOsŨ« Yje}aLzjf򶵸۴ȵ,^ʹ ĵָĿ ϲﷶ ¶ ůڵQ  c}~ӴӸ 󺫹 (¸ | iv|yEn5n'En5oj~VSBr{{ɲ絽ƻ̺ Ͷɸ ܋׾½Է 4B rvü 뷿(ѭ 0koj x<{thh{0joj~pQ yc~'y׷huaup|j^s %zx|n Ŀżþ  þ_ \ſ Đٽhéžظ Ž¿  ׿ ּ  ߰ 諪SѬ Ů ٱƳ R  뭭ݩlÚeˠձ¯ϥЬ ꨞ i     kIئ܄yϺ; ¾TQȸᱦ   ڨ ţ Ҿ Dܤsͥ^ٿصдۦ ºx  e  ò p&룢ςѺ  ዏግ2Y0ٓ ԏ㍒ ^ q"ӏ܍\ӡP ֢ݓՋ؎ s>S0,  yݛ 7nj} 옒 hp᎕ڕ  ÌŻ  ୯  𩓔Spo(Ȗڐ+ | r0%     Ќ*  ,,E~r\ri l9֢1vaFXON\i=fWbbFYbEONU^{e8*q sAyIIw4utIHMUXWr~{|} ,Ђ܅}}}~{ π О_\I}슃س'Ā]iWzA ^ZfK u"[e@@VњX+:A=>i:e;?i:sE)8ϛV=*TA cXB CgAsܠر   eۡ l  ީ ۵ $]bsQtQht%1׫6i9?(IwZbW4S+pA4S̰wLմ氩ױϰEΩ 歑 g߯ް Ѱܧտݾ !¿¾ֺ¿߿޹x~G ⿘ ipݼ   # H |  㘕繄 ӓ揖ϏĚٖꐖя: עP ۑ юߔ ܿ ޾N ؽ   元1ݑ_IR\[SQz }%~}艃Ђ۬} ؅Ҁ}t  æ񈁀ȅ芃~  ܜ "tY Ԛ  ڤÌ ƒ׏!͉{Oڑ抎ܖ Čّۘ墊 wׯܐ 1  wΰ F  ؈+h   抆(|it׊ZYm󽐃 } }%҅gۧ; Ӆġ ㈇Ϫ Π èmވƒ  %0  ƭθno~'+,A  ӆ rp[Qa˂ۖzu_yvĸ՘ 畛є3 䕛ғ񣙛 뜚 ûi堚 r󤙛ٜۛՔ t ˋ~s{ǟsxm0bЃ®u߿   !n  ɪux νd[T]}U )qSmȦָț̗ٝɛ 虺ƚܝϒ 룝𯟠ǂ ŀܝ˟ؘ   &޹ԚxʽvaJЦ٭夌   Q  䦁ʒ  p  ቡ›޸}q~ƽva]c~.vuyξκ˸Ĺ֥xa|r՛ ܮ ꮳحİœ DŽدð̳ ߮ź r#/í ɤwໝxtqrdz?z:űή͌Ū}ƿ Ž¿ɿ  ǿͽ    ։sܼ  2M~|gc ɲMоŷǽzӽ馋ߜ Ⱦ翿ݽҾ ؽ鿿 ɼ½ Խ˾ɾ仾 `VN|yձu[p ׯ˲ʷw|ǯNj̩K_ 䶷ص˲ Ե混ötƭθ 絵ЧxʔٸĸѮxkrͤs   -ĀUd"ޗ楥̤ӤW䭮֤ɓưkɥ ٦Ƨ  祬ީ qצͬ ٻ鬫ͪwoǿNQŲ}y     ~VkdM"B=Q|iٷ񘓗ϑ 2nmhй웕ؔŒ ڕ ݖ ʗ ɒχtw{)%mj“u*Ҥ$s̽tpy   맬컖  \Yo斕)k qhYߤ ʏؐR{ ӰfՐ搗А  ֐ѐ㗖 ٩xяǗ  b~|q%li _qptf1 匒  x{}~}}RЀ~ U } z8GnǤkϬ̀ۼqp ~|y  | 󓘦Ѓ {}~zqj}v  |̯y UE  넖 Z ɏh­p Α ҈た 뙖䚖ϐ ά{ ΐپߗ  ‘ { 昖ھޖ'p꜇խ ᎔ b  ĕ    }~۾ ۮ߯ǨM 縱 ƯҨ񵱭㰱ʴإ  l ﳹ֯ ۭ߲ پ ԁ ׮뾨ץβƛԠw g  e |w˧  擙1? ~쎇Ⱦ񿽾#~¦{ѻ ŊЈր캼罸ẼvƐgxs~ ܺ γȼ i }¹۾ f 뾾ķ Ėε ~nU 譯l᳴޴ⰱ*󎉸ʯw׵͵߹͓ ( iˎŷܹ  #ѷʹkтl D 7d~mq|ɼzjqw~࿗   ܌ wљh !߿ ͣž!щ󾩭 ˩q ﱭᬭԩ Ʀ pևY  | a Ŀ<Ѱ\xǮupuǹƶ~ w =?@㇞io   pړ w 哙ϒѹv^[oz蠟(ݴФ|¡"?˵ww|uϒ6?Ɣ ޙ `簏 Ρ ˫ s̍ wܷx W ;ͥ~ٜ|~  vKzEm ȓוÓä Ѧ;rݷӾõyiﲒ ݘV 䝖وʓל lӨ wچ-{ɿsǩ F $,ۢ   rIzȖ{ jJƼhS  ~ۆtzutu®y}{}酝Ŋ}ӂ }چؽ(o \~ Ӛ Ʌ 슏z z|  `  ­&ř~yή ֛  ̊ zIcy멌[rwM  эِ׏ܜŪm؎(듎攎ؐռ 畎 ӆ蚔 Ȍ ׏ ~ Ʉo   lz糬  ךp   OO|[ ټwM͸Oj  ㋅ׇ̚wë}̀ Ӵ~{rkga`oӁρﴮ䕛}~~ħ u vV qz  ز|xl~  ׋ҁ ߑycҕ ]{ɅM=  𠖘Ĕԙὖх眗 В= Bߢ#_^nsplk±tt@;l, qɝc  Ӓ$ Ժ 6xÿ ѐ G0;;?BBz,n C$tʰxgtw%7ftu #Բ z癚[ʬMz Дқ 󡒚끺UF lteC#q}'>4 !t MI%Syh[JBIWjtwunok~Sj Ϛ   smKzꏣ uRb `mM&qڟx|оrsq Ȗst  ?Y} # xnV k k҇pZO阎b˫s`\e]s⊣ }  5▟ ck Ubȸ\| h \ƿ 閖ƗΛӬs~Eefݷwտ 򠙜kBiتTka蟇ߟz ԍߟ  h݅x̲v~vӓR̉} א j˄럆жxs²oʌ|Ϲk||w  wn dׁ`RRq ײ MX  ͒™ɕz ډ ȹzeەƺ ҋǔ~ʣdWU^̧ZqȼļӖ'Q   ҄ ۫~{ ~hq̘^\ץp 찗 t֝لsK[ŏ ð Ӆ~O̓o ~ሁ>İÇӗϺyzҤȀصzu(ߗq}ȧ¨gVcwӴVQh˿cHgئ ӑ($,  ܧzx `Ve qKɳ|̉zТϢÇƶz Ʀ ӫ%ڊUV׷c !  㕳}璎|Evyp⑒ ՂˈĐ נ 1vɓKxt~  󹐄rhHpѽwZLRYhz¿u ֎Ez{щ/ۨ ؒüzt !@(akɈ~mC R鷼 Ũz p J V}ő刄]WV  䉄` tЇ}~}Æج򼃇}ᇘ$IӎdžȿtՄ }tHZitd`_iO ٱQ }R hځ׆vү| }Ղ  벜|oхٱ/ ~ϝof ޽¬}hַ Un Eήj ݶ՛|ԙMKu䑓뺒阗 וڙ ޶{ |$7 }kaQqƠu{̈́sn19<坑znن S wߞ ჭ≫ѿ !{xv )  41북fkvO뜗 閒ؖȠ 㔑Ձzoܑ! ޝӾlrߢs wڗ tA guᆹ靅u֞sݯѲr~䷆gs̳-U߰%:  )ͤ2{țy_~Wꩮꩮ r{iݫ䃻٥$>ݥ ܳގp}z ԡͪj ,y > )je^ekͺqkv޾OHԿН|س} }؂`_  Տk˸폗؁  9 Ϳ )Dz͸ⷅXIjdnll x论򼹳 YjvKշ󽹴渹ŶøjXٷ$ʂͶ +CĹٶϱ }vӨ tƸT)ç VмϷл{Yw알îb3M鲽󿼷*ԣׁYճ综ȹƻًԳ ҹ -#%Բݾٻ {ڼ|{ЄUĵ x`s˿ н !쇠c偹՜e   熽E& նy뒁rѺbҿƻƭzŎy{嬈ok |Зfk᦬묱ع 캨 һ 7ѐறҿī㦭 ٩̬ȱ ĸxzФoҕڻݱѽ4+Eߨs}  ҩ  !꭫ફѨͬ ب$ئ?zL SӦϲ ;<{겫PХަ ׀  ! ݵ dH/K ԼJ ៜֵ xcm ʹ#޳δ̸¶3I  񼷷ö򼶸Ÿ(nٴ4 򹷱U ּpY˽ ij߯ 9ҼǾỾӼŽ S Ϲ ﺶ˿y _^Jֲ ︺  { 3׼ƿȿƿƽ ż  kɾ¾6ۯ(8(BϜ> ɿb便 ߩ쨎k ¿@ĩƯ񵱭㰱ԯǯԮʧ޵ ì  eNo︤ɪ ſͨ᭲ɰ _ A-ɿ   `e   a՘::昞Бґř ˜ "   )p;đWH ďΚ  nߤK& 5 Q  W' BfVsֻvVі;Oǖ잚ؘ֓ޚƚ #-E8ٓ蟙 ̛ݝ ] 9=”ϖЖܐԘ  Mʌi ^ ٗKUS }!F T“ _%>ֈށ~ RW 2ǀဈ ˁܐ" #*I} ㌆ .+Ќ>ܻPu䊃 :즀o6 ҅"ýہ V rV `+ Yඍ*2RWh !ŽҰ_ׁܴߗ z֓ЌӍ铎ԇ 瓎 풏  ,'ӌَ-M^cgc ۏ ߢ` Պ ] Ӥ'siٳyԁܑ  O VJk;!= ׼ e# H  ;ٿ)~$fPaֱͅv:сىֳ@{Ѻ}~}~ } ݄ }  3gG$̪V v/ Ĵu쥀7 9 Ծ싃*ڼ}Uӯwك΁ׂ&$  / l%n  1ўWը %b 1չ`hdU̪|y݄ȁz֖ٔ 줔요֓Ǿ 뙕 ֐뙔ד 㳓 |  ).󿛕i? ,유Ϟ Ȁ;& 3̯o[A`.Aټ£mˁʻq   &dҝKBv5Kֺ~jrH:çf>("$.װ_UJQ{gf  ໽ÿý ýÿþ ű91EWιe þ ü F&b͕ɕyR5|! 50V^C.iKR=2.,'=ӥ]ŲѴά쯴稲 ܯ ӪͿ  ﷳ Fd:Щ;賳AٌGp #"%9Zڑ佩P<PﬢÛS Կ      ׏ $:o ֹ׼þ!A ѷןڜ ۝Ԗ ܝ ˗ȵ o ] ;g x<U֓!~}~{yy~~~vw      ݝ %դe+XN~a>#v|~|||x 盛ޜ斜ה ѓ ̬ 潖  ޤ -Sؙ Ʋ%T`&m`@ޚ'Y "  ǜ    n l΢ f1b>-'  ʂ܉߈~  ~ ~ ҆  ፇ   y!@ڹ a<+}7vك 䭤һ ĕ   +گ 1hvxuڷG SV *2 2ü}`\\Wb̿^C,  s ݱ̲ g ܈tN ث̫ǰȶ۶ ݶ'۴0Ҫ۳ų ά t橱٤qjR_a  s C'2   Ť -I  ~Ҵ^GPc{ s ֘Ɩ 𵘔 y0&)# Ėɛܛ ᖛ Ӕ  ޙ˞nJaa] s 0'0l ǒxK]  s }~yy{~~|z݂~߁~ }}{~|懀z|߾|~Gd"Ձ| P^QZ\q ꖆs^h_ CdĬWORq 2ϧ蔚s ߒ.! p敔Ð𱑔䘑嘌Ęӫ 뫯 術ՍD["ؓЏ PUavV`lfK>BEXʿ½ ^φ…󤊂s a S?ZҺx \f_%"3e\ί`_FEQp½ ÿ\ψƅ̆cᛇ ۥP򜒏] ӑ ꗏ пיߔ 蔔ﳎόÎG+dγ]33 msNEPiƿ _{򤺌r*t O  q.CMR6?Ș  GkuQ@F Ľѿs6Τbb Ԟݨ ԡQp  稧 NEWhid!͓I6ɕz  s Ž$ Cd  ǣXo  sh筲ɮجѳݲ䱱 󾰲#򵱮𵱮 ğ{ 'D] ůͭ. ʭ  sľݻ ſ־ྰȻþ:W %*ͺ~lƻ fҽ  s Rúöļ  ÿƽ  Ŀſºۨͽ  a͸%罺 ηžþ sߵ˴z 񺶱񴲱 㰮 ɪõ겵µﴬ˴ ŭ ரLhrϬγв s /  ̿ ̺ OQ إ}oIC̾ Ͽs _֠ c;  ;jcܰ  ﳏꧢ ۽¿n~{{|ȷzכs Xt 9  ƴ ԾPԳ ¿ЯƬs  쟬֛򸛞w ݍכi؟  ӭS+ڜ ^뭴  Ǿy{}y}||{|֩sc   ~  ·sʂ ̂򌆆 ꏉ  ĺᄌ }PL ڍ勆ʂ رpkmolnnlmnuė琅 s  U   %z0ƹĺsĎ睏̋ﮍtːꔐֻ ܢ ҷՏ 풚$sxsttrzntqО_Ѥs }7 Pǎ ¾^6KMLGho딗s z| }|w {ƒ||TԚ}ٰ}ӿ~ɓzҁ|J ~…fhihq^/M|}ŦĤl汭ﶥE~ GݫB s ÿ˵C7bػlgɘƈxɮձئͥ򲨻 ̥򿦩,|ޱȪ*lХᬨ +Ӧ>带ӽ̮Ϯ ǧ|IC Կ îzU4w۳tڠs 矵ِ%ƿſ ŻZėž5׽ܗŽ ݪ޽4  ʭuFa} só朰ھ,ÿûº¾˲ º¾÷ Ÿ ľ ¼ϼ׸ټ  棓cg/sר眰Ŭ~h3 q[uU/Q ' ͺ ˿ #LFL{\s"~~ltئ眰Ư鎲T1,מ͡󽢤󰣣ᄁ [ rG fhbɚ<) ࡍ ș h#ٝ 丣 W {ΉN@zaPss%퓯xv֦眰ƯՐ¼:EuH{) Ǿ ΎA{ťZ̿vLO1?P)QU3fKAs:]p?xkI]`QxPwencewfsșujĠw˅ul~~nkŘukw̋tjw~n lʼn-(~ꮍ攐qɩ @"':\RܕƑČ ܆7">ۺ5S ΗɈ ‹ Կ ȥ‡ytqt|wkx{}xxs{zys {}Gb2q W;wrrc  _  ؾ¿ 񱺼⃅nstҌȈ 픎ʇܑʇ̊ tvFџڃUnX۞֢,@_z j ] ~ۢ  Ǧ ~̂ 򻻣쪡ܿ禥ꭥ ؿ zê|}vw]wqߎzpqߏzpZ ƕo|tزz  v![ Ƿn~ _ o: 3׾ տƿ~xp~~쎐~~ƒ~rtOOrtjy ߧ|s       y{ֵ|s|‡_eW|Ækr򘐁s򋭶r򙐁sdy ӟws  Ǯ|~;x}֭~Zd̶zzڬzz||ۨy䕀z۩y㖀x ~zںїz焂 ½׿ɾ   Ьۍدؑ̿˰    ҞFڝͿͻOz ͛IڝͿΟJz3ڏHfݡr [Uְٍ֑ͿqE2wՊt̙ؑٞ֬Ë ̺Y\կԿ̿uG1ufYsfspsx{stdvF֟q ׾ȹbկξüԿ˿Ȼd0o`}{uwq}rxs↠Ûulfs ԸƾЯпǿ¿1Ơڣ蜼Oʀ{ڟܚ䨻̷ћȳЂ ѲЯпù0 ÿĿ¾  ΝϾց֑ذ٨в߾פr[׿۹̒ޫڗۗߞߞҙֺɏߕڬללۡۡΟҺĊۏ֩ӛӛןןʟκӿӧϚКӞӞǞ˺лh`̣əə͛͛ĺʴzɻ̽½ӺӺܽ۽–˾–ʾ̽ӺumZ̲²ήήܲ۲ȿȲ̲̮pƣ̨¨ɣɣܨۨƿŲ̃Ťk˞ƤžȘȘܞ۞ʜʜ̞eʕ•ܕڕ̕ZɅۅم˅pprxk:;<;:;9:;9:;<=;:49:::::6c݀҃DžƆzwxyzz{'IZ`__^abba`bccdeefef_]``a`b[ZZWVWVR PMNJFEA51;::;::;::;::;:63232232232224+>t"|{ xqppmid_YUM?7;;:9=;97;9<=<;;:79::=;;87;9<=<;;:6::;=<;78;9=;;97;9<=<;;:79::=;87;<&KYV_TKSLJ 5taUPUE |~tn{hiLOW;@E>$E:EGd_LHaTg@;?SL7x{[lcnQE`.RY|wzkPHH,RGpsevtorvi{sn`zZ]S^^wYgAK`fCFXkkPr[snpiqi,1#JE5*' 7@C5IGAB?A  $*.);3)* /02BLO]ThLHcRW5A.-1#OIISEHS@-9=\B.9CW^FND[KNS@HG]Xl_1#$*;"5(0*@*GNcwn^YX\TI>NI;">   '!98jz`U[@UYOhcB@]Mwsz{Usqz{~snxdV|ypG3-&7R`bbcbccbba\[Q]afhrrhe0EJTahkosvzz||yxxwvssssssrqqqpuʨonɸxlY)0KTZ^behjifc___^^^^^^ Vzxo]ǣ{yr`oř{wronmgd_Le#*DOVTVY^eedc_]WZYXTQWXRSYVPWXRTXWPPRXQTXRSXSPSXXXXXXWVVV Lyax~z{kar|ywoed^?")@L\Za`^Z`sTVSfvZTU RklS\uWTmiTUQPz}nJTUTqgTU TnlTUUTkz{}eNUMPVUUUUUUTSSS I~zuqnmm_seirfgcYfzPG%>RrUcVa`WvyQJ^PU TRAcZAVUR\TTUS_JVUT HVUQ~OURPUUUUUUUU Kwtnmihi`qekqy[V`KG&6NbWxY^^Vq]HSRQPPQWTPSWQPTZ@w0Rg>SPPUXWPS+NPUXUPVVdEWOP!W@QWU+LTSOPPOTWPUXUPSdBXVOPOTWWUUUUTRRR H~vsolhfh_}qppiydjquy^YNF;(2Q`\jg[]VrBQ\yJiRŵPWCPBXwOU:TX-VYQۏG~lߎKUPG׷M%KDRScُG}q]LVTUUUUUTSSS I}xuqojih_~WzdjpkwhVGOD)6I^Uk\_^WsTNPvJnkQ;tGVUVMIIRVUPsCUVX=^u<>絽5;v5[=`l3xvHVUUUUUUUK~zxtrmlj`xk{eiqetp_UINNC$,Bh~}[c^VsyPeX:X|/>!mKK%D{sDTXWRnSWRtJVXW?_G[&KJLs7X*[%Da?]W{5Z}ZTWWUUUUUU K|{xwrqn_~stfgs_rjrIMM@$-HOnr[jeaZvBQQWThJBuJCcqLMR[\]R77B]\\VZdTN_SLej]\N4kMcqFN]bY[G>oHL]\\\\\\\ SxqѾzyvp[ygrwrda{NrkVA7B#-L\bgjdC5\oleO^VWpQAG}Fdv7rhHeccdhhgc9ag|.]aZHBEy:_o;RbVtr^bcc`______VtixzxpXwf˭uxrb^}HpmadX>3<#-P`dhlmoosrpmstCbkilPgsYHdFo]Lpr@dySQzJZqrCavbKcnf[5Pos\J7kji*gekcܱokYL`DkvF\dq`Z>ZyJXriKrUHmlqNRpf[6Pl YL`DfphTDbnfYHIkiiiiihfff ^jgwuskSqbolnoppsvsm]XAXlh[_]ZPcM?+ :!,N_chlostrrsrqjlnmmhmmgeigkjgnlflnhhngjnlfkniflnjfekplgfgpm6fdsMifhgmmfjnmiffkogjnkekigomlfhnjfekpmkffhgmnkffmnjfiommllllkjjj biHPOOQQSWTRL9{CRTTUVWWURN@^(9::==<;6-,$.!+M[_dglnpqpqpopmkgPQr:RPVLPVLQk=^gHgcd\LkFa;\gďws¸ ĐqkƦE÷+úiXīƙīīQĽwtW͛O×loonƾÿĆouÿȲ\N*öusiRlķtspu[Bс{ùǾOZYZPVYYYZLѿuryZ\nhqhm:п9lg`K n} va ﰱs📚Jǿ|qnjftxwwueefejxx ypdeedqxp޽eEt ¼纊Z_aecZ[dd\Zcdde^Ybd^fE} vI2Im_1ޓrqjMgxfyfn Q捻®#üĶ#ƴwsmh{}hidaoy{kghhfxx]C͠ؿ*޼_緧1ʞ Ƶ渊]|gnfhnhjevhuI}uӿhhnsr^fshلb`r"ƿ½Ņ 異³ttaoJ_xvpп֑܀ҭjd_xc{wtni|}jeD?izIT]EVkigxx Ƶ[] BJHKWYYNHRԽyW*ϴ㳢HŎfr Ѭ絊ލ^écgx˫|kH}sb3b]vn]fustlfʇ񮜫 o ݿr"ѽv ]ϭݬ異ƒrV¿JdbtпդãtÐ~ovOkwtni|}kbK:bm][EiCkigxx߬뿥 ȳmmXڄYZU AVl qgNKN^aaSJV Як }*Ŀ᭖G䖏~ ̬ߺ紊Ubqje}ə}J}sb%bst\dZ~pqsdɆu 񒸑m qV&c"Ӏфoō֡aҽgci fǁyu捻tqstuJo~{|{̉Ѯimhlwzvqlz~}}{kl[B^aOYPMTmkjw~wXw~yW ޤ~tגjgXIv~A}u}rXWXWV^}yp}x͸齲}*жߨxDpv Ψ沊Vd{oohe||}raaur[dWwqa͉: 鶄~ 뙝Ċ"jauF᯸opzv{qXubpǫϦTǹѭ|ԈvaJŶڶmijjl~sxud_ffe~~pgipseb{W ܟ޸ʚV@o{@ףrZ2^__PMM[_d^~eqdʵ珍| ƻٜ{jYTSF޳ž݋ ֬孊Q]Ëyejjc^~}o`K;2`K:lYe?A_l%inpdT"޳hN7쵫ph,ܭRbinekYW`Vsm_{FOy{~ph8MshHx`{ǿzJȄƸ}ׇܗĿʆwWqhihk}CejhupkN^Rufa~ؿܡݸҲQK\~W8d~@تm0^__PMM[_d[atdƲ{)ػɽiяr'N9ձڲwֽٱ㥊ߋx~}pϒejjfgt|}ja\ua\uVa\d ]^2A zqty[/rlk}AֱȥLmj衱ǙqVi-tٲֺ~ww ؛^Kzerftd͝)qcwakɿgDuƹmÿrĿvtKshihk}8cjgsplGXsebz&Y ۤݸfaU^Y?fCݿe`XWXV XV_^~eqdįzkƾv еyn_P6~ɃMgң6*Ͱȓ˸Юamog^mm_`ip_cbhdagrA}fۼ@@ S+|[_]bj) ںi/ֵFͯο㞩oP:7,iЮƵ ǻВݬM^~me쭞uVݳ ~r|mrpüIJýmDyɻrx½ztNrghgj}:bifsojHqeҭrr|BXs:~ ݣ׷ɖԧ QQ >2ОQMP]``SLX޳qzuqsὬǵǢqmpqn µ ȧrc~{iYPɪߘ턊s}ݭcԶƲdeƲde P_hYrA9sԴ(Z9b ? Ƭǻݰ|~wqml`ɪƿνɊ~Z񿹌>fpT޶ձ ɺZ{tWDd{]`ɾkezlEpfggixyx2`hfoyxxymjCtZ ٞζد]]xOĸW>2؛[\ذOJM[^^QIUְ׻ٴ׹ߏ}ګ_ʶɼ½l½lNt \yyüĜdØ ½عüڼȯsܱˮɭµ±ſſ»±±ŰǷϧȟ ǹ䞍ĵޯN=ޜͭecenoogbj̮Ѫҹ}ש]ŹźŻBWaa`eka g0ĹǼt¨٪ŭ CE沷ѾL< ޻Ƭˣ%?<?%,4334%S}hjipוݕùԠ»@?鸞̷N=Ù֙ܚȜɯ캸 T Sɵ.ROJ=Ȯн Ǽ| y~vwv  縹䇇ݷ?Vjꦄ×rטEMŕѶ̠ ܸ ζӷ뽹 tඟ ᎤxyjϞnⅳ v \f߶yڍty uemŸ ⃎|㰆Ÿ ظݬ s|ĸz۫3ğ MʿyD ٤fg: ސÐ|݄/Pܑ榏⻞܍˒  Ő컄ʋƞ츝ʚ ةݐΔ ם x ֍ױǚ-ɶَT|x,m鸈ߊ  ೉n͝Zkw 䒏 -hٌ󥅐搗Ƈȹ  虉ʒώőǘһ ˅ 鈸ӌy#- ×򲄼  ч蒐  B n)uȑ] J ҏܓ`f ֗aj 蚣҅ѝֹ#.ylܱu綬ꗔ藭څ ޓr_А փD-ގ2{ފ͝Ðkl ث ٘ Չѐir ⣙໙ w됕۶zڊ _Ѯ}͏幻羺 䕋gj c̙¹ 3%ލشWqٸ 躷ʸόⰛɬ 庺 ԁݚص ÄԏZÙ ǹ݂בʵvpطܐ[ç؅ ۲\w]ݎ ڿ δ`i ĿWu !'锰ݕݚ\vyȺ %F՛ əî瓖  Ƙʈ ⏌ ஊ͏yБٷ щُz b݌eҕ ɾ Vyuټm'0㗭oc 2ٻ Rž強ӂԦÕԯ 㺿݈Ž Ӡ݊ۼ쾪 ٽɽߑދًѼoٶ ǚǀ| 亾 л ∽a"cْla"O֧җ㋪뛪f绻 ӟɘڈۏٝoٷ9 동  կógﳲ'Yؕޅ˼ݯ񳘓 ᳐ql䱳ЍծڜŒߔڛŪڴ ݭoʮٷ Ά ׬؊ v`ƷlR1]沟yq˙Ǐ ǫ3҉Zuǒ 彿ĕĢԜ铸ѵŊ ڶߐ`iѺ ̻ؑ0!Ӆˈӧ۵칽 칽׾č чѲҎA'ͳۊ ʌ ֽ ّ鼼кݻͻٷ κhneinnhfnhfnlfnfinl~gnne㋵Γ ?=ۯńڸ ̄ÆſY Ê 煙ȇЯ֜ ʐ Ӄ/ߊٳ祓ci`diic`ic`igzai`cigyaii`ĉ봊׳ɳӷճӕ$⳶˲t ԋᯪܑ}Ȳ܈ֳ`¬ ̰岽ˑÕі׶ѓɅ‹ÅIJ˳0%ֲ(ҷ̩S؜γdjhahjjaejg`ahjd_ekc_aijdajfbijjib_hjc_gia``ejdajhahjb_bjc_ahb``cjh{bjib_hjfbjg`gjaeg``fkjjf_cjjhbijhzbj ibfjjc_fkjjb_bjadkgejja񯅱򺗎ׯ݉i͔'P٘ ܖ ѓϸm׏Էʸ߇Ȋeӕ®ꙑ™ɬ'ٺ󳍟 릋dj h|vhjaej g{thjidrhdahoihqthngdajh|whimhujg{bj(hmwgjhl{gaafjghgwshhzbjhrggfilkikb}hjaꞕ_݆l⸫syaCݵ´ 瑚ˎȔ͠|ꔶnmħ܍΍ Ԋ֟ aʗמ Ӌ뵏ઇeo/N@ӎՊdj ipيdjaej dchsomid^zxfforʤddajioًdhw؎~hѝoeg{bj(eoigyxp֌fa[Ăwhjiх_~fhzbjg֤\thhv؎~keufjah𽳅r}b( ݩχ ϗjDZҠ כ ԝɊ꒚궄곆 pύq ڷ_=ʝ䎛djdejaej ifejjchr˪iidbhoygjjqeolbqtgdajdehrƛb˫iebɇeh{bj)hqۿygjhoze_hia]־}gjjf]fhzbjaaɼfhrƛfeohja¿úh t ݱ֠Ǽɼ@nЮ\֕Ҿ∨Ȍ ɛې՜ۏ  垓  ߿ځ|ݕ ߕص q<Îdjgejaej dȇdfj`djsʖddahsygijɥbƴlaajdajgejhl{}hsʗ]djh{bj)g~s`girygcbjadhocejaoƒfhzbjchӇgehl{Հfoqha쓥ty }a莸ֶɱb }/&ш߽󞔟 ī΄{ЍڽΎcbʛУׄϚĤk]zϯԕ ˆXź، ڐ숯ɵĔdjacjaej gufx~eaowXddbglsfi|fg}oXʀk}hjdajabivq\ŏsX_”djh{bj)irhyzeltb|lijae{c~pfisjgzbj]]ʂv|uq\ƈggieaՑ"ٚկϼyx |s̕ ݴ۠'(싎ʂΉĕ ˳ۊ llݎїŇꢓ ŽՏTA  Ǥ 騃dj in}gaeji ƒvƸǺlhd^xrcɤ{Ƹefjjdajin~dǨmǺjnhjh{bj(drqmcjja`ɂmӽ`e~ghzbjfֆyǫgiipnia᧊θ塒˂Ͽ ۚ lϜepq$BY̆ݒӜ؝ ך ʥ؇݋ ٽaדdj kvrunjaej ijwtgkllovwkpxjgjdalvquliiuvghrxihnjijjdajkurunjitwhgqxjgmlijjh{bj hwnflklvqulnijackwreklkotxpijljjhzbjitstpgtqedswhijkoihpphjaNJۚǠ衮Ͻ k ܟxärR`kQݣŽōԚ ޚɒՊ 䴢aj񨐝锠ȌHÛǕdjijaejijijijiijdbjijijijdajijijijijh{bjijiijij adjiijjijijijjhzbjijiluijiijijijaмⓂ _| pZǖAWYЌݗ䩜֊Βܑ cX– ¢isĠ ŽJi~ًǛZaX[aa[Xa[Xa_sYaX[a_rYa^aaWՊΪ Ծо ̞ rInݩH ͽR%zʜՎޓFӞ 站ǘy΍ ыʀ;H$ܶL凪ۋѾXݡƷğğ͠Ÿ͠ Έ 蟑}ù鞸XՑq Ѳ4 •rg ȇ ݍô쭱 7#ˎę̌Ҹ ԔΌбڬ䀠‚/4րMꌙ'ȏՒ埖şǘ南̎  y[mǬܘċǵHղӣڃ_ 괹ʒƆ ͵ҹgo׶š Z ț‹ϴה길ԅՃβ󵆐 Ԇⱆ ٶʶԵŶ SʷԜ‡̊ɳΊ _ ~5l`q ˒ ؒᘥ⥯Χ Ξ ޏȘ؎ى ۍO܍៬͌͌;ئߥϨ 쪻ؐ i߲߰֒aѮs춳UEʹ 보Ա {z، ˜ﹺ ڛձ ̯ Ն׏ݯ䉘 ތ}~GC泳 ɳA¶ԐĢόƋӌÎyq |he^x]u]{iu]cnh^ly v]Ә{i zif^wÒϚ ԎѢ上azСQ)Ź ۂś鋿 ء  ߇ ƋȈϑϖ뫔Ɣ_y) oʊꎣOj z҇ۀzԇ'܀zՆzՆ~ Ϗҩt氍ٯޅėuŋƺ5{ ݖӲ]nȟ os ؑێߑçӟ~җ ˓ ɇv ѐזְ v@_Dي͔̊ f ĞϕĞ'ϕŝДʇawk uà Дؚ篮}ߑۉx98劷Ɣ̽hu c` „ŦަaПƈ _萰Ǫ ꔙ ܲә xΉ}xЇ'|x|ч xч߲߳ϓ換ͻ䈐B) ǽ׳[͏#+ ӷlЋ拦óښڊꫴƝ쓮or̒䌰 ]ӹ˾˶Ŀjemrh a㍁1m ib϶bvmwravrahb&vra쓼[rcvm_jzxrahc hc͸cvlp~⸄טɕ)Ԍ̂܊W {_fsz Ib wd Ҡ ͇΅bMܠ e֭ا '^ݎ޿yՍfcrgęUA׉    ֐؏禽 䏙||ї] رږ ۼ~٩`rDkʕ֒ʄˆڠ Բ휖ɜۿՌՇōƟ ґsf Ŷg佂vk߉ܓVC6҄Ņөźώ ҊӃ ӌ彉{R gʮ\iĥDz|Y"u撔s –Ҫ ȞX鐻ȋ Օ݉˴ nf ԍv⠔˧ŖClUʾ␎҄ۋ Ҋոjdw:ڼ ޾osמՐ aC"|⤇ȝ ӇǛE鏇ŜՐ5Ƒ抒􊙒қ  ɲ ܇ևh߸?ʍɡĹ ')gD3/wڍǥ IJ v忭Ԟ ^y ս(۵fu ײ 񧛖͟ᔷҺϏ _ğГ̬ ϜϏ 뱦†ߗvh뵖B:锼 G`0z .8ؓvyޟ  ϔ͈ 繐iߍ0+`ٰ ǎyc㱻ˎ݋ 믒qӄҕ黏ߍ莚ӌʺ쨷Վ 廾|iePof ?Dۉ J{t^QQvXԷˏл ڔ {fԄ7嵠6ММz^ ŶĘ ŏ׼؋ ًjΊjhꅸۅedƚcyqqF܋ѹԕmъ hd0O?4,R͉ɜdd:$} א؃ѓ ΂wr[}'Vۆ0 ܚڽ$؋`u̡`x@mߐچš㴵ԟƮʮp`d2܊lr Ǡޝ̒   j5r T@OSfƔ ^RHņ ^cpGûъ هBԕIO ڎԋӠ~ѹ^ûXﹽۉŒ¾Ɩckӣкؤ  툞 ݐ»󿰠ڷǩt~a l`qfjgq<]{u]]{Z=tZqhZ rp{[p]aj#qGyx(Qd1Ȅ瑗ď ﲒ˟z칧]-  މ A:o۸ ^Α ̌҇ …yЇٍw }naXa롺sTӉryu nm뢹v/2 [{y4CP␣ , ٽsĥҼ ɓذykQ$z ã ffо5"{7ɿݘоħhܽ‘񨋗ƔωᓖᑹuĿ ͌ރ쏞씡xڻݺ鼸X ks]جZI}Z͌BhYgqAj ʙU[|XV~~䭐ň롲+` ы  rK::e f{qؙӢԐ٩ňʖ|܋ɖް҅Ȱ҉ч ыȤkrĆŷ] wh^_otlS?'^YXdmx_ {Ơɹ߱˟{ˉʐ錈0;ð CWJ斤ØͰו=܋ї\wᜓҽ˒މ򫮗ԣⲲߚmƮ“&˰Ů܎b s_hcُ^xݍ~euY }sʞΒoyއyftG޾厭a{ ࣗϸޑ ƏɳΘ鬠˜΍z搬̌0^ӱȎ ?穅ϔ܆̓\1Ա ܉ gǥ 盄ɉȜϘ叠ʭĝ ވ׌ꠋ Ӗё Ҕ ٔşՎݎŏՏҞُꅫ⻾ {Ⅾu1s ܴѧŒǏ꼽¸ sİȓ ˜ƻ ډ䗖גϻ ์ 픴 譬İᷚĻۮȼx ֌ 㯈ĻՆԇǁ׏ΞæϞҎ]z蹠 ۇ4ݰӉېnr Ζ҆¸Ʉֶ͐ߪЏ ڑӊǐ ㎢۹[ ݦ ῇY̖z˞Жɱѡg }|Q(Yղ Ύ c`-۞󤗝ِ䉚ɲ݄Ԃ{ୂڃߵЙʈicʑץ Ṙ첩ʗ֯ ߁֐㴸ZĖ ૉȥ8;Ŗ뗆ۖjNČ:;ⳕя쒅 a~Тޡ'𿍙ރË׌ ې~Ԡ؇¡ꌎ֍ ǝІ㕗Wۃ ࡛ ϟ 鋞㈟rApվƕĸ bڙ ̄؜Â~տΆފ׎ڡ#Ë⾐वנ쟑ڠ׌ތ ъنŵ 翿WR× نŞ ߌ׈΍ br؍̑y*(4dq} ޖÖʵސ򝅰ȉӟąথ킨љߔ ˁˏ^  Ā Π㠓dŪ[a0F򵳐R}D+3CN Х ߮Úؚ޷ܐ ֖ Ӓ^ꎕ䤕䧌ýܮ㛬ݗ陁ދ ϝbqe׉  ޓ Ѡȃڟʶ؊ݍs%!M|Jl Z557~˺ ĭkƈtbܒhޔЇ~؊ ЖՕؙ͊ܞҠĶ õӅӶ*+֕trSj mRVdjT ^ipSca`^Yx^fa`ltkúƒ˓ ؐ͜Ɗ ÔcC19Ly >2+} ܊댳ǓŔڨ˅߁_ٖܱ}񩅺 ܌̤ݑۓΕ##֌̊à_ܥ}xnu†qx͊ntaXkъ z eױ]ʕ ݉ en ۇٻĽcC4:ЕΊ'A̻đɨиҒкГӡՍLj޹ ޫѐʔ ݤÓ댺ѺŚǥ؊܎܍ﺺ载ڸ幹ޏ* Ԫ܈ݾkt Qp v Tm7^\ࠥZͽucġ B49R0^ް ԉɧϙߚ~iР × ӱДr{ܰޣ ߎ Ӝφ׊Ǝۇ:קk_eQkx]UcT֎} ב ĥm܃ By騣2ҠӃϾw٨Ŀ՚Վi0;͉ Ș;/kĿ¿͐Η ɸĆ ɾɓ͒ ߑλώ פ ޜ 빋 қ™ǙՌռ񤓊ĿՈؚު{Q {³diѰBe߲[Ӱim뮐DºC'Y茧tin{ݛsۊ[̮϶enێ੖7bꆲϮ𧍙g .9܈ 91Ŭ ߐӍ嵕̊Ӑ´ب ë ‰g  h䱉 vqi rnnt~&qmt~ywq vhőݿ 8ߏՌø\ʩޖd1 匜ڌ8<ʯ|pϦðџӯƗ┠j^᥈ۊ׊ַ г䰱 fqݮ叼 g汲f下ہ۸'?_|ҙs,Y ȓ ˒N/yi^vƙǓވ } 誋› ¿ 웬ٔ˚˓ 񘗭ʐpneݑ Ͳfzڔ ﭔbyībeṹŻW- ۉˎb'Cż˰\güߘغںȼ ɔѓ Żۑ ٹَջʳɷ̺ ЋќÉݵкƻƼhۺא͞chζljՍ滴͑ٓ߱^zψ4?˜= a|֍ۋНǏ  ע 殺苸溚܆ߚT ޛ`#lj z׮͌Ȱ ų籲͛ g鱴ɔ߱̅*zȍ"Fѱ '˘ɲ 㐢 ヴ͟ӱ 蠸։ǐʾת 廾﹏͍xϔ ֖›Џ 碌և˲󒜛ߙʬϳײ ߉ ˒ڎ g ֎۴ᔰ kղŐׇa/\ ǒ ŵӍ^Њ \ ͉鐒|Χ؍ʌԉ-ڎǚ  yޝڬ{aY^uYbnviZ|a W |aYY\\#Yconl\׻YcoVy kpԎ܉委 Ϛ.AuVvꍆ{뿜a1Βzbw謯wļā̽ Ƨ菟gƖ¿ػ筮♬߿ø ˛ڇَ޿؈÷ÿʊҼΑy̱gs艪Mh뀭wqogsvdfϏFgtkbagꃯ{ͦ_e{ͦpݐ 賏4⧔ސы o.];j}W 뎿H4bǕߺys 젰esƝxs᥮ َ ꗖ Ě ݍʆƍ |ܼvU蜈Z^֓7k4mnhwV__ͭŸ wVꝇՂyvFeӑƌ]s܏sỵOVdžė K8EZUď] 啍Q5J䒔w ЪɕŸؖ oaݕ`}ڍ ǐ ̑⼀֕գ ڸмŸmc{{ŕ {sdĦOufd{񋧄umҒlj|ը^ӝ{uZ˥pιgьvwɑ өd3^EڝYPV.߶Ä  ߟՊߓ`Ӝ֙㿤 㷴҄ڐj䵏?jwπ`@m xjguaka׆p02mxrmzlgyխi`xԭ^џjӒˬۚАaddv*_•ӵJ2 X ә ᎙ᱴۭ汃ӋNjϔތВ п譖ӟ̣ХJ:ӈ˳Ӻۤbgͽ6be[XܶU VRģWbeli[Rbe[FhapbU\o_\ow[8됪މ`k㱫觨8T|ǺԔCB ڝ*Ý~̪ Ǎ Ƕ Ԡδݬ`씝ÊvK ÖČ޽ܧ9w ﲤјݒִ_؆ވK?tz^8B ovǬ~Xϩꗧِۡސُ ׯ ԟd ߏŏ܋ЛÕ⤗ew Iձ粚̢ ːl|5 rcƛeȚ㍣Ռb-!ҩ˱Rh:>J„ad χʨɨsi<* Қ `|i ۏꝮڐ ͏ţ ⱴ ńǠТ͹ ݌IȄ  —˒ *v삏A6S8*.+_|Ý 䌋 јe vuB?=Ӥൖٺ׋ Òio ԎƆՅǎ񽹿 ✒܊Җ ë Ğ 釣ƦQ݌█擶ۙʧغλώ46 ݓ߄sʅ_3/ Dlþѽғgaλ i./I;ݛ‘󾐐™׹ ͖ڛ~λ 嶋Ѻ Ȼ ׈ͺк ǻ EѺᡍߊʫϕvz𼍰Ꭰ ,Y ϛӓAxÊBmI&+5L{ȑ݉d6Ia>ڝ땙喴٬몚ۜŸ])Φ˰ٌ۶ϔ × ա7Ȑ©ь֝lȣƬ ɰ͐Q+ͱ"CޮM+ -Suٴ ٘ Ë۳_Ysau֝ݐ㳳ʒ}ぺ˗݇ ٗ̿қیұؾە 󼰲ﶱ͐ 屧܋񸳰߄H̱ƯЊafw~٪71 xD5FoJX1)*4Zᒰxӳýc}zOY˞ȡם̑Ԗ 蟠临秚ќܚʝ պ ֊ ~ Bꇇzs {s 눆x~xsr݂~ s{~{~쉅ݽr҃Ւv Ɂ ׋32Œ#=0Rhqiķ^E'$7q|`~IWОĮӡ נ쫭 𥇫w[œ車ќŬ®鏂İϹ¾ ޿ý¿ȳHۿyEhlonnsc访t o҆ ҆~ʗԄ ӗ Ӈ֍hdݍ,z:S}٨gH3(+;h ӐۡꗧŽْw۔MmUQwQ ݎછաƞy 񵣮ՆԔƕТŊ Ϛʊʜk`XˢL5sڈ9sͅ5r|[_̨AjzUl ͅm m5rǒ Έʩ鸉 딴ȍ]ȼ֛V1nc}ísH1"V ܌ƿ`OpP'Wꢪړ؉г ڙٍ͋ ݐҒ ˆ𖖀"؜ؖ弿ϵdl А˚ ǼҾc~ yʓˈlwbl׀Y}StewƂǂ`wg 쩊ކǍ ϫtc滢ߊT3D`}^9#$-Awl[Zpа°ˏ៿BKp ڭ)Lُ{ Ř 윑͓蒘 brꔍȍ ݎqe aS7md"\qek{ |cģ΋n\͋Ϣy ڊҐɈJ6݌xΦsB1@iޙڰѮoYWbˢSG ֔Đʎآv 甄̘ߟٽԉݯЊ󒓿Ǚ ͹퇲ÍθoR ^c귛ԡRQkrVCe_qRm_\ PveUk^Urك~_pw wRrŚԳ݃ ɘZϱ9##8xАԨsI)"%/N]췏ǒto\C<˒ ֲΣ덥\g ۑ ̍×ZțܠY   D   ܕ ’뙱 jD. 6T׭掌{ěX;& 1Jۡ|N2qqŃ 趯 ڐ΢µ⪰}݉ َb‹Ӌߐͼُc u׶أӐ Ăq ۊ U.^ӋɿP7!2Uihއӆڑؐbəݎā \Ƒ]ԩًғϻh͜ H{exv춘 ߏӖ ܮԧ苐뉱ĆV9'"+:p]ޘvt{js~ߞ㰈æ~o5\ȓᮔ bƙ dž䊙ʜ͔ ܊prt R~bb  Œ萆Sq_di{ÝjH++>j2np ۝Ӿ`~`ԩr¿qೞʓΓۜ 읋(­uלǝg`xj̹ѩΌ R ђ~ ߘқ|qfe]E1/6]Ƌ_e ٥ Ǟlru݃Ϛțծ ύǻ̋ʋdoךp]݋񽹺 RǾä΢ кȾн䍐ΐ՚[ziݧtI0"K ܽ珕 ѾȐݽģ`hƋVodHx ˶А=TԆz軻ɤɩ ɓʽ׹񿻼Ќḿƺ︳W ̻Ϝđ܉ΒȐ Զ㥋о s yY)1Bc 椇oviT,Ysaʡ  ݿ񹠢  Ҕ`dыࣉ҃ݖk짤ۛ ܛ Ρɞ̝ ݥ̝пÎο߲ ҿ º̿㓋¤wbHvmxf櫟̈́\D-+5Y𥀦пŴaoX¾mbXFcvYbŞ}cʿLҡ򱅩ƈַޏپ Ϳ聃׽쥫F he]d-e]裝dF~nmej|( d쎅a6|} oŞчЅӖɯ˗ ٮ|˦yw} ӝoF/*3I~޶ ЩzlxԆix`~ ȧﱅ원ݳ 9t —E~~ֈpsϗfۑ݈—㎐͍ԂŌΉ곴Ӊʕа÷Ztscil]infqΑ֘زvQ4)3Di债hӓܬީpcgbʎ\vd[`]YcOsͭ }ѣƮÒİޑً ׯҳ5 Ԇ´ՆܜϘKӉ \ظ\̚ Նv܈\gvh 횒ȉՋ ǎWÍݳ ے ϒ{xԟ}Ưlyb_ ŌT?-+9]Ou]|ȁݶy՚{ލ`} ܐϖ׎͍ǣޗ  9d  [HUTX;d·'yfqd9k[g/fͶźՉ֦ЎȌhLţ…ͷλζݷӹ Ѻſ)µoa\YѷyZd¼ɐL©ʪ؜oaԠqH3$ * YoIdɼͮ佛ї|~đƞ[\ ѹ]icV割ϊd|̺՛ƜƗ̎ϻḽߓ׊ѺҺʻ Ўһλ t5 s:ɰelrNRelrOQ†cla`'rwZipwrzPQՌqxLVy鯓pwro} Т ݘȓhՔÅbϜ7vԉͺ]NUk qvlgnХt755䨏߻дi]Oj}߻{ӂ~|,򍗏җ` ܖ 瑝 Юc    ϩϮԝՋڋǔ º݈˰ŭ ¤4feaie^ewcvzͣtUƣťcHDk亘Ŏ ӵѠYc~{d]_eVS}xiߙ}vdN`Pҕ΋ ɱƱ뚵ʛѲаί ؋϶հ   ׊ ݄ϽȊ>"鵛 މލʍ˱%ɋyծlcV{x-p\=8Tkotѧ 緌uÝͮ~t HƔЊ ͎˔.ϟnj ҕٞ2؎pīĎ̉ؗ ʶ Šq^cùnԋ˽+_+&!<\yȦ貤Rpzqmlidkzo~] y ƕΎ؟ ͓ɐ ǎՆܚߔʝ2艹⟞Xqˢ ݡ  Ż ߕ圆ďl~~v$ជo]E.1{İ䫋Ç˒Mnxskd\_k|8~I 綃ȑ ӌȖ 绌eĢ›׭ ៑Аݵد×̭Ljû Ѐ痭&ݜn ֌ԛ؞֍ ޏso ӎ#}U<*OZWT_kmg􎻨ȶkw܆ੑ֌ŏ ꔺ๛܏؍ ze  馩ȅކÕދ̺ގɍf:5+# (lѣՏ ٍƖ~ ㇴźɋ홾 ͕\I ̞ ›ⵜpŽ Ҋʹ ǂb Ҏɢİ q̐]˖ϝ劃ȢfJ9,-@mœvj ܑ 讌֞ݗp֖ތ^ׅ  ٍǠ}^  ɇ   ɻ̷mcֈ֏ ڈ޾ӽ닏ʿݼ ތӊλ۾đ lj`;+.6_ﻖҿs{{' ߖﻭ՗ÖcuЏǦفڎλ۩jҿ ѽ ɼļ¾ ៉Ȍ 2ob ;mmfnoxA`}]obnokh pw~dX/ pwd\Zd\悆2$!-Ik͈ތos`w bĭ Јz Ɇ݅c(ޙ ЅٗƖ־ ꤉̔ fc T׾ Žeaĸᶆ,變J ь\ØXK|J\dPϣT УYW|x ݋ȗ؋ ڈ fۛŽūڳk;8+/9ZܕФ~w rběΠ ʑ~cӤ~N񞊔 ʦ 쐢ܐъɍh~ ߧψǓ у 璜2~~ Sz9zl oq}{ΘirFvև|ևg ѯ۟ˠ򺣕 ֋ȍǕְɱai 𺱳걲c9 +Pޙujȱ渹YX\TҢw ݸܯȋ3ȏ n ໛߆鉰ıߗÍ󶰲 dn ͊ޮ h ԡC_k ^Դ^ib܅_t^mĐcɞ`'z/Qmօ{싁p `mpĜx  ﯇ޱò|ᠸuތߒ֦dD0(+Erj^Ȁv k깿Еpy՜a ΎˏΈԇܻ̏桻ǫz]ӈ撹ȝ כ ؞ ɜɝÝ髦  ƨ ׺︻빉ފɋļѹŻb]ּ֩¬^< MnݬٺÅR**J`Wpmɗ Żɠ⏷Gi Ɠьe Ո襋ƻ˦}o˒ͻϻ Ȕۺ ɪĻ z㑟3ݐ–ˌʈƚ㑡`΍_B+-7O ٦b91/12.Gꚗg܀Õ`i襼ٔȓ┝ό섀؉֋֙mc ͰȢ2+ 뵲 엔̎⌦ӯʶ·kůhB, 5Uڻʰ VA,,-?YjlW( MB0vzjԖ񫉪Ғ\qi暒֛݉kyɪװτߋ۰ʰ河}˰ ם*|ڶ[֮ܬnʍѩ ̋bwD1*,8cӔ 5+5^rj -zh따y՛əӋךȋюۊɚ _ǽ*ﶴښs[ϊ ⇔ǿԾƕÖʟ_ei۾#W=#$D ·uø=2yݗxѿ»̒ЃsȞ܍يêԐ蠱پÝȸ\>򌏞䩟ҾK,ÈćV ݴޅ䢽ҍҊŎ ҅ ǟѨhnp ڞcI0(1Em 8.:މ[+4뢘 fe흊؉ dpf ۃ ️ ꜉ݦךշ`grdﷷƒ v'ۑ[Aϵ  ୃƄưˡԽһőǾٻkF&&\彿 +y§mi2ĝhQ&¢ ꫗啴g޽ۉtiϓzfռ䬚ŵɝ똦쫒 j~qfʽ ɽZ>ߌ͕ e  琳 ʫߒΰ§ ΄ٗ♱xQÚ}S4#&.RD*4~݆ϑӍ& ٲ흮} 䌷֑jh ꬂub ݋˭̛ ֝芡й ŒЈK25}WnnUfqPS[uS{_b_ {_mTSFdp hRzbtj ᯈϡڊ ۹ hN@4պXʑ}ٿk?/*;W~ِ!'׉ڸr ʭ ȚڲhސvZ 빏~؊ɘ 锐ʉܦ   o󜘾vyᩡdq}rzrocְnnr\rv䪠 ^fƗ ̠؋Ú `6paǡoA2*1Cv,'} چߒ7lh 빾v崗 Ӊ xڲl l^|^KԖàbeewWRk wWe˱˟gOY ¸蝇 ߣגӞ럎9ǿuh{V8+*0PDDzi¯ۈݽܬƑI   ȗؠ 䈳Ѯj Uf_ hggάgm]XKģׂވҶ⫫ƺ ڼލϛ ʶԒT2&6Y0ۣkt蒜џ ʊ楷\]ˆz y ƆڗͥڋϿ ¬ɔ Љmƃ׫l u賂Vipʳcު[|qީ]լ~dħ'{٬pnܪZɰTٚFt fǵdr݊ ߈ݺ 񼕕ٓlfڝi81.7Mm/uۊԠٌվ{y{﯐ѭ ֟暑 ų ×킌 ~{szv~vy} yuv~{ wĆۘ¡ܯێ Ⲵ ǖ+ϝ} ÉDZoe}ZN9+5C@5െO]rl䏥ahx۟ԯ Ԁ䶒ꝋsE 鳳ß軠笝ٛ͘޺б絲़ 铹秉ӑ擕ڧ܈痛ӡq2ש ~^ ʃ– M<6b}ᆸ}һ׈ פjؐ؜ 󼟍ϧ߄⃷ػшޚ㎟Ҟ^wŨ Ӑݤ״խw~仯Éʓ֫ Սʊѻλ r] ż鮎ͻo׹@1w!v֌筸ɷtaҵy ﺕ ݊ZӾ㌠ۖ݌Ԉbyϊv̖eĻ hc ⷖ꼼}ciݎ ˯Ԛ͠_HC"}]lхxڍg~ ڞ ɉ.  斌ފ{ţ㌄^¥ff^Ӯʅׄ턉^ʛ ܮͼ̛ϡϕÃԮ܈԰Nԯ_v*TŐՆv@ kyڎpΘޑ]w޸ Җ߈ۛƠ䂪Ȏɰ ֌Ǔ ־ ݎ姜ٴŔ ƭĵƈ&҂Ӌ䕿홉v ڔÄ˕ˏ䐸;08*Tp b( k ۤܮٔ뿐œƉ̑㱛t^ʕɉ ³ێٰƊɑ @%vx |{Ԣͽ ٔؽˍ֕㻌ˀ ʇw о Q#\+Tg^̽Ւ3%tȾրk짏ԙքïǂɧÓvȾ  ه ی{b~ߒзߖԕ Ȕݽƻj w ۓ圡Ķ ߎ͌♸_g lj,T BUt|˘Ǎȓӏۅ ،Ϝ  ߒ Ƈㇼ qd蘉z!Еǜ׍՚Ӓė]|TbrU\yzUS\Szal|hUVZ }_t cjlkVuϾ Ľѻǩռի߼ⶆý컿Պ췸Ǽ Һ帐yv؟fl/ui ԞœߞҠ _f́姇к瓚 iwÔîʑ ʓɏ lފ܆ǟ zg|ֆ[hֆ>j^h҅Hf nbxm.ˉ؈ߩq עˁ õݝѾȌڊ◼ޤՖp3ǧb[_7%k^֜̒䘴 󌗘#u}܄ݖ冪я ҩ_l܍ė͑춥 ㊹jwТôӋŬ ĐƟبwרz^qeznvnjaxyy.ǃ󿼷afՅߺՈ͒ֆ ۘ 󐚣wj˚*?{ʃmku-B ȜӸ ٙך ia剖 ݘ ĉґёՇ uml k}XZ\[hޔ5&bjωe@nv3r UykԜч(Ҏ ͉֚н {1чk`$.ӽl{}Q񾈜ØŚϞϓ ԑy몳ƋƤԸ򣧞ᖌx׾f^"ɵɒ‹ƏtWW YgƳXjrb l_{]z`{]W ŨOkߺuf\dp隕㡖ԗ춸͍Կ ڊ׊ݏ Ј 3ƍdf02uxzl!ߎ⻕ 羃 Jɉ`ɪ ۏ᮶ ÛӇ ܓzҌ |cdhļ 𯶝ߍ΄񝝗׉ ȠRLjheZ#>b{Wҟ輂 ֈ k{= 5ш鱴׊ ٙջe}ڶ ܘ܉Δ ͚ggg3|ᐟĦ㮖_g좺ǎϋ}Ń̸҅񙎾y /j݈ Ϯ8sޅhrjrϖɹޚ Թ䤈 ƘӆM"8˶ ꕻ횡>+ƖՉČܭ fdË ܉ۥΜ͎ߎ ȋ 㲪|ai“d쭇ѫӌ #Fy|h˕ʅʌх金!DIڊω蒔i ՘  Ėꜿ̫堪ޅ   v ԇ齝̸ˊmxʆٿĸЌΏР$dÿD*MooHΊˇЄĿ˺dܭ꾡ͬ r1م¢瓧gcנ׿եχۢ {M֚ɽː u\f⿾}܂ⲍ애Ƥޑnğ ފߗޚ]*0+zsˋ blż Ӂ¿es |a!ӒȔǞВ֓엺▌귨 YyQȫ ߅Ș 䗧؝Γr/ʔ_rbò ӏԆ䎢ɖ㹘aÿ ߋi`]|ʘk|ﱲpݗȋo` ާК拳ݔ ߉ þ~&ɍx ֖ ]䭪j¾ٜٗŝWƠ빸 ^h덵 ⾢ ֒ō%~y1vM҉^od˞糕ފ lCia˲~úbjκٖ漿+ nSÚŖώfʍٜ͑ ϕɘޑiq ʘhkikw mlߑukv ŷ淴ôɒﳌաƲ⓯ﴲ َ݊ؗǢ!ݰ›흠洴Z - [14ʱל 񧌢Īˑ ˓rȀcХҚ㧗ܞť`sDZχˡ:g̑$}˲ɇސ  ܎戙sptrnujejs[qᶺppahr΁ Apȝ ҞR տŁj\|Μī ׸ΞȌΠ [/Bu3-CˏᐲԨfq Ȉ˙ ޺ܠ Ɍ̉㲳o z]ѡ׉٦˓Պڋ | nj찔@hrgjyÏ܋wqՌƠɊ Ꜳޢ׺Ε} d넼ݸÛʙ㿮p˺ľ{σ뉘忼Ĉaa@ Qfx pC_4->ߺŠȹĔ乽ڐԉ ׂҟײg ŸĽû ӷ Վˮޘilf`Rкɻ iю ݟɐے֟Ӓ|V @ؕȈ~̈́{єĝۂ|zxi`kɕؘɲra襈rȕzԃr{a5/,2C=:< ;."Ct܏iȔҋ澋ޔϻ çz ߍUďᣘԈŐޝ ߘ- ,GC!X iڻ %ћɬ|Y}  da Y‹nz꾉 Yhcn uj,Ǣ øk~ݥ̾֒j_ ա`؇վχǻϵ`|YÖN;;'&)0 Dcލ򋺸vؒ+ٍŘƷلΒ ȔȕR Զ뺖 ʥ~ ԉ ҡJe> ) oA|Ec SGk[OypA}o`VRi=`qRrUb'bl1gEb_cۅRs}Ah Eau ٻǾȠ̆瘔 ޽|pZ&n єg4ܲ~ʷӯ͛ȚӕXѼʪ硤!ҙҍN q$ØēėҀ ĥ܁΍֏:$( ʳ \   ϻ ܊ͻ߉ 碐Çÿ˺տak{t|Vjԡ Ț Α݆㹚{Თ"Ηʓtr͌ڥΓ аħ񕊯 ꈫďs̚ʰV\°üꑶϏžՑv—ؚ ԍ п߻enq_Z m1򔒎֌ɕ߈5Joב"Ȫ̄Ou3򫕝 «݊ݲ Žt~䞓bŔ ԑ,t#WPͣΰ뤉ֲr噘 Ҝ쿜u δh{\!xՕ w ܐے҉  z톯#JSԺߒŒוґ ߁ȉeȒu@#_ϒ$Χzښю˼ǹ ˗ ٖdeqj ȸؒyoU{ ׺ǩ|к̒ܘ ۃֿ(˗܍踠M͉ ڏњēڔl҈ ύҊݟ{qťC߇q ͓ׄ ғԏ喩뺎̤x攕r盛c%dk`͊ ɶ'ȚddƍԠڪ Ĉʅª ćԈ ʋϊ Ѧ쭥Fޗ&ǐƿ֝!Ǖ“ͷޕאւ²ʉ {ےϋɍӛωf ˃̑Ŷҩoï}0'͌{nڱ Вň܌ ㏒ح҇(vvʏɭۚvŶʾtٽ Άʇ{-eQ  䙩ޗӋў钸ݰ ҋħȑ Վن.v۴vﴰΚŰq˄ ՜|ΙsڅPl܈Ҏ َ׍ϐp'?ː횳Џǖ ĒՒŒߒД.zϣŤѦ 番ľً9,60BRz ٪ }ŶȢuq2[p͎Բ巆瘋 З下񳌮܌֊}zӜ{7 ܎ˠ Ć` gklDltiwo{llltݗzm fނdmG}҂ռʑS㦜؆ }X:2496884+,3MϏՕУt,% 斑 ۈݻ ˅㭚 xa~مԍr䀬rm ˂唸 m\ tqvwk݄Zēރ aȴ׶a'v݊ڑՅ ۟ ݊龤ʒ<*erE0.PLUlmksOɪӈ׾߱ ӯʪpw kOّ{@! 䰲 vyx}񆎸 ̜lC.7Xx˰ʱ؏ӉЁܛ֘ 黊ѓ , ېﷲ ӭɱ"[Ӧ熑ƒ ˣ͙ݷ߫nku὘GyxЧVTlb`xuuvV>@B@54;4(')0112=7?8QijkWEtȚТ몬 wy.# ͇Ϩ ƈǬՔ|בŝAaܖ:3* `Ԉqך} ` 葌嶈ԱYB Ȥ>Aˆڗнľټv~Ͻ使"$Kz汑zVؾJåþz4X_o|]XZX=3378/(%,250"#(9AMDESwtĘ̼ ѣԝ젣 ʵ)# ݈ۼ ؟ʦaʄV&3}x I+! ۓ蕯_ŒMߎՐ؊˲Ԍ󖻂a馉ܧ裂J:o 拥ʻָ¾ƺoƌ뚯ٍ잱ƎˉކȘϓו1/c ˤ؄Š錼z:iPlzG3Pg]E8(:2-/!0./03 %/PaLEgv}R\n쏽 ̉Ћ2'Ľށἇ@2Du~ R6wd 藔9ݧ֗{餓疛ؕ̌ ײ嗹̠È Ў勪ع~Ό ׻ݷݯˊB3]ŗղu鼔xhÓmCsNj¼˲ɔLꭋ۳vwvvxXAC8# %<%,!#4&&#"2Sd 7-5]mϹͺ  ص;~xӺڴɜ Ð˦ ȹ ԋþ ĐҦ   ĚЃӓ ykʹݍȆܿv:jy_&xhްxW頊8k. Ck_6@a>2',6*)1.0(-//0:<=5N_\^}؁ސޕI  ۈϧzx}XM}܈X0;/:7։ Iל伃ң ޅ݇ 딋͋ ԈˎgfkVfcxU]qCZa]gqCqRVi \xj_Hii ᒛԊݶћߓᒵ!}덚xߋL8t⹤J۴ً Ս!ī`Jׁ_sN,[<,/,)58B:Nqkq؅LE٪ѺwտHp:?m95唘͊r׋쏯ȯ쪒 Жū  Ǚ Ǹ͈h孢tWc؎vet}ZÌw~sv{}jiØߒ Ա털 {軃+tT[vsq։ߒ ˻p5I̫igoU=?97>%/5*')/00. 88#J:hj9*݇콝%͗q~䩵z2' P:3sa lѐé¾ ܏͒~Ǖ؏ ϔ䒮_J u܅Ǎo\u^_x]y gVumWǸhӗՆ }gÿ 坆͡珝_K6擜ǙiSUis אڍfg ҅$»\mf}}^XZT%2( 2Wj.A9$:?>LOMOuĈ 𣑠ߋ%tęӉm|؍+)· ׌ŎE4t xb бeҢޞ߉x㡘 φϔͻ˂ aTg{따 ܌VF푇cezpzjyXJ`Svp֌֏ˡ ʐ v]Ӑ跠ᗐ XTyT(tƓTd~dv܉ $ԑþeӵkqË!2<@7(;H2,-./3$@NKSmsN=퓥2tZʥ{sQĞxkr<0 a5= !ʆ͍쩊~Ɣ ښ֏ž Ờ Z澉[ oa]҂ AcfRKb&fШgޡ\y~ڔg͗tȲMǬY߅ό| ̘ ̒ ʴŔªƛ럦͎%tkg0%ג|ɽ$؝t|䟉ۊ ټȏw}4=ƯkctvxZBDF9783((.,"4081(H1*6-452//.3:*#-8QRQZ@#6w漄Ӽ雲эrԚ~1 ,nt{ ]5K 4؝d;(ӕ͙k~– Պ햢衽Ӿ ➝ԔؔЙԘ}ֆȏd<ٖȂ󸈡|~֠W04͍攻ⷖ4۰ؾѱᶟia͋ Ӡ峎Η ͤ',Ћ5̛݀dJfe@BD632 $#(9;;>=;2K?1#oyq~˼ })f  ߎsf܍Ϫf… h%ѫi뒳~z$ވ废ę,omγ я ĔūČ݌Ј Ȍ 𴍗 ZaZJ922Of_i~ƒҺtfዶ⪄ͧ^Lwvs֓ɣhzfxwsŮ7{綌é\sgpǡw[_2й}ENd`Z8+.+$zҽ{WvX;g}+YԸj ɟq⿧yѤ9m}̢[  $␕]ϼaw׋oۧ ۣǙ fklŌܠ֑  řΒҾ ׽ԍñE348+iث趏tNQʔtrKӁڞsn຦ٱɾ̊~dz4lᶚ㶑vuƾu#Ǧv꾁9?n}%krgÀ НVḾro Rms^̒Ⱦꛀ Ȃ" gԚmKۭ׾v^Î ꠝһ ݂DZǑЅ䮒 ಴ٱ bŗȮ1$]~yܘLϤzjTeӦt͗|u\đs|frcmKz}XcV<!]1m5纊Ӕwhgmq{ֳdźƹmqv|dL}L˱ 卙ݖѼ /ceᰴԝᤴj#ױر|߯͸ێżݠ崓¢ƗƸĦ׋ ۉ^y툅1-sڵ ՈĖKИіƺraަ_rאUyyĻӦɐ݌zN(ܯ~5g֐|Һ ٶ .tޕ܍r+ȗ߳ӷێ|o ʪ͍͡쫹 㯇ޯwo_ [fQU TwamTv`f xa`bZ Tv]ppblTq̼쪆ɵ ͌Ƶ  n UФL*Rȏ |бVҍAϒ΃~Ԋa T͙){뺘ȞvXٵݑ ȿÅ唡g Fö ȵ ƣf߳ Ϟ೸덺׎Ҵ͕Ķ㵩ˠ щשĻ봀g o౅ucwwuin۰qrUhgʌaՒ빑ϐۉbL Ջ roP*;қ ىΛ)֠ʪĵéos}ݖՇQQ~۰ђld {yX*풤|² Ř㫰Ʊ̚~̪ ߈} Z| ߎ|`b ]ZDm\ؓ§\u>m\sT}Jhғşux{góӓηؐҝ ͪ꒙ 61>HΧݏ(يʘpY~x~W^…c{ 㖇fj놘{ِ͟ʸ̰]}ٽ~ʉ"%ߑ󠽵ت恵 ̳ ̧ҘųЇ׍ җh ݌ܳt` ԺRaِ\ewjwoԏ~“~ғLJϞ œލg[ؐn<8Гsϋɩ"f?}NȪ芬krՇX!bũʿӮ ڋ˒אzbڒԐb`wӆ젒Ժꑑכ˂ᠤԒ˖ pn qǝտX\ aiԋzeၰ_x'gԌuҔlEp߮f~ndvיŵ ئԂ|yג B6 Ғĕ~Ƀے؊ ψ[2^Țiy P*͓ο Ώ؍ϻ ۛכkbڛȸlcȆØӔx^nl e|Ƕahqs\`p]hv \av{k]abdԗ_kbnẗ`y̱<7 шr̙馊峕\-Ҍ݃㹂󝓣ʋ ޓ쮛“ ݘ°o鰇\퇿«⒚n ނߌK1ω`}"؈裵Cӎԏؼj݁{̟Ɍwدÿ  ؎ƗƒؓЃ쓢ݑΖ˿Ŀ×%دĻȺѱ ہ …͠—]-tȽ~݂ԜDꢔ|͂emܦ-(u}ޒ_ѽ  Ȓǥ ԓǯ 宽ԓ®Żǔ B ʌĂ᪊i}r ܘ붜Ԏ 涍͗x+o󺌖ݒ ކ㙐L 똭 Đ͙ظk L"RȔ_z{^c˓ ĂczbЍ񧞔隷 xOi$ 񬈺͵̄ Їhag ͱ G2Q短 Ժ汭ɸ6߇ߍܸ+Ψ&F܌ؿ}diNuج߽̏֗Ĝw ƢqҨ8݄ˉҧ 􏬝Ŷ ǙV̓ݧ͆ הџ Ŋ3T˟͌ԙ:6ʌ׏ ׉.1ِ迱륑 ߕ䌮ǖӊݐ'Ђ݅Jǖ މ ѭӒƆΠ Ւn4LͿb^c񘗊 ϚÜّٓ)&׌ה啚`6Z햢݋oއ٪ޠֱü$ź[²𵁽~Ջjb>0댂ѿ’ۑಈg=9"ǫ봱гE/Iڥ˚jbוډɎ 菅ڝYӎ#쮏ANJ~ Ñx{bj đee bdlqlzlelqennwtp ֏ޥ̵ 徙 q)۫P}@=HKiȳi^”ŴݖK# 䓦海 ܉ұ 50AhrsJEõȐۯٱڟ }ֲز╳̲ܚȐʶ"ڍCpƼвu|DŽcu`[ֻlejv'iq_\`gw千yȅSƣމ j_ܚېfK̄H<71-/-4KkԊӣʈى䎻卯 锹p?< ōȜߗk3%*]rWpnOњ$+5xK7ʛdsdĐ޳ ԋ 뿈ΰńB 3n}wAgmq{Ñńg]Yr}Ԏißx˃Ց {sբß٫غ ѨɰɦѺvɺ΋݇1el"RuvR:)=呦ԠԈ âǡԺԜ~!"ýϿλމ⸻l+1%&>7#!;Ll#d/Hɀ^ȞȻѺǻںuhȈ⽼ ɏȻ̕ü ׹ 1{ hW ٔá~Y쐎uѓĞŸzl ꜐Ԓ}nޖ~ׇ͇ݯӌ T3Eˆ؎⍡f䖫Ň~@<ĒՇV5655%$!Qh+xq%ߋԑ ¬ۉħ揄 d{ ^ qyl!ckq{lu gʡ Ԑًjh |٠b݉ߍտϪȈޭóЃ}8.Io} `oӐΔ ԒÔ‰Ɩ°}`g]Օ1*Ѯ䰰֢郻Ӈь?2ܖ$˭튧 铕v֮ ш˲wʯ’}Ҧ汱oE{P TIAaoO~oE|ta\TgBaoRx[g Sisa|׉Rw MQUIw捚ʀ Gt։~\ؖÌ*P/;ܓҢizΔgqه /| axK1T ǤӞ{}1M ȅ HЉ Ч!ƾ²< {ᘞwۣ޿ʌĿn"-D~Yde߭{ýۡn7^葾V潾 ۻӞvb(o ݒ푰Ȋ̺һǼޜҿ޼oGBI Њޔٻ |þ ܉Ɏ"y `d݊ˌ50S [h~񓶔ׇDϦ〶ҙfҍnև@ȉՎߌˎQ  ꔬGҺd̘˜ h_̎Ƈ» ͒ϒ̷ݦ ؽ\1J}(m՝碘񗋶ʌꠓ͸֔xl.5ʷʮ ajԌjl& η͖Ѩ ճ ^tﶺɄƍ摱зܩ؊ߍlj xCƆ19RA3ќޢꛉ ׮ѤFV,1ɣawމRNa$n슘 ߞӘ ͝ _׎ ճ݆džՐܴՔ䞕 Œ <ܫWeo +?؊Ҕԍټn᚞Ί& پͫ ԉʋ|ΌPO`1'ތ"䗵̔꣐~ʺ鹕⍼ Þʋ Y*92S 33aޚլ} ͡ɈᠫꏾpP ΋0\ۗoe۔ ؊ֈ\̏gMT}'ەʜ˚щʻ ̚Ɏ۽ۈ{ đŵ ʔƫʌw Q}/׈]~ >2ߊܕփ΂ m ~qw֊>(I^{d ̇ƶՌ~V%r߄~|Ċ ЊЈ `v҉±  ݳꕓ ␫шى꒪ىꖓ ƷߍǕ CB"ֈΛ6? m u#rԕ㟪ω~ >ShM^"u`ͦÐݓܓَI͢'w!ĉҐ߈ ֆ 徭͹VFW9&01N=?Љ҅ſ jKqbivࠚ}b^xgp^-cҎ eữqesLЉ L/UϢ蕪眝Vbɷ~| EԔΘߣ̕韐贙f^r5U➑h׊Ԁq鉱/H 휡,הՙϗ؉̨ٔѾԍU46$@IB8:(O ̗c{۬u¡^n\q_niԇ i_mM Šs¢ߍʲ˿иห 눬Ѵʊ$lH-hx}W2Ș،vκjkp5E´ݪn☏ ܳYBݰEڋō̶蹈۵Ͳ>g~[t޻j01/> Ϊ𹴵ś 굵Rs@ QdquRsi ͉̉Ÿtufʏ턈#̠}Hxh@=䫍sv%[Ï ͆݃ 󒍩Y p3`ك ڌˍcŵɛK9  Ww˯Ӊ節̒ pQ20[ڊꙜĬ׌~؉e ¦ji jif i\EMklِ ِťdཌྷ쿽Ͼ݌ފ߬ͻߊeMP}ǫwƧx(d柞焰ӈ ¡qr t/z 倸 ђ ՊaZ+: =ênɍǙܻӻȔϩ=.M“߻ܒٞZ之ėǖ߻ػw; UDƲ^mc %oamli}HRՖha _m]c}OOwz9vN vVDŪo}푥m'oɴˈnqTSA}Ъy)x Lj힘븕zʚ݆h.ƙꉸ Ϗэ çɖۉƗκFhېҲ ϣđ\ s茱 D+DzމߺǤˍ‘     ȪˮԲetɩ߉ф @m述ԉfdɸy چ~Y$o ɲ#sƯºwl!&נ߭ Ώܓ ꎭ_pט췊cԕ;ɗݳ܂ԑ ϔ݇ۯ帷/,ډ ^ބ կª~ŋǮ ȐՖώƓN ~҈ҋُԽ_&>┏ތчԏڐ.ߊ솨ʋß ܒ ljμ 瘎ٻ ꖗ?XyΤҥ됓 򜔘ſ枮֑י <- 冎ᵓỤ⹈ᝐҜحԈ 뼉ΌC:y΃萄qۼ6“`.`ﻈ#ﺝ’ЊǓeᩩ덾ȋĄΩεƒ츷ߴ޹˶ޟߪ լҩ߷ ѲδЦz,9`_yδukѩØﲔ ȡʥb"µ܊ ߓք բóԮɓ÷ ރd[/NԼػŸ 혜ܿ6GЩ狮Ͳۇ۵ތ֓ duT萡̶ѕ$艺ވ ׆h=ȍ Ƕz꒓ -+(uɼӟČ“ 뵖ڎŻ~9+ ԇ㢲ɵw fzڊ̂o8"_评 ߡ²ޙ4uօ ɳH)jӊ ՐcqؚŴףދԓÔה)D /o^9 7Zt Šαې󙕕☠̺) գӘ҄ѵ Ԓ_zˉʤ Şh_.&ˉ Ҡ噐 -w'5ڑ zs鼏fԖ葟ֻε缾 ݸȷ ηߡǨ׉ ҈͉ӝ^.H'޸K"%7Zx ߮ꓓƤڰy/<okm r ~7Ǡh ȝט ̝M=ՙl, I֝x Φ m蠊 bi\fh`[b쑖@Yuovm[sf [fu[gYrǕŠԉѧx/bypB; [zx{~s̠ޏ}ӆ9׍h c: ebOD︴Ǣqo Ӵώ م =Al݈ N [Ø cn ɦˌ ߬jǙ ׄ± _vrJ Zvn\jf ͊̊͐ӛԉo)7ۣܡϢk[]p{Zu݊֕ 訤s(Aۺ׎яྒL H2t ߼s ܑƔÏ䎘.Sg]+82[[ ⌘ݙ~엯—ڈǖ>'0ԩãNFwh?i ݹWʚbĒŁ}sŸ\xoڇȎъٟ߭ʇǍaH̤ҟd`|}KXbtrXH:K㍥Ԛɼ}~_%> ۑȚփ ﹵Ž篏H q.ډɦҒG+~kcܷ ꡎ#𬕒nj眰墝Ԥҏω1ՃÙݞ | èe_ n^ߖe Ʀȟ ͋֌ܩ 7JΒ ߗ۱ENLI3 60i촉גSKQf$= 쵈 ᠄̽6 4sʎ Y0 ї5>gzE\پݍŖϖB䷖χ;Т߄ķńǗ A_j gPֱ_iUbBulI|지sz"|}v6q~~{UadVaiOԶIzr,>ēٛ71P DzԚ֒kL9God"Qyuiiq(A ىيΚ ׏및 ݂ qɨxǟ90⤗xًݥܳX1qv?!I岌Â3Kx էoвah*ތ ښ؋װ ݺ  ƽĸֱ ɴŻһѻẻ፽ǽ،wЍ t4;wΊ묁گd&54Kp^o 렙֎tlԼL:׌ ْ ّrx+*ʮjmԚY0ѷe|~Jᘜ;M٦y}t$ɐ՛ē‰˥ەє峝󽸹Ɯ ꦐϋǢ絊 ߪ N0?{ԚƼυĖr,)?<3-7Gm ӥҟڊߗ+4?E92169b ыœ wQpe*l듦Ԍl~˿,Ӏz\^i3;j)J u̅#ƋηU򩯲Ѷڿkuʝ֌݈󴅶֓ o91]ŽΖ혞w?MmuW;)*.H^ԊӷʩƥĢe-?(MPgb?.1">`çҋdc܄Ylclג{z Ȋ+jбuYih~$1o}Ȋfk -ڇߚ 왐ܑ ԧ֌چџѵ錵؈籫׎Š㖳غY.3f ŠƦƏ)ڈ}WӴW<0*1Ab}ɆГ'ȇߥ<0cɪCܳl</0Fҍˑ jiб]0Ea}Ս 급d1طvH1B{}xz憃8Iɤ`g ˋl ]軂ܐ搿vcŢȘȖ}ż݇栎 ݻ ݈꾓ʼͨ<,4MKҳvǽҺļOpᮂ`:.*1/9.֑мюڸq_R15x~Xſ f3PƾƼŢʢӝʈ۾g-wĜƚaݓ܉d׶:vG=80&&Dwjje`v_slm_bӉ-kjw ꍧƋѻ酪ŕًژߑهuɗ Ȳ ~M1"#3445,!/'Y ҟ0œkF%0*)6@g6Ɏ=0H| 8.Q􋟇)Aݖ֍⸈{ǩG/a mkΑɦɷ hUC*),)?TLE^㾞z|xꍎy _ ڇۏ ֐דǟǠڑɷ / kkځǶ   ŗ G17:421- Mяض˴>ĞʑHGC4;,-Ot㼹70Zw҉ s!R Xؙތ쑠䌏˵ M!6miA$62O︗aGO>$*BMm,ڭлƥ}sȯec`RВ¸ۺ \ڭ ζ& ᳻”Ź  ^-ѸĈ dzݒ̑م񺍟߽듺NJДeJŭ*ǩnWmR0,)5@d䠭ɏG/jׂљ-,x ڟ t!tqO#x^)6*-=_Z$" ׶vH))615Ria*ݹȷpx|zջΔՍ`㓝 ࠿<ڼeu_ i_^]rT[]Z][ZvBE[kfQ\_^ h_`qiʻ,Ń鑸Ԩإzp羖ꌫĎϛr|^Lَ굁ٵѠ~XA,*,*Tl™Љݠc,Q ÖamꞸϏΛid,v쁑گz@=R85]\yɎܯfTC*,2JJ=뷕m]nkt sxwtڗrԝ̉f᧫Ӝ°ŶԸ䔒҂ ӊux ex}Ӏސx}uxv˃vhߐ t dαc 뛫뿑Œǹh]×{㾅麘/ɩy԰W5.*e䳗3E ˘u+.af߇ shz62Tp풭x吔ʒLiGܕˎۙվˇŵȪژ ~_~ WRA^RAhVE؉|mfdÀ ؇xݹm $苸趒ֆÚ璶 qTӐgaC*,Sr|㰦.plߌ Ƌ'4տ؉Ҏ܇u *lኖХ K6!h9ԗبcT>'"%C\l搲ڻЕ ίps’ʚԋڍЎ毴Ԏ̌mUĘt O繦JPǠh]ʩPݘ`˩Q}&gwy^r׋hlȪbƪ嘵z၎!ڋ “ۈ뢑 ̣Ӏđ @q3첔uJ7++-)eyv61a:҉E|⦫һ麬ߋ Ʉ| Εȼa,V혆ã7%c֚߸moycN4,*4>N|Ϧ޵xbﭙ`sэ);ǜǖ‘𚑦锞 󘕕  !ކ ܏ {˗՜׈ 䡓㖤ȌɒڵYyˌ˟_'-!2nȖA/ێ b@xzъە$G؎  -1 ~$o ϊタnD6%%=v̶lܲ{n~HϘ ħَߌִՉܰȌ ݍ‰ ͊ģJڱ7~möIJRopiyĕzNܢwΎL8݉ق۶X.oءﴸ 4< ֜֩f<#*--GXnUXԼt͜Z7-E뒭Ͷٞ ﺍ ڶԎ ׌ ؆ɲ }Ƀ'Ϡą}Պ ÍԛK몗F+uo_!7BNך\jxҳ{,zΘ  }<(`Awƶʎ.fؕš}d//-4B=<ҍξһj~۶z_4,dݜ э hӠ ʜ҇Ӎߔ݋师"bj燽͔ ҉I✨Оysמ܄}¢諊2~c4z·W^ʒ1G ҋJ??hCʹB#\ޓIBA8,).EQ>Ȑ |ƤkEwէՈ9*`#•ÖE.;뢻堾 ̂ g~م ϛ갘~Ր~ ɵ ޠEJ햜 ޏ׍ ̑̊̚>옅۷sxbh͎϶°˗rQWyo|פhȄҋ/:ٌӿ؛ [xca%J Ϻ__G#-'*\䕏ۖ{qzګ%3"6he[" /bߐ ɧ䩃 a׏ʃ  nb ˞Ʊ }Њă̦vf{rccMKrbi\lO7wa}á s?dim䕕 X0–zd:*#4&Yr\ ޮÑtÐ#UG_7(0/+28>]ǰuZ⭡̃ 񑆧ﷶ̶ڹ脪܆Дɳ ϻxiߴ] ʲ܉·׊ ȍˍ]fɏGeֽϵ[h؋Ǟʹ; ]υY2{z_ @ΕՅ$z1gV=:+%Sts$ﮕ좍önijتى"AE>c^uέŔߍ焐ٳʶƊ˕ʑڜ冀 ׈ԅˊjOuڒiǗAܚƋBFtڳ0-담 n j/u{Ƒ!p+EyYI4)*;SZn饵ߴҭӓtּ׋ ۏ'@ħŊ…鲪enϐ {RQx[orZ[RWYaTejqi\kyk[mPnɻƽԎýӻ и꾏˼ Ŀ伾Ę񙏳蹌ۚƼ҆ oŏQëƋ֕ fMǖ܋jQ{mQ̤ H7ԗ΅ -1.6Gbzw~ӍÓɍx̵uۻ }.AʟƼ 襝އmʔݻװ iyrןYY bcsbyy乃_Obbϑؠϑ\pГɎp hgӄ ݺًۙԕ´ Ijb(_҇ԝ ­.V܄*٤L#KͣŶ{xyϜ"ޗԸl V/ǑԯÍօߙӕ ʓX\e_}Ɏa^蝩5ya]gŸsqubʌį֋œÛfsβⰲӮے 񵱰ȿ܋ﵱ筈ތ͉݌ӼƐֆM9 俪̤򵱯 կͼ+oѐФ^'a﵂ԩqh\z^Ie` 輤liOѮ۷ xK2O֯배ҭˋд屲dn騏_{ 崰ޒȔƮ ﺥqgȊˀ݋epáʃp˕юيՉǛʉ|笐_Ʒ ̙\ ͋ʞ-V麓ߪΓ †ť೨ҍϏӓ΋© X*U⾾ʐw|f]ֵԳdJQfa_My{Ģtxkz\ `R3O͈ կ`‘)h~w Yhh ǻޜrO]lڸjv|lyt'\Κ\egpmkצjٽW̻ؕ ߍÇϋw׈ܶ Մ ꙝȽѹ Ҽغ Żﹽ`(Ѳ֧*|ʰ ̑ͧʻ 㼭¡ n]*>檇Ȼy7ptЪ|~|~tffcd^hb^g\SmǕnا~}xŻ̲A5s䶑չ эκ۶(ڷкɊ˅ƒ͹as` lgκi }gihksynokm_upijlfikԧee㖪 }ً萘߲ˆ䜋 ߔ`e ¦  型,e𶏈ʒ壮_1 汣խ ͞·h.Or<ɽ{֪¸ơx~cMպijʜRNǺܽhM3̤֏ ūݾπ Оݒի` ⤾ʟǓ䗌w~ж׵ʵ 򺷵 tbѳ ̒ub 񻷵Ѷ钿>2À0bЖzzέ֖ס‹-bIﴗjﷸ󷻻`dy_PZ~ldf͵܎vNE4öǿ؋ ܻ x ׎׈bʧ }΋ȷ0a˿ ތ t,v Ꞇِ35® ፏ ݔ䩍?:Gⱛ̵}wyT巧_UJȾbǯٷxgjh̅בOf94؅Ꮊ`ij Ѿ-$ Ջ 쫇ܕ݈Їy󠏦و yn76Ŵņp`Xދ ܜ ڟ`0᳑Òye6]ޓѿՕϕϵҤ΂򅲦01𧌟7m bҒcf; Ҍ ⑾꫒١1Ѕ؈i]k/PX$- ޻̸ޗ+ ՌRExõ挣ۻ ƣƓ_n30﹃M~Ï d`me※ܥ׍~⏝ ͊ 5܆ی ݐ C0m4/ ʎs b iקּ 2RԈkeƝه 4 唟 đ?5ΕQ{yhی{dhڋΊފ د5乡緳ܷ45u2o݊ Ɏvjϔƶ eϸG1ԉ LJۚ  j 떿6K }b} 诏⪇フuuڒͼΊۍʔĆ򦈰Gު݊┇֙c$)Bώ wѮ߉eͩ-K֊ݒu#x֝ 㥉掙1͑ ϓۄ6M  ؘކƈʊ`ԁ\ twՁ_k f`]in _dxiց͎ۖ׷ޛ᥇:˵϶øߵ϶ø׻ʷ`(&QԒ ِ݋ɓ嶻 ЛȖ 疎ùT.lp ؝?0𽹸 ۷ ύꔜ? 烩 ˆ6K綹 ؂ 䈥ö{kwɈkecd xx}waብÇpvr苧}d٩wĩ|ֆ Cî Βޱ8ی쾭C08z ԍ 87ß2-v풒ӫ 렍ʊ,] {妐ӌ Τ•~ 3mu[u?ffՎad[Y Wde| ͼΖ诗$ػ ؜㥔 μżٻμż 򿽼e5,d_* i}Lj%gekXuq| s ɩ͒ ɷ–祸ܫ ɇύ ɚŜ޻Όà 籋܋ rϛǴɹպm痀̽9r ̏ۏ瓒 Շъ (l5by SDôҚ`(lҘ4az`W^&(lW^`}HPՊ_|IPՓefƪforp~ Ç΂ Ϛʋˎ}칌 󪬪â𞦲ʐ繻昜̉Ɨ ‹ ꛦŦҏ܍H?Ĭב ~ ᧠    Ѯц ׆ӟ ﳰω̯˲ ړ،백ӸwnŋjͨǮcٗծ ׉me#۲إ̗ӭڳ ץΟ̣ ɜ޷ܲՍ҆”ږď彿؍؉ ̈u]ƹ⡎vkv˒楼ىƙȚB;h{氩æ Ӌ׈ ͻچߝѹ Ȋ ҍ˽ۜĤ˺ 砈ȼcbׇհíȺÓོ۽Ψ㞵ۻk{+Û<ʻ"ٗȺļȼ¼ В̎ ꎸz떊ՈĈFK4ފ͎ф܋ވ njį⏰Њ*Mšy1འٲŴ ː뵸뢴򓓍/·ڏڒɴߏgv+ׂͷĻɓ׉ύ혝Ɖش󓘸Ū܈Ǘܚíݲµܼlht*߷ܐ0մҍČϖ y™*ו҈ˆ̊ ͤc囚ϖ׻Ȫ޲͉ͩ붘˓Ӊăҋ뺩 |~+a†㮪荱/ٍ  ̓9зկŠժNJƞƌդȫՋ Βhʼn ֓  쉬˧Ŀ ԄǍ 号˗{vPbnjއѤ š]و#疭ɬӪŪ ɬӪڨԧŮߨ ȗg꺛 ߱(㬓ʅч#G"<ڍƴࠒ΅flŏ 뱉$יՑǤ sфl(yʗ˞˙j Ԋzhf^{rpqoS͎pSއtgZ( kxg dhyv f_ԉ -ߦŠ͘ ȭѷ틤ڇƟַ`!c{ư£Ջ pedfӟ񙪓 ʶ™ Ƕ䒆ԍ٪Ґ ʭy|N_ Ί~ܝ۱ߏ̨э h~Mh\jʊcqNJ͏`y ӀՆ pz {j֙؈̚ ক笖ϓ񾕛բ`﯋Іm_ v1 µ Ąů8& ײoedݠ̐XP|Xi>ۊV܇ZRɛ \ zk;`wlv΋շ3] Úੋ⸪ ۼꓹďȥ蠲i^ ŗٷå׎ڜ ړχ ЉǠƺ-  Ͻpd. ֜Р 囋Ό(鏭 d èedl֘Oh1kx'Oh0cymf0swz Ⓟ|茾銭ϝ󶸹3ضعދדϟ¥yʵَ}ѽ…Y0췹ټ 幸Њ嗃•sma وږ ֈtr̈ۊ庸ٜ몌࡭͸̑~sjmLȺ ݼȑݐ њڎ؅I򴒒˔geו洖抱S0,  ݌Ӌؖᵅꠔ褢 Ր ߏ寬ي̘lQ5ğ{pk  ЫӊЅދқ℧֙NJ דݩhp׿ԻfӞ Ӫ ۺԻؕÖȐ ГΌ܆Ƚ Վ ƮԼ ⌜i|ƿî9/н ˦ӽ߿iԼ̸ ܔȘ}Վ҅ 􋔭 }ؐؤ̝⑹r0% ފ떁 ˌʚțꓟ ǝ ٬󩒛 ܍ϩ ҏW0,vm΢ط›'v&XJJQFOc.hArPIXNM[aaSM|QIY$i,0LQIY$ NM>ohgO+s >XvU:v x/q%iHcڏĊžՕ隌ߨΥ ֊,ǰ㱳ܳDZǮȰ땯߽𕏗揟հߕ Ξψҭ ՘鐲wͶc/h߳ _q¦|دFɊ͓߰ٱöRNT<ԭ]dW";RN"i"CVnR;u?co:8;n CEo .B9uvDŽ⼓  Ғ؆ ԑ下َ王e™ƕ   췡 ꕏy֐ ۉٍ٠ Ē86֌ 𝓇 ɋ-tLJqW<'sK`=Mk@3jN"Lk@K:9q+k[0h JMK[V72YOY_m{̻Ȍ衐 份ӽ‘ͤ ʻ ӎՌ ϔÝ  }_ܽ֙؈绽ƻ䫎heݐϑ  廼҇ ۠Ա͉ǻ яƠû ҚqŗԐܼǼÏļݮٶ;Ǫʽſ޺LAOLfsWJJ0gq.=gzl(nD.,}6:m!.,}7} <<{0R,GD܄5{Cf}0ir똹Ŗ ۚ ֘٘Ǐ`fɗΏ׭ L ǎ߳ݼʼnъfc厽酠ɡ 彾 ֖Åډ쌱14̐匴ɒ BJs^Cu^:5TyXn(;DINؼ@e%qWgFYJRb&pױ"ב.'pױ$,!XGmҫ}THMǴZyC3ٽY,^鱕7Th·ԏ‡ ۶޽ .ഽ㓤ln͌Ʃ᪌ލ܉'njꕖҁɕuۊ썶r֢z~䎫 ۚ÷Ϻֺ݊ŷ 䜚N؊!0؟ ệʪB˞՘ݴ薴?阣ꥡՐiÐ ~܆ʾ霼߹ beđńٙӂ܌ޚꎺ Ў'鑧Ĉ֦ɖɔޓ҉ghϔÿ|d泌Η܁ÎPx"R uwؙɽ 嶸ƢؤֳЙ߈ߝǞ΃Ӧ ܍ܶûަ 榛䟦Ɯފيcjċտ ٍ^Ќy⎚Ћ P߿dfͽ Ӑwd৔ ٛ͡՛Μ 滎ۗϡΞ"ޯЎ縜ԄÈ Ȋ⋜k;ž͹쬓疫ˑˋ͑דˠRO Ԧ!ȹݬ̪fcŎg肋͗˄܏ ֟\iÖ ܚ椝e!Ҍӓނޗ ĔߙҜ ]rק ϒ ߲fnԽ>! {l❔؍fx 茬銴˝ې˗⥪q~{Ĭӈ ݶї/Œ̺ ػ܎碹ЅևƦܡ Au枿 ݝÂ_jeЍƵ ęNZo ή~x纃Ӯ╧ݐ҉™܋ MR] Ɇ ȅ~м҃定縺oeϕؚޱϫӢ‹ƃ}^ 閠 ݸޏ ᬏݏR̗ѵ׾︼ޒޒ׸ĺ櫔ℑȠ෼дֺۊɗȦμ𓟭쑜Ոŋ黻ï6 䓍ϼȂ빸ݚ㌢ ǦݠԚзڴފ ርNջ Ë vטϼߒ⧵ϮÑ ϟӏ➘˥䘏ٴ.; 휘Εƍ햴v ´ý磜 ؼ༿ՊĿ̊ڽϔ ?БȞɽ Nj¿ 膲ٷё铟뽔۹ м铯ǪҞ¹ )ꇛވH<˽񪙖Ϣe  é̊Гɨَ  Е ЋՌ㓐̈́  ضp[:AǕș|Δ ѭ͕߻ 𰈥笱 ߇ݥ ȇ쵲ǀ Ȭ ޭĚᔔͯŐ쵳 ۮ ܜǨɯ۽,NʰͳrwʑםU\ Ҟ 꽈| Ƈ؆ֆ ‡ً `t Ǜc3O7握y֋'怫 nyԨrqȕ؆ Օٺؓۺɍƒ鋶ӻѡӼ Ѻڹ dqûѺ v>]*Oƻ{ؽʼ z^ 麢l֓Σ䤛ݫݮf`޻ ҇ ڈև툤 α ꞉ Çɕ̍jșl~ۜ}-6;aL烎`cӚֵ̝ŋu瘭؈ď`MO͗݉͝ ɞ紈Ͱԭڼ ដۈ躭ծ̮ܱ߱昍 Śİ Ɏ酊mqb ٳòajᴴsϏ 򶆤“䣤鏳馁۝]ߋ  ߈f㬅։ Ƶӎחqbw|`ׇ쫄Ўцߝ 󵒓Ԍ 񷈰ਜ Ήԗ 縛΍ Ƌގ ț Ī ߄aǍ 揝لư ̋ q~®ȂT]eny&'O e猧Ժ ߈΋ 霡 葔 ԋ튤 ÓǏ aZ 箪癩 ټЋ Ù~Œ!ڻ~-k Ԧ ބ Ԧy҈ ĊZ ޏ]c b Ơ ̷ɒͿ ýI߈ Ëŷ܀aü͠ 㶏mŽʘfʁ 8+ƫva ʏ Ãƈ ҉ ܙx{wI:/5s𑙌Ύ͑ĕ֊ߚ֛Љ dv v }>7{̍ ՓΈ ɏw҉dqI/(?C9o崙хߌw vg !7> ĺŲиƆ ϼϼs}5OǏй ӵ쎴ݐ҉ܕ&׺^z$GXp푫܍ɕ]g qiс!ߚݍ }}ǿ轄ʕ͸͎ 効þwwӳ6Lat η귡 |zӄ҉χюwY(#Gޟ݋産Ć֌ 촡ݢ#щŏ׫ep ƪ ﭹ3Po ĩ戲ꏮ _}뎪˚ӆ,żײ74*mڄωؼÔwŇȈ᧢ϐxʾ飴}r¹Ԝiߍ})i ኬ ؟ǾǏ ^߫~㝭+o;2J⫦Œʒ%܎ːηޑ Ň і]gڹ lsЍ(mβٗw೒ ¬ y߸ċa鮟$:5J̒䛒ȈҖﳱ4꺯hkoliyș݊叨 ޖÅ%ʯ򶲱㱳ԡ֌׌Ȱ²سԭ |)iכȽ˶ Δ̔uկڈĦ ̒Ϲ`94D ៉ ̍ڜŢؔ ޢ e`&`Q ֐ 쟊p̤^/ ēԆӓĊᢐdwփڕΈ Øö/M巯͓Ժ{׳Ī܉ԏ޺ ĭ 缼!ḽԋ|PҹƻɼڽѠ Աۺٽ旬Ǽ ˺^ĻX1պɚ뼼޻Ӑǻ 1`|Ѻ뤆 ۏkrռI8Ŗߗϓ|Ț㾉܋ڪȕ֋ ؉ه ]mj^`H߉ǐʊ ᶛ [0ߍ渍/iĚ؇ 衅 qdlȡⴛ(yϏ2kﶴ(ŮLV~SLdɝԦ׳ 6Я򸴳䳵ֱivzg}. ԱɲųĎѰ ˵gt˴ 倯 ڄϑKٲA5ѲԱ޵ɒٲۢŜձ ׅ܈̔$0ᛘТߓܦK3߇Ɖċ ۋ.ī\Zͅ nˍxܕǚ 'ً++1Ž ꣱dٌ֍|19靱؀̜ߒۆ׸d񐌸Ň͌ՆS3[ᑻՋ 犸I|룣6ʼmi|smmxzu~unY^xIrxƺ 䋵Ρ ӏه5}” ɾҌ ֻj쌚 кb˟붜ܖꫭ⨊u¤욘鋼ؖ΄֡;, 鉾7³]`s{zԫ}fهƵrĆtC՞ıvr͝Ւ_f Ş ґ 붮괐Ѹ !ic` .8 ڼߋҌђޅ▭'҇b抙׳˘ίPUs 땤>QyxѢynguɑ9MeyuՑ[s٨H%ɓ`ֹƉ؋྿ÿ¿¼Ս纴ʌ ¿¿Ӆ퉾¬ȧ •ֽ򸍡翸ܐɲܑkC  } ň?Ȁۈᕙ?*ڃӒǖuƞоe$(|۽caypJ΅}xLij߹m ˌ ᐲ 眎œ ꣒ ѭ 翯ue̗ ő&X eّ 漴 ܐ>؊ӋL=:qӲpʏpDi}зuqz圭ێFЪ^lͰWs׻⬞xcWdXz ҅试 ׏ʚ춛Ɣ—Ƒ yH¨eԚ ꫊xx↳I01?ɷk}cہb]uʦ~~|sډ”ӔQ?Ҿ紀ʈȸ˖W:  ҈럎  떾Ɏޟ 侒ȴՍS㘔Պcf ʜ‘ᑔĞۆ N0?ߋ`mygxvo΍/"x ̽ˎ͇MٷXe馋pm埊  ۑ ėבޗ͉ᥤ䵟 ],Վ֔ܳ랏 mhjƚ׍袟|/?ߐVֺZTqLM︒ ⹓ɶ}~nn}͐ѻas Ց Ό힍݋ΨÊU^0i⡛㪠ڤ㵕߲ːӿ8=Ǫ̂ˍˮ˥|&Dƃ雯׃ĸҺ}j  ٜ ηР́ 袇͈֑^R9Zv-░Ӻ򴉟֌❜֒ܙf~ҍԉΪO9~c"˖㳇ÝsEѹӆ俙ȒѭpR  ،  䊻Ǵߋݓ˝ LCCΓ ވސԾȐˈ̍tݽӏ8ⱈR6lPQ㌶߇t4Ibwх䴒 흚ʸŶoŷqR^tߎȟʚ â  »ލ~E=⢃ ƣŊ ehə񡢉⡼ܷܠȍ秅+i4s-=) mQ󐌏aÔi40)+.4>Rs楦䡇ӑ棐⺽ ɅϹ2κa`dz_Q̗κϊٸ缾ۻv ɷ轾֖n ߍІ՝齽 ֠@=ʾ譳ğ存л ڀfi޻ڏ|Է~c絕ȊƎ5ᲆ6; 'RIčΗG'woS ;)).BFWJsϚx񩕎*㍋$Sۿ׻jfؽy쁱Ȥ ap`iߑے  ˗ȗ h4MՊݶۮߜۈѓ  ǥsi}iiǏкdž4Ʌ8:wp\ `\t̊m!1㮱!ԿwNG9#,DZH¸ą⨅߼ψԜӬ Lw ԒΒWҬފԼ˚ ֣ 潾㼿à٠ɊivȾޒČđ݉ߙX k'P̼ޕѪ؈˾݇械ꊧ t׼Iƛy͠xȣH}蜄֚r,}pi\V{wş%&MГĐHQ5Dk|הߛ֌ݶ铭Ϫ܃bpկ켟fjܔL}𴖰1 ֵ䱊נΌ‹܊Șﷻ 쮩wԧ M݁ӂݱ~ݨ}_zىgzfѮٌއԋŎ*<5Ẃ~y{<ۆuozO2D "?BԐ Ð ک ̲Ϯ ƌ?[Ѕ챓VUᰱ٥qo— ӯӭ Ȫf⽚ ǍƔ ̐ މՎ㖯Ǝ}dxϲʳꚋὢדͭȅギƮΒ~vطLpǏ ⋖żҟ~.LᆽytVē+䕃ɧ]UF))8QCm訅ӡԛY|䕗 9H넩츐eԈ•͈Ɍ ܗ ֪biۋŖu)Vu ؤ ֕ ʻᤨddΛsY` ẾѺ ͏SEt|{9Ō+ߕĿdhDP5#$.59Y}eͦƽȋ |g ɋӺŽ\yˊغ߾g Ϫ frٺӑ扤w3Kόһҗ]m ‘뽽'㍀ʾꕱʇ|Ԍܟgot %&%᭙˦szZN0),-,_t ӑΚ˟ 窈ׅes ÕՓ Ќ anފì~݊\uܛY1ž𥍛̍ ÂI钩%ыݒÙ乆Vf[3eţЏ%ֆԍ˫[@-5(+2Lgx†sٟɱy ޼ݎΖ …ʕ ݍԓÖ̙̈ͺԙۈŪ՗Ԕ \ԍhҙA/ z~Ś{Ȑ h#؈Fs{F0=܉濕Ƙrz[ -,3;+Mc |{廓ɦdbu Ԓʄևӡ٥v玲ʕ޹̄ЉԠ}69‘"؈ċD.폤Ε}~d]~#ρ{Ӛ ⟐y|ҁ:/Gր߫䒽ҵ}`R2'?L_ŗՁேyņ}ų¼ǔ̺ ⸵]Ғk嚗˙j˒̼ 涳 Ԍޛjvjև!xه復@2豘鏲 𥓡 ϓև椖Њ/WpGv."5~߂ Uཊ 啘ҶtPA3*02L[pm*p䦊ĨY}̝٬a~͍ɏ܉ӫkzغք缪܏ގ􇛕։ċ %I6IØ▋擑̪  Үvmt膹Æ":'+3hIerK+4Z D׆˺ԹP9''.4%l7BɚpZaqҸŖ˟g ΏⓎa͏ ڈؙ\ўї͓ωJ_g6NÔ ᓘ̌igo׭^ ʂ݋ XFD-0=OekayTݪ⑭UjnMA*));@Cj {<ΑꩠbعdW𺛒ǐ 蚦r֨`[}Ʈ ⪘ ږΊѷO߄FH8Kэݔߌlꙣدa {Y"يۯ10ŠY;SP֍ +͔Ö{V@ +EWl j_<ԅxm̺hs^U\װͬ }y{aZ vx5&Ά׶Վçȕ3{ΠΓΈlp~dl})cʧ  䁜ƠՋ׈ǫϠ nܻ Ă욗Ľۉǘ'μȇ­,i}M+ڝߋ޽T8:;6.+.3Ae[Yỿζþ׶mnz@A(́ܥljߨۡ@ʴdefdԼsܕߺ*;ܼܺ ᗞһa܆Ժiy ƎJCs߯ ܎ڴ܇˻ηؼz ߇ }蚎 ׮+PÃҞap젔 ‹ Гߩȼ߬p[E)/0:>Ln֛sԔϴټ}ԩ޶ĊՔތ݌㑖ӥύȗˏך |.8ӳՎˁףʈԺпɔ`ߝȿȱԎȟ[Tuޱ 򖉤›L+"'38DTo ;i~ڵͳ׺~{VlLÒ·͌Ɍϱվþɔѩߕ㗸;zי ِۆ繭۔هg3mƄХ߿ڏגדיԿ s몁ʎߎZ)xy~ν̩jA.-,,/8]r-TҽxׯaffělގҴȗsʉُ Ș@ $/ɜ ϢԙV8r ŌΟ^͙ݙǰ[*]ڄj᪒ ݎ鹬hA- $3?Ur~4Pr`pf_[T׬}Saqnjۮӕ ܮ޷܃% qzIè ޏ\+[꨷ ڏ븎䷲ ׋Ȩ߬ |} ҉ՔȒ%C1ᨛ Ͽވʳ[D71*,-Ndy u|&Ýބm}Ց攑ѡӜ ÆؚsE 㙈Ћ Ẹ _n~ꖞ緍̻DF{f ݁ف以 ތ쓣ȱ}gRAbﰘ{nrف¹Ό¿Ď @ dٴ#ũykwūnZY~{92^鱫֗YЉt0c ᪹ 住 ڌw $ؖ Р Ύ'엤t׎ݙŏA+i^ˌ ŖsRG:))(5G_s ᓉ̔타Ŕ Èΐ  ϔV0:?D򋈀,m XE%{rڷurt)9f܊x֐nT71>ٸٌ絙 ǃ #{{а ƍп|ڋۮZ8o`ܙ쑋 Խ^L=)/Rk ᱉Żɹ]F̕ ؊ǿо ٍkwI `{! #t ʔ/I%Ŵ]Xr½zma]bgxmUjm璒 Ҍh匾Դ웑 ckǥֶ˿ bbڞ ʍ؍v{'6왂ݕ 왧 ϦfR8!#!-1:\ywh bٜ Ըۇ̑datһYdҎ)&n{{²z韑lɰؼӨ҉ ӽ~%¡Ɇ `qޙ龢럛 Cp̃ ֝$K"|wօȩխ 䖌׿d>6/$!#0Oev핾kVÚgbàٞ F溪ÈNٹHB|~vlعpo{tɉ衜ܘ R]Ǜ٘̎զߨᜌ‡å ӌ ͻ 4 ckǾZ{ҽtxk`aiоœګƟ¥˪'P QE*~ϓáÖ | +K銲쉮д荒υ 膢 ̥oP0,)*/2Os ͸Լ٪ ܕ˒z̀0\יOrϖX[l{Нyלׂ}tW>^ۺ⃣RC8ðv܊DZ ȟoQwͯ iꡘ Ěň ѯ?ˡ𻑊否Ưձȱαڴ±~tYD3 .>Te{ȔѼzͤċ̰݊۬ɀog&hܽunAQĨNc}ӲinөXJMP\4Q@$ƪǝ祐($,󽨌ԋِ vWgOf*x布 Ƌ ԞͰlG<1),-MZg_׍֣À݅}[ȏ롓${`崥䞕}`jŰeJƈz| ڎ̨ʪʩtoxr%U)09X֖ݕ꿄UVc ! ՞Ң xКÚ õKj^k'¢\|׌ ޼ѹƻн$~p[B"3:/Djr¾Ŀ뙨Ώ築!1Ҏd}ᭉK}_} a |躄ýVUQMifZ`hz6&.FMiyktۏƒ򯟌¾㱅Ezщ/٘˼ | ¥v ;0܁ݕد{† ޭuԙKf?&4++4AU}ꈻzՈ ђ䖥!@(`Ț8>6Jþ˅zwepƆI囋P υФŊ˦s£zߠےA2 HP-:rs囔J VɚдȌҖ}NJ¸ϝה״ >Eysxգ㭦ێ ﶳ ̃⾆ t⣦DZȰƴӛƠrqXO4' (5Pdwrֳ怼̇~Ù*Iӎ9((*#,3S|¥͋߄ ϗ岲im ﬚}ݢc[i~¾Ľތ5,4b E$.A,LoiQϵۡQ }R ّʇנӣ׈5˫|ź㌳2Bz}⽈ȵ!؇|۽b=3,*"Cn]{쬈pJ@ᆔ/ ىЭnmuL0+6tƉߨTGdے| Ŏtpa蹒qs%'sSoGz+1q UАn Fήjٖ ˖垕sefaЃׇ6¬񘲏ٺstjgW:*#$'8~܍#e:),X}շķӈ⧝ޛ’ฅ݋ܳpYC'$!(18Kz ńӓdef[8J܉G|ōؤљnKĬw\@8U|e-y{ۍ2\+ ׌ƭ:  )ԟ3syq7|罇ўS("?}w}߱ې‚ьߖ܈㠥؊ͯí]?3, "1MXOqlєTIZ/樀.#ɺמ}}߆>ɋ ʸ Ґ񗇽϶˝ӖzOvk{b QU:=ո ꡔٚ ߊ?m ͇羒)~rd =GԋJ὇$ $܄ȇ׆\ԊHފ֑ՏH Ǯid0--96bc%{wk6:ǓȌ|9]#ަacb^ό ѐ  xD͠ǵWv_ṉ_ˇ Լ9~ו؜ z_ Ϯۣ)q~qCtDᵗҊvZ?tˀц ҋ jȞɊZ|Q끽穩v[ҟHfL!'+&-PZj˫$xJ*I۟ÚՙŖ ,DD/Ӿ얛ۘʒ۷ԗ» ɡ~ؕѥTjϼ?!W ^͐ Y롏sY2ƣ̡ٛ Ôʞi1捴{ppl핃ޕl<竫 υ/AӅ*ەྎщ҃Wᇻ͡ɐ~ʟҿ֒2٦ꖀ_-@6'0'+5bt-Aæ.!&0LļՖѐftڇ φż˻ وѨvweڸfO{МljywA/~dҢ|_ >MdxZ !ꇸE傭훐 ཌྷ 堃~,̈ܜqǐ 2ѣ٤ßvh<91+/4Qknz>0b؊E*=jf|ă  呜̍ɤפO_宽ܚϐJ n-‡b $.59Uk󯑿[܎}Ĝzb5⤝ ,چČೋkk՞ Ť ١O҉ɫmQ7*)/;*AfZى#Y}߆ zU`S0Y쏷َNJϽƮ b^raȗ )sǎPwN<3.''5*8K_p&DՊ¡^ȀkI{Q$܌!㑒ّⳓ7 ⑰񫕌=ʜrTK*@_eC;KcuIP~w}u~(>׃CB Éԝ  㹋\NkX ē؇(kַNJ"c!eeé|.2& "*HUTTOLP4$/?C@??DIG>?@9#!"'+ '@ș ϑQYg έ(l }攢 ,ɋʯuN<,%#E1k6{bQdUxv緒j ᵑkȉʝփ㠜[$̋̾ ՚y˓ 㡓b6͝nпٯqD귳{zz1;ר֮gc\SicpsrWKLMOA567/  >C0'-DHBBA@9*&,=>>EWYX WagpԤ ʯ؍p\ Յ݌)jggՇ듞ȤoV<848 3;>ds)КǃΦn:VPHɋ⒒Չ֋h{ɥܮٷ~ޓ4ˊË˹ 膭 b"ĉyznqiܶuRi{͋>9ǦnsґWS?Vjkl`^mk ma?#2@6!7A>&%(2"(!(623+'(*,-146>?>Cnnmo%ptvwdRv}jfݒ ޙh0y~7ʏⅦ򶓒q.ȼzL?3+$0,ȿŮs8Kj4UЩٖ֌׶ᕹ/™̍Ⱦ۽̐ͤпӅ ȼ\y۱gTNJsyHȔT;?@ED1%8@>+$$*+,00/./!!6/./3*45+0221,&#/_7V:<2FXTQm{yzbOQPcusqɓϿȶZᏙRǿ 蒖"ͿϾ滿ӟcͺ~YL>.4? zthAWG| ؞ۉՊʆؽ^ ь ݠߏiRx?Jir0;@ABH:!=GEAM7=IZ^XXYT42;FvHcУlux^ł鐹۝ ЉH QDԊ{a̾¾$ϻ 'Ni]3Yӌɋ팴݋z۔뮽ζ ؋ڽỿɚߎ ếdP=t?uDl֭ɑې "ڵƽЊȧɧz 類π2P `zԿ쾾&N nXM&{=\Њʍ 댂ԉЕАczᙟ ڊՀvaǺQZ!c՟뵍Žֈ"{4 ͖֓ÔY' =ϐҌȤ v? H^ᜟȅt|!Ŋ ֭ڏȊ抙֖$⡣Ջ'hJU.;˜a;}ɷޝ۱ؕ3&ԏԸ^P 㾯ˢGuyUM{  !ȝ檏 ǂص煋֋G%1K#^ғٮ kg܊ÌVÐ ֎ 4Z䞇 ̐ǡ5F㤝֏ۡl i #˛ ތž։홽Мh܈l{ItkFrۏ fÕ覘Ќ^'s A" 4֛ Ɓ݉ᔑМ:̞ftmV Јy`9ũەۇ ؖk ЌԑSo!2 Ύ՟ۈʤ䏎ڰvăωB5y A> yE  荰ב𯈿Ϛۍю: vc be߄ή3 ߔޖα쑕ڣ g -X }~דۖˇ҃dܙȃ㲫-F6ۯ(8(B 63zP Ꮧ {Z䖦/L ݜse^@ž 䢸gҢÏҜΣ݆󠴔ڊ=8 ږ܉̕ 欔 ǑǻȻ×ˠb#Uo J.ûܹ ݴh^Ï ͙`+ 謤ێy}A-̥ߩӻw]ˎއ碧đ丆ΤӍԔΨb6c's 򄇣⎦⟨ۣlHH-ic~ʀ 哙 ʉ 3Cʍčaߤ::ȖԿ¿⻿տʾڿ ٬ػ ǭߋٟ"ף϶鸅Ιيք؉]2J 埙Q ͡˒ ‹Ύ ļz$ǔoiE3Eدy--g;ڻWH ۺȳӿ ҏ̞ 瘎Τo xơrhȍ`jK' ѥ߁ސтԂoOz缇Ĉޤ9= ꎫ呚 g ꕡ¾ [)P. 6^vɺ Z.=AfV竏¿ԙɏ̟ᱣؤ3Ǟǜڄ1ᷤk}Mÿÿþÿ۵}ä׀ õ禢#?‰Гm65䵘щͳڃ` t"ݨøDy7!6qݟ+WN,.V=ݿߥŤ ɧۜՑ R ͓v.\ߘ 4 Ʀ_] ފ$ᐿˑ݌HL6 Ȋ6;ُ Κ~!K!TᙑّL!14`zqp[7Si@Z b%>Ѱ ґRWݵ33 τ2Ͳܰ˱찵 ʱڋچe蠆Л~! #鿪Ɲ~μɣ%@Tyˉ W{︴ ދٍ5,B߻PŨхﶲɳBQ/+./14$%8SY8ɱȰg װ" ۜWu60 ȚˊݏV˒Ӆ㐱͋՗ ߧçݎS' j鞷ۋa0MȔßƭ Ŏ犞opdS䎝ⶍ*2Ѭњ~VXhn  "¹zն ť Vݯ .0n濼txْغͻĻВͻ ĸ Ōޏ#zq->'`mк輽֐,O arpf\cgc ٹ鼼֏ ߢ` پ ۢ`䴗ړ ֶѺꤓ ~w^Ƒҋ˙ _-uf54wµ隔 dOqa𷱔 Ǝ ˢ ւ㼈O͔j-)1LG8b|K<_7kk{mqlw!Б͒F1˽ ˙ڏ s~V󆎕،ʋಌٽ΋zԞҊ’ȑݚȌ^޳]f Λëטypvֈ䂷͙NJ⥍Cd˙󕐎z ƕӖò ᒫƓ ŠȣUlӟ 퐕 s}Uɔ╮Ţʊ߄̋᫠啓ڜ؉-|ܖs꜕͏`y ӪiTK[ViЈ)䟈ҲաD]⎪ 馨Ǿ\ʴ̮. ⡢  s}Uɪ̖Ί~А̕ӈэΒƅ՝ Ւ߲tΑ~_ߖ߉2nQ҃)紮ʓ⇼˨̄۸*Ƞܥ͇ފД͆̉~lЦrbχ f ͇È ُ֪ s}U џ֊ѽӤ͊󌥘n  uj ɦ߾ssޤ{e߯|rڋɆْڏ  a&մ떳Ո jesd옳ꦑ~㤏 ޜs}U܉z̿Ȕ󚭓ˎnjpѯcԛ ie ܀Ւn{ᤖ䐈{뿖ǔܕ f  Ugύ֊ӏߐډpYmo ϩђ᫕Νs}Uǟ 1㜕ҡ ˛ Րր]ϲПܞʋ l ɯx䮞܎\OQ𳇾 錵lHDƃֈ~휊ދܼ حƐs}Uռ ń c̏牢ϸ߲Ē? М϶؝ Bmc͍ы׿ ӳӾόؾɱҌﵤՃ  ſa| ՎԞ󢒄ǖ륗診͌݌מɐճ󷅣s}U ge֍ޒ稒ƐUXɐ>  ĺzĜÎ귑̰ύ ؍R䲮xžϮ͊Řɔd_֛܄ Րǭs}U⽠ Ƭ꒚ސٝ Ƈے}i 禇쟓 ЅĽғ X+ ^݃ڌݎ؊n` ߘωqr ٪~Ϻں꺽߹񶈔 s}UӛIJۣ 쇲擯{uaԤ׌ vÎ ᨇ ˨{Ə͇⧖j ]f̡yl ȈЄ ˧ƌۈƮߙٯǐŎٙڑs}U­엳߲ ʲ̲Ƒߌ߉퓏劉w厭xʳ͝಴ ǘɱ]k߫ ĄԳ ² ̩ɑ ݯ4M ʼzﷴѮ쎨ȓͿް癍 ԅ貮߰м鱔𹳲 s}Uݸ  ߉Őæ ģϡ̝ պ䒱m|ܱ氕 靣˥㾸 |ϗɘ֜䑥0ωۍВƟǾs}Uۻٺ椉ͱļλߋڎΐފ z葉պcם߼򿾿Ǽ кؓ䊻ɉʾ ŻӘ拷͇ 綩Ҩ滽Ò z궣м丌ᬓuԒ𚕕Ȼ䱘깵۲]~Ρs}U߂嚟ϥwȸ Ȓ͈ټlϡ 幠7ڌۚ ƈ ᩕѨqcYυdpۊ Ĉ> ǐŨԇݦٔ Ր㈻楙Ŵo蒕s~V uԲ߀լ ۭɮݨ Ѯɮڅϊpػj_n 쭯ٲ㒚ðϼTˇ뾓ʞ ݷןɇ ŴDZؕʍϺʯz܎ȕӄ ڞӎ+ ٔݏ ךۋۊ ê Ʋã¡l浳ﶧ{uO蝐EЋ׸{`՞|q؄ GB҉Ĝ 鬃Ί ЗȖЌݍן阨ŗLx  ʊջչj󿍇gȤڔ~ίtnIѤͣѼϐ יƦ,ƨžz)jӚ +≕݈ԆA弜ܫ³聆単͋ʎ̋ˉÔۇ ǔ٢𙆤 VMH ܍ێ ŐΒ ՛òsמs WퟌѠ%ڹ ė ќ᎗:©ਢᎱ ⟊՗̋㻸ܵ}ﺞƌޒאڊi˔ۋ ю猓 ܒȦ˸ sŸ߾}U Ա,϶ ӊݹʫ񵄉̐垮 ސ칠Ӎʐ֚ݙƊ ʐ 򛌖 例䥵 Љ辳ܗ ˯׋ڕ ĵsܭӒİ铵}U+ ˉÚَ תԄ|ވ˒ƖľŻǒل Έ " ]iܒ  ֜ō Ք Վǵ.sʬx}Ug3 q[ ĢڊՌ ވ`1ྎQ ' 毄ڋĉ߈촜$%o_߾Ǧm{#捸Ü쏿浻눽撆ŕ҉•4oܸSs"}˯؅}UR26(} ܽgbު䪛 rJ İhɝgbݿ<)ȫó֖ʐȇ՞$޿ݽ媅ͰM#ٺu꒔ Ř Y Tؖ벭Ѽÿs%ڠﺟ˯ύ缆}UGDq_ ƅek旐ք ,[s ӊȖW:̎t#渓ևř佭ge"}EяťʕԈȍل󋶛[aᑤ ǥ_ Os*ݣﺟ˯А뷐ڐ}Uvxѡƾ ⵖߊҏ݋ {ƂȒᢦ x]²ǓzΰTAӀŏݍƷ 㭐ފ ꤢ}#سӑ~´Ґ얠ņհ܈ ؗ gp̣ωӔKKs/Ȳतﺟ˯А귙燢k}Ux  ‰ Αȱ ǣ澅 đ ;+tq৆ٜТǏۑ笆Ѝ˽ ||"Ɔѷ~.{q߅z̻ȉʤK;쐉 ߧ풺yPjs9तﺟ˯А긘扱vɳ׳}UªC'#jrĴﹶxZմ ߊߋٹα௢ߚם و ջh7 ꧉Ɨڴޖ¾ɱoݠ長군޷ѫʴɣ 㖉+B MJ ǿ̵-ޙoٹfʰ򳷶{廴Ҳ♫ŴϑƄʔԲW!Nݾs=ȹԻߤﺟ˯А긘扯vʬowz`\}Uh w ѢەՒ   Šݰޒroͥ Ƈ Fɲ߯˜Ռ彪Ԑ ѝ)g`fΉ꿩 ;ϙke$ #sBwкߤﺟ˯А긘扯vʨzˈp`Xn}U Ƭ эй޽ųþ бᦏ缔 Ԏ⼽ûą쭇뺁ۃ㰤ъƈѷ  ܄׹ѾDљݵ޽ľ݉ǻ赐~=.󭓒m ¼ 璓 n׸؉Ȼ Ӳ̪ƕϏҐȝsJϺߤﺟ˯А긘扯vʩyȇo`fg^zj}U   Ƈڑۉu!⥿ӫע̀j]⑻ۈĿyΎː‰ 泑^ hl匳Ņąȴ򭆕ł Ս  sM┷~кߤﺟ˯А긘扯vʩyȇo`efnPme:na}UK, ޘ쐾įǯ￰ Ԇٵ͡Ή ǭӝބƯyo«ï խncЭ꾨ͧղ ь d󵵲ژϭҭʖ ߉şÔȆ sYΣwo~кߤﺟ˯А긘扯vʩyȇo`efmRtAk_s}U#  螅 Ϲnjېᘏcz sd 茰Ȝ>pdk Ĭꨭؙј kޛk|y͡shϬ̞~~кߤﺟ˯А긘扯vʩyȇo`efmR~tAfSGZv@i`gyUij|U ͂ T ږžƽ Շσ؋͒ǽي֕ނސľ}ߊ潿–ciӿ ij|< #. ԼȽؾá$g|ƾȺًӓ ؐʽȾ ՉԈĐ؜ң ؚYZ򊱿蒔sk̡wyե₴Ӄ骫Ѳו{ӯ~ύtdijqUxDj[QlMsJZ^^SxhHT]}llYb(!Ώˌڐ ‘ӄƂɘ>:ʳFvI{)`،ӆև |䪄 Ӊؚ ޟTyʾãYv¦anHmKQq`VV_uvc]qyiiv`el_~PyR^_Jiu>sZBsDJg2VN&ZC7`0CZ,TH/^=8[.BL)WJ1`6=`)@ A(Y5+Q!ڃ͸¸pȴݜގ֖ʸ¸ЋГیՌ B"':ʷʌS齹ۺ۪ڷ ܇7#3.R Ÿ׎ö׵1Ѓޮɡ ӓ̷ߓٶ נ௕ ٺ򒥴wr~p~~rzv~~~iu|x~{vwr||zu z~U)]6qШ髐őW>wrkt׎V  gl` ˈņӏ `s烔ϚÍ ߂lqsϊƆ퓇 퓇ꒌȅُȅʈ su֩0;Ԙ ʾř|WnXֹ-8٪ؑ| B] ~ ȭ ̎µ ԯ~̄¶㳈 簧uæ lі溆 ⧔Ĉﲋy}{{uu[~uo܌yn򣐒o܍yoY~ Ônzr{$ ߕ *[sh͌潰є ǷN~  ܓ  h~= x ˿˟ٌᦆՉߐӹ ׌ء垐}w}~n}|ȿ錏}|ǿ}rrNNrrix ܥ|q     xzԲ{r{^dV{jpq~pqcx ѝuq  ޯ {}˻w|ӫ}Ycʳyyتݰނyyz{ئwy~اww }x׸ϕy䂁    ޻ھ    ߯ZcĿ ۬]ݱ^3׋Gdڟq nh݄Y2u҈rՏ֝Ԫʗ lqӈ[1teXqdrnqvzqsb}uDҜo vw0n_{|ztup|pwq߅sker 1󮈈Ğء嚹Nzם٘ᦹɵϙű̀0ܞٿ   ۍ܁ܑ فّp޷۱殮ج߷էsڷܺϢںزز۳۳ѶԺƝ׈tҴϰϰүүɵ˺оˢʮǬǬʪؿʪúȵʿ¿ܻܻܿۿܾܾ̿׻ɸܸڸ̸۪٪˪klmpqpoonmnp qonqqpprrqeefffffbͥ¨lu ~uІԆ~~~~~~|b|ځ|}~z{ہ}{ہ{|}ہzځ{~jиEQvZI>&#`WN`ctRA9 Myuoh}dcI>W<??1A5F8Xt^D>[Bc91:J:3wzQp`bM6YORsrbjH:F.OAls^o{mmqi~tUAqSRHxRRvnLdt<Ah\;CTQhArRoZ t|j{efcA2O93 $ /;*7HQ@=@B #%2-$$-+@JHSJYFBSIN14" 2L2E?GEE?(92\4),@O]?E@UMGJ<B<UF[L #,+*%@:[mZti\YWTP1)B833 Ebo\OX9MVL`_D4Y;yhviCtiju}zcb,ezjmlkjkjdB+#-IJKKKJKNOJ><OyީzlZUPLJIC>7 :ѭ🊊mifc_^SFD<؛H>>v mrKKF:G^, ’դձ%j   ]x<5@% ÔFE۾ ᄚ矮۞ X_>3'”;!i:N]L},&”>3RִȻ:ؘ˧G[U@* "—:-p4VLUߩ@@WMVz›(?Cߣ׽ռ9NZv~ ¤CΉ:8x*UF(g{BbР8Ѡ u#TK99'aª ,̻ڳβзͻ񼱬ذ8ůڬ鴴ͳƯëm6NG470+2ò  w ʫ{ottssqpmljc  Ջׁׁׁבׁנ  洪+Й徫@⥜ Tmoݾ,=}񥮴ywxۥޯ\} {jaf_cЕ\af~ecyal+Ւ^dsqKYǍb~Nj^eח^ekeSޕbnxn}ft^̵iRpN֮2sq >>yaŋ^KniC*ˋUݝeLЂNj}ƊܵjEzhQbG껝yR~ZhwG}~ cgw{ƌO}_*Ւxȇzɾt~ȂNj|Nj򁢗e}}ೞzۈ\v}< sZgȆ[hqvjV+M{dhY}ŇxŇw]]oY崟otdq ʲɾȴv۴+nѸr혪ί퐃ŊVs*疓an锐YVܴԼٍ֭ jjܓ_ddciwvvxmceecqxvgcddfv wqcdeclxwvxjcdswvvtd cixwvwoceecpwvgcddfv wrcdedmxvvwjcd swvvtddediww xocddcpwp† ¿ÿɗ ѼOOs&"keyyeLgl{kq祮Հߙchhgn~|tgebhp|kghgj ygcbgs|ywngh|}h go{woch`gxkghgj {peidatw~ogh |}hidaoy{kghhfxỹ ] ۦÝ렞߇ ͼ˙ ̸n2nlqts_\bvXXub눼fbqߙdiihowNrkH\j[a@oKei|}i hr]R}kSJ7]Czlhihk Pd`IP8oS{phi |}kbK:bm][EiCkigxyԸwyzt {VPQ:yRhS};EqRu MKN^aaSJUַ)ؑ}xtpԴ ۵ǽИi%iyreZ4zXYt\|}ߋ~ q ~V&jܪ3h~ykgfg qfޚfkkjp~~{LiYGHHMYz~}njkkm} ~xkcFNaQWRQSkz~}}{k jpsLebGLEFTy~}njkkm}}mTiUEJJQ]~~qjk z~}}{kl[B^aOYPMTmkjw~xveei hf}~~3O|߈vVWXWV^imeʘֆ{{wlNbѿ ް̴~iizp_Y3|xVytz⏈: ̅ Ù"ʾߥ)VE}uy~j3q鷎ҧϩx|ޜ{~~yikfYmzwsddkjj{~|j iovq}o_cj[u~mjlil~ y]`fdg||pqij"}~~|jjkbn}ytxu[hkix~mijjl~sxud_ffe~~pgkf؍ă} κ٣ᴻ~z{x.LwjW2]__PMM[_d΀~ُ{Ƙ w~e[L8ƴ ڱ~lnhOB%hOAtZZ2&IQsomwj$x vmiSܮ,V).?ORQXgj`NdhZ\Y^Z``UeY^[QQRRJ7,*ڔ؇aS|msA[]Gئt Qyhixgcqhi||Qi hoVZliixn]GmkyiklBpphiifM}ihoZouihxrVqhihk}CejhupkOgR|| ˼إa2n{fzq' Mzur+]__PMM[_dÕ~tė y~WH;/9*ҽjh|&ji|UZDDhmmiigtm:K utm/߅nlN ĿĕZ,(&#"")=:-%7;+3(2+=7';,::%"##$&"I׆takfġ}zb2n}Fyhiigy_Yphi|{Ei hoMVlihxnZ>nkyhim8mphiieA}ihoOiugiihxnKshihk}8cjgsplIj~~*m  بgWwk# VvpolGG·d|VWXV XV^|ؐ|Ѵ nBnܮ˖LɊLʊ ZPyztghhgvXRzmghwzu=zh glzyyESkhgt|ymX9mjyzughl3i{yyzmghhd:|yywhglGb~qghhgsz{hEqghhjyzy3aigpzyyznkEh ϔԀqchV Ujea2KILZ]]PHS OWUXI+XU Rj~ܼ ٣|۽ cVw֧o]`dKQe`\·efhqrrjel`fhlf ds֭ >@ڢZ]amX[[^^[W̳|˵;:ާEegLPL вӵSSƅz|yø þļƿû MRRF_sNadk°kÐ|aϜwucgUh pl x ihC lIK4х9Z]ޟVFW-KsjD_J E*7Tά ZkN_` >bOJl=$ mxboY˚b#KITqjWށ qmFuC e3 :ȥ˥ wLMy|v4vgeb~Y:NT;g[GQ  K܎9MDqa{܉_Z SqeKP kFx_Ym T%>fѭc{H Aj]Jy[dqj*ԔIjiXY2-lLڍAsIDlׁ PS͇E {el PBN|q LrjeGs5OAEz8yyiK1|WO ߚcOSQ^|]ET휘PN^aRiQM]블z} KQ{T?z}݆ >ht RX9`M R?EN^d Y3oE|j?O(PXOu@ ׀؁Mf HβmŚIciBT ǎoH ֟|8V  bx($}^Xdo9rMOGWZ (4`owbn\^LJ i^^~~Ob[YeNV\^r V[BD XS[tm׼]YPJb;QuGyQWN EgPv= f] ؁D Yݭ_vrSɲ F w+'3k 湰`'DP[{1`Jby5q  4zRw ;t\iRF`VƉj:rOQY佁gBBV8WC iFUEyDbE}FYzI X[BDCLIo `WD [U ؁OJS譋Fg+Qc׮cl5uNHjc{KL2Pz $-ytA\VgPHzbz|eFDpjul\>xpcxZtORD iEF]Cqn?wTNSNRO5[k3]jSof|vfBP_ ؁twDI йaLx܇kݶ&Guwk53glc9^7aS6 ]UH neІPRi]WlD `ɔcLHJpNV S쒽kMcs|OSbW\`SLxbY\L [SqA6og| AQ~e| }5`G ӓǦmchF)3$>ƵjH]}OXiFmgft+!QhjigQLO {mo^3EJ۲'v`U7uMLa\bܺTibXsqOmbnVReJGTݾcRJEҳٗApYFG Vm@^AVc cM֬P@pA mXWK<Jxf/GrUY`x UQ|Ey߉Fk^yv}׳ϡ.dilkoM ΰ$ HBAS>ρy`Sl3{nDi^ïSJJZK| QXhLZgVsq@I̠@Q0%)_HѮyCrSed`X}  =\MnD y|֔ڱ^FW/14=hx?B51F 祐RZ EmlBSLOU x^mJFfpmN]`Ib ܫBfGHQ Xh>Zdj_Q^\ث}ZUATl'RwF EEuHP (fXNC;Apnђ}~#.rsǫ͐ ⹺LӖ R`P^M>WjVK1Ws8TGbtMM GriOhH W;O[{f EHOPQߌNbwzVOqyB@l/ UU9 MUH (GME_XC症@K-XWWQ5o.yޡǰ xBmI\qOUZBjj [[jV7K FbeS֜xXzT eGS`QNԜ݋=ƨ݆@~ ~oSLQqq U2?V_A[eOMb )VJڡՂ6p 6O 8d9>?rHgIGPjΧ汣RnDXO鹚=bTDw_NJJEbOd{pg|bIGOTF Kk GalfU NeS[aX{pO w|nC ڃ[0tXX UFH I8<MkLs #UrdZ&,_ 3VP@lj8}aLX r HEbI͖dpWfVi |L>/LWrwvqŘGu?XH]}M alnQ=`q]YXOi/PXqAdQ [aQdIoÿ L?LD̵_W Ϳ)˿}DdRhȜ"/LjbZ>䪢-+ Tw :۫˝HMMd;OH]W ή``[jG ]SsM\AqonsmUD˰Ne:w OcFTA e MըqeWD4= v;Gֹq (lFMM"fgg@Q@{4ɜ` OYzSCD֬a{y@\6B1k[Tcc 8lE\` 䪯rB}ۃN AHX J[Ni7KDUeU   F8LKzN>Kԙ YT i#8M1!9kƩڊB;פ8KDK.U ?ZYYXaTNTvFiF Չn^rvvPff^]~PT ViIqAaYRg5KELANV`]F1Q=ɧ ?2 HF~}nI_Q󾣾J|VK:\\wcZTNID4V{FSIIR aUcXCZ{XylpV DzO6e|$BӢiW MQ F}F]jx`xCMHwQKBYmG{O f@5z`k h YQ%-in+Z ڿvzW畆NTCV=iVIFfe< PoBsk_ZhԦ\TNG,_M Iq49H$ܵ DeC{RVWjLKbs*fm tC W[iRb|My+LGYXNW<ֺ Oa[}S] 屧6mdWrgG Zy6_4UL| tY_KPqb VYe]4!s@MJ^ܢ_FJJ Re}BVKRNcSzZS඄VhGJմ\Qفa~v~uX貴LGDMF^LK`b_'O]S|c~Mw}qDCTj[hmx]mLZLct OOy|[{v|\}HIjJgSLskKHoW|;H;f=cg oN}_)pbΟͫmVZE_ aI`DPxc`W\T6.}NHvAQSVcQJ@Ӝet aFAхA xwj `chzAXGE G_ya OAgEENb rZOVgR lV,oPݻv ꗏXфN] HVSn FUMFW]ݲuFr KngOF] KsyO\MGNE LK yMNgmYh}IKIla+Vǰԧƫ֧֧ x.hfe^??\xDwP` ACuSQRplVH=@Œ缜 ِh 0gPe/VSgJ dO搓 Ib>DCS e;| Gۚ4QGWJE^crm OJyL35GC ePmUyEtDKq|JCJXJTYk]H{ wZirk]j]w['j\rvinej^}[ x[imr vHs@@`tuOp L^fm@ԏGl?*86jӤrCU;܌ˎE :bSPIS Ck {G]Baq C|L7`UMIEVS<[{VSiV-) wZZڼۀotQF}MnH օsׅ'jj|k؄j~,w SýFK{?ׅuP@QPzDYIl?9xk篢 bP{Y`Kpf # RcMxSGunry`ht5~Gw\ } XLU Br(Q ]PRUZ ߿lKT '@_DFCWcMG KQf ːxz̐'~il~cs~͏}mcak7 ؗr&Vfd6h? W`~f]c҄|P PGRLm{wH鷶EV&rNhd9TE  >s_Ute|[QYoKkM\\=hYCU VQRHQ[PiZa| W^K ydL{euȇBz قm~~ہ'gd{lہdsd5~pVV!XNBLaH8>cIl>( EOa`u;ӦS nQuIHsvJS洲`>:exrhSDrLMfUYM!THyJ \WU΋񺍁QODFH;iT H]aK8rKCi{v r\zd|}c|}vrc|~bܿ`t\{lpӮd|~zvq xur\{e|i0hH[GX Jb^H^lխ.4ILadF[ k.UE=!)v]BԬb K* 6J ZiD 𦚝 Bʌ5jaOhljUki IK qozoJv}ytB Sosϻ'?p>=.DKg m_vH;ܝ]VEF    |̎MBd5Nqqt ZW;l O@K;T|V] [ dNgoxdah|xoy~CyȧoWZHrT︡{3vD GNzqtfaUklabPjKdBMo{hLShggc R"z `I SwR`N cP0yWGqo]SW[`d@$ 𼠣YKyKP gBJXPF `\H>YZF` y<8xTՎ͙gy[ K;(GrPREe|Zy}~?U^^XVU~CmUzwQMb=vyp7tIxnOD ?h hL; á :#?PhBQo kWܝAY/}ccn;c ΪN CTXLqt]V^k俻dOdUDcInEOBdP5Q>GT]~H^TjB_bamz Tss QRRSSv_T bb AWg@:}8zVUhVĦ͏[Hj?ʍA٪k=Y w%x:/.tLMSSr j8GEw &}gwI GoB%)vO竧 / T ubYٰhSxWҧONze^Y _e: N ayMop΢hD]Uۯ}RKlQU b{{~H:n޸RC VrJ8WIfᛰoPi({[B:pVbU +.mnl 0UP&B-h?hgZ^ U_RD ڐPu'Z^山nVx ]ce~xZ, VӅNHDށU!I~jyM=CXaܔOL^Lu]QPM`wIg}?p\cmolNLXd \5*rvFPhYPۖ ?DEWP[` IF4J]u'NI)rmCyqNճKO SGUI Mf*gRѧbDI+Gdc.d ګ]WJ T}N eHgG I]N>zHMncI`JFNHab_tL9PM@y`? q`cy! FIYc<FiFsrNF@c :( H8K_"(#fEc Z; ;39 ani eQ=V :mDNDϯMB(x[ojSSZИC`ŘUHtWkZIcI&QkH+O@`[fXQQszc@ahPp 2GcPc" jfDekvbjޯUn     rMqi^Fal9WKwVBnF ]pS4†  Wk7?NLHH A iC:춞 MbFj3;"DِHQPOKdfPFҥZ nrnl e Sv߲DhUXt^<ֻMhH P]hWHX욄jXXğPxJXRKFykCL| mbkZSxz SmpefzPqnzzO"uQ|\f9?XMm , $p^Mr UI|NSP~i(,]« ٕkkn_`\no `zJHů5"} xih|~`N@^sr _ZlApNq_NvI[dVEpбuT[EIT^rdNaQgR]&wbs[NL JM|x;APfWlxQLMU_kַV ȏ= lgQZZVo6ٟg pVhmoU\jmd~3lgtoEsZxJj~/AR֎Gr sZzANR {}Y<$Zﺺ~AiZCB 59 f}5^oqMAxvעh}[C[1ޭHQYl˄ك@;qu@Gg>DשF׺oz\C Ioi~PU| AkPr~tKAgu jyVz?t|}snA+Ѓʁm o~ut ݞ{(V]zоiWCߪw8Kt[rDi0EV;Pm}oy]S趺^wkdsfZǴ DWMWp Ej_l]]N[@?MXHpye\])dUdtsvH}NmQfqTdE{[mtt`pIkQ}U&DAE 쏫zߍfՐz]žjbFѹFaxs۰uεᗥv~F`X떸̔̀v⎐VD]_G{?^|Q{ P]Z}iX]y~QnPKLArxH߶?lf vVKM 䛑 ?Nw>W|KofSdu@nUPK4|Xj|G|Dqg i6qQUt 羫b>FFc_M_]efOioNwdeCcDQΥjuVCJiH   흨 ۗ痨癲͒缡؄ Ў?VONj|E:8eM?zsZ{rQQSEᮻdWΏ:~m joca ȊtSK MQqM ٶ cs;Ň\ҭɢ\SV: \m ENJ[SSXhdt @sϒJp VV ~WB䣃nOWэ`sTƀy> IbzioOsG ҁDT{tA8n=9p;OeIUIatkSg𒎡M].i\ jr=LݗʂGr6PH[Q钐[Pj!zoc Y^amYh@\Q>Q3fIC`NyLHtLoZ=zfS`LP^ RFQ ]ZMlNzjǐmKqҖ[sNJb_ s7|Db}\PYw]tY/Tg[ߵkn:FY nq|p~FZ fSbGЯUEbҲ l9W` ଥc-afmo[dK^Q`}P`E_=;m'y]9<aoS]YLEP SOH}MkQX#o@t9eJ^?oNtOyiiS}aNhRO{iKQGJBO GANv« EWR\[Q 蕏6ig KDTZLgD K !QX왘LSaftmߴӧDSV4Y輪W?HPbZh5_uEgԝ`fhj?V\Sq8UHX{i^ZUg!YSTTczD9kƸKWcbnQ 9cIRQOΓm5 pI]t״ x,B ikU׵jSDUi Mln z꟞vO9ꆮonѾ@ Ŝ rTXXYH`jŚ鳛^o_ˎP ]=n? QwIODxVDhPUMV|HLHGȀMga}t[_8~QGJO dMN\] !k8hedFYHĴ  瓐DWh jDs3g=^g8G =YYH_Ef:jeL^Ӭ Ҧ?NӅOe*+j^UXD}ĸXTwQ}w ~ts\Z [~vR\ykN[eU|Z\aedUw0U Pd|oGzd~e a W왘iX a뽺9.2^DZ;@ 󺖘QחMH\PiTWwr LMR@SV:[_nYz軻ȮcmW)w}wy> LcV^JL5pQUw>X\ҙ ΒzDt_##\WJFˡjTbpN[Xwjwd bXvg\{w_b~isvyͶ 8vU ZRwORen PrsoDBNⱰW zg뽷OstQ<fQu뽮 vVQPsk[OLhGE }<^QωUޞsRR V8KX=ewBPDPRNȲVK_NDsmJHӮڬׯMK>O* yHqZCə`>}顪lϟu eai ^uiG^^hyv}FvIxjfP_B ULQ& 9GP\Tkqg 򽷹V~vFʁ^F٪uΎ^ytb_xKWawC~diaSl M}O\ps[ct _gKhϜpnE߹Y(AoWvȂɞ ϲN bJ캶PL|ތhHdQL_W֋YHmUFTQIhwu {rj{ErxnY NPkSX Wh~RmhԃET]P rqչv tszyr u!mu˷~}wn mxtzRTYCp7Z 8N@K|m۫U`XQɶK{u Jb߿*siBOhܷ`[草WjpXVoD{EGT\GeN{p mO`qڀBjD VB b>WNiLl6fՐHIuܴ0TT?Fǐ&>EN]\ fa]?Y2`#RE KyxL`P)G`sTED|Ew bTRf]e2>l;T]~G yIYA{Vb Qneh ʼb{twXVaVqco\[}QMm `GcfZQGʵ L-WBIW[| ~V}rRO )ﻀ|\ ryĵ Exx=o߇XxWTOxvgȱ WUx R Tjc~cMƽ@ IQczFɊ]V_wPgCtcCwo򾶹FIדNciRJtT̈́P.hD}H<긼xywOEf~jLq QG<dJOxKe|Jbhtl_ fɩk_T xYVbdm?Hmc|яaA GO`T a>5ZREXSKag /Y̱Jzuh faK `=~?gXMHb@شC}ux7 $LP]I gQmcLI q SLTuNX >qFo\TQL@ƉW I< IPARBȶ1nr ŤJ 3g NcGanh{amMg;dIT-φ@@RRzݕ[UѮ uJAPPLS 걑ABM}NjoSzYxK⋖ 易gV HKЈPA͹kf vcWVUPgucvGoge؆uRL, cleʯat cMJ >OHI jW{T&KDJZaGT%a/t|OĪkQ_N_szQg ⮮ fWqWNJbH{bByKxUNE άݰC3 sxLokj[[iX$r>(~=`U@CHdEdV~D>s `aƽK_Ln`GF \ cwk XEXQTwvo.>Nƕe[Eϕot`KJE-<MWtH_|uD ԕ CmU yRljdlr|`d`\{Y`csj[adbo ad`yi[fYbxijd^bx~fb S~qlK~LtLDpW?j _`܋o!bL@/bǺSS.vX (|)XJ١9 LHrOijh]YzP`XR믬_}ʫ TBb]|BNtVWr[@BCHȫZWëGQy^>C5deb>ueďhcMqpFcc㷗’jtju脤rr脣t|ߥ q塈4vVP_X~hNLEmI RUeD7U!Lp3 M4xkYXSN̒Z,N$b w=$IdNJ,#KļD=q Q~NMmJRM \WEgS aOPb Q˗LBLO A|ȕNGqZ^׋Yx K`Be~[^pI훬w [^؍hlgW]z f[~,tnFVBxAxbP\Ø TSQʠH[!|;[ XKp=RV`) JmRyWiVSZK xQ3M VQH RUє7pSnXyL]unH ĐEqX鲦μch̥xSGBnϚ ffxn_~Ynқ-f؆zfxl[mwZrMQIFQJh()R Y[kr>fC.ĻKɌXSUSS;sSRF> DђGNX hWVbpWFzJgclҚpR^]㼼 d\vs[Ҏ>v~aQQ꩟5SBlԋOĝB?DVyu]{vܮ{LSzr kwdrzxc1Ft۱S[zzvxutpnwbTw`XJUPeSiC^ Hk'xٵѝVveDv{rpv[ oV|b_H_ pL]IЄ~M]մeHHX zIS OVXQ}ZN\iװpsY[eXMI9Ǥn{:yKOd安obOKWQdža`NcOoҢo\6F\bop_]ı\ rj`*bofnQRbnq^Jid]d{\\w^\vcd`8OPyEEE;sYmӃz^tvAhQp{s10|}n[4 U6;]EWeEI)̝fXZkXYn`Pb{gNUQkTN6RyTH MvcYؑ_ΧQoD>hm jVTsn|>fr\T>WdޡGffK mHZKxkvH5eʽpFq9Bҳ) OqXccZ^Sxu@EߎDl$}σutny{CgtuA 'W{uF{~X]?靃xF}ZuڮjSEQON TS h?Gb Or`QOJHafYJp[L * \XxMK=f@م`連Pmm=> Ql|7Vsiu Q" aq i]U웰FQPQAJLoJȵB!]wbͷ.H~fc]l9ư Z BmwvMui<*IwWHOE G`^O S6CVC0 yOeaPX]a]~߽ Onq 𬧰I{ ?j}[m^ ZHb>=ocl y^R\S];rD|VڴHpJw{hSǹg|eltt{ JIJ \QheQ PnPvuB?=߶pNΌ[Q]ÒLJ TY_TcUSS[ Mإ@TR?N闑 cSbApG[_ Ōlz LFgV ConWXeI1JCJYCRVTLR;U߫uGN; ON݃r_`qψUADUwM~wGgaX yPi..I;cOQQ_9ODPbbnnS [~Tb~ ñgSz[EchD21C7ewY`[oW}yat`J Wcsp~xg^#tiodWLHnjQW [fAcϬ> @?QUxKEelLܫrA;^x[3ggR´SETwSQ%1e|趦R tEH]IIaLӧ]>EHF]W?SAWJA\I*5~WlP鹶hm]Mt2DJ%&qSõчIUa*O[ k 2~7F=TfT|xIleaXeRP[DVV{J UJihԏxHVMRl{tco[d_e PkmLk{S껒 `tG; ʩ9D{wx wϙz {vy 텓ux z}|}|{WDڒpʗ!L=S'E /rCf IշGOS#HQ48JJĶlVzPb{e1m8R6W5D?OeɳPJkfR VjGz~C esD{*9cT۔GUX\A[d}O:}ZW 㼩]AWp ۸Ļݮ}U_3D d5tӑXhUs̋u车~~innUM=_ [BxQ ?W9je JeLm+B3T,jOƻ PjD=\tKU)W1GAS/_{wszz3}v} Nq:B~zbUSYa kgWey tnBWYmHm \aHcz(m Ֆ疭NuiX R D El x Ml^ElTgjڇFjaP j jEl ~j;ExGnܐF] YcyMAn|@GӾbż]pA(v|OϽ Jrπ85Uv2C7+xF;TR/hxVYOԥEjDKghOX뵇>VI]^p ^I|KJ Q>JB YN@pQYRi"eZ 鼧  JPN` Y\ xX^r\n{Lzu_rs]is wG@8}bdcrױL]F ،X0_vC' 8ؔmSHbxķF|:i}y~JemXt2F=Qw^)C@?uJOgMdDNddL O~_H)LN/P ݤ]SW: ~cQ֮\nHFjT] VFĒ XLpwEMIfaT_ aABZ`qc}"o|girn oatHXdbFHd}IχoPd,GQaͷ}|to*йāSYZd6?;[z~->I.j UKأQhNpmq{dL'B W=lvCAfoxU\hJK×o{iEDaFUU_SeSY ߫BALאf ^Ip_ x]8ah `fo6ui` q_icT Zj\b]b^h`Ɉ Ȉ|r_X`SZu=QRRMvu ^{ycշB svwKyǹ]OTYM99Ip'}z C;{~OLfj`EBLq p`LҪRA IMZlhY6X^[jEcjAiR d˖ }rV    uXOK SGLb_]z _?`j񾯦kr~rnLƹTt]DmdA:azv ukzIیΪi yKQqm^[yL}F :}[hIʶLHtOSi HILZQI_a ١OE Y VeoZ6nȵQ m:OO<T FG ïmt}s}|`šκTFrq{|p{oC?YcWpf=O{SQj}_FPL:l p`wWR KeIXxTjIV`PfZIߢ?[xBc RvY0G+({Bb] NZC lY|=q}_cieƸ]]WM~tq}qfDҁDstODnthlhY4n5\oUX K ^~AqtD触5G^[HcV G"kO:$9 PK ]k4 [d hEx RfI QSLqz/kKKW_¿2 WneWW[Oj~s·h\T]sQy]KNI~QUVgcr aJU(rQREM'ube+殧ַxJ Q BqϦ_~eRT]`>`Шb K[OzIHhbA `Ah xIߗe闐 R?]KKHp|8JbQyWa^^EБiFɇ 9̿ jmˡjwQ؈GaÈ߃gbsnjĈ~̴D\fNPEL5Tw;WFDYҵhpyzxxtnfvMSѺZ·*gR:iיwxuvxt}vhrgu{qwvoprs}erUSQ`#q 93eJnKD}TPTUqRH ȯ QEJ6ʹvnk ϊɗk±go i~^\m qmc[ha aTFdIeNO PXFMkIs:ac9 TYm¶ wLϏSYku{tyIIȶRdB?vy üV'Vswi}{ńu~xwnzy`^}EM{B2 Qv8ZOjMYMoZDAW\? mQX^8Ǿz xd ]f0nd˂}YEH}'`kJm#ȁoBiksD\DtGzҼNJm;SjAs:گL^ʹÙEٯ P嵒Hఉvpiqwzsd{P(`|{Y3,Sulü!a 3K~ß|o~Feut{xujyxsm 6Go{k׳F]CGv 2bEcZMrD[Ta\LGCv Mx ݯ $g6ù IOۃ\r,ht\r-hpo~nrswa]nkt]檄-gӁx2bYkt` Ո nQSerkRj ]Rm[Wr>?εcdTD}5suwيr3j]9v*qu{ҿaOQSYY8xدuxz(5殎vv|{xyb$#X{zpZX}}M\Pde\~{}w{ [fGy V]@QPeCvLNWӳC} Ҍ ~S²d߷ȴ    Ѳe׼HHSJIsnumG@"؍cD_ D󹸶ILu嘏jK ്.ɉw~t`nu==0Cdvru-ZKShkc_[VY_jpW4\kLGARsz|~~qu 꽍ssz{sw~ZW}ww;~u HGQV{rGu W6]۔NB|W.hKJoGA@XXcъ gO4L̨s䉇f;Eys|]y\NYe;F[г ӟ <fFhlCwks{}}|H')/ywaIJvoqxxtp~yr~+usskfaahJ;|vlwtG͍ Z  z YePTkcZaYѝnnrtyiq?tkY󾙄~~${tyskgQ-,EKKNGF>I{zywnrv|yE\˓)[ywskilx8}U ׌=R GJHl>YK jٔJU_emZay iRajAfPStȊ?Cp[ʯD: 5\}•i Kcf|LK\ʌa; NW씬zٮqDL#}lB &)!,1;AS}Mv?6rf^kvkn@bm_Pi`J^CSnLMW ̵CϒapV@NQKt͘ O\UPAZ.WsL Nsw>c\LeXT}IXL 寧N`gYHSYF~EMl^XX迠L0)/;IhnNYkN݆OMW~E_ CbsCvZx gALX\It~HH fmncP D_^ҋdJkup[Hެ ;S vĶ> McymkS SE~ \O{롙ƾCZegM;xg{E\|brl{hcZiHpLvj QTRw KDھgO|=i `YIj>e5fb? O׳ pcJL[yۨjnofL7>X x_ Ɠ BQ7ʶA   ΞqFSN bRCOK 魌3IMۯ gJ^GVRѳ`嗡Q ȺJ ]ZUBsxy' [y5OY[PwS[Z &RPRME?BV[r5Us:{EMXpW@| O ⲯ dEJ LVVRw2!ʶD¹wu~;hhn|oZCziwunsxGӀaI"GqV@qV}B_ Wz@NւQT VrD SГo͢IoUtCI9qN`jX`kD3 ɿC[~(NV9QQ LM??eIce~ِQJvH 8QNnxgaSDbUqWRGa \?B+Wu*Sđ fIT M笕cMx1&ɵ\I{rgdlPv|‰{trNʐa{^N~n~σ{rF CODkVнV ָ @\t_zYvh'W4`o SPWwDQ|s \TbUI{ Dsd.J wK_?c(_y_|b @[GgsY kdAqFTIUWL h ni U@; ޽hЭTЌ@,!ɶg>iCfkֶU o}=kCU|c=i^r r~mҏ}[g cLH]H{l` C>HH~`8ӳav=MղCY|WJBư]jOody J cRai YAkR3d Wp5KHh0GڸmfFXT}K` sM] PlTDXWg}RRPXFSqBBK5[鍥u EU ݫͫfZSd2Ķ•f ?{'hw}}gxbC~,oۇpu ]iINwjH~mZKj_V IMZVv \gKoJ{hU_@ȵW[ez'uvwkjD)iO ;ɎJJm?jMy`RҪ }OhMco Vzfm |QΓaAOYB~}rLjHޜ[ZK  G߹ @_ OHkACķ{bpb Jb։{hhbohȊ}龍o'Տk$9MѯᏛpu BquyvfS LAg˅w^KC2 j'6JfJlTPZ|ʾpwL9[tNߐaXDd0tUc@?VaJ UaN@OD\Duf}CVP~XȓHs {C ᩐ.LNTDT· Ť  ۭ   ^|QߐFGx}HcXn=TfzF Q<wGe9sо}ԻĔj{t [>mf |l?Poj|OJicTX TsJex Y_puDqHDz~sRQAtd3TW˪y Ȼ/SQf\4¾TړMPZVICubu}a RlK\=Fg ƻKMȺ|Viq]`\ðQoWy}6a6>XaWSXMYqrXUxjWfHh<7EaHT^Rab? B薑촲6eXαmS}a3,Լ:ZNXVCMf]FJth woOUZpDDZMH ռÄIQRZ(HU.[YzCTKo1bOs`TbE-|Uh[uSDozIbK>RIͷłuA̵2i nWzNbe*1GS8č`=]ȳ|l T>YIK?xN 渵AXI~鉈 V μWaָrncPE.Yg9W]OOaWlr\O^=HD`vIMw~F`NۂܟO[E߻d]T*捆TaWgaRURmL]G dICW5Qeͯ[PaW\i vP`bibaWQ]YZcKJ x$ZQ^趮ٰ }}uWN,[+DRYG{%sRfOMfb6GMWz۷Y|]psefPPPjegOcƨE`>XJPfSyh8$L䨠EX͙nCH8|d ¿?蹟mM[qpgU^GN@ ݨgPW]r-JO!Ż♖ 鹳}}tDzp`PSR: c eGGdKi{ > Y>]l=`Xf|j NxQG= 9ZOKDح dGsIi9ozK`JU! r掍TxsT\ qME<cHBp tlDeoJ~;hM=캝ϦpvUWVUUTTvPQ@GoWJo̺ܰ ījuqkLlz6P3ſ:Yv=4j 9[Q|[KXgN˗E$m޳U/pNF v6|`죋\f]t{T 4䌲 ^ @>PO>wLKݱYd  PN mYIά|k\IPUWPatQ >~cKmc\X_{^]wyR`B];崪xyv/o@3=W=MX XĆS`ys} J\H`KzRU~ ~;' @sQ CJMSbMQ eFkX| gSD@,Go-s^PRXu g_s\\s\TgddTfiOs\9yqQjJ{]UbC QЀDv]XtlHZIC Sǐ]vtRhNZt@4պ[hQDs2ͷըpxt AbJwh* __ڲhP\ZDM#xߏOvsc4Gsê^Src RT XPILEsEo \WI p~I mBVqb^odWځSԅrw~xVsU]uzQ\wڃ ~pxɸO<]͸ j@JRj`ck BUvRa8n]bͼᱭp~u >Sbj8,s΅`8lh g>_qpՉ\x^U\F@ Pl+EņN|GZ~7 l3U9K`1X=楮^]y ]qtBurt_]sttgHbyc]dc 穃ffCz`ym mSfgMhVZYH󠏒 XXPbOfu\V=c ̷̺tpKNjn)Ao{3kdlJ輙a?蜁0Tt?QUJ[u`Wjղ hTzTn1iYM TlQj[} |zxy} ꂁuһ|z xwC@]IЮ ⲊBB3}j]bXƴ Y+`ai3_ Q:FeX|˹dtywdNq ^bJ*FshqK8^ԍTJ\duhnqP\fHqsE SDeƶ۔ifsg}d MfkjjlQN^دaSʒR|AWwIFkHp TFuG^Q]KUrXe\UX uW^squhWjFn7[bkݽѺkKLv2rRew 3e甫=Zɯ{t=W7W۹hooRo+ hRxDQmWbF|AQՏI gKnuJ_bf?<ÕJHCaMgMRMؕgJ*v QpGx`Kz7fHu(3Օ}EVzN Kh>};wɷ~Y]Yuѯ KTfv ۀMbWD]굷t#vRbnp]bt<}镍$v·=-p X}FJq G>uqRFNZkWJjZKt_DCMzkzNgN]-G(dYr X f юZ\S5w/ FZOVgyNMU\ KeQOGH;싀ꕑQhjuPNvH QYh^z"|ic`wӔOJCFAUO\?+N>dSgh85N j]f| QGODIfR. MS==RNSFZKjG0EoJ>k6upHW<fwY;_syR]?=F6obb9 sMNJI;b|WJ<gCtO?BȰ{v2vj]7q缨 ,NZSY)ˎn pHj nZVDkDbe8N>Gtm^f ~HLJ tԨUU OTkOA L`t]V^y ?~M_YЫRڦDbe"W:?IXP`FJp'{o] WCFRGu2A斓ÚGhOoDqPP;2&۴m,&R ENhRν TpȀp]m:jWPdEV}ER6Yt}gy҅cN$@YuA@=F LBxwEJS<@dWMÃJi\FڝR_^ gΝud8) Y(+iGU}rvE20lKWik ?WgMHn<~.ȬDlKa_?_*Q > Q# \a޴yb L2r_u[^TE$8I^uPc^kGM[gUPs5߾>bեv wv=;uW#yB }pMD CU|fi ĦKX/ 4OGmjho[f}OY EV}]bILF]fQs[8T Կ) ]PdgcFOSe+ҙݫMJf]av`XFߵ wx%(<=Wxe|D%1vu\LSLaW}绀XWC_?q JkYvc_Xo HUSX CBaKO r]FLr/c ʺXt]NhUbL`^QRal^vURQ|[wNtS_^Z imycj^ ychjphUvetd^ `rgh^]N yPS\K~:|n?I=Qee@j51?WQ>EĭŲphLaGi H  kwwaE(MQkz LmUwbn KW]b B]I~e?Ra=q^uR _{ YzPXd͙> sxSYCfUK מjZ ق~t wY veTk뾎B Pxpul{کL A~QkշSaCJBٜqGbrrB”\GdQ_azݯqfpjm»֎KfNn|fѻd(J gVWccDfj tMS<:eGnuBU`g *WqdmRĢ誫R iVP [;ZHpUDACi ek~Ί|` mvr] vBigjfY\ {gf]xz-EsCww7 U[tyCpI ٢}4 ϨȤNnBfBRǖJ`edcVV©K\ D]p[οqXNoǶ?2~~wBCq谩^cSiV] J\]|^m#uVAe3U=FdOZJZGF]pNByǷM KNSKZmGRN^rT G*mlGMLu{| flkȟyȟƈmHvit|ftTҮglm.<^M왖]X\XC]ZIĿ7b4ϞnH4 ޞ̷CiTmAкs XXPOan)B~i+rv|ˬ9&ⱷ!{Q_eSYdƺGT}G QAOě>Y~p_` GtDTsTF[az ߋ[? uFnRchTsS{RHAȽB ]j mV}qɁt{sd|{)&rMQN|ԾӀh3n fwDc(P7N` D`r5갤 o[[oLjyz`~1J\PBuTemyJ@ͥ?dFXhFu]O^]cvNZaf]fV] qQ.zIX8LFow[\DnufZJaK*cJix$Ob=_UH?pRkYNE`Tc qccѥSmv{^ ^pfgsf fg] RjʴjZ\xyevkZiE]QYZθNጎJU秣dpH]HO HٵDK 3_K xȠUa@E>k~}>zK]j9X}pS~UJD l|<E L}^$RCnnlG ^c3ċ_X S U\FJW`YH [k`wuU3|\Phr@ӀYtrluMVH`YPH2<ߦ?^MPh^,x}dM v>b/C[D ⮳ghUev|QIau ΥkDrz \TZ>JB|N$8_{TY`knF*LZOF}J7Wa AGo G\yIcXJFPxRrcPxHfMN_eQTbrxE Iiӆz1\zTZ? B\袛pzKlLpJ@EYm}zKE F`p֮|mPyXG :LVFGKL@?wpG"EJJGUAE\HSV6 X\>\ bUU XPZcQĀjkz?eVbj ڧBn '== SHCA齝}dѾC~Tm|FNN+LAoɬyUT }Je]PViVH$ kEGfj鳥lSo^GAhlV>kR HYqf RȀMWSޙlv|r1<}lTsP@b{[j\mwCNl^mr RuTdjaOxiXFI]P &spg3k:z|gL`XhM洹phLPx\`=Ҕ[gS `UCнWLG[=v`iHAo۳cxHX oE` Ul> v 9A# d;m=LIaH!MSWYfʵTtFXHSV}[\_Iތum: @zUcT{T SRcxڻ >c]{ ^Q\uDeLtJwW r֔a/VZfQLqrc_[_p{h?a!IL깭 ApClLOAYNkrYcJӑ]?o\IIĦY^l\Uw1愆|[HaO nuZ`IW TE N(43go`LYF,SщRVjU㍧ZQmsSZZpm He}{r`VQv9PcTg\_^FhOW\xRbW̤dl[\`vDSTTSZ|AmTXS}JCL ҙnUN w||TSK\OKLEzv5,Nm^oע<Dds SVg賲وYHGlCV|TS5XNhJh|XiL زF[5EO|Lڌѫwf_jdJdHYCXPo\w [RdM@NLR}Qgc XZ<<Yȑ|| up tjslʐ~{jrБʏwkءaFҙQƲOKkezU G[M^SqGumvJbdg NWWa`(ƶFE_NqCc VXuIm`]^zS UrQ7 ZrrU`DCuVofUr#Bj;amg<]xNST^OlV l2pS=BELPZ WIZN ~sNMٞITUhC_nЅiZbǭ~цhΏu·ncts~nɟY¡laykHY^tU ɖkY]j:1VczFY^i횑I ~yJjQXfCmvOKC_ރiJ wj\QNϷǛcaPl˳O~LaJ[SVJPhuWbaoCA! F^_ hz˒>Dj ZJEPp O.P`lEYfrTRTT^UFI hFeQcy2WdoabIe^䗦EgeSْ~v^{k^WHQmMXqUmYUeQ2 < ~>UV꺰 b Aàbm_SYXӛTXTUW>A~Dgj0<E]q{nP O͹Fj͔daAUQEG F;hDomd@qYQt}u[ c>sfcZVxJqMZ S MW]g|h=kWilg_7 HNV hZZfP@?SGh^USe^yƀy eGt˵u|d^vzxW^nqųdX[^i"K~imrEhH!bYhN[[]>/}PK=!P5쯴HYPw~Ƿ BkEy=IUYPH~>ؙHWŰ|N찓Lsҩ suN`-Kc?UaPBo]CIQdSkVN^NzJ]<zszq e%,GES CKT`ŒjS gRa^rhaNC%]ɭ[8 h_ ooyg|~Ȃ|| ||l`bj́ws \g`u׷z5sJniaaȨFSZ|`Vrp=_ ikRB2i޴@ kx|zfܾ SKHSvTfiTcSYz!LXԢk\঍UNFu`j=rQWT WxD8gwREߒZGFZSrdvԸdt@j jbeF idl}M)a>  X9l:p BHՏ\aXY9f`>af2jtZX'g]vp4jn:nV^ж~ZYQc zzn:mXȗZ_eexwxߚlSÔe]Tj[PbbtbJA^W H}˘z\VY_rk BKV*5Ȇ4=⾩D鵱fb]`UXSWC`r唐ƶ|HPzyzjq!J^?5K [RhHsNniI[t[?C`7XksB r:L\EdKIxL;$&ʳ".M  鬦 Hatjp^K㬧|p[rFzH XmQZPޡBJUߩp{~vIkz V|g_HrAluon QKURgjEBӑ`0Ax~Ѕ[S^"\NPzM~Lh`Fr_lQzT =d]ZggLohwnuYHHQXTM@j HS`Cy>R?tZOI\s[\YﯚPу_mBn^LL|}N󶠤S(UzNJy\\`MnU l=Mp֣q}l[WܨXTMJYo̾SD JJQ"sx.7 Nl`uRa|O ՟z_Qx`QFʆ@z QLPX%4fT dV R_,wQ#@N]zPV߰onFmʽ CYg|^]dsfL JKGcXfec>qd#= |CR΢tt«Y@ Li\w PMS@POJME =A#W5Jm.;ZnMd^eMS{dakS=JGFXQ ~9uE[FSx:Yu@q#]{ NCWw=[F(ȕxUrmQLݒd6U2F I\UhVZIHlDqBŦ |K@{ 6F<hVU\\ggo/!orF> ZYWYWVSfTs=lvUKaES[XךG CeVNEcYwJN{qDD(NXXʚw{qevJWlG KT BH|fF5_QI&` {LjXd|vbbaZP@yn |LSDeEk B]hCCHG @l{oιtq]HR&PvܭQcfh{OoYVZYPhm`;維E ~/EaTSjuIJKcEFecUsJz0ńZM SDJ P?|\4{B^(O)'Paԩ_}^"x}{KtkFm —Dja AT㝞ixClB}džo=Kx:cR` ` t_O^P_xoVb>Lta[IMjz@bfbQmwWFُ_a \Q]hdHtR{K WpcMberPV0SƉ(剄cVгaShfhᣃ S O>S J8aJH]e wc0_#6?8lEUL NML~Q} |mr* ;ܗ  ܗΕ̖ߗݗɹV.Is.YzXQN~xRPXstoST Xy۱_SaPl~YmPLSL U̻zc^SpfF2ìlvwp]\/%Q`ذNӼtSSjnkM֍Ar]Iv7 _AgE]KGIKFaX_k1/p~b.<cQSe LkkE[jdkHĉbtf⥐m3u ѧ}Qࠊpmuͤv頋w{Mm4 DtiTj.?T\@\D izŋHKWOWMusOg\TZXԶoIˑ뀂}s;Zp [RTTUYVd DVT}Fɔ 6Zauop +3bW?K"s8}AK#0\CSJ ?;iWQNrTf߃|Łv ßeKxwpm|~ޚ~G@Ye3S7xy}SX@`δ iYRcp HݘpuU£`2h;GS^B`BSUjdTRajӴxwzgmPHm vxYLMg6 5m0`xa f(x6VSXo_Fi ם/N ~M{p {9gU XޡIY{tcdomoep|m5ljl;j _^o }m5d_Xl g@mnmaIxZ/HFw,I ۓMf?𛑓 ƢYHrl cEhjQY|DJ ȹsI ʀPGG DXeOv{ Xa⼽ѐ{wûruzXSO;SMqcacXr[*6CJdH`J_ Դyl.U}z@Y AbJs+J fBIHړvu~f7afJl wYBAu z lrwuvjdhowXD?s_Cg?CJQi?l]> tȯ JnccQpyںҀ[OnKm8_Uz|qMR L5; \kwp᰼J _6sEo$>m:Ϲc˅iA C\GuXT},_Qc沘 I` VfSO=~6KUtTyvHUM@7H d-v INyك["|y[oqfnkpMMy\`ڮglfnfe.e|ߞa2`RLy؉]a:d GfHeNHK Pڒ HYTStq'DֵB|A?CAGfb\c/ Wڷ@gTk ]鸸GN\sfξ\ 9T R㾴evvf̽A~ऌR}CTh }K cGO&/RvAJNW`IK㓆vSyC8 'upUp2lHbaOMQAR`PACwdo\?fetLbϡIoFCB>WtqFB荅Dy V6ݳіpBBR͡f˵ک; ]M`s|WB6|ewgXܟvxDLCaHsN?8/efЙͷsSpݜhtY rh9@ JNDN]gSzDX5[RUl҃emV] rXP_EgYTț m\ZR|lcl|h6w{ !lBEBd'hb܇CbqByWx|yWodaRrgbY%GbBk }THݗ g<괴]F n]]iѶ,FULLxhU F[aYORW|MCbf]mWRSSVUQlrz?ט6#&m{hn\S]=JsGZtPWV uMS `{RnayEaSWXIWNY><Ǘ J̏f>hȁqi aɀmLmuu~̆m}%[Ṋjpjq4SATT`mɈcL}Ak sGũ A\oˢG ᢀswrtzhUT J_v<f@ vlWGVTNـNrQ:O8NܖRPw }y {I HI BrXcGKIH{QTgP~cM^^}F`WWCUKxSy_RfJ_K̫X@eU \ҳ ΏUlyl?x?~[~r mҏ~Ԑ}]d׶#TKVp~KUjye;RxBraeȵYdTXM}\( qe lp v^NIy Vo7mpnunm ~|{ro܅ yڅĆt^]pUPWwK| vdxHا 絥ݸR]pdRenH>˱ ߫^ql}wnFbD5S AFGUrʰ XIO S0?5JfJkf}Fbs*DٶSV zuEuAik@\ JzYEC\ ]Rfgk̀RE YO付f ][K SL辳!FdUC 8ń w煱⇁1ufƄ>z>~ml dclڮ`>zss1sts史 rwᏸb|UwH[spOVy_;McU Ɏϱ=m㓒 X vX}w|y|~7Dw klR~U^HCyXaC♒DdG>,y:gK`\<F ёPf c±g @q~{ ׅAHKIh\JB Q1P^BLўJMLIqݐWcx j ]r箷 Ψ ֨ Ĩךּ𼱴s`n:ZfX0=W/pVGgAOnkRQY~I`hkK֮ QU᫬*Fc#҉yuz{q +/,ZO}l< YVJVPɩOK(̭kIVHJiKclMQʭNTe }eܴBuS[j ymSuMRWwWcH8MAɄRTiDt\ΕT޴[Sv뼰z6Mm` JcL@M=eU XۜrWVWυleeȔ ֫S Ǹ>n_"鿰|mH@D:)`ً>; nTUa xM Jfq_GdKJ(ʋi| TUtLdMnUN>JײӶDS'Qۿ_nzY qa]kOުsFk^OFoS|MqIHm^ٰg}=bnpS12 ,mx_ Rg`_[I acnTMpPe ?uPVgcTʵ & WGFspad]w-pv<)E*MG,*DmڸyJaC̆ ־Nд|d)@ (u9ZOudPQ w ̽EI{dNOF8bYe] XRh۔Gp_TM SWczcC/ pZQ迵w4/]w_otAx@TStٳnBwhH_]G{jZɏDw9鋓З^O#Nxp.-E>%4d`5kźy;_ nPBrXLsݔlGcx} gz غO¸s   Xm>S[ `=yVVOM^r -LRK;\ct5jKT^۶ˣt-5OKKT$w\ndjEyw7ESTA}úu6ɏ3ÏfplDcQIHKz{VgRm c[J~DqYf.rXLI]?$YDŶ}|OŊFGhY [bKaDϖ=n_moT ?gpX\raqTT^CWHI CieH\fF˫MtlJLs]drt[SuoA[qna}uoAj^t]r^u}HFMVV[Bh FTaGeaʌaQDSN!軩fxL`W!]wiJ8>!F?X?IH LiFWU(E@FjOɷja^rsRenzq4^DzKuRs}traJABGJIn}Y]Y}ҿPBV]ѰH皉HqOHIrC?|]9xS PL Zji{ eeX Gȧ` Ѿý⹦ejV|{xɏbt~_p tvh}mk`WxƺjVSue h컅I5CsGҥbͶ:@ldi``xAB}eNYYX%2gHCC@AILKJLLWU#S~vr}w1J bYG<xl#p aZiх=jw\`; TOTs4YyROݨXOSN VSW؟Re㨰Y? ^vopH[Ybul ]N_mh䦳_tE\TUDTD:xA 2iPRnɷ|oEeBlK|V8ĹU_pM0G:7|q5S:K JPLcp ?~$RTɲ6qMzU]WJĝ9YB hLgI%GJJEKNLJMLKGBCCFC#n}ktܜ:߱@ KNO Sr, Y kq\P@R=KLEJX+LIKml^V OA}MVxw볧 ©S izre\υŅ `ptZ>}qﻋ~~e ߃ȀnI3}phYqc(ѿJPYkVnA P;} '`xLP״Iڌi\Q *Ka2k-}yϒf)1y>2_DGu~l> SJHecPv:`bw5LsGƹC~ؚF[~Y1k%$e ~Wlf܄ } Ȉ􍋑 ܌ ށzq{|ijHwL^ROb^ede]Yn RwktdbXKedrȷauTBm%xz|TseFHtny tv#ͣɳudy}5AumzyPA LdJ WSg^` IOB tQjNsjKyлF>¸Y@x0%0#cy|~xϲpE?Ydv}B֐qoqx{eSav{{ Mn 3fSvmGd H+(@KpVeE/tI \Ec~G[YsxCH_쟜ufIYfϽjPꭢ geӻUQjb_c^HQ2_@[_PL_cV]SNqC:՜nFwHu\^Z[t}pOP(FϞX#62*dA1u@KG 0 YBv慀s#fKsruqyspvoqv07PfFԭur}zQ横ѦmR]j}ϜzykXYYZ^W:uzSF ΜSUrW} tZZ?ߪ ӷIG v69XWfpΑϧ[ c_ˇ؃o}flnlnV[Bf< ̣VOwL`s`\AMM}~diVQSWsHY7DөxA^aHO4 v"ߦzt F{!q{l9GʮĽ]\PݯuX xsrSЪTq䢛 MQ@nOE*͸@ЈiTGGZSS]bmZpܨ;ꠙ]oLYƼX߯ZYV Y i߈sq buToyo'awȡ䷗VS~ϴnrlaiOw֤ tut;XS2-asyuT {|lOq}O S@Y4U9QaH >ǻt~ǽsFFTQX\Wn |{dõgUl NMtxpd 荑OgPZafmb]E>aEoޫhMfqDA^WpSf\ix cklzjk{at^wc`} ab͹o¥b_^hhg]qwj⫞AD- ܯvYYRw~qT CL!7Y^U\TsF^U@trƸf{Dp`J<wdUnqLTm ⢡ {sUbTMX][Urϋ]8| zjV詠ZۂCTtokc8ܧC|vT`| :`\jOLW_q᭪t~uFD5M!D_?R~wRjMO]@xny[tQX쵧>tRހ{ٰiBhI(_A| uvnUx NQ\qUHUo;UlICNb[ehYsncͫལ_KᮣCojDSԔ ]9 >ҰhXGrrtg>s}w5:=[ctAqsSmW1y:\UnuSTec^ ᯮw|<S5մvI樦r rSߔr ^U꧁w@ w׀UBR=K~Ptn jGA ЮIr;w~ywxGVo3"Ad\YmcYZpM ؋LVq{еQYT[gA_QbBp]~UT P_yGRÏBpl󾫼WegTx{NOx:Ji bUCv< /䖎WOJbOK|^rfWUN_kٙ 9t}Q0MsxPTl! ѳ }C= BQBbs۱RoN "9tkh~ ܻkRlׅ~u簥?AB^LǐjFQhW+ۨJRSrb7+g}l[Urv|N[̗cU) ]kj!pw8AQmyHپUSSiPv8H[Ѵ%N,e:^[O>PUP:p4H>U_OoTZ^VQKd%볡I;TQUφDfs`Ws븷txtmOzBJ߉=힛YBݾjq}p$GX_^[EpEXWJ N>^ISb@\ehʲN#ÅToKBWRElmu ei mci{slioenm dpk~rsupFH OrcSL ]T Sn{){4#%Lپ}^p bDSWZP>WץaUsRp?QZ E ḶŚgMyyl[NLkTK]xL{{㬚iPǁcI[` 2WRWPSsWP`̧Lű۽"FMN)ыigҋimupce'a~k䏌nbt\h`~E v`MSWQJ `IWQfKO[Qa^jSEoCPAD]NFLYDL U k KSd銽:naZE˾UѢA^?0^xbb\lnaJdN VLA }fQQcXɈcUsQ IiW \CSc涒 Cts?eBf֎Dfzek}גxyKjklimRpTK 0#[۽mIi|N yDJsvH[|jsW{9@iZvJfSaMh]'7mʵTuNVIR ?{WjEceL}EߢueM䦎yKF f` tjx f^㕍ux!pϏ_x~vk nuKPUWI Af[d^FHzDu<>fѹùp| tPV TޢUmOE[kNX\p7Jcv{sxhKܘg1^JZRI UXkҙ' E˲M*`SLk3k[sLX>y] EJԔ8irWY>Z\Ebd8irY~Z r߲Zu[\Yɓ AWFJ҂ZL`MSReiL]\Pf7= Ae!?OFf5t֭MZI*¶~g)D-aW@;Yo YUXmC{VMm3*HSYE}\=FqY^BgJTFqr&N޹ FUTR@ ȷyVvuHEjѻkrT FǴuE򮌒 C]T!mL: v]d*6n컯Iƨk])h ~0:L<jkCB$s}41eFG DLGsMD H:C]IFVOVpz ߫ Ⱦג홓 Όꙓƍ؎ƍٓ b鿪LY C-"@a TY^N ʭXKFӌvxtN|FRi[5 폇Q(K(dPIsslOTYC[VMnBYK':zܩ"lF][APrD|N u@] ֙~x[\njXKGe`ˑHD =rHet|sLsSU{ز wg師QWXwѯXQ੒PcR%WĘtotX帬PMꞎGj L2XlORUu@cfSzUҽxz ΦXC\xԌj\DS\#fO&3?5+xqϰKO `GK@G<p UInGwtͽU`1KH]< [JNL[?urVN V~~P{viS`{NFjwZ\[PTXV qHkzG^c`7|gsI5dCEӘk~ vu vojn!ofd.cvzev|sΗMqJlJGgYi߬؂G\06m}}{xyxy~uϳggpx^VbDm>GD`[LULMn{vkθW. *lb/s NͷTeS GGisZGwxyy|nv`Q9K =yF|DnpÝKpa^Ea ]WVWqٻTSgKjԐIZEd{\X[MwnN­_. =G܅gmY %vgmbi3^|hy `gm[qۮ0cuRLr 0ct>FڈZRrFWKRzqnPe'oDMEG>%s~Ы|ӷ bDsg\GߎX\/`DcCqʵ]EY;9e ]աtG[aϐZnpGșw|_M;tO nꝂUI >vZ_JI S콴}~.HEHco͒`GipUܭLbTQњ     7b8 %xF}K= @m]cF] FW u| byBFL##ؼHGi{tޣOi>?k WLM~tsBP7dn~F[kwxn|x9|[]ɇLDQ vJ\RHC?YR|NӶIES `I> TžޝTurxw3SĢH_GʶKPGXHʲJN.~BDHr}Kps^XgLVOsKDCuv}Q𝎋ODs:j5@Fo{qr9P7\SɑY yvHRLW5|KfBt Vd8[WerjZj7K̒@[fݶGbS oNKR~]QZ hmHqH^8?B`ϔUc{wbzBx!m`JrtQJ}po\htucM P܈3}UZPLn?SKPװiMjwwm⦡D ЛPv2k8SˌubDz|=coqPhDr@-H gyoKETUGaD&7+NF?^bMAe4CgSi껵GAv¬Hk;tM;HTX ~vTQЬ Ffq ]MFմiC> i\MQZ[[>XFEmwyh]{u PUY"cV^Pg@Lm7eWДpVN?ґCeQ?WnzPNٹdG}TAф pHśL=P>!wGiƼM #UP{sǵCd`kM?@6}Wae_Gn uywLH뷕^=w <dx: }Bhcq uӧZV]t{frwA[czo]Wy jDtx F濱PZr|pyटF CU3 mMCe~^YcQ פֱgz{iQůEFwP[I` ]cmaHLK5JIU I 'TUQkH忱YzEWMCf @h2J~ nF.i 筞tR`mrw{uth>nJPT ߋZK<fMazxY 8Ee`)H `1Ֆy} Jej\lBG akKWZY/v >J ꪈSX߀hSN=orFrYHQ>zWI `ZLBmDfH^CYUpZ݊V|j ַȖ]MQ[cmpss 뭁^Q\SJ_XX]j@իZat竤F ϋT?]c=C \.vr,Q bS #jUj7KEX\ N]_i_QT +DHnEXUYP sE݂ X.$ݗNWXkL߭^ݼ[rQg˭ֵݵ溻ܷѵҼ黼 ŸTkmڧvZRgEy aDE?a̵㻕dPRWU `kjfl{^?gUTXpϘSăFw}n峷 OaEQ`Yv> ԑ!(1 ]xVvM[C|Ykja e^K[ Ce@G=^CXaμڠs  mMc*s isI INjFtpR^ mdzwIhzuDmc׏EMu_KXvpDRDJLjXfEdNNGEtj \nQR_ǐjT PQQU\cgmsuqiDgKpNʨMj|wѦJ HxاD8 [g# 14t^OHTMLlg `NP ?ps_ SDz .[_tBgC  tn4QK {>fX6^=Iأ hDŽglgɍ[ `eKWpmvn`~ QWzImGinLbDEQ?aEnDjm\eZ_]`_bfhjvvsRDuGTX ֫~w٭MUMcSO떎蘨 ѝPe1[^ #|W=V ̕yx}#z RWXfPYzL]Щ Vor+8gt|bc]\\ZjxU JZxjZ[5#_ZGsDzCZR|>'MRT0IʻyoFenHkle |]_^kh0i ѬiÇumm^_bA}?saG{USMP N[CLZi9uXckW7oƢ~edfcb8):cheT@nKrD`ĝ/Lz l0Nw5 VD`p&EFoYMp@ OŶ ;jzJS弘]qsqlK}YZОP}ZrҍZkyB;m=Œ<]P y4ei JX胲]9rz4g|2m!Հdت}{ܮ:qk:qLV茬2kyur,BQU`JV`ZQ㿜QNhpW U`TyY7'--%9b:{? wSsX(0ۭFFhOa MO߂NwGcP ϾO{ilOVFĦGL~i`SPC.)zKj^MbvJ߽uJOTC RiESetqPD.QNMMnC@q沪 BīCYqZaXŶއjx}HV]XЭf]jr.3Lz)F:HUEVHTpr|Zm}OWևcapdG PtQCδHmևCsuWOQ ȿsXYaZI{S`YDT֚w_#B¿0kICrphւ||1+UzRjIPU i^ KXPOI;8ɴUtI5Zڮ׵ہqwgfj3<Fr `A'1:d}R\VS`FyFkbyemBMa F[PkueIDV<TPKkd~ ̹NV ]fHWy!szv{~M$AȺdGtxaSr]nW`Rxdz=eueKIk rdF T=fa-.8뢞O^T/.j HsbOhgԶ֑luz}thz~KJWi2G[U6UbXG2@BE(8fH^ dk^QS iuGIlX@e_ch |xNIDل{HNROrEdX’TjŶW ~t^OPߐozR/iĺBU^'B_L]quk7@8ܻsXwN-̻LuQ^jR |PNe~kd`A@=[ܶfVJ3TK ݏEt 81¯uxyozA w m]ZE3olcO@PiMR 隊I @ޙU`cFQw\aQH䗅Sӻ1 RRwp{s-k}s}"]ǹ}V.9ӾQNŐvxY!D÷nK'bƭWlkKl[fDPhdoWZBߒLiXGRW L6OR|sywsu{try{]CǶxc}BiO￶q{|Z ܲhu=`k] hr@z Щ>%!zQSi]{`п`4Ghk ݡMtKcUw˽őE*t|vyynXPtM^sUe` =׏Q<``~>zŖqiod hq^j m]Pkjv_kjdXyt@-OoXt|akge laCzW&ȴ sxM\ť9NTfNcc 6P\Qt T,tfqQº<9_ro5LýѐI܃Xͮuo|{{}}xJyElZwvԈ\᷾ }s]IbʰhyrcB IU$FmQOԶLzVoPQoTɹRVsW̦ECtm?V|URĺּ_`]bK 1#Bv oI,WlO^hn?BKaZ>'ĔOEHSIZ@zfa eUu9qs [^sW|ې^lNjc=ux]p (izvK{x~WI<;GTpxq󔏑AݜFSIcm?oA{Oi=XqhpFw@Gz|{|uZ^9[BP孄qQf綣_hj^SC,nQ_U zqNN*tzWq̈́L@^i?WD Jͧ CGd`:XOPc=ZQ.rj8xb`X;X%X_9ҝMJ^@ln=V}>㯪wxPb\yI \~53 jjxUy:‡aUz:ڈWzAoZFza vss \CJG\TyHLdc䋫یSVpORTJAwQ`S r8lNv;Kɶp涮߶IjWYjkWo GݭAQɷh_PjEO߸MI{}SnGXNwǁ>y Vcv9cZNqQT_̸LakO2ՙ|x t~NtUxJ{sA?t#QTcaIRtkQ\`?:JMׁLfI|m@V2 sw辦G˱\@`os\`^TXrɖ^LWʿErhZntwyu wPYPJz~_rI$FLUWe\˧;9Kx)ڦbZo\Rގ卧 䘔 󕗚 ڌ!Ȋ {_ix 0[̌dJXCj ZMkVZoHIʩQLOa_]e[zI1q>IGnN$,sv}>Qzt_Zѵ^T7vwy}Y~k[ h}n?J r`kCmfRSQbtN׽ٚ^]LrMhĆq?*5F>3pd]f]WnwGt]z[)JbZǸPM]}?d Q>e oWlE[uNroMj[ ^ cd_B݁LXw9gj5S"bjBGDڛ{]QSOmV`U OFIEas_0lq`ru{|M&Eku5-$i,R7EoTL綾SIb\tdEEQY ΨTIq|_]A7NNEwxvЫzk:WeNh~CG۪ Hx}txrL2gtPJDaE)(]p#Jöljѝ~wxw}M Q̐2 p75> Mby\bjZX~MQ汋,Y5uYU킁EIZcS PXrLW _QG>t}~J$KDAU~~C/xvr{r-1hplY$sm02rLɸIﶺJz:^PUahfP xq_l}aCQxE` M5?U`LEYO]dQZi/Lnujs{x~rxxE^%WWgCWmU;TOoEi vJX\4SP`P][ j~sPatO՞p0|8 eS y@ecV gTZq履Su5 wG=f1QFɄza(#RP*K;~rt}^vLJN*9pLCxv{/FdSwqfSɸm* 2nT^Wlex TddcYY``aXYs:лȶ{DACՇg ˁ@{]wgYw~~k{P#K]bXd?dAa\DbQ}]T3tIH}h RAu_]cJ=zDպr3/HW #]ȶ ۬lXtyehE>F ]KRKjyOA~Y4$]|%xҹ8GmLERbչrz$-n@HO\p0|zm/DQ dX|}{?$aHemmĻoekh$YDmM[nQ^>RIGXIwISGYx9FILZZ^Ucb jUJDiQdz|@eFciz{ys'i}@[XAO^y~P&#hň;IK tVdg εuyoR!lnBſ|rwvr̉^Uи~ה~g$8O$wsrl N~t[iu8x;v5zXEPSKPQRE|q^~P[cZ {~W__YX[gYLaf]X\X[u]WVHcMgI? pOLޘNH PPn]^_OMۑJU_@ M˔{y{1{JY f3VXސb0zo4nIp MR ՘~zp?W m:gտ[K_VϐtyT3gwk Zm\PAqVXO3o}~awyVZ|tg ŗ[{I|u ݫjoY~vCzڶh|horzҲNfCMEORzz6>c|k ʒ`Ev;I^FXe ENh "dשэFAhiZXUe E~]rt*p?x]Imܩyw|xwsquy[Jktc^Xzsy~mжlq xykvKY?c=K6_WΊPxNYt kPeeUcŋǔ_E׫ǵFoqOemmiZinIUHvQv?HCWPb`$CPTTs^T jթH~D`IdEJKu|Mm15>qĎ\DiiX]]V_FN Ԛzigm qQL״%nspL[ZS˯AԷttyu!vxrnO,7kaʷ>ze~v~:kO~S Y{nv|S:g:3[\f iwPU. P|PWBU ql{qڇʅgŽǁ}mwא`i\mmnqٲnpEWcQNO59bFؤ2}P[S̬>nA^IiwuuwgEU7ntv ~>H0~L/liݓVUws~zH˱Ts~` ArDh·vLsPOmUIx FdhI|ĴUuLJyzt3*nxnrxg?u~{z~|~T/8D=r>Gxwuy{&o{qIM}s*~W9P] ,DaPJtONjdA iU=eL _b `Zꪧ[Ƕg`CLDbKV8ڴ=ҦTV qtC~>>pSBu<]iQ tIVӖ~lK M˴pw#.}}|xl7a {xovzqmulnqy@9`mi y|}}d,|mj{qox+RoH]=pDR I3Le\_(ޚCG^Fq>e:TP>aeqm ffԱe kftg~o gurtmioketɭhlfehnޘdwrpqYy ЖbhHs[R^폊cM@LNNrA o~bHF KWF r WE eHӴNDwSuFiQǷw o؃mjrbB~ LȯgYyj AE B`ԫ ELSW~^Xt UlXH twC \4 ہNfOMzBVT\J&&yvKFLw X}6V/MrCG>HyZF}QVB`}^IevvHq>HU*M఑EI @x\ڵHWSOQeϱd ҕ qEG_ϯԭcb^JVJ3O Q uy[ gc_Fs<\dAEDHm}qy\ hu dg qszhau faufiŰQiu뢾qZUMUq] N-L/qB'fyJDup=wK묎sSV^][R]na|T G ڮIU [cY PYNrõ eX 㹲  KWcJ@n? @;wlp q}U ߽Q[乹gH TSM{w dM6BP[y~ֵFo3rQbYIu oZNbX^lٜy eBdl^kWBesxαwLRn ߙ~W~mgs^ aaӶmxYۂ[%xE _IVGET= ɷV\JkW ٩+{ Aɥ]bTR ε@>K 䴰Wj_FֱƵovҳSSz|QabUu'^ZXO Bd^v^ edl ^MȃO ɍmZ^xo:@N[ ]qngvR Fvi,mPSa^Ǹe<FoGJؠ hTQ\C E>SqF^ŋ PȢGQ{RyyҳH϶lFFS7^zE`QVo]] ⮘pn\- c{bk ]qpgyw~u lv]vXtB uQQBL\ sTX^ Nc@Y4  FMʓpnHתL C跖k[ ~M k[TYi꺷 hEFH@念`͉9SJ[V xs˵h?~Ӆ[?' < 5\q^?CyVQEL @gkFp JMӘr^ߑZD]GYlFrvZaW` WxXhdgYm\~[G[ܐSwmFm\d ?jc:ŝTC MۣQn MfѹE\m_LeނceDM }_bUXLIQkRs 뢢]C{Q?POkdڷpXIV^[ڐ 񯏏 e7W[= |vĶG]`bO_lwf够G8{QF_tKśSrT =t\P zljč[~ HUyhqgJv[BunK9F pHKSKh|zVè]Wf?XJɓLٻ ޺sLʯ aˡ`^@\ wƶf Yy٘-.Drܦ {@;F䔢l[J_MlKTc WX `K֥oN >IhQa:QRDhG 5ޖO<YE$BUM[PFrY\ʶIfVVǒ ^gY_tSJROɲsqywøW= JqpnNي<_ ZPW WUxdҰGq MUo= GknnVKQ [aO @٢gPN ;ktҞVWpIY V^_?Y x'_ ķmǫZط FkgVOhRNu+">?ﵸXEWNPalq KGXYI X eO]]yWsn[c~y!OVDz^nHm`XޙlO[z[dWfQQ wmP;SXYJK[Vtj~\`S4vVWq J>V^zGaH [GddaH|xyO\]sKcOor^[AUbu#e\IadddgD?Z(Kl]LZs̝H¬ͭҪCBw㾖b%R4Je芖P=\B` ]WV]]w BHDOXB`@EY?l {gsKtRJrDeMx8 QGWWzJtnrHBdda[mS_kL2¬bccaf螘֗cW9 r醴Wۋ^eldZVCf=e{mĨtE WiKSY~ii~b\AذQ}LI{MY]Fyd0(N ?9SzTrIԛ̊>Y`bjuYrNV@Kbᰬ߬Izx~jťܪf搕e0v]_Vl@HeL*BLnjs » ߆葊߆ ؆ \U`RxvIXD= C_EGGIT{I?LPS ֈ ~y]ZTE}p] N՘Fd=OZP[Z[^e{bV{ljL`R y|RTSOUIR™ǚvnҮM |OYnLBV]Rّ|JtLDY$YkBvMJf]QBE@ Ss ~vd`+{ ]AAt{\ANVU' z}&o|`ygnoeas >Bw ȣwM߰U^ YRqE{M yfUz z8=mDO]Pl fo]Gه|W )q{&o~V^x cߩ(rkdZp௅5\}e6Z}bbⅯXgX\YUhSﴡCVlwn]d: D`T boTHD {}KXWڢ딓GPxVvwy೿QCki.i ^@wnjBC PNEѳfnqh_TVM]/wdL3I_4v9?OSSRWI(O+;kҫ_QtRFSMu\aKZcvFvlU\zEliw;eFC[w|Oa~ѳ|f~뿠kviɝZOMWZMRARJCvIZSSy㝒\\}NoN`}FXœ:Jl=6>.r CqU] R]FGb`߳YTyQQṗOTE~tox{Pߌ]U[K;oHűbkZkV Lf? {wѳFҀIdv᝻@KjapYe< QIa۹Hx<Sr,FfYXsE1]66eyD gJpGH T˲SkE VGkQMǾJu=QV6bNurND}ubhګ U/DCKb KN ky}h뻣cGam `ekukB@C#f<B`֩ ۬ʲ³ϪЯΰk\QޔbR^nNP e`EZXpB,ݐ\W:~-gC YScrtM?|pBI~^)G"<[Koxm[hT?NPs@rb TޅE^vQ۹_A[zpSQ p_a{zyʰWS[Xrf^gR½=@OaДpxLipєpxu}TdUd ̏i|s$u{Zjuq jJcHFZ ]yqZ3TX8VvM4J] J~>g׊HqBqg8W|WRh𼐼b%d/CܦP?oBHokLg  hxi\^yUaPjCҬHb_ ﹫S@SAYQ >Q k{zk깣 hD``tDžNvjXIƒƆmZƑǑxbx{ Ԁكdz҇n~/ic^JUD~CF`?D؎ UZ~Wr fcU>RYalZVZbfXj}]PqXHLIGAyVUtKqQVktMHWsutDe6Ӛ iCU[bK kbv O u~y˩ s.uju zMjM tbZYfg`RtXsfatXph1v\{q~^qLo Wϐ} l`i6ba&pJiSCڵ9\etv~uF`] aXHώtdRl]d rǖUPبrfXm [ÎpRNscQΪ TC`pw FbYjnwOSⓢƢ|jZ_ \smPsz{p>i _\GTT cHK9A'?HK}p m imuI].y'I]*΂_Fp${ yus[GZ=bom=IɖDsTQj<DWNYhI2 HEnMW ȮdMUL= MvLhPUndPjub򯰈Th EQVA!phZI$maªpz~w. H~H UxQbZŌ'fK{vOZk~U t| ES傱\}k{~ t}gepx'e`٭xv`kXઆuyxr MNފaf{ Q=IWco~cvuZFrkʋo>O÷ųJXD b\gXp؛C^i@ }[IVnRQYHlDUޢ"Nlu-Ruчck|w就Zi9yT~vF'lF|fȲoJʿ  ʿ  ʽ п ƿ hwKQv~LLQjjIaƑlGXlږ< ^ARWibpEeTix Kjz tSRT KsG\tj볦"Ku1U2B}s|jpVWUL(etIv} L}Q<WQTQLӞB\le4OBߤi<>cN U럝 FLR/db w_Hgm GsGrJHW?Mߑq A kIMdxeꠜ"ut7FKc6hFi}kDHSUnޕSCP?QfE_}XS;ք[XH9DAJ [ML=ig |LDBYpnrZL丒qE ThܸiU~YmHBc\;HyWdzȏV ABE[ ic}S^MýY c kFehRPG^6jcXk}qt~Os {Oa9H_r@J=Z N^Z=piHw ]I_ PսW@tʰghku ȥߨN<`VNWEajURk̆L1um@RJw[HAkp fh'v $Ítߞ p(iJ曘`@Lw0Bvt|>( @_TiI{f T?1`KH}A_c㺴3m[IqUGIhEq9.yrMMEGM3]ns:Y0H[jޚUJpp^Tj AⱮ oMb fUqX EJcvu|l㷮mcA1v|N^_z{ ޔ}S hbW^ ҌK4[[N@ GW~{RGyؓ 2sPpJ>fQRr0%FGZ8CmWc? KL_abUgpi eRRWhAaX~ ӫ}E` wTbgʼn LZfZwWYdBlvp÷- bokaCo`OWzd ŽőAm&bj:4<{OUOT<{qSL_TuZ;໵ ]@OR{hMitqvޫ"czk|SS8? _nToEE߮T_Ɂ8VR YߜR|? WAx#V9?V;pxBJ:-X\RS}Ux-X[[Mf<;;zzL,k IBP C@VqjM>Қe_j^`_ ScF@D]䓐G RՐIMJMI\e Ua^KgK~cQX `Rhts KlAwLflFoݑ XOWW,P ELvVjUuy Kt︸Wahln8K bPIyEOS;FarreK[$KU}654;)?;rQZMssX\06@twnY M~x"tvn[pQT@Ъ_kj/k beVTSGsOQ=aER\;Br>K`N NG'Ls4MNW.ZWVHp~[F8~jiWx秜줡_1 Oqw[a9ki?{0,,'ͫ %'_ ՌSNlfXQZFf_D[ePhpgGPv<WKsI NLSR[HOh_] {HXHYihsbcFGyt TĢI9⠟륢 K9[JeXOdG,MawzxrM٪X r iY 浣 O]) =8UY la?ֽcc Տ==p\ވELR}m|zkIne$~{ȵPOGG:Te0w7[ |NbQLGJcK}fgi¥誧'spЦ}TY{ԭRRHnppMgSGvhYM~ vC!tkJn R ׳SMBmqVXeDLy[=jPP ;QV}瑍vZX ES^M`Mpefd!`=aDN6-vGKv VJ^{_qihAk Ah@"kx[u>G Tx糯 ̀7+U`Ii W@f٤ZMRXGky+SށK|KGٮdD[e?PMOyrY\򽕈^| =6/ga}L_ IŹCJɍxGp\3Q xRm`?ePXP2|5pl^CUg} dPGe;D TӵLݬçqYiZxk I;,%6LMYvn^U[eX晊M +W]_ YA ?WP=FJʗf;TNS}.l_jJ.g`TogWaQʅIWzXGmH`m`qxG\fԔ۔<g}sfz@ c> ViMXRn؁Pz[ D桋[Pw:O钍ǓmM|[XypTySCS`tz~϶ ^R^ErYbJ0@HJlۊT[~hNZ?t>`ⲕyUY\HaUv_{Vg~@PeDC䳱Ѯi[ƣI?d{wjYj7 [V9nc]cJl^STX؁s=^VWS̗\nL]`䋏=eڴFuH CNI]g HPA E𦕕UeF&ZRLӁ>_SkZIvR hMWNzYVevvdRgZYcWٔr_b`_\OY|yÃeZ z`WLYYٳ(FK ؁negYPecs CX}WEϕLƌG?>:PuCGV BvR gBbh I㶭 >akCVkˏV gUzhcNgIcݞHؾ 'CbSޱǮrpƾEWM6y_Zco \{ ؁pdqHUTUYW_þp QbaġxBwUPEQoI[G?{W5e|}N KQ γXzVIKKV<:iT` BYAfg>@QUO Cz~q[Ъ唓 t|캼mz¦Yu]2YZW ؁xTX͓k_XYb`HvQ;cw|CrZdeiߒx :\LCbGd7 zq V`XVIZNdz :2 cc\IvCinVWXc ξɴ{q5ﻴkyE &7rKɿ_Y}| ؁f ܘEcUu2:dbbc;>i|d AmH䐉Q LtAATgnD {@q\CvHId͐ ^sboI%Mɒ 䐎 ypbmeF@]3kyOj-c[Sq[H'=7zB;؁}Xj@KKU ,=WHxSI]iԱ U}թ !BӮƯԻ DR}~GG,Q.qC{flVDRnbpa؁DB{NOYWUi}kwGMO[Ee ug \[k]̧fوCkǒzf@fGDTг^LjfVQ aTuAʪLĴ[;5L<| oUWl ?}NN=v؁dOk @qUFUVnpOw7DyJWj^ZHGQT Pe6CjL >pWz?z6DM}?Ee ֥JMOg[h[‘qrGNK@X>TTUC`M]A؁eSM STJxX ]rs_ ?_VcCiC E\pT \ڏaL :M b yR9SL Pe >N  GxCڶL@{~u謥步~|}vJǫN KkpaZKMM؁QqpYEXDX&GR+-DKH:i@R{QKTQRXx c?4!_K bf=XNKaCS^z~k~faF![ⳮANUlMݍjkqwT؁1.o=c>EBeeM#w(˄1`sFI|cZ cm@O6IKJpS j`SSm#F]S W HwP?h 鞖Ƿ{s`rZSw` [EM~{IgiZo؁3RM{axAWfj,Z˹mF1EmDSWWf)]^zvCCTudXbl8pmeOga*Gk:~!pPծ綯 ϶dQdnilnwuLqOѳ F| Aa miFqȡGNJV؁tka`H9F{PV>x4md~nc 羷IHZxVUQ\SbMTAPròayeS{B VP5zl iaZ{\HYfŒF 嘒aNԯM$v~鳻ҳR@\oM RA)͈T w;Bӟ|a؁~-jіh-I]ClAh\A"ẹr5X~OObTߩDY`4뿌y[VW{^banxbIfnMwgEGOv 6N[cQtflJLEKn }Qݶ S @2ѴIaHOVcW'\D؎Cbs؁LSlr\BeglN깸 k=IV@JV LXSH sy|n bleW ڰRVmeVx cJ < A[NH PʲhGpZ1Byƶ VP?VFmO *oypESBVG=G >T}L Ne\Isۉ\N|Pj DijG\zus 6jm fm6IF v_V]jH ڎaUWVh~t ƶJL;{UwMgaS^4jM`\PBF؁k@LҊ ?k95Jp~{RSe<lcuzbstOojN轫 yHMHFǠ'A/gV!M fkND" E6 6pݴPnW'QvXGEUTHţUZ֥dK\ bcaST?؁D㍒~Z$0ZEb\@P=SvDJXL^ŷCFH JsLTLh)Ȯw|~rDIx|oKEQYA] TaōT~H+*#M \cmeg P ߒLq|Ayqw[@Ff8e``TOPV؁Aغi2aiWQJZ\x6{;=MB7}>QI` Fi\LpOk6ǥpowyad|}qdVYMPsx}{}nx;>j&bqU?w?ʾFel N~B7t 3WmXVRV eJV~c ˹jjK`B XoU7xgۤdypY\UXw~Sw P؁uH`@SutUp`]FnBhE4SV?7hrey Dg{NXz+B}vusv佚~on`A=8x|o{<ȵs(W7|aPxyRFwtrrAbhV]lN {f RVu RdyߌXމP^jfe[SQi ! Y WDz2 ⳶gsĕEBcZBGt J؁֬bTf6Bw'kPJj7TFG^WQRZ^α..b La\;>BK!5zsynlqhfns{zG`+ %pRogrxxzk"bp!s%6Ѕ@ݿs{zyysEUZMzגK ?^FG{p}XsH{ Si 翘hVXVNqKl֙Ub>QUlrHSƢ cɠGBu~=MHv؁KDn?0n4}GNLFD|@FT;dtCBpcjLL_jG{ux-5B$jvs|{}8)NHG>^qmv|{xumkRvHwMvFͻ٪>fzz~vsw|(CUsz|`5zih|<8t@ Et A@ہY `v< WwlOpn]JiGaBvWRgt[Qp\e \!cӧtivD_\PR ؁_ yG,O_Ce$^6g07੎Yzh72$b}>"Mfw[GߵtnssV6WWQEDxzaRc-}w~z}~}kazvt"p~s  ChO[Sd OQD_ TNjhQXXWX}ӚTIrEdPXlP=tl\VʼGŨ pc^MivϟRRWWqMe@=t؁H nIO붻HB#aã.UJ5CzgMWcB 4::6HL앝{qytzy~}}[+&4ct|6G|{~V몊p?Yu _CNaTlVRf `QWM^{֣[RVVOlR\^CEyqooԋgNg 6Y?ƵLMWȈLnh娺 d}m|gOar ؁ loaz~rrLlirt}|궻Q%ir\l.,rvuyA ]w?iVͻ}p{uzsvlmrwnrsH9CZTΓpy{|wuji zlS_yDBDd]JhMLHvgWI١Ht\7ƾ@llYnlayiippQ[MpNԊX ؁}toTOPЙRŌs=iSaI8:JqAcR;[m?s}_\FݲmJx<3Xh]2ʼʧVnwwS \ cT 벏ja:Th nCRUUTClE{mwQ6_tr$sveE)q-ZTYvu_QFDh\IwecSVl ؁vw}|nniKMrOI:}[`~\7& J"v&g8E5vỊY9:u:gA3`IΕsrrutwxY&7+ASrSu`RdOUsr{j8owBawQga 8[{JUm>|:p؁ttF@^{bz yKMdG};7\zsN5a6i޿&w.R)ČubOuvl‰H?*ε١#=9:c5R-uuAHnT73/؁VT}{@7s{w2AJ=d<8LSL-*ﺸ괜6LƠgH|ziQZ3`OK4B6=}tBS:P <Op x Fo?TWi=ecn^rvb}roN\Ni yNifgh_N K\fV Q\ EMȾxzYԝj+qLBM+`G͝nTqW@?:I؁S}SQ}j%UahRO KEzp]z=5DxضŖ5o{rm>I5xqEgW+LIk`ASbv?lurujr@}Oalu[>fwhX\RK FfإLvK?wFbTO?޵yHݵFYDJŽw Jal\ Eey aaY͌X2pY֓@$V pK]O dYLT^؁irQDSsZRE5R[9I 2TFuľOD¾?y|7P"Pr=E+n_>ټjBQ־EHMQ\sPI޻ tyz`}wYg\ I~tQROr:dnb|h_-pG ׬yMB 랃ylID En|"PPgPBPxqѻgaIU\X RT̰e؁&aj{QmYCkpMb=OIYUGLP?kt K}ڢ}GK%]`r^VM@ RBw[Xyb \Itx|>Cz=$ ucdqp^XAxm;retZFGI͕RF<q;G}OM4hx;Wd']ŸޅburMbrqiVWdhm]TJ hOl@[؁{pyy՝;}rBElTx"HS_k6Y&\~̿TDB%8itza^2^X~IÞj Wyr[?WiXUo z]LbJ?Du]Jhz~cgv]^lDj]学_GtDzaym[W\ f[6@u0dr7YhRm QӶDCxSO.4؁ʝv}yxfVP|ld hhk#p?EFPAe\Wz羶3A8V]AƙJWHv P}~~tAqEYͫBd & ?GP?;>AL[k}fn{cաfPxj'[Kr}әX˒BH?xGSKi_9e1;;@R"u.kQfNpY2L5c o5{؁~y}{aHgNQ iQeG]ZoxGBUϹeXրXmY8PhǗa@^vy?ʁoqwst{NButIg ѐuP{Se?A`[O^PRtcicPSCП `Jc еJTOaGHbdkC"`-{wqrBxFOڅ]feMO ^qUk T_޾Aj؁tuSGw |JFIP7д2f U|Yo8U X\OmeYsƪo"_{uqtz|~~ zw{upvc|<5KME@ܺ{E`&qz^|ghmۿ= xOdNxCcX_RmƾFYNH My! "\z_UvV帿\YIDTRɯzI m r޸DT%TU؁ٕ xpjAHu"ui촭JLJBp^Q D3|iBHgESwghzaX7Lj!3\WC, (+5@V(ZmoqmpsU|{w~MG: nFNWUBTUNQI{\^{>s7_]ShdgqO |D]CeR[`HӜ_QIVFx#}M>fEVu V^>hK[mR؁ {}F jfNO ww¦ӾM%NN"7{<=C[m]ZJlAvcHԲa /?P7%LMFC LJG+=EƮ4 :r}<^A{}ty{^ 8u||{Rms*,;sp#]?&q{vEs KOIL!(ZrM **:!R|eq2]%GmAsۿAMtY'pH0RjPVKE{[xN2howġt |LUOg 9dgXi~kHDDN|oh؁ ЃKM nvFD]p'ԲZOC㬠r(AL&]~]PzU[v*eEFXW+Q޳|yn'KV}>t%xU%vvCйxJK|SS[ls`/~Ilwrrvj<]53EIKN)#PͪMqc//eK0.HKQjwi¼WwijXRdjY!!W[xuuSD_ P]>ȲW^SqtHs>npBHVvOUdzTKO_h؁\_ ѫr~vLRMóyzq߸*HAPbywŐdI` npJqn{c[BsI uzg@g؁][״mpyxpj|EsJ_龜irwwg6XTu ONíP3.Tv6-064Ye0zo{osuqw/ӿJ@D G{o{_ga۷~1_IWB5ImcLeXh LNʲ \<_"sW7kxrNӳHuP XNzyєBfw OߐNMF ̫7ZHt_ovdTp؁Ygڒw{}j FWQS!xthYUc DWDM@`\hƾQ @Rn7&\[ǧU;>/HuqRcXH@+]e'0U+kFHlΛYcRDءBz񪐓`K{|"Y[o7I QRFj=PT[n]_DnTeICE sp;؁gڳzgry{jZfٍM綠lyyj 1/PՔq Jm}UnuĸMj|D!REfҴv$GhwrMֱ)ګqGOZT@ _^YȴZMpA(d ^ﴱ X JDtlw[{Gݶw]lr9Y\gEnMn 2y8ހTFg朠BBNay npG~ ؁r ňvn oOfULOuߵt}<8c DpE`ha @}FR HsKoOPGPUKc 鲙\XnN}aV OȼB}jNA+/12eпW a]Mvj_] E2r_hp\H`cb^Ne ؁ >xQMrƳ ezuti PVabפkqwyd39u xf\3EPο|Cpd6[_^t||۽yPwSE nNxcĵv@AUH22c?y㷵UcϲK]MK aw︸pKxTaՀ]Qk5nV-j jgghJGb? ؁ M׎[?z⏓mxtd}cJʲ}~oVj qdi[ ǹ KkSRppkEZ{WUNΧlגkc`vE]H ؁F ٍ>彨u{}vnاgr?YfТlx|j͵=C6XD ThCh BT^NQvN}{ qRg8aмKv h؜UFM QqD ̱#˓pejomjlvw}~xw}}zqJ#*?qI1)WbOM[Tܽ|uIcgA[M.bE ~z9 ՘PR{J KZq)]y~$YQ i ؁L'\oۭzy_MQ}Q^Opw,>:xtdnPcKF ˿ UEpgT-,;cyoJ Db}P\ihcT xLZuvt VNd19CHFG󍉀,l)F"Նqx}~|uw~o[B0Jp|-9g”G+un]pƻ.F_0FcUQEÐJNKى_Cx| ;qdPl B畱? #cX3/ILU ؁J_unƀ~m[컠pzwoq]FnSIm|OUW_ Ⱦ хEQGuC~A7?NkX GyX۳ = lf[Mky.Tv'u UI$no{||zwwquphorv{xnjnjkv||y{nvvifjǬyWmTSU Ձt=fIaaxbSVsYGkT ] qT x[`{ ؁MLoqhGjݰpoC~BYUS `u DIĽson{Ggprb _CBDRzW8:-E:%hx1@RK` &v}ry̾ynqq}~{}k럕wDF xsMZ@Ha}RRYmXEhB J ^ܙnYUdpc]SU ؁F`4h dc%l}xM4we|Mwia~ YJqcʼXSG=.&CMzuI' YE EF͡ifo &S `(It,E\'{GÐOb76ov|y̬~pphmysga|DͨbbNxrpV +>ze~b]N`MnQofsw\`:f~dJzFq ؁Im Ol 9Vr abk¡czyyc(>:GWViE Up&Y J QfPƸZ>]w|uwwv{AezMitKօTWEe i, .t~e*(Xq!kj h@RR^Bćky{vt۩hy~sxLa`}ԮfEjVKpB p5t=tarjJ<VEYAcI9 XL ؁DoYUu qiqOac淵jn=~uK8J7y@<3M!R]Vyy[l{}ym^A UI cKVU\t Jax^vvq'~wwBdj=|yj$cѐsyno|f CR2C]~ xX3ACLJHbVaSljoErDuL ؁BnߎRV2A}y ӳ#氢pyxiB}?Bg E_pZˁMJ7OV  RGOIfZjcN[VCi<˘qww utK 񨋍 >Z\R|gޝ3.W ֎{759Rw0oRqk%Guis~x|tfsuiC<^{s}תJnW'O u%\RsbTFmGTKY{HCs:mK=ჸ ؁>xO<\<(g ӳznE]dTL8FOA:}@l 6hM@mgJ ~·`{O Qݮvp pytqrzqYMouURdTfqvw}y@G\ܔ0du=Zh$DpOz3C|~svޒڠ{tquz|p`[_r!v(ZU2`y{qpdc󿹕h`XyPð;(JHnw㦄؁ zK] hT\%r ֡ppOW vF@E xE@ooSGtG[i PraǶPnNW|}yHpgICϽGzNeH}txF%AnyfdhueWdDK|}u0ʊo+O|r|협 MwX[rӴuvQMMPLGEU^iz-ȞQajpNZEjXZ@ޛ>~lAvoWUVc "e} TWgfmNt Q؁ Z*]`a (]A{ Ơju{v6`w: Dm8ZrUȽ}RZbޡwsO\AځEQ!1ʱLq-OV[VW[߂zzIlP(iDlOu oA Ӯ1ۓ=]OUV[^]\WWPOWfqܵux|gqN}O;_QZ~bG~<ӄ>Ezщ/mUMrK]?F I؁ tPQ1\C oP7L xnX5]{_8/es@ Lr\=vK NІG쵺hGO{suSD SYq7@(` ȣ`ۼ΅~u]eաM'Nz"Rnu ?]MpwU]OHWЄmcbKALLJJOOIFCBYiUbỷ 73qtb⁸\UBsJ V`Ql޵uaJ ZU؁ J2|Gv%fӺT 尛byxdtOH>bՀTB 2n=tzOjr T{CRUX]{u>_x`t.Iӎ T]޹t }`T\r2󾷻vPSYYX``]]`{|uyK8 4/jRakQ }Rzr]JM S^rB~BiQ[nXՉ؁C?w /Cl_IlDⶻm|ZSJ{HmBAEg=U*EǺ6a`SD޳lMixy]wsY@TtAQs/ EL]öoy{z|[:F}-@a<mwn`Y0| aMe$^ܑRVXDaّti\MCABEl{TEA>==Aofqc2Ko hҴ UNU}n FήjVQ_ XUOZS\gX" ` ۸zuHIc{Tb ]rSCsKp^ +T؁ <ȟw];E4z5OR!'TиGϻhy{jX8.mPrCxv8yEg=mèL\QN SXӉ꿹Ƶzk3st_vu=c4@WdȮy˅Mp{𭈆? Dgej[j!vR鸯 QL_nЮXƝ1+)3BQulA #dϵh }6uѶagt`T KmRBjxpeWYs\؁Jr=K`uY3hdTGtRJJĵlu ۥk3vf>Q8Vii_HmHeqG Sώ? iIWeR!w6BLhi~A;<(QWF_BSX__v~Z؝KOV<~}J>B q_TaUNZQ迃\!7lY7IY*t0jʵ/L8dTmLWd1&J~N: gI}{؁Dhg_3Mrrv'xlJN­qz}xx:naAD= ;;BHf᪨Q\@ eZn4~F^8P (ym-ݻIy^ NP c[$kOa GA:c BޟڙS ؁)5H" 8m-cy/M)Yl?MӔmMsvm\RBy6lH7~8=W19Mztu|G3\xFAbGkjBg9p Cq jNM`^OEYb¹SWb"j֯dyOQIl@OespJRYRahdk?GFܜ詧︥>_SYjE a>O=CQlQfwX~Q ҳ:WxGmM؁P:^ CGܟfytg{1Z`zzB;!JT@AUeJ>wbS6cSf``PܙDU{YKP=lCc>'cleemƗrivzNhUjnnH"AexYv IeqY>eV 曾 󦓜ɖ^ⷹ e:+V||MA] a,GCUҳ G#e$sQ_ J؁} X|%ˬ\CRuLk0-hwBra#@fؠuMkJf6gfHVeH7>PNzxM Q@ĜW PVQhEW+ |`F9-#Sec^RNZuzWGo=G~G9ȴRLpJ#nWʽahg:xiC-h9K >TfP ᴬĭ tS TXw9!<'3dtTmҳ LUTW_*jD`HY؁A=}]xRAnlXvy3wƴWb91]LAzGhJ@GVeI=`TRwJhet=\d2UPA {U RZF$I7Tgiogd^YWV_o{im`G1s|p仟?UEoT<(oxja}jkPRaYԿiore^_VĿ7dƾ \dz ~}l$L ɠuZMҳ] `]upXWmrSiUU؁?sĶSעuD/7@"'TIXߋS BueU?GM4RSNFVdIRL$jPI eP]?e \m;ri-8S¿J DkUf J6ɞhmunloy|x}\#v`"IawztMoU&vsYыhSZj[qHid%[CVebsnhif̸YDFn]]1_K QQ n`TGMF@`T п6j@~oB1}z!`qAb(Yy!Rdƒ;ehGCiZƷ5œb\y1UqEŻ˯M]ٮ\yrs~wuguP_ŒZZ TX#|tuE gSr؁Z q¼ .ReZ-,V"9J Ym fYrmgg{wF6}7{r_}uU^F05^NffU PMNRbTJxC gL=/j'We'hL͗*»Dƻidݺ7MGvO^VN M?dE ElsXU_LL›LOMy +EMGGy؁2%֦&Y^0NJHJdndPdB`F=_s_SAEE?G]SPas"ە߀ JOs`>u1WM TD_IVbts><oBcEPjR]ujP`H nPHzGvǭ̪A.kfu7ĭ^ btDjwD؁ kް b))(|b=\GK I7_Ft`Xd?AC@AWN:;?HLPJQz .w^NzIٙN_gf^|nYWMNWQfG8J[DКyUcGݴ_GډJMd~UiP?X?4 ̔fWږ쮗q`^ULpVa[XٝbL <꛵PJu؁o_ ˤ vj 95\Pr`^aXh9PFKUwxÿ|&3!UG lNVO|92nF^zhY$ln\O̻H]W:HVݱl[VmI]\SVP?v;3򷣥ᮩDeDŽԙfd_؁fS]m?dۭusSNxFi{u Ԡ۰  [^L6eYTX\? T:MËy?ICJI[V*g2K<ӭUÀT GxO izJPQ PUrNS`leC PR؁IAEkFb㥝PXljIhk>: AX #ybW K=sgF^d[Dt0ptI%Oǿõ ܹS R^XP@p][_V]JƳ E`aNtQ4b 9JFWS؁pqYaEDӶVf$jR E|.J9?;WyKFfAۨhX Y[ IHHSQܪKgaFCݬpEk^QYSPMyFłJY'i笢CcL=ijFy A1\L ?J [ uKRC؁`SLMxUB 6t  ^ =VJ\3 VzPӯ[VdP{NC2MPlI RUK{Vuص w`2rV5RzUYZSB|L~%: bʜ^Q| ؁0Y^Xs cTL{լ#O @Nq`RXgsܝgh9dnngK~{?YIN9QpAiW]G S[qUKFWJ l|WD RϦsOM͠دڜ[pkjY Qo ᡓ΍b V>wccNf ؁ oG`]ȴ |oMojV,VE~4H@-}uˉ׼qJYsFrOs )UOLpP4Py@l6RnKWFCvȻ ݙɳ O>CnVSzNMsSQJivIo>ښcKNWD῵`69Bf T_~?{ ؁ cŬF{xX\ 帽gKwL^o:W&k }]”yc ~HhPYP"nY\~x;TiHC}l5EG>FǼ b^]b `ƾ kRS ֎EϞIOdϲNM 򛂅ׯZ"Wo|¾е<JPSmWH? Vu ց fPfQRZ ^MKqj]ͬkXWX"KdhK'QLfOOw{ r8GYQ,:"6?to7w9pg`:SM{ dhM{uQ\S_RSy M|YL XkkV_қ_I, E[L ŵ@ݾUfV@zPT c_NQhynτnsFLJgVd>CώpdLf2L4pmf skn#[spVTF}9 +Dt9`XMUYM|K^Fw8vU=XAWW $uJ˹|,hrqD4q=DrCho xtudR VVPcε]AoW RXahTtCOF~[ kGG$DOEئRDu?4lhF={{KUWTY DHz ykVtN]}Io|mrHZ!O #U`RSzPӴI׵UGsB%>X궄? e]RT]RWʋPWܸ k迚bj>ej[M  eCAyjBn]m HUMmغ#ܚzg)fOnі^,'+?NDר hD5vKP?[ IKLd¥KPq;-䛓vEP'wjfOW@[׸ir˶,iј9_ O UT \abV^WAθ_GKmOi"`SS#?Bv\QIRo[nhXxX] PttNJkR8ec!t`UUGBJdhLjo> MHKGgp^ tdGNMb{xyhV~䶍*2}̏MglTWh;fhY>  Eork b4H ӵ䆀HloI%dh+jUrTw G JiP{^agXwYOmMPĘUmH/ -X3>zJJOZC㲸PMf,Q՛ ZᲲB"b|;~Hi‹b\EʍuF XѹMԽ5) 8hQ6n  @N}h|b0 mKbHVo,. CzDn%r@LSv^FHga+oҴQ=ƀYHJ_ v/W zO ĴutRMƴEjN?Íw 9 IQ wHzS$2f,WNWd0s^ddb~軕|9ES~HUG B¶ rXMtfyQߎ #ap^M"y [W`PD >'MlS%غtDXOP,7ˌ] fY<: ``cv%n &H eYI 民wTXT_W 1 ўWը mHڞZcagk 쉀H0gǿ¬mOb任ĥ쾐}PU\zWcDWct}ݼ߇Id48g~W  Yޕ YϳV`Qߜ^IhNcʔvYsNmlG&`dfey"jONUEU Evsvމi7S ЬPEP aVg ϩsVx uzg āl^STUg).؝lfRX^JЍpi? , QH NyȚ^q?ɂ;%G PW p3ꪛάo}tֲ|fernNPXrrngPż7_aBޛp f* f@wΏMGcdaY]zEhaHG@ YXyaTlp[{GCp ǒJLv }{Rp\hNeeZ YwNI&k8PkKhdҟںVPMOwukPKC^+ݹ.%^s[ݙ|.8='ӻy`e|:^`GNv/bb`՛~߽B\"̠O]fCNKhldfgrF 0iSFJkaH^x?\Z|u) Q5]93[gHNCTr_juN 򹠣XHW+\fG}\fSEWEXHZeQCNmİIe xthʀDT 퇛pNhuiE&>^J~T326 "!_hI.iᩦvqiqTl_hYJXiMNC_>eKaERVL_3lMq$ T9$.=ZڑXqXEMVTcgiQSmDjTi DU/|w#Ko^R|M\ eCq hM 1M–n Ze bb¶KR?QL k#NyR Ę__Bz<؛mHp]IN=!zZTۜ &[`TFq(XvI ̓kjMhX @ķDϾRUkS\jrLUZ ,iVr;ygs蟤 ^́Sk"Z}aYnTyTp Ef LJgX pj!ݿHRhe;|bCfGv}^Cj}ЩJ8 ig}[@{xX\yZمD{S(TPwHK~x\;,6>3rrP;{ ZTqdqcUNwS mfhQE^;󳯺|Iյ=?/W liX !L6MNSLT* ss VkU+xF\*IRXV7vgiE D|sܿО؁f^sG[ƻqvAS =xQd{;YYIDyn[, VsLpc^~ 5l-\ ǽGLEy OZ H 8Fq}bOejjNjlaYivPNrNyp兠T ?FEKG ؎Ec >=*һQRoS~^2Gd+uLOޥ7`׉{؁гl?Yl=^峏T(H Ktu XD`C'iNaF CK vDX TD A\K*n EL5cLDL wahXo }`SOECQ{oNHWI ٲPGB }LtT Z]OCXT]NzQ ?iX0SRE^U]gw۷J]ىx_UǩrX NߗE}LOt{v|ށdKDDKev> רPI{~ -P<+[UMfVt@pTD_MNEq UaB> YWFeBoG {poYzjf}~[Ua QĩqR\PVôq{ٕ q%`iDRhwdQOoPbJ?bM gJ iMlJja^[󼀟 JiLvQW_SW |e o(ľ{\q@D~⾬2.oٚmM #:]\FX}ֹ: f(g{چƵ[[;IMl᧌|Q|}f߼ kjuo Mz[SSn~j\<{=kXAKOH>VDU[27KzPu[Fq4FN]nQZgʞuHyD?i >]ɻLkwxגwװѠλryZ? HZ[OkRD6{ndQD nVeKt yåOĕjF.M}e sQ#d `xk^Lb k<22]?wK]yv&~O }PRdKIĬsUQCv #Zd= eMb_ԺkUU߾ STcbNo]H HͬlHWKYvShS\uܸry`CHe{DOTE,}RL2bLBgQDd<OV }T: ފMX dT`VX# W;AW Y=kݦDSY'sMeLw|<Jr 8[|}mǾPzܸryZ@`@e^aE]գyceFM~nP< zWzy~MV =`?BK?4[IK{I_0 H}U:k3nvB~uR!XM]U\xBLL{E Qg8lܸrybOћKz esq?CE UdPGNVڸDKiXbYO AJSX 'BOPNg ̺Lf\OPyֺvOZCF OoGB94dKZzEi$U?pב_8d gEbM S_Nܸry:Hh=v=PCXY MxIIhu v Ma/lp"N>TՌFE8OMSF:3dLRu"TaZF|a[ 5f a ; ;KfG @ON}3Fh Wcǭez_C,jC ١iSQbLow o]RNܸryOXL pgxvDN|ͭ=RFRl^ܸrybDLZIUoO]UhB^ 1YK:B]r[QW ApeeJH Y\Ni^PkTܸry fNOiL?VCXρEO5gNxM2p`@j=N[LYU>xA VeR?ٖ9P]FmbA܄f_yCnDd"ܚ:dEp^]gLPlzuO ڙVFP{7I?Da`Z΂֊{ݠү߸ry EmEŖn^h_oJ:E>=CSAEZ VmXDC>]=k6mMBK<#u3SXSyzvRVfaNWrQW)R[:e@`CdЖu쌊/6[oLiSWg@oz~l?ݷlB^@vvUvޙ.ԇݸry aGRL.! U}~GepLLL^>p蹏T [4fCd^NKjGA^TWyӊ˭R#odVcJ LBJvS`E =wcK@hCY hLaHAi"QL@|rXO[Rmi[QOQ GNX_+~_Xc cFbRazOp}UqEPeVzzޖ~w۹ry*D MbUNJc<(Bq ecVePJkG|tja>RVkOM\UsWl JOq:SFG` !-wYoFU~ `\gޞhRVXIoGRMM9'g|J \hg1c 1csɬŽ ͊kPM]aTݓہqU|zٻ{|c{ ԟd[\Ak7 ` K TBkDӑ 96MJp 9։IWOY_RF3E3`P?G L~jAdZbE;)&iD y=4gdSJAUE^@06a@oRPD}X# ZQA\Z`\WU'&ђ@ ⎠PZ"'S[ Wp~ݗuqj~*t RJg< R_GOUu (MuOkCfL5gC4h8IfW,' EuJ =TLTYUFgJcXJ!ZzU^~صbYg7jVMUARwϊnbR_eFC@R@{yW8]ZgbyQ8JNMLR9@U Ϗ @~t]rHXZOiDsQChLQJe "JhHiE"JЫQVV_pT5=zo?n_ZU]罰lOMQp tGKyA~[F MϋELk 'qws$!pR\EfΓG1 ^ROQ ܸr~WWAMYJufHL@;bJƛ{<`;.fo|{EbןTD;KI{@OrEJˈu^ [tU[W. )K9zBHA\9ZiRZAB[xdBnBr\RTE0@{FcYCIžOrx.Ik 4)7*`~xyTz:Fj)hDDIDGcRӼkCY=D]KxMxC6Vl]RHF Ʈ?ruq𦚗疖|bbPjR[t.  gLW VtVi^fKLFyOn~QE[@ A óyFnնT~{X\fSܸr}V`__YX^fTgaOP 3aWZUERjs?|Hip Q7_Rhg]u۬I\UP PрI-S G9c:U Jjpnd(W]kNXx{OQBL EvSiGE=CC5BcHLISXI ǵ|XcR]Sɜs{`i~SPkHܸr}VQH|ͽ~@ >MCRJF czOIrAzeK̅S/DDg fdUdh Jcm[pdLG~V fXDu?zb|OJmye0f A|k/1H oGMmS=vEZAsMp[wIJ ԳygʬPP;@nhܸr}Vbx g j{GMhISvSPJ‡N=QpMhBb ~?b \tLFZe<UeO>~`0K KtTՆg)fARetaGx]X b> θPul5\~] 9r绹 Doxܸr}Vҗijv }GS`QZXPTbdx ܠyw}ESR2i\jc sChdgT ?OZԹTs Pok46o]\+gT _:Hms~P=oGw~PJkNfWGg ]ZFRIK "Psy ۾vhy},j5QH8xĻ÷DWiܸr}VqhY\WR[cU|cnDUL{QPBJUVE/HJ'7pJ Y']BעM} svCOY ILU[XrRP\p7x:OV QCsZDXRTFDljA[3 LCC= vzID۟^fzFjcqHb @I8xնMz^S ܸr}Vơ}s\ nQJEDUOuBaTRLf(|M}i*ldZk ˦]hy {E pz3eHzH OD ߤxyQ FnnSN G.Hs{JwWeMvRkNjV㰛^H_L c?|@o 7eBP:y̸Ŷ܅VDnjۗ  ܸr}VɐGE R`VdaEQޢt>onZUprbeS Tmj\uMq_1ȅ؃TYɎMKUW9ƕndrxˑ I>eU:zM?vkW[J]OUc]ywSqzB0CEKWrTvY]SشTzoKq8b@_Aִ ަhH_``V[ Ը̾ݸr}VVFjwCMpGf\O` pEyXI>N@QFwXl-y`Tir eU }ZE@U_FO[D ۵]铁kXKAXB۷ ޢfׇ~޸r~W ge_%g6|W euH WE@fGI>[Vn“rsPNU SS^fMTNCvߖU Ҷf ̒eAKLCA ȑ twd7]UQ@b^DON/WڡZ<mPS[fZuTL~WPpoY\ m|TaHvE 4@\H]JǶǹ ܴ{޳zмl碗}{uPϤMd}AeQnDVoEdIR0>h`KI1 gQU>NL GKTJXBEWAСeҋF \2yF 0:.l摏c?^al hXYtHp8iCSR_\v\cSWZX&2XbGRbL U9JSuA`Bd 8V5ߺݩŬbⱃ}f]gGJcJv{Jg\tnJNMqo=i@rQg [_sHU,v\hf󃚿/C)hRyaVTp +FXDU]E ՕdDG{թqO_H2}ﴌ}F{zGXQMfTPj\ ڣLQ_GFx7Q HlpX `K[]RJ١jorK}qlTH Cۗm||qbn\dfKihwɶ NڮIK~zHYVvZK Ed ۸rp[M[aKrzJ~kag`}V+ HEaCM Rhm|wGѨj~DrTS?ENPZPL9bĢNI= .<5I unof %36 nFqsRT :Q]>; _@rYdSHQ\L Wv@ }=u}^暼ٳeL -ܸrgO[aKrzJ~fN~PerC}s}Vg' q[ qɖIvsJV~ VdcoJU=AD3ChXN3șMQ RbnzsbI?G'ZCHWf8E][Bc$*aoC[Ľ!YdZ3a|pGzdp}VQ>J Z{5ph2bGKa N<0SuZqc3 Ϛ"\xs F;cZmsyW{pLfPzW}Ve5 ciH9mQOSIv+@/j3?Qv {gbVa.GWRHvXR>7N\K« {OYdNHPF km[J_ t"QrlˆS`􏑒C;Ac}-hi}N=>mX5PDZjB@E cNH}R\ g5epaPja־ϝUSnyxunZdFӔKKܸr/a_\NhHfO[aKrzJ~fSShz>{pLfXLZsCwk}V x rs:~yp{ RHEDf_ ?3`C+P/w >yuO ;+}gKAw@\TkzcDYMuGХPJQs?}@͓Khy pC{E"QVUmxOaAwjQ7<5x}\YoQ0 @.ɪ귔؁T]ꙕO^GQPqyK=q[i\Gr PFdccbc ^uSoPjܸr9kcI_\NhHfO[aKrzJ~fSShz>{pLfXNiG~lر}V I;t}e I<]hJ^΁mm`yey鹏3il<*tk 6:uGh y8ޭ >uEbr\ vSYYW| ʝX|r@ooiNX{^[[YRӳuOJml XEGpmj ġSMYPB<= Lfyqr_^Ñ/jm\`zpjoQ>mVYz~OQ|WL6!Nܸr=ŭp|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHnNyYYqDerJup}Vn ~ FTF:TwJ joU 4gqOHr2Rf>KMro|qWD^ B}jy ܛR[xcBɲWShQY7RӑtHБrPC ̹hB\ns)xVbDqoXޚxjI@ {pLfXNgHlMZ`No|H}eHt^}Vر K{T 9cX;XǞMJ=>|\,fvI*5^rG炍D|  gu=bQlQ\\;_RwdR?<رBQP]5=.WUEob TUK <j:E`|`~YQb ӲfԶzXMWxPdwNȝܸrJn}J|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fTVTod}V Aղ ;zC;r9Sёj&T]u!r{;fV4c{?~05}ozG{Sb~QDEb{MyPYHqEِ_J ׈R}[  k J>ε@Թ_P}AXa< IøKLg ~uPHx ܸrMrpm|I|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fSVbJja9na}V d,ǵ ]Q˴ :Qi<7;~WkFz lb/hecKQ#thz{,|TG Jcfܘt̵ ḌYH! j Nn^gfG[[\\]^n{MeEQwi`W@ĝ Ž˾ݸrY{~eLxEh}I|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fSVaK{p@k_s}V%CW잌 j5tzVO@~vgT8ĭRo0y:ZE]OZ . e$  Nf> [kii֣RyIgKv:Ѣ}u}IK_A߶KHY^fy đܺsqًu߸rh̠`eSJf}I|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fSVaKzo@fSGZv@i`gyUij|V)^wZ AO5HwBSFcr:cFcʏxI{)E9FJzDjaUC`^B 0Iy>m yCÓ=UvP`D xpyݵ|ϿYvèNQ3AR)NS.\C5`.FW-WM.Z><^0E[+[D1_:@Z.MT-XE6`4FT%VL/]D8_1E[+[I0^;?\1KU-WD5_8A[-TK&[D8a1E[-UI0_?:\/DN*XK2a7>a+B B)Z7*zx٠K鷶ݹTM yzeijܷ}ꛂxۈ~ ﱓxۈ~ه|zʄ|z~ k؇lC$ Xs ͧm[vYnX덉-2NhPudk];81WXp|zxqpoljd^YTG`ޭ߼޵!NTW%JHH]{dKBC|upz{uk[c\][iqkUmbo 3;X]gs  #rl{pugyuyuz|h6&!*.  )   #9OB-    (2A8'-I:0*  )8.87YHH`DPSyaQQQey~HCOJ39'( )$&.4:JLLdcQ\BKPZ@;:,9$/@0&"&)<MA83     &#   oL5;FNQH:TQ<(( 1KXYVWVYZZZWQF@k!*57:;:9:9999999   % 5.0.*;4+0779.SLȏ?] j`y(r1!M<\ <@FMX `Z.PJ284\y1}Py?`t8%iGԦP 3YIy7N%hOR?'7f~ #Ԣ;\AF1zr?m.n8iB[f*|l_ǢAm x&3W7b|ʸ0Xpk0]b* ֳ !^NP6tuH8iB _#\GUXW+̯cIKn:7\`- PKi) 6a?ZqOSD;?KG^-17]a- ib,R3<DUGMX ^Oed#FnY?,9S#\Eac. kZbg3F *W\T4fGhl6*- >4*/6(-84*. 9+5@+ ?98)3E7*@03##49?-4318(>5@+,@03$1?&5>9  P  Ѧ  bput}+svnfX3R BSQQWs.+aHfnju^{a{cvlssTdaGHk]zQv_NyY VA`GUnB0wii=4{HHm?]}L>r.dNC?kCBU%dzNFmwbND@hND@~<7fL@y?S}c|kk?eHZ\BE;tA[OGBA{jHby!@/=7|CqHrvav=qwFg^YifW7F*]MmwQ]`P0cowbNnvbNnv@fY9M~V.D.`YuH._NT|\R]FWDHgI\!VMz#ikFhtbs@hv0UhkvItS*d\lvlG[_:gnwb\mwc\mu>jOuZ{h}e~f\sB^_c[|In`WXGaf0d!Y@uY\_UL6u_VL:wwQ]irjDHH*1[Uju\cQx@kYM>cmv`Xkv`XkxkDCerEJN|cii[CW5]@UD]qrcz `oubt~sQxtz|+dEssv_f}~ogvjuJvIu[\\Yv[]bCQd_tBJea_b]>Xa˻JLMNOFIONNDtе˹hfhcw vxw~Eк׽ٸ㾶@yvBʷ۾ wSZ[K de 縹뫑埓ֱI`ffeiyxxzregger{xxyjeffgwxxyuefgelzyx{oejmp ȷդXMޣ͡NĹ(ܩý޳Ǻ߻y %")*%*"#*)*$!+#&f cѳVnVmhdGnlMpbdq߹`p ޳ƹԷ߼ӹ1޴Dchhgl~|vgfago{mghhi}{hdafp}xxohlquƾڱϲºWLݲțߵƘsK׻3ܙڹ~]g ±ݤʾy%M_/*qG%^V,1,O`%WLg aǡh2hourbnqr|{᫐d{[ܚDZ줱hݥ ܜܚ`diihm{NpmM;NIU|nhiij}{jZ;WvUK`LQimrv{~yᑤ圈 }ROP1eְ̮֙WLijʿԲּQHKX\\QIMݜ– ߐRMe*ûԶB؜ԕsB[H_ ʩ·ڥ̻xFϨ!^tEpA.(?Hg`Ŧa{3aUspalrru|yխڥs ވiٝĮx^iڧ[s ږʸ<؝˭MdiihmZoiGS7Z`lnhiij}{id@VmYcAjPanrv~¼gyɬঈЖʻ׽{ ΀ZQTB] ӜկUx΀BWY Lrd^ iJղӼUJM\aaTJPڟ۾ ִa*ɭѰ:՛vV_ېF ťϱפ˸xp/t#`)*izC$e_¦`y,`}sx`krs{vٕ| vvb"֜Xzgxufoeץimۀ{Xrv׏Ūkgiy՜cゑgp ekkjn~7КNd{g K{hi?un\thiihzP}kiihm^TmiivxW~WafsȐԭy ʛѵO`;} YeiFL8bÿԱʵc^`RMMY``ћlˎrmԳúܰ_ ㅨwL8pĻϹHȣwEg8-101.D4zcWƮϹ]T}]T~Wkly ĺ[f:4 ojtnWfǼ fjjoD"Ϲ hL(Ԕ~K3JQ߷Ŀ꧸ۿ ùw3}Zᦱ"Кbye?{hiihuhQshiihzD|kiihmVOmiguvKl︊x]sܷ;1EА ʛѮ_z÷ Ytd> L?}e3ɿóԱʶ]VXWVVWWZћٻx{yԱrDŮǾ\ qUhEV°0'f̭nxƘw$863"-<%$)=(%''&+.#';dSƭEawiEawiSH yf<ﺱﺍ6okl5lo¸  j`bcfmmkgdedekrqkllmg`_YYYZYZbdedjgdcde[W]\^Tadedfdhgdgfefef]Y_\]TadefdcdfddehfhfdbYZ\YXY[Y[a`bdededefhdcdfededb`]WXW]XJKLKLKMMKY]WXYX_`_a`_VZ_XY[ZY\cZY\v4qV)6R Վ㒊ҋl5* /ִϲδԯƸ֘ٿӶ yڲğ˲άψnpZ^Xȯ͵μֵ£׶ίүϴ­ϲϰم ºۻؿϩᐏ(lVe` qǸ-{*خ  կһ  ݳrj's315Ú񡥟aewjerevjhrfcz}${ƷXP1+ Cu w˿ ~Ȑ~ Ě ӛ򧛝( 6Vaԩɱ٨ʱʎ崳I^JA]$kĺļNS($ "֎ͱ МƧ ک y` )-dMj>$a$qL ŭ;s&  K ö¾ ˷$ @O w2$kuʦݩ󙐎aιX#Ȳ/ cߪޠ9ɐǿ ׄpsqtp %=朐G:xҎӎ;6iZbVaȵ a} ȿ4<  鼶˼ #  ƗE-# a"Y@޹xz>VWug ȋ mąss  č Аᜒ خꓤ 㒍ΫyJQЦa%QPž2P̻chO&U  ƻN݇  Ƞk1~E?T|{}a~DqYLoCU}DrXKnAV{EsݬX]pWPCV ~E5}ɚ) gjhkg4|}}{ ƌ^~})ba  pxIp*Nǽ#Ǽſƿ8 q  .IS]HǑ x𓋵`=} S~P lĄql¾]]p ׬Yᓐ :-z]{c;"ìĸ뽻ʾ ŻғnQ;c9&uC޴ފO>dE #? 4#رůmnloi ݘn̂Uя: % {,R ~nC#,0i? QEcM fܨ fuEO ſn" 1-LyaTwL]M~`TvA^M{_dZ1h wxry~=ᣴ¾ڿɶ’ҿoԖ6/ Қ ыMп UN== 6޽߾Ϊ Mdځߐd}  Ƒ ҿِh3  它tg&BL6- ٧.IST [DǾƯ{{۾ľ{ ֦X廉C: 衢 yɟ Y1YR\6xy}3}Uڢɪ"kH=ż ȼIJ b ֣W}P ҿ3:*@6 WH]V a =ɔ\w¿. ֣W鷶 ϳ2}M6s7k-'$T ơƝǾƯɾ* ʿנV\ ƿe+26̘ИΗz5-qoVf]+ު ʹ׿jI þ= ƿD þD#,6vÆyuꈜvŅyuwƄAd+%1\$ ķ¾5ʪ#˧ů IJ!/@Ry_16$\HA 2nеǾбȨľH 7JF  R  %-*~׵6 _q. VĠ&ÊųȽr 8t sԥF󨩩Ǩ㳢 z% fLp6u%~6`IK6 'Y 7һn '5˷   W,86 NM w= ƫy  ٿyprppr quk|Mܽ Dǧjw Y_5H ط蚈6̊ύ0Y |+6 ,RN u@+X ݻ\pSg˽ǭ L =J H廻2g`ha6It^QsI\Jv^QuH[J^\ fEc.k ;Hu@xvɧ~hllfojlkhglkllkn ½bkm '/巀~ܠ߰ .̯6 K\"u@VѾuݹĶ ۽ֱúQj*j`JxV7 'p<Ի#bXULȪd}S} ;ڽ`w|{|| ꮖ䢘 B ʦީ 45D0 ^WsS {A^PJq-;-X^Nѽ  Ĭ4 LY  ȸ fXQ~n) 0`rخ񚃯)+<{O¿  t}ħ|~mn"aǨ-飞Ŗi 𱦧 ͼ +6 gD^ZNǛ׳ 促<wܼˁ ʱŸ<Q,v@W ηf\H6ntm|n~t٠m|o} }e5MH㊤v:&ݨs ;@ŶwvήQȁ֕몒ƨ 3k2r ܳ ݼŻ9 լ6˕̔ģ͓ ZG * Ss -޽ĺiʳɱ 5 ؿ ǫ  ټ${I`S!n6 NV"[g׳WX `ȑ!Å꺽Փ Σ!  ؼego}J&ɭ6 %LOy& п69 ګⷦ ȫ!Ft٨Q?,TL8-hͺjĐ)UMǭ6)Cg <> 췟Ťxj[W ?B͹ žém j78 evLE%<\]$LԇԹ *aÿ š<-W-8޼߼ϒֵ߻  i0*89>O ÿ , f.VhCt6I德{b r [|bCE͖T}h[{TgU~g]zSdVf ^ TDM=7|ܧ ґvtwuχo&l{)'BIEZZᓏɹ,G=m2ĨEq1@o(q$R0迵ċt5pwz/ ([޻2/ُ%iVE1f(w*x3ԵްޟQm괮x6yȏuwu} 3F/k z.JC0jń V˽4j?E'")SﱻK,/ ^um ʺe<Ѣӹ龷ºDt n%lWE'( ڴ ˌ}{jke|պ<о/i7E ]W#@[ A ɻ -%̺Æ!lMJ΂v8jOCh+Kyu8lQAg6Mbu9mLK#%  ϱ ['43*\Ԏstr5fNJv/͹$j6Ǧ5C,&]&Ă ߧǛݹcc1˺jRB OG IF(wmnmjhǽON%FPNRbiC U Ueڴy迷 1 G&E3iOJPyۻM  y{x) ܹ:û40N;ߦBbI$9 [ZE>f ɪ . ݺ<[lùq=Vĸ՞֔ӤɱԣO_S/% ' iȢ .  ۺ„YSŹ;Bd{v_Ve_a_qeYo`pwBt HA ɿ * ο.  .  ϼ&>!Ⱥ /ѢeSNp 6 s#+ ͼqJy;y+Ngc/ ~ֽ   ƿ-; Z enͼ2Q÷JUiugY  R Ӆl ȿuͼ\ ]B#ɻ>֡g!d8 z*6kL  B˾Ü5W̾:jԴai@4- d`8B-7ʿTZKTtDqZNoEV~EsYBpCW|FtImK@U=L=ø>Žjš  . 8ʿmɺ$mFƠh ;K!B4Lƿ솮a  . (@ʿwwDgEHۻKN+ ڟ]veuvj ̽/̽d%Ȼo&c g7ZcTB4ڃzք ͼ 9m |g;I8&'<@Pݿ}|~} ЁλV;þ}4-˽u'&s^M¤x Q B ̼֫ e ηŹy-Sw=E|Gx]L^GYGp\OsFZ~Hx[R& ƻ 쵙}͚ ޲8EAMlóљZT^ .K XL ޯbW 5%޳ӽĹq4g|m b`/&eg kΠƶK Hkݿ^6 O Ǘ4 Ŷ kĺXG7M܊)BCui* Hӽ ֡Ѣ} ݿ趷=Aø·E]A'~o7 ӽ_'ː L<Т dҴ Ĺ8yA'{ ļd1 kܿ{B\"  n 2y g vĻi*H@'{ٹ0 k/7ps < K)Y{/˾ m 2 ξ ZG6H½C78B'^F ԗ~:4$F s56l g Ͽ 9{ XFNCFv _RpJWGt[NpEXr|GuT$IOPH. Gc<ƻܸ %m߰px K F ![Am~c M ;8tk N XTQ63Iýr:3w3Cl, * HY(Iu 3+ !ʼ D񡖙˹F?=IŚ%R"NP#`XbcTwx &W>'? )ҷ' S^!ĽŻ |i] ͫ ƾ f)ù9S<JwڨЁzϛК q+BH+߭P̧ e .R Uļ6Tø̽?jB D]#}ECc:)iLm\$ UGmt#,¼ s*MQ_ D.7^$9BIa# ȼ'憎ظڻw~O_"!vH  1](JD =`#hչ Nq陛wpl{*& zøw:B3M 7`$iNءȪl /bC 򬬷x  ֤  ?9ýV_sWݘޮҼܵ ;c!&ݯىQd F{ ݃9rE' i2uYkVQ|YhZn_~XhZok  7*ɾ䕙R l̳>򤗗Jzɮ{V1b<5pIi >`Y0  ߧ8_UБ  Ah2L87i 'ߖe ǭ ܿY ƿРʨн[Rﲔ 楕˪dA 3\f59ji %lyX W8;.wADf> ۶q  2Zt(UmcISl7FŲŻ` i rB+rĥôYe{ 틂IϖSG@k³I0w֤/,H}j  cFâ(۱& o' cdͦ4%_=Kz;)I7 縷]Csr8lPEP7Kyu;lNAg6Mzs9mL "gB3 ۏ[s G 햎Gꝋ}d]%υ $cKrU=Pᵷ<le+) "gB ۬g~ rǧ"eb @   ؽgcVCI S[lT;AL.@½# "gB%0O4meaX Eo}}"r |˻ ~~ Rx;] ~fE-ž j "gB+2T٥g k9  ~#-4UTfHJ=1GV/~Ú &c !j?ۯ#ݭ|.  7Q ư aElñ ٸŐ ΰ>rJC.\;BRX;+fwd5E¸;EWv_ q+JJ&کγl$]E_ 캻̹»𗙗̹ٷHRǼ6jΰĻ#O)cy+ OzlGk¸`Öx^?0LuΜ ȖëМŪЛ [F =`*w ɿUЩ Տ҄2j?  P+t}@A ɘzdU x7|UC6BZew bQt}evlduhu [D YMni Ǹ ӭև­ƽ-Of삃J 󮱻t ڷȦ TW{Jrp e:f3/ybG ]Da٧֖̎ `ɕ ĹzÔs  ½ۑMh kk|H (Th(Suz, MG֬HK j`W ¶ļHw~ B9Q B(¸ ke(EXFr_NhFXfGt[NpEX}BuZ *d ;~ǭ Ⱥ} | q& ~≆ j·O!IَCk2TT^ŤS:Do:. *  7   ޺¿k T^V  9yOŸɋ!s$:,L\b_^s(h2CGN58 +  1Ź zJ֓ 䈍|]tx J6<=FCI~KJan*FH6 +N3 گ(a t3.͖, ݯ<.S$Zg]bM #(fH9r%9 +þ +Ѽe] 팃¤ Y '9އ ⻽pbEJÀ[¾ldFf'B/ +yɿj‹ ҭ؍dJ9< E&jĹ!Rg) "$ uĿ; ?jĿ,g7CmDrHK sCM~DtXKpBV{8uW +oϟo=cD䗗 㚗t/ ߑڨz񾴶sg jţ<@1 ߯ ,   ̾)cDυ  y#BBJ#C@CjX Iˉ!_B4 :BڮO ᴻzAIa ϗ ;/ޟK%yc<dſ}cU;% Ѯ[] ` / ӻk* ۟& , fIbb)-ȫ{K!|W0Mk5p]%ʉTfͯC qAקȨ ,تҿ   ޒ뮦ꢨؼ V5N(v Į}\yᧃN76aWSbY $(.= ֌V0xϡ޿(YӅGS7\|}ȇw}ȋ|ȍ _\d|ٳĭcWFҮ𺸴嶸?k$jm$C 2A@ħ^>39]}ɒvʑ˒^ e}2`ےL.(̳ȎD +Q3 AEDCHWvDk~0vtO1PjaV~]:D hJ a  HT4nмǾ L=Vc Q}zv?6 & %<55:==;l{x@; '/jQa 1U;Kƿ|qΊܛDR   k7Dڻ Ǿʽ dn1ENRUbF %?<> 106JI04S`_\XS>-a ;j8ĿNl zy  ׸ٖ0gEpѭ˵ۿfkmh^Naqlmp5#&'%% #!$' 4<:< .9DCCG&UZqKp̶خ٬ÿ:7k aJIq2yki Ͻ{  . 8 A e(6] ɡ_?@B45$-Wzjmu^pe]m^p$*M1߼TuSB  t͊\6 ? w>+ޭR,1 ٝ7}ƒdI B4.//4;:>2ERPLfŚuTVXL%!  &Td^]a[*){]N|iA#t ԲPgywQ0^iAh ^7﷈ V!sVZ_E =;=KONPNq|z}zܿʨmlmp^%&'!,ECECC@dѴߴW5:"}xyǿW[}`w njۡw_MOh! ) >aӾ @'5r GL n=te±?HsA<=@#789>?dywp cIDAE641TyvtⴓY.2P`ݷ||³|zے7WPA g48긻u  +VR4d\R)ݡ L^i=9RT UJ97598861NPQW` ׷ ޗ{rWZQRT8   LhUMGTaaI']Ğ~}{x ڦOlg i 6ԋ_`_~޾V*R{}xޔS> P0z ;իF_[Y><16G!-JNMO?IQPMckm|{zzлiloH#&'% $}а~|yG ^Ⱥ d Ėՠ N R@Bݕrx ms3LX%G0G%ձf!JxQ;=@&Hťc/@CAC4!ȏzЯ|}Yšܦ v=^㓐Ő 1 }{Ř$cS~Gߕ|y Ã'S8tfPJ{̱Ȭ6  % z5ڿ ǹ p| W)dgo=;D,~nw~~v{tv U .U_NP՝JRڽ  uƦ ѿ \o屦 4ٓ3쭥Ԩ 6l[Ͼ}uqrwz <΋NP Y x3Lƽ(` ޻ez򩞙 T8ȵ~t}xyytm{ ? NP  `걹}ª = ԡ ƲԵ 9٘ruwuzmt; ˙PP  HN ѿ r8 %ۉ פw8e &򤔧 *ɿx̲pn}{~x (]]m??T W}kȾȹպý ̊2tҌɐל&7Yǫ0߻qus}%Dd"  ӸXvಱұŲt*.ETS7' ƔӴ@Ě}zwмzzCI_${c r Voi7KcڹzŪR_I_%9,̚Bk.ɑԠ }Tc͟Ŏ&D\%QHvj~-'MQJ[!)GS njڿJdʓ|້w; Jm p/I^b\ M| 0V4 䞛ԜFu 粆ٹsEm 5n UN ߱{%@{ T  k  ?`xv/' 삚}ٱΖ[#&  ȸ튇廄暈Ӊ5_Ζ{v{4`(f@]!k!,: 2_~{~|u TkŴ%6Vh +i岿vG  ͊Б;_Ѡx}{} p'\;p,=g ,?`˕s{B ~!eEdBk}y Mki蠖{풂{@m鶍v{pyMz h"gBAAUTONJIJLD p[Eԍآywqs Ȓ~k>b@ A͑VMRd翈 %h ᖔ勨 ӑ⟓dr*x}ssuyQkP;4cSGc 1(  br*>޵xqt|~vwv>&QH  ōM!V? 񰐓Ў3Gşuny~~xux S^[D =EMcf!  /Gตxm{}ur| &\D!z<٦ɥU ʥ 㢰 ӿ .8–vn||t ?>Z(mg=;ѝ y y+׽jXpou $G& !ipz UDÿ GPs6 8:|ξ)㰈nz{z')g5k; ʗijȖDԕ朜 ¿Aׯvw~ 8(#̢rb"+-*Ya [}˃g ~ ¿Bզ~z (Q~""!,EҏvofIQ9\LP ZOɃˆɆ=B󑄈q܊赐 -ї{yzBo| +緿laLqbdã7 WKΚ ؿ¿MӉߑ귈vzuw .=݉Ċ 펑Ŋ vH1ߎ\ӎڑs`ln¿&ܬvwxrx $d0l  [ ExĿo_ޅ~֩{x}|xreV[{!Q- 'weكȀ~ ɀp݅΁}gƗ¿ شlt}vs}s( >] ›Tf p  ^ 8Ŀc ;7ɐٕ ˤqp pS3 ?o,>'yΐގƎ h<S>ߤܒݕ ʎŴ,1ŝ{xxzkǾ唒Ϗ ϊj{Ґ ŌϑҏRļ62ƿfԱwLڹt ' a8!U Q ƺa5 `IMX!⧧ӨmQЬ1fۯ@v PW xÏ&Ĥ䢨ТJ\~\5zZi  誧Ңڋź"Kx}ԫ{>A'~d UEF ܩϿ֎Ta1^ƿ_ˮϱ(ࢄ߭unnɮ'{F_/gȭ޲鯰Ϯl۩ ~Ϳ{  ¡|R  m7u{]ݿTܼú T7TιƷ-Ɯoϰ~ý{ƛ$ -  ǭʮS铑 氶Ϳgٶ̷ dP>3V-ϴc֣voiz~% Mvؽj  7ϥxwK`plmzz}~PD|𥜝›7~Ӆ ò B/è}upHNPM`~lfCap  I&—͞F8 Αw}uǸPP -5Q eAHY@  Ț B\fCx˪~k/=UHޫ O(`~ۣ-  aʇ삇.߷X^߫}ÍuxD_#Y?ľ3ƻ62RCދɃ  ¿x9C)UV_ʷץtsJ_#ֽMs YƸ ¿| Ոύ ݇䴹( \ںî mqs'b[?Ԧ琅qYG*1x0 oݶ v^ cGƀ؉ Bz ½'Нۦţ榥&kxxt YD2&ZLMcD\ǔ 稥ڦ梞f' 먥ɽ@F&& z[}gQN-#56~;zFӺcD i{[ ʾu_ܠ𜠝jDC 򇄤xl- xl S}   { 弮yϤ٠߶  瘟  ڦ׮hzz љN/2r"ީ鷈uo TJՇ 񏆈{rxn+Nޢ+夒ɴ۸zrƽ uѐ׌ȇҼښ ¿C zʪbzm׼˶xr~סΝ٢/Wߺ ~ -yƌ 9O{k׃݈uw/~ݠ$ˡ¼~yrt p_௎֒Ր ٿ T%c9I< 4 }܌ވF7AY[и˨ý}Y z ̿ J~V ΨY=PD}JnrX~!n2'-&6+βfݪsKžڳ~uÿ )r2$ۼþȞu l яӱ 畒 ?( ο 3(!񿋵)}|dĻ}s̷ǼѦ].탯ܱå}>r~Zө ȫ~ƨ x L׻ ɲkaOV٧Ɖ(# ûø ׺<uiW}~~{䕕 ϿxvϦ~~}ܹ֮U~ 6[ /P, 'ܶē༉̳]ݣA̶&|j}嶎G0Ϩ¿ۨŤȦ|ur *   О ƿ 4~ݟ hSL c쯑 7gY|{z} $ⲙXԥ"ӿٶɶyd}7|kxW`ƶķ$OžʙRйӬ{~ɱrƉ!ֿٻbt9*ލǜꝌۡώz6Gպ~d 5ɍgܖӶĢ5gDřmnhzgDF|Ƕ򼍋q{]id[ ۠ժ ׾'syz1eբi"פtt䪖{2ι_,}sxr}ނس겏=E{ ƚ ȼ GLqꪞl  S# ֿ [qΠ{ pX?X 4(L X~zuH0Bï CU ~c dZ Lݢ#NHӫ՞޿ 壠¿*wOŌ ޮgKJUɺW"̹}o9Ұxc ߆ 'BHj.ĮޑfýĮzy JwÇ:K_Anv2I- 襵 +u%Ƹ~ızvuýل򰀎玉 4T\n@w#ïϘӤEdFõpr|!D}+ ccOIawϥ-ǰw״}*=UzzBw"ήθzNJ%-8-*< F*"8⸤~ȭ 7Ʃ` ߔ_b N`H $[l`3|=ޥQr˺碣 1%Ϟϣu 󻡣򯢣 òD^j ;7))ݮݷ{{'ǾľپwQu },¿z9V'0MUt ֻrѿre a$&~ Öȟ޼%cBTT~L6" *3ܺ׽#ǾǻܴbЛ%z" W3<F ¿ ͫЪتٿ 8aW? ;¾6V>' TB"Ԍ;Hȕɛӥ  ,8d"m4V-j#氩 Ƣ+ ο¾3ޫ6 W {-٠h>yᢪ)  ܥܟKT42KU5Vŏ;&=`ߒ ҟ%s) ɿc< 7ӟ~ xC FR꽘_<;AaLw(|DԱe1,>ʴ ۵ z]6`'Ч̿  Lȳ˛Zᯃqؗ} w 壠okuѽIi?.)OlgU--?qݶڳ Z3MPT+_ZtַNq(  ,ǻԺk   >gaԧdQrQ-AR¸྾з }v4f "٠yĮܬS6\? -3Ejjjii䒠IJ  O Ŷxﲺ ꤡͤ(駨ɲþ֦(SH]9rjjjii䒠G  raꑓve  0f `e ׿:j2*jjjii䑠[Uձ}& <nꉡo Ȼ ༺!޺ŵ_5E;bܭ{ νƨG+ѭjjjii݉ ޾ۻ t BǺ { κﻴ䱺ƽO@ P&HYb|  ە 3);jjjii݉@N   Y ɘjy Xv{ ӽƯ7A4  u:Z: 2^jjjii݉ ⡫iB_ hǣ4_{ >ۡӧ׵$)ݯ$W\eeZM fE>dо.ŪB&jjjii݉z!  k>žyxW \$% HJ+x"j¿JD$jjjߥr s iۂHʖΛ B ˜ϕ 䥠 ֝؞ڒ_ G ^u $~2H#jjjˆTwt iyW~Du- y Ǥ ɾ"mן{ )zڗ۠e-yS H_fʲ 3I!jjjtj ik㓠u Ly7 ]3·"󍏏Քˈ^l 匊~ N%Ӟג} I ſ1+jjjjii,`ۛJy<ֳ   "󸊄hv K̗$ әڏٯtszy  h3W>5)jjjkii * z<9_h ܝb򛑓̖ȍ$$%ڐPx(6  G^-pS*>jjfiii1V y<X7ŲЂ≞ ¢$ٺĿٞU1І/j ;f$O'Kfjj؇iiif~nuy<u ƿ||D ɜ}ɁRTR}j%2ʐMlsKyk   T|Enqjjʷiii}t: yQ`P璒z Oyu +Ơ .QKU S(sqI^jjliiiy$ ݨ_bۋjٰqYQMYlܰ󞏒 !%  Zqd@F!h1gP ajeiiii[ S o䛆zlvt  ݝ⾴v(*tW+ajوjiii}zU?N[ م긕fjwzzwކͿz܉ ~ʟIòDQ! yajƭjiiix> PڲޟƱ|͍]lw !ⰍUS `~ 'Eajؽijiii M(`~ zĶtWYȾhv¿M*$ r"ݣJ(": ¼YYajijiiiˑ/^ t$ac 뫰 xǦ{^Д־ա   KӺ ˹;ߛJagjjiii9ʗ {Ֆeޒ  ڗ>YQ_ ĿMPFa؃jjiiiCX:Yɔ󭣥y蠣nJx͛ آ {V"ͺ u}r+'xʾ_#a˸jjiiiHU !Og ZIJd@W  ]mjjiiix Xߦ4Όٻċ;sG[匋 璎   !^ UW͡% ļ?N&ijjiiiDٽV_҇ kt Lz|s } Г݈j%  Jjjjiii DGPtkOVیٕ 哒ȌԱb]uIm   (s߰Ҩ}aT>5kkjjjiiivF |)y   !_C^y}I9 Ux  L ȥN4b ǿQ"^jjjiiimH~{ |'⅂ˀ~{~cDYV>c  #SoqvV 2X  ?ŴZD 'jjjiiiG+0s taDf\   Ҩӻ+t_!ajjjiii怠KN? u(eߒ헏 ĈߊljލwQ7@}p >L سӽIUjjjiiiB b͸ i&U  y 6܇o|zù _F%A jjjiii6FM7 l1%䍇ΈK}XO Mqn ȣ h4G&uBRjjjiij Ws{P c#zſ*ՏS} J.W YůK- jjjiid``t CXjKj޿S ԗƿΘm4sƛ ^C uޛi0$lù{jjjii ڥ LE  NV4#| 8h jQ R {@&jjjiiĨnƛ\W> гӟڢƹ}ةp{ڠ 1[ֵĿPi1b2{Hijjjigh ^V ]>墝Ŀ# }cYooKnsl2e8qތNjjjiui صʶy7`Ͷ #ݮ۴v{y˲U[Ű»zʻ  nuJܮ\jjjiֺi ׻¹ [צt ؿ )鹽Ѐs~V}Kz 4CڅĺBb*pjjiֽ|i  ſ \Z  K"ƿxr3OʿuW Ľ l˯Nþw _ujjkfi޳ijǤW$ᶆ^"*w婧 3ץɤo ݉@ (Ϋ oŴ å}fo3?A':兓x c8PG apjjcii k LSmg<  tr 1 eQ# %/#Xpsqqn(_ VůK!(vS `jjii] ꆀ~}|[$')ëD#}~{.|{~zڰ}xح }~|i} ܉]m٣rù \;Fjjii פ7 }̙ μ ئ 0P^xl cjjgiiܭ  5p  ͍ Ā ʼnˋᓐ D vՍnQie?p4z) \j^9*_jkiii뎜a wp|  y  k;PͿ ț7^<_`^zjdiiiƀ)"{럓㊆ăٞɅƒ  E nϿ #aa}jiii @1 4+pxۅq ƗϿ˄WRsaaj׬iiiחǭ 󣛞ie O좝v1rș֛t 렝̗՚蝝  ׾Ͽù,NaaJ jmiii 8QAa ƐϺ `8xT2sܽ ο;XV>oaaoP=jiiii '|1ݤОІ 񛣟ʠ懧ԫd] _ Jž -пŻD`O Sgaaxjjiii QQQ0#Ʃ읧ڽQڒ_ܙ뽮 ؾ 4kݿ2daalHtjiiiڌ  D{O㶷Һèѫ 򶵸۴ȵ-^zoD "X^ Ǡ!  Gaaajrjiii  n/gmXúᨕֻ絽.uV(l ʋm[Q^7uE vaaajǍjiii ۯ\߻&p>?'ʸž襍 伾 Ŀ6ղժTrw®0i˹ yQ\aaajvjiii K/(=x]Г<髬׬٢ ܩ 諪S+ݽߺe>ù̿ =aaaajVjiiinhk׻1Vݳw i׽ WrݢȎP̾ӿ9Saaaaj jiii~4  N(߿٥ˣlj؀ TQȸ7[žەbپU?]9ʿ&baaaajN#$jiiiꁦwjݿVq  ꭧ  ºˆƚ&u$xľڿjaaaak̔~'xViiiم%ߪj(  "␏Ȍ mŒ ዏገG¿ }Ϳ,gaaaackp{xgiiiꑠ)Vq  K "ۡs sHշRU Aqaaaaa;j:tiii iGۓґk◔  옒G¿SUݾǖ[]Hj, daaaa jfRiii8⾉   |Aelƛ}yÿh9ɳ#}-پ&ykaaaa j9Niii  B0#^ )ޖ|Ő~jne s[~{ :ƨ ۱  MVcaaaazmLiii胟Κ]Ӧ 1#b Εܠر ¿Ϛ  {nIIʊfx.aaaaw|hהijoWGkii}Rמuю 擐zWک㚏 ﬍ zY ӎZ  xϿ o<4cqRZaaaaaɃjtObtii} 淭։$Iߞ r%نkƺý XE޿dz+ aaaahgj^Siis: to ' |ʫ Ѭ鮳t~Ч ׮㿜  ȕW,`Kdaaaahj l^iiǨnerv8 &nFf&Nָ̩w ȹTþÿOԿtQf/ʹaaaaj kt%iiqձX*岯& ýƽeӆ ¼ ź ڿ T,{5" e@6Joaaaaxkjnjlii܀ jQ ) 뵲ű հƺ 爽ĸ Ҹ ƿGqԿpt ־ #aaaa]pݲjOtzii鎠!԰mǔ3ަ Ҷ ܨw D˻ɻɴUvZǒ.pQaaaabjjYr tj m ʗ D_ χ| ব棩 c"ɠ?Dѷ8wzdcܿSCi}h? daaaaajjkibdوi,MݭNC`BЧۨ  k|?҇1:`ʳ`jxPo~Lqi`Ks<#F8+~5=.l:9cr380¿90Ȟ K~,baaaajjji Ɯpǻ4գCr d|,Ը ^Ƴ rB0 rgx$D1THi,F6w)]2ni\W(mmpC8i'I7H^ȿ`:û̊P#@b Z:aaaaa]jhiq$Fr~ļ<غ ÿò){    БCƖɰұAq_^xjprUJF#S4lijvbc4n]qipiw׻˖| n_˄F\8m-ye.baaacapj muk_Z …qpstoܿǗG ߒljQ!΍񏑎ٕwC:Z.`E̶ۿ̇G?j(d Waaaaaf۵jivxݧ?  q˴þؽ t潻 Žijއ ~}װK#Hn ;ü Baaalf`j jۙͱܿ# QZlߧޱǽ ȜknmojA nnj jgߏ ߼ԌbWه ~҉戃 ˬþ ̮Ey6v$Bwaaah`j h¤meK 2qmֿ)ýc!ื ơ ! `ٸݜW ӿī&|I@Ƶ@6aaaa_jԯcii"S m9ż™)w‰z||zGn}|x mnJ޲vә훛 ü  ˿ĿÿͿxV !^|Ӌ9JaaaarhѺˈjiitTT{m s? Īǿ kñ1I嵯 ު~| ׽· -ͻǰɨ "ʿ¿ ¿׿ F.*U! :6aaa_acwdjii i]0{ am l ĿӽȐz~}@}~v }廀ӪϾq Z .ߪ]1E&IN V 2At=_6-#\V6 " ÿˣANRcsUٿ t h\aaabaajjii iːmmۜ<:@ nǥ֮ 䣂ꗄ  .ܽ(52h4mj1}""I9OG\6$~6W#8aaadeatj_iCmixmm Ojv4Þ&ٷpr ܰ 뮂ԋ 벰ժ.>ķ?D'zCk_{[s;7EOqtD E ־|¾v{Mvaa ajedhjdiEjiCmm؍ ӠC ſ轿 n þտ.<=E1kkܖ-ܢ%y1ٴXPĿ޿ ģߏ+1'$taaaiaijnii i:mm Į¸ `"п ȁŽ .>>ǻCڍ%.~&02Y+--RD),A=VX9  $)Ȭ%3ZJ3~TZ%aaada߫g jqiiimmֿÿe$FΑВ pŀ  㘕.̢ܟ㡰  ڨ (64996EH9x~}u﬛3Iz`{ vu{9=^Taaadb^gliiiѱmmߪͿûüٿþ5Sþ'ڊp|ܿ-| eÿ+6~}~{c0/0'Zi4/0)o'0/9't aaabYfͮ׹vpiiiw0*㔠 nmmġ¿ ǭ ľ|\  ㆄ{U  ͱъڿۂv dJ] &JA!-'raa&afreeciiiKmmו  I 觀ݟ 񼌒 ¾¾8 ԾΜT wv ao쉨aaaa`nٗ iiiauVָmmmդ¿$‡ZWWyۥr[Ų D ;.̑fLg ¿dh|uaaaad aҫsiii Ԅۧmmmݩúû ٰJK  ` ׅك t㶝 F- H+$&HйYHg?cĿ¿8Yaajadxhiii9Zmmm¿n$ 䠖 VkGEXwղ ೧E5ʽˎHxZp>j)l¿5t<aaaaiĚjiiiĴzmmmѿ %x ߦ Tڹyu_ Fӳ B7z ̱C \ Լ"jþgaaՀabbaڽgjiiil6׌c׉mmm򰳳¿:Rө̨ŰӰu۵r (ʛ6Cg3; ,jfaa_adqJjjiii<txmmmWa1ǿſ ǿl\ź d k J ο 1CW4ݿ " Wh aaaaafԲbfpjiii"vmmm̱ Ͼ+޼нƿ ļѽmuǽq~ !o୊l ¿ο $ I 6la_aabYߗkjiiiAwmmm >Mݮy)5gڳʵȹ ˴ӜhiʘTN Α ~]  Yq[ `%aaabmêjjiiix ׳ފmmml IJr)S ڪ ƣzЧx ջ  VAg/۾ZAtaaabhjjiii %mmmܮҩuhs)橧ͨݦXĀUd     *nw?;Xq %a_aabw`jjiii )mmm т*yosYe  wkͪwo '~ R Z'"Qq5*_baabkIljiii쎦 Kmmm֟PsJs)0Cɐ }VkdM (GAv UFe  *=5C aaa``lpjiiis߆&mmmpܹs(Ea χtw{ )v-  ߿$). Ӆaaa`ajjjiiiဣ mmm Ƽs75ⓓ  ϵ\Yo斕 e߱ӿ )B2滾ۧ[aabdjjjiiis7mmmb tes(lCf b~|q   z ޿CXO¿C ~޹رܲ쉯aaaju"jjjiiigGOmmmks%ſ쉁~  {z x{}~}}    * ] aaacle>jjjiii.mmmm]Ms*zqj}v   ݱ޾r;UM#Raaaaj`jjjiiiwΗ֕m nТmH+sIY۰蟘V   ߾h­p Α y Կ IdY!>Maaa _abmjjiiiqߏ&]Im o:m ݖ 's+j9̰E  p꜇խ ҿ$!U oaaa}`jɲojjiiik}.-mn͂9my o0Wso-ƮϰJ 񻰱ۮ߯ǨM   Ӯ30 >eyV h~6 naa`ؽi0,ghjjiiixmmmfB qss2p׻־yƛԠw gﻓٴ SnҿĿ$4.i U<aatfn}~jiii8&mm mVazsPUﺷȼĽ քw 񿽾#~¦{ѻ|ܶ'_ jz&(h aa̋_r{qjiii mmmmL  ޤBHstز·3ѼĖε_ _cS¿t76a`fd^|whjiii ' mmmm˸̹)ms&ƺOu ʹkтݍި ٲd~ ¿ Ϳ~accea^hjjiii ~ \ĝmmmmKު㛆 ĎwKLsQų 갭߿ͣž!щ󾩭  hol4 I7Aaaaaajjjiii }WmmmmI贴簀 ~u4L}ޠܚV\baaj ~pŢikFmmmm s A]W Yc9  ր՘֘  ؞z癚ިoݿCĿ S9z鈢b0haajjiiyn(mmmms s SF| 1 smK ,[ ~h5/N ׼ɄW: \_݂lƒ\aajfj[iث mmmmo ޯw Y' +! ?Y}#jD022)u#.Ksݵ A g@( 8/2aaaj jiMi Ξ7#mmmmh ߪ|Օ@]WYd5IU񞑔ҕ  ¡ 5▟ ck )¾w(8PZe%$Vyayaaj kkiݜa\mmmme ંޣ~Ϳ׬YE.5 ٿ h݅x̲ܿ¾#KC\{V._bsaaj[iij9Ummmmf۫ 㶘;,>p咥ݖdׁ`$kTc`cajdki\zHUmmmmf賁ͥ =fZVWYSҷ6W   ׾?[`IFǃ Y8wa]\ajqڎkijUmmmmjf| ۄTS'|ke`3܆ Ӆ~ < >`_։aًajibrľil5^Ummmmmfݧ ҊV?Kݺ *  ܧz J#TQyzUbclam h{jik*Ummmmf|̻~ ö՜ibYX[\Crq +x 㕳}璎B[  ;+BQci֓_fSgiii `hmmmmcfrƻۣϻ EP ؖT ؒ¿MJ2|7ލ׮NsabmՀknii ϵMmmmhefѻ⩈ 3 v~;~nlkok?܄}ő刄 e Hd$ wa\Ѧڑaao fm@ii᫡Vmmmff}٢#"Ƹ¾ ځ׆ .?}3 ĵ_g]봜^a͕clk۱mUiiXmmmffx ~x}zpxytɾݶ՛|ԙ 1|pyb_஌aaajklkiiOYmmmff둆ҡZ~ 坑zӿ$@dBRa沠]aaejhjiii蒠Ymmmkffۦ 痑sxy wΜcߘ ߒ 41북"{#ބa~aaaifopiiiݎYmmmdffᰂ ̡ٽpW! guᆹ靅ֹ|% `Wꇶ^_aaaӮaчܱiii|EYmmmfffѥ ɴ̿șP̫nkϼ2Jó )ͤ2{țyo;TAo 1ܚaaaawjׂziiiVmmm`fffQ㯞ijh)je^eksA3P|ɀثaaaa_۾ggkiii mmmƾ`ffff  ʋr\% ȷ ݵ)Dz͸ⷅXIjLQ BhaaaaaÙjjiii mmm fffffw ě6fķdUܸϷл{Yw  ,/b< PgaaaaajtiiiM mmmIlffffӼ|  ¿ X1 dн 쇠c پ6p^aaaaaihݵiii W mmm p4 nffffح \¿ӫ ٫ƻƭzŎyӱ?]S2}uaaaaaimֺxiii ̯ޔ ؈'mmmua_bfeޣ塓í ÃE*x  (+Eߨvz   "8k\IaaaaajȰgiii⼽^ ~Immm!ۼԍIքbh~ya Ŷ `FB ǎ'`򷚜zމ‚ ,xw [aaaaajxgiii%M૒lfomm/{͠6~ƭӳʰ䗉([w0{ÿ #穆꘰k 2} aaaaaalgsiiiӻ}AOmm߷gaepEsğǎ쉹 쬸ʾ O: ݸǕϧv沊Xܠ y,jaa]Yaaijjii'⑫͉ermm ifyo dzc޼Ʒط Fo &@gdڪZt[afjki iڅ ׋$Vٓ Ummgf ڈfef ަ O߮o ߟ旖В䜖q uPJA7 y\ajjߡhi io鑠 su_%xmmýfedvff{p| ~t  ھ_almЁ}i i_o;{mmfgfffŢԿгp 3_Ɲ$w࢚Ӓ dJ xX ݢ`jSniihMya{mm?Tdf`ff  Ƴ a5  iўLGl`jniޤii JXڏz:~m m׻q ffefz v  9޽ ƨ ҩ Tojo۝qii_(pŖm mqڽU qpcսmfкqŧS%f,j ׀ t8b$m]h߾hmii 2lۓAmmdpv-sZvfK V8ǵៜ  }ޗizjƧiiXt 8-mmdif<vgɧxg j ͙D ż p?L7  ۿjfiik^ >!lmyf fbh̽c Ə-lt{hP ۙ jniii 鈤v)ܶmycۮfx`fc᧎tDJ ߩ쨎k>X [ک Ÿw jiiiƇl\msfƨey{t(t  _ڿ#GVزNkiiidÓ iҤmm l۾uޘي   ޏ.Po a (m >*¾M fiiopnmmܵWcͿ˶rqa[\     G55R;iiV:䚮n jmmmpجfrcTqVۯ  ȭ ޙ ֻ׿`B1iiw, ĸ߾).mmmmdf̭њb" ;*   M #yA<6ii녴Ռ nmmmmfҴftғ}C ] 'q ̓敆~ RW ʿ -1ga iiŊ?\禷!mmmmmffb]d  T? V ~ T _\ òii%o4mmmmmf׫ \ˬM~H~H~ z  M!iiIt㱗Admmmmladddcݞư&x  BGf 4vSxjj1%!%mmmm pШNuD tPzupZ|CW ֳ ue#k` ŦI.C]J7{mmm mױτddbcfto#P  )   þ z{i]jU`ymmmkzcgRI Jf_ ʐ$ a3 ƽPD^ &jitܲgBmmmkfe`]\ܯ  ?H ﺾ e$iD yo.ihgbVGmmmmfffgg͂뱂` ߿  ڷ _VZĮ$#iiӼXGmmmimffacOKծ Jُ^ o%sH/iiܷh\ܶXGmmmnmffїwCV}  -r Կ  }͗A ]UIޖohhbNܵ 6DXGmmmnmffϖ׮q  R䠙 ѷZߢ} 6mEV8դB5no<XGmmmmmf__gʹsb ب *+~b;vҚsֺ剜IXGmmmmmf܂fiqfwٞ  Ԙ 盛 ̘R ƿU34ԨR  jXGm mmmmffέdf zᶦ  a   a T\;d6kF3F3}UDm m(rnmffvfgfܭ|ЇS} ĀB8 ʂ IU Sݸ.`+$iqcm mFknmfلfϨܽif q+ ȾĿ UC.f޴m msnmfcf}ܾinص}ᡏĺſƎψ#xᓐߎ ~ R)Cyu$ ̩ś u⧯m mmo mkRfcdl~5L.R   ľ¿ H 1:(8s ݄g kr怤m oŽmq mlffkXηZl޷팁}~쁂N. ۀ~ Ё  Ǿ K-=l+Td I2tm dme mϾkfb= ޻ad   o' È I4 k Zm`k~mo֤fىf ܾ She ґ'qά  ʖH 47 nomȀf׺}gh z} ɇ D>    F-՝c uJ2rm|mmVf׺bdP枓 վÍ~ǸC훳 ۍɈ Џӕ ߎג| > @$6 j 62l]Cipjvmm X*hئaiKs 9x޾l ӟ ¾-4] i] ~mtunm ɛhc͌ m[uҤУjQĔNw ɠƔM|ܦ Mܩ 룩׼SY lӮ!?/\H*afXmoym`d in+'xݾǛQrĿԪ#xo͘Kz  t þfG6 ﷃ̅ļmpvݮm{s`gz٘ ְ{d]Fﵰ0قoygdsnūٮ 廳 谳㲴  be0m35j Q Xsoގmqn޳|mܦeܴef``ظĈme߽u ΆٿҾӾ$ļܵ28W » ý Y[s?;"Kgmt molmmUfffhfiżŇfŇiݺ:  Xlz< HѿWtl3#hIkwAEminm m:dff ef!\de@l&&Ӽݪx    ʴ׿-{x\ 8?%gЋ:*9|ZԠ`mwmm mdjff ٫fnߖpّm7"  1d   g վ4t> +dvձ0^W|ˑZ䕞:m|mmm g_fff TrX⤛ǿ  䣡IB٩֘0  v̿WG-g^v Ďwjyܾٱxm{mmm f`1ff_f ]mw7Vʿۑ7^TO]1 Ukih `m|mmmfffffIbM| |  㝚+|~|}~yŝ|ָaÿS8Ã1x&zA liiٛomrmmmftffffߦݾ}~ ԟx! 7w^h_mOOM) տ&@  m [jnjlfmimmmfbfffٳQnQ䔔  C7ґߒ.! p敔 sag>h Uj ƾp2 WjjYi;mjmmmfcΑfffְ~yw"2a S0{N5 @P #2j vijoiOh۬CjmnmnmfffffxOja$ & ۥPL 5 0  z%` ]w ܳmkklgmqnlmffefffؿtvD D*t jK Y* _4UԷ jagSjjhώrwmpnlmffgfffYV͞|| &Ǥ 6¾ %,ZI ajgjgs fĉ]m onmfffffi~h׬    t"I mpfn yaijjyÞgᜱs*?m nmmffffd⥯J ԭ 奠`3ƯhA Ŀ *g4i% bagjВp9tׂ爝y mmmmffffhɪR 樃梔 ۹rͼXFRƿ $18 DVu<*^ÿda akcgAo1Sp*&`m~mfff۽g˩W뗄ܼ! "Z R¾ s N~¿obaIjnj6 m׳{`سemfffh Q﵂뗄ү+  z׊V2 d پ 4[=_Yagljef~ mWNl mdffc؏附֟0| Č䠝  ??hҿ 'O2|޿apaj eki״mm)m hm[gfݔ[p۩*Rv  _# 4@HNU@ۿa_jzlj%immmkٹ_efbnf 곂ϬԸ+݋~{>N M Y 8Hksh>a{jll_~عnݴmUmmm ipffuf ʑ׵ ݧި|y2ȥ ql  쟬Yzm~ k Xa`xoqk}ιn m&mmm kffeVf0  ʲݱG c gU 5bd2;u/vƂah⤲jjhݣi؃m[pmm mfΣf~Hzjf  -ۄtojTs ʤF~5&ʂ!Po Y @ML |(Й(Qa|b$ݒor}| imu'``mm mhcfb6h b'ʺvy[jP=.߿_ rCc,>)aZgюqnF ˜`mnJgmkmcff}Gbڜ{tjSUUt~zᎠDW Ď睏`%*)  ֹȨca`e mAlX ڊym m!23Dpmȇff]jZv̾{~w ֮| 9DҿD}\@\ S`addjtkYf׵ ⴶmqE&ISHmffgdZ~]2f[NOOMU~|qsE~z|s2 vW/_;(# Ժܷaacb khQۗiё mt8p+!|mnfffiaǯ 翗} SZH QT:$<-3\baabb ΒijCk mM mFmefffgf~|`]]b}~.骨, ئͥ򲨻 4}[ fal z7h.ܒ`Vaaadզjllڅmmcl" Kmfffff`ѭ q]gÿ}im| έ CcְO%ƿſ  /*é<f aaaab^jipdmm ptmfdfffgA'ǻlhhdp) kǕ[,ÿûº¾˲8߿ *G aaaadogjje Y؈mkm m_9ofLJfffiܾ&ĥ}{{e`cdp~q8̶{a$+޴ε[N wrosaO猨aaaaaljk^U_Tm1=pmm]1mffffg G˸ < (ιëmljoϻ&4&--dvqcaaa`gljiZ}ڈSPof mmmqΨ*fًfffi uh(֛ͭ _/#Y-5Fcs[_ۣǯx ,,מ͡󽢤󰣣g;a ʿ ,CMk_aaa]ڍlii՞o郠v[mmmmDf[ffff hݷ  KMndgF&Vvpkx}pch z s@m mffff{骃 ޫOA9üÿUjܵҫ~cޥz Qn&4 H";{èaaaaaajjjiii/Kmmm#mmwMffff{~ x^ghjif4Q?ڜ|JlLT܊|Ɓ bt[QtLX^4+j ~}풁~䘁 vֿ9 Na^aabajjjiii0mmmhmm5 ffffڶЃ ࢎǫɶ[a{k$E{~=5{Sz! g?ֿ9LnFыaքaaajjjiiiXnmmmjmmtBfffh]s Ƚ$Łkrw~aౣ'~ߗGۛkaXJ ֿ B5Ru? hxaaayacоdiiizmmmmmmh6fffgOJ͠I ĸ&.ʸ *Mş܄m. S ٫xˠ f&fֿ I4 Nv@ qbaga`]a܅iii=3mmmmmmf<(fffrX Wǩ=kҩkpz #ސ) ~W-(~ꮍ攐WZ ֿ H M Ƽe<l:_aaajaabii ֠CY4mmmmmmffffΜoR} P1ƾ < ̨B}b Z׾ Qf6 L/{```` `hh WSY@kllllle 0ddd}ި~{ vҀ`Ŵ ̿nCû~ L ٲF4;7@VhDʸfffgfsnnWrsssssl:llȧ듉ɪzʬ ɇ,]ȯ ynBYزz   J      ¾ǾӴ Яːȫȑմ ̲ѩGɐƭƑմ XnΦLxŝǺյ ͪOphKǝѸĿյ @bSӼԵ ŁDfŮԵ iµݶſʾܻлѶ Ƽ۰¸෿߶ͷ ·ÿϾÿ޿ؿ¾ҝҾאց֑ذҵ߾ݥHٹԓܵݙޙަާֺؗяޤvٵڝؿڝۨۨ՜Һ͉ڝղ՜ֿ֥֦֜ћκȃѯққӣӤ˺}~L˫̙̙͠͠ĺȾwκ̽ȼýлϻܽ۽šš½̽Ӻq~M̲ò̰̰ܲ۲¶¶̲ήjϣ̨èɥȥܨ̨ۨɣd˞Þʚʚܞ۞ȡȡ̞Ƙ]ɕ•ܕڕ̕Pȅۅم˅spqwp=:;<;:;9;9:;=<;;:48:::::6Z܀҃҅#GX`_^abba`accddefef`\_`aa`b\ZZWVWVWWVWSRQMNKFEA60;::;::;::;::;:73232322322+6q|{ xrppmid_ZUNA7<;;9=;96;9;=<;;:79::=;;87;9<=<;;:6:=;8;9=<;;96;9;=<;;79;9=;!%"N]c+.(?::{sy{)d{RJK2*7' # $4#!x -2-#C[\T675',#2$89/ &*O;;1&1CT ,,#0" +/8O@. (  ! %.5QD8CX^TH' 14@RIXOcVNdN`Yzb]W\ojijZ=C21'-#/,*%.07=J'J^bL]DMR`I?A;A//?4'2 .1) +4AGS[R,<3  /--'  IJH7IMONVK:0-'*CRSNOPPRSTSJFEw]_fgpǓEHS`gknsuzz{|yxxwvssssssrqq )-HSY]aehijifc`___^^^^^#'BNVTVY]dedc_]WZYXUPWX YSRXVPWXSSXPQXRSXSRXTPSXXXXXXWVV"&>KW[a`_[^tVVSbw]TU RgpTYuZSjlUSMw}rLSUSnjU SkoVUUSgz{}jNUNVUUUUUUTSS"=L{T^V``YjPKiNU TOCtOBWUSWWSUTVNTU NKUUNNUQQUUUUUUU"6NaZkb\^XhgG]ORPWUPSWRPTU@n5Ku:TPPTXW&Od(NQTXUPVSqBWOPPQPBPVR6AZRPOTWQTXUPTZ?XWPPOSWWUUUUTRR;$0N`^arZ^XhF]PJçsMQRBODRNU9P.VRHӝHqyNRNBO,ELMXYѝHq|hGYTUUUUUTSS%5G^Xbb^^Yh睊_H[tHx{K:{}DWUVNIIQVUQg@UQP;{qc=<ĮC12zP;{rrr5lJVUUUUUU$(B^zZc_Xhx\[hIG(=%^CD(>sxGQXWRvRWSiHWSO>{s;R'HLC1U)S)>Z={qI2TcSWWUUUUU$)FOgwZifa[l:Y[rj`[D:Ei@ܾKDOQVWYZPiK[ZUGWW=>ysD[EZTT]P'WDO\>xrRD_ηMUZZWVVVVV"(HZYW\WHHWjgao@b]8h_\DE?^gDItMgi^cc`_____<#)M_chkmoorrqnqwF]khoOdu[IbIicIlvB`xYK{MVouF\vgIbli[;Hot]O2iji8hbo\ѽpmZL`EeyIWdocZAR{NUpmKm]CmisQOni[;HmknZL`EcnlVBaliYLEjiiiiihff;!(K^bhkostsrsrqklnmmilngeigjkgmmfknignhinlgknjelnkfejpmgfgpnm6fdnShfhglnginmiffjoginlejifnmmfgnkfejpmlffhglnlfflnkfhommllllkjj!'KZ_cgknpqpqpopnkhgS=Iokkkiiiii %FOQTY[``acb_]\[]`_\\\]]]]\[[ +0JMIKMMOONPONMMNNNNOONMMѻѼÿ ĭaŨ¿Ŀh+äŷǬibŰǰãbSJƽNŶ»­/sOp̶ýH¦Ļ,Ė QTLƨǽn}o~uLú©zw9YZry_h} ¨Oؕ[[PmjM+YbN0LTZLtQH-P;\QfXcR%WRWO<\PY<\P{J3RH~Dan}oqRbQrT>RZ}eZ~>ɵ vn|Rd ¯':XǀIARWPYY=SVԨS7g*KFYEiٔQ-[OFXNF[OwT8txps+X(NkM5VXEQnmSMȭ.eoc| ¨PD{?XRP\U5yxVD_)QOT|Qmo?r[OOUOOXNqNlxnoTdKViKÚvlPƨWWc' PժM[nzHm7MIm8wcnVa^Pc+Ŝ&{OVeuc=Wm@[NMTNMT\dDk_Rpx~tuRHqbLQ_FRkigux ƹ۾MrGOGJVZZPHKںj`w*մ湝Kėfu կw]ȣfhqɪunQjfټh蹆3h\xoeaxvrltׂÀ龒vnȦҾ˘w U֭j𮟪ŇrZgczӭРoՄmyOoxtoiy~leK=Xt[_BiBiiguxȢ ȷzwYܑVLgFWh {^TJM\aaTJO٭ַ u*Ⱦ峑H螌u ҫ㽶wY^}fqftʖ{Uifؼh,h}te_X|rotrՁ|} vf"ևƚډ{|̎Ҫoڸgchc~ 𮡬Twspusux}~yЍѷjlijtzvqkx~}ml_B[dPXRMQmkju~vy_zvay {םedK[pEՉoj\VXWXzvs~ԴŬu*׳œ㫞~Fmuz ӧĮwZ_ċzŮdwheԒe eּggzt|d^Vuso׊? y| 멎Ձ"qb{׆s𸐲uF䳵qottxZzatʮףU~őۯ~}hka𯵿¢Ƹܺnij|uvxd`dhc~~shgfob`⢼َʬIS iDu\2b_`QMMY`_]cepѱ}u Ⱥǽݟk[TRHſ ڮvUYmkjjdZ~k~bѼdR:%dS9qa^B>mb1T zk hc"sL7뼪vly-ްQbglenZUaWod`xrEXhje_G>ZPhlpƿSyȏǸwٍƿɐ~Urhiij}F`khrsjScNer_컛޽ NTNJJxmCd2b^`RMMY`_Wafrέҿt ʿg֓|'R:zױڻv­ٵںvրu͈jћejjfeӈe_ɼg_&g_^^Uhûjh"uB; ւotvft/vmk{PرǰO{]欧˝wUk4`ٵ־vt ڞ_AZhsƉoi̭(^ikj^ȿzfɂǹfy}ƿ˃|Hshiij}=\khpsjN^neoc7F ϵlbIbnBq@g^2\VXWVVWWY]~bepͩ֍[Ǿp ϼ{oaR9m·R_ȵ9+pϮʘаٲvcnoi^ko_`gr`cbgeaeqKi[PrzwPqzw Z4yhvGW]$ ۽}l/ٷZϮਤrT<62UбȵǽҕҿD_mbsƉftU߳jzsrjcþĵlˆʻk½·|Jrghhi}>\jgpriNkitrpvIP~:t ۴ڋԭFdȽA2ӣVLO\``UMQpu{rrťǷȨtmpqp} öȭub|}lYQȪɫ׬tzڿYѺDzkfDzkf W[af؆8C_-[1wQȪǽؼ|~wrmlcɫнˍYӨ7b}P綻ְ ϹaNiVpqVfi¯qyztApfgwxxy{7YifmyxxyoiJ臘Y ߞҲֹ`^p Ej¹@2ا\\ԻTILZ^^RIOױ߹ۼ ¼ٺܢn׼Uȷͻmn Up jłqæcƘٺƻپÃṋЬ¸´ƿƿ³ƮƲƺέ̟ ε觅Ȱؿݻ|D@ާʶhbdmophbeέӲҹnԺTùżżNOcaaclba g3źǾwƫ8;踱|ֽB> ǪΫ(=<?))533(Eijimוݕ ƺߠǻ / /»Ѹ˽D@Ǣ֙ݚȜʰ @ >Ѻε2PON5 ǿۊ}z}z uvwuwvz{v4̛w]Ѡϗ,0P ˬֲѮ ɫߌcӚύ֮ԯƕֿ6)yճѾ~'6ވLJx㶑qӉ φ wz)"oԩs~ūxs޽ի%yĈwƙۈ^ߍ{{ǃvqɁ㥢{vrv! 㧕᥉Őӹ뼻( ߖȪܖ\I/(Oך ڞީֽُܤr׮,{(՞ץޣd8ĥ әd֏씶Φ ۱З٤چ'ۍsҡƶȩ,'){໰ݴװP{{SqڛaտWٌp׷R^}zSr֛aտWïٍo׸X_}ySsڠAdسSri[c!Z60מ Cũu wʣޚ>)2ѹ׊ ˽ ɰЗ 򹏔|ڿ¿ ։  ೉(Ӈ׌ɴ˩̓ s/M'oضSP囚΁֓ׯȁצ҆؜΁֔֜ȁͫצ҆؜΂֔۝_֌֠~?C8ߏi#)yNSݙ($ ́֎؁U'3 ۚМ 䓭Ռv y׈ ч蒐)-ɴͧdB_'ճPՑک᪙՚ф[BǟU$ޕCs&  ݋K ыO+V  ِៈBڈgQޓr_А ӎ݋wƮ׾w$}'^GŎ͵߻ݳ׭P߾ՋثتЉۭ̆u }b'8 ׏cӥߪ{9=.U ò ?ࠇއdΏL;Ѯ}͏幻эӊ;ɘߏ6[N8&ԉoBP߿Ë՛ثռճ٬a! m"(ɂ@ڊ<ɑ뱗@/VĢ &o➊ġݶ 峏 sݎ ڿE-ʩסןs͞ ݵڮӨPׯу٘ ٝ&פߜ=GצJWgug똳D.q ײĶ ߳Ŋܻj` 使þ Žҕ yܖܝٔǟo?N ߌ P῿жջƺѳ û̶ ԵԿѶռהƹѸĻͷԶѷռӒ&Ӻ٘t6X9[ɆwhF&UĹ߂12x +T ph މÓ؛k*o'l97ܶܭեPih8]{܏Jֹ?|\ٲ8Gkg8_|~ߑIֻ>m~[س3~Hlf9_yȍIMΊ˂]I9-\ $M4}ʩǫ܏(31~謭~6 凙ӏØޮ |ݯ(ϝҫݞמ wVzϛPӽ տϦُҥտֲɇͽm kz~Ip*NǾْ#u73Ɖ8 r݋ ؊s ي| .ȚôѕIGR#⪂ ^ثݴڬPڮֶٟגּܟ>}ψ SǖƔU }az|-9Ƌ´̉\ļ^qД ȓ񭃾͍ɿnǔ< ͋ͥxYYLض˂ՔʄֽfNc;"ꔞ稜 Όj/7 ŻulNڌ߄ܕ:f㋵<뫉&e9QݨΦݰD3Ã֓ʅ׷ֹ۔FG Ҙ#?wʓ 5c궡qٵ ͈j2@诰 }m߲ԏ>f䡯ۂӎѲPԳĉ봊"غɢѡӕ{t6 a`ݙ9%ٺثַ֝֞n#JAޘ VEcM ΑO fǟ]EP P1Kړ÷mz²ḣԺƂ񯅱򺗎ׯ݉'׫ޜ̓ w)gԵWɇѼ޹ޏ%sn@dܒQտEڃbس?MpmAۧjܔP޶Eڅbڑ-NqkAfقߕOTߓAkߘ {xrpzʩ~=πԡ 뗬H0Iܒm:3l׼͡ӊ 򘘳ڇ ״vꞕ_݆ӌ U앧ˍN4u![ߛ.íϕգַʖձŕњ֩ϙڤָăʖձ׌њ֩ϕդ׸՝ڋܬ_ ߘ PdځɧۗdВϑ} J0a ɓ·h# Ô  ތh𽳅ؾ\hό 1jD.׸́ щݦʌ&b|ޘ 2IìśSThߐ#NEǾ 㾚 80nLXCBpӶ Ӎ~۸ݳ 苬[Tˬ¿úh UlѤޏ1MH8.ԶÃֻחվٷb@y}3՟}Uψ#hL=ż͈읚7/lҫSW}P ϵvҀ `i⊛ƴ^쓥ty49µәԌ<.‘ƒا̆ײۏc$ WH]V a Ͳ='pkމڭ>.޿/ۘW̋ ͔s씰ɤi멆Ց4޹l?R.֫}҈Äۣ`(K1Q'%U囓ȗ юw22߷' Va\ۏЛ΋ﳴ ͣ𻐓漄᧊θġÆe%v.Ɩrֈب}tם־ryݔar։Ã}tמɇtzْs֎uت|׀e&soʦVi]w+ȓƕ ْߐyA-*頋+ = cW/ԕvُ ޙ˕ґǥ؉ѓD$ʬ֨Ţ߃{% .lja{١ndؓz׺`jѥY~a|Ȃmdؔzװ`jچaփQ٣lq8H؝+%1뽉^w ֵ̿üߊ;-)ه㐐5&ُ̗ˋ͜猻䙥ޣֆy Ըм!/(յ̻@Fl8w,ݶ.նǁ֒ ҋȊcߗ]4̘B2nӖǾtݐ4">7JH iÆ쳑哶Ӈ{R fՊΪ Ծ%-ңҭٓÖÔ l.գÃɄת֯٭ݘ 3jq. V˨ɤˎꞑ&Ɖ܉˾85Ԕv8ֿt ;ކ‹؍ַɅFֶnw Έ 蟑z%ٗⳖij WBGݵ.־‚ֻԑ֫٩T'u:`IΚ̕ħM6Β ϠӒƊ'K|V6-53Hudn 7:ß ㍪ϛԎهі'5mv֔Ό Ѱ0ғãW&~.٬ץΊ ۚގ 5Q w=ֽ ୻ ͼ߭}04_ϊP2(2;,(;95,*6V ǭ E߮ Y_5# 񜑕ʚֵ̎õ8Ըղӣڃdc0Y͊ӏ׫ lxܲ.ϛسՋֲ m7R bu@ɕ+X  ᠍ >2^9+1N~ހبwJ/+D ψN =.䣞 ݵ'v6蝑ѓ™ǗgS]5.qk<`}ܑMֺC~_ز<ƈOmj`畍ͣ⸄ טɕԌ̂ᒆ뫇ҲfP<_ܮ.dž\xڞi_ّzъݻ[eۃ᪄\yڠi_Ɗs|׺[fۃ\yڠh dlT%5K_§v:ۜ&Ͻݩo ֙ ޷-O1L֖ʻ 2wxk2r橧֑Ӓ͑ ֳӱϺ֐؏禽 v폳 Ԯ9 q.Ɣoևا{sנ׽oxِoֈبzsь־oxِt։ةz kxN2ߒ*ܴ˨։ SӚw -ׇ[,X* 5݆q؊⦟鬁 ƫ֖ҊӃ ӌո)ISGaܮ. ҒೄҎߐ ֧A=ҡ[f׳ЙWX ׆Β`饘ŋ2X6C݈vϼِӖΒЪ޺ أڝۋ 阜rtpk>!.֍ڪЍج ֕ f LOy&૝ 69챖 f/o+zʶĶˉŬу!Et?婟')gD3/wڍǥ Ɋ刨wޥ/E;.՚ԠэՌ#asCg̘Ę𥇮 @> 읩݇=<0[ƈȰ޿˥筯犳һx\鸙؄G`0z .8ؓvy爰 ӵܿzE/ڮ.٢˒ ҕב Ԑܴ`"ߎevՊჴLEΕΛ%?<ҧRߙ+rȬEGʺѠ駇Σvm𙑣dL%直яJ{t^QQvXԷ .m ۮC40/ϓֶ֡˒׳гœӖȄثϓַ֡ц]ְŒӖרָ֢֞ m_$i0*֌;9í7|N/Q?D 韦h^ ˗Ͽ-gd0O?4,R͉ɜ юڊoҀiC9ު<{rFgەVּK݃eصEXtqFhۗVѐOمeصESupخHiۗU @;GM=Ԓš7ъ|։ߧΘ:D]+ϑ仼غ ˧rj5r T@OSfƔ遼1P*^.= ΃ ԢɊعվ^#,r(q$ƈR1ڏٌea/Y{྄Fֽ5|Uٰ.?ȕ;e0Zvݎ@Ɖ8g$̘%㵥  㑙쥵 ['43*逸 ⶈEDߊT*붩Uܾκ墣%֛̑ߍɓ5fᶟ๽ݎŏՏҞُꅬĕ߅<)[.ߤ.9'#Ѹӿǻ~Ŀ‚"ѸðɻϹž͸DžѸӿǻ֯ѓ \'זی{Ɠ]&ېy _dߧ푴Ȟʄ\5ɉgYՎyߤcДᴠԇǁ׏ΞṶ̈́oبؿ ҽس٘}6Sg Rbކĕ֜iFm U nTX -곊ͶъCЌ뼣˖ʧ񇞢鉔y᳔ȥΧٟ 8Ӛۘ o=!ߧ<ǁ٬ưםω"n,H8ŗyڏӎJ ϓܥI1 Œъ wٳ»ٚ)̙͆ ٛB:5C3ߧ:ᘙۯռQ4j? }[ZГʚךFدy+`>f 㩶!z .⭗نŞ ߌ׈΍%~Dgzۗa4ڧJ~Փױ}ǁܑZ~ъ˩Wbӂ֔׮ǁצҼؚ֔ׯً֥BEAz0)ՓΤȨ↸zeH/ ' {jЖn md.؁Ā Π㠓 ەedB9UmڤzaxOoۜ-SװVtضNDez~Opۚ]SٌmٽF[{vOqۛ\׊b8T Nކ괻E Șu^29 *h ^͘њ/ ؒФ ka.Œޓ Ѡȃ *F*Ծ )~R׵վ~ռϫ NjSNq_Ь  7• ̍`2:sߒAׂȖ[&뎤+ƒ˓ ؐ͜Ɗ؀Tڈ%Cޣ}Tʁ́Щ ڜՕd/×ފ ~ŏғؠB3;  G21 ׅ̑g ؽ-;ؒ ůZ݉ en8aSIYi}T֝՘ Ġ l v әYˬ ೖC *1 HӅđW38m Ίɏɥdžt]Ρ ࠥZͽh hJ,!y6}Tֹ̈́ә ɰ OG; z*6ލξ =&=E LڕuΝhrҧפ˕ԟޒ }g ܃ By騣Ҡܰ; c٧{3ݢ}WżбոخƶѰъԎtԱԼбոĵԲӽ˱ԱԼѲոŷ ׭3KC̔5- Q‘b}ۈ i2-=9mBӊdpØŠʾ- 7bꆲϮӭeeAH|}`rh8^{҅JֺB}\ӛt;Gkg8_zܑIۭ-sۄ^ز7Hlf9`yܗ/ W7+X认Šá?ŽԓS0ʎlřšw ك܏ᰞ. ő 8ߏՌ{Ã)^<}U٪ׯΐ"ͷx ֲ8͏Ю推ώ4ϔƿ쉇ۊ_Ə ҟ陌؋ sѿެ.ہ ۸'?!ة g< ˼}TȀءט¯٧֮#6 ߻՞ܥˡ ޑ]ymȄⵍ}Y҉ Ԋ Ȫʑ ҐB:䗐 Kw ㇯T&䚭ʟҡ҈賏4⧔ސyت zԇc=/ǃԅ?Կפִ ЧƄ Ȍn)sۏ7Փ ܽ۩R Z$`XQ ēȠ"ӌϹꌾỵOVdžp%ɇ)69ȃ⚱7ئч֏ ҫվ ֯c,,o"֊ ުވL ݍ=Ԡ~{6\s1뉄դkѐوljƦѩ˲ĴZ˥pιgьvw 2jȇש 4d„ᣘ>lՖ]٦xڹoɃֽ͜lqo܎mօ٧xo؛ֽluَnچ٧w חT(.k=~ڎ؅`X 6͘mO "T ) ;71ZФRd͐Lj$ʕɈ۸!뜑ٛԲjӒˬۚАadd Ծƅ~-Ņʉ>fʊu٣sܥiڣۗ~׻fSڊgր٤riؘ~׼foڊiׁ٥r ͅL* 珲 ϦF߭K2t ݯa j<#Ѥ˫ ڎ ݘwԟt$ڒȥG ϚkL -됪މ`k㱫觨y΋PE%ƃڌ6ֿҍ˂իʓ׮6L. H܎ب 撩󘒻84iԎgb篏 ّџwﲤјݒִ_؆EJ֞ᾁ⭟6֙ڟ΂ ֳ#Xx4ʔ 똝R47ps < ы× K)Y1o˾ ς䑡飌 ܀2 颂 о ZG█擶 <RҔK/1 Ƞຕ8֛ЖȻػӳ ͪ׿of(^F δώˣ̰޵~:3&E ޓsЈ麇5a7  ߙg ] 餉ǎ9̍ߊʫϕvյר#K> ˭ƍ}D7q:֜e|ܐPֹG}]־@Hli:`{ܒKֺA]س9IرMg;azܖA٨h%̦MORۨщK0Ʌ ࡳՉ G,84<͚Ǽް׍Ö d淭$d߰Ȑ©ь֝l݇קجA  »߿L;Ь֛éЩս̆ЫԫոЬճ°Ш)սʫٯսЬճq٪i"ڑ_AǥքmkeƉ Mߎ Д:8tk{O96P߽TQ{z̚g7Њafw~ 9Sщـ2-g,ź ⯚<֛Ƌˇԑӵخ٭~L/¥ʥ̨ 消* ğƤHvY(Iu 3Ԑ+ 5LϘ ߔL՟fhΓ˹~F叓ݽr҃Ւv֬ձG5>Ϫ ص⭝t F֛ ַֺֹ Գ݋5T#bęXbcTమʺpx &W>'!/0f.ы&ؖȌԄ ӗ i%ч!4A΍ݘ֚ ֻ֣֓ Ȩх}5T B̌[ {:v1]0 薌 ̵Ƞ]|p ʞΈʩ鸉5fղٞ 4vǂۏ;"֭ۨآ̀һ٣ }5TÛ霜\۩þ헙;ߨmȹEى1Xl ۺx 쩊ކبӋu-$Ńۆ}BKUּtڠ8?ٔH׸T`~{UtڝcYڔuЧE`zUu޾ϡb 6W=-b ˜  >Ż z*Y|i] Է˿ˋ ΋n\͋ r.?G4ӇŠ}?bvÎخSOٛLֿv~ٔv֍ثy҂Nyٕw֎чݫ^/;֕+߭Pт e ,5 U0Xܱ ¯Œ6ŚԳ݃#^Һȳ7[ۑ㛢8"ˆۤ֓Ïįݓ:C`ECזV:)iLһV=+ UGmtɃ1V#,ۑ ֬Ƌs*ΡMQܕ ’L4/Xך1v࣐؋9Ѝ֛Ԍ֦ ־ =EΡ ׾슄z'Ӏѭ{w~O_"!vĎ ~+tݒHғ׶أӐ Ăק 6i#@̈́߿:ٖՏԌ֎ ב(Gh˛ȥ怔ˌmӹ Nq陛 ܊ k(wpǢj{{exv춘0+ އ B9-ڊᘬBנؓ֐ԌĪ ͇ ֙HřiN˥ ̃šk櫒 /bC䭖 ߋm( w ܍ ׈̕ ͗~bb H AֺJQ᲋Յ}cG΍`׸b`rÍҐפύ֝ʧfŽ֭Čӑפύِuֵ -Hڒ㔠²ѣ&iݯىQdԩm( F{ͫáaË9ђׁN v٥+ӂṍ}eIEۚ25ZdصHUvsIh`]ֽNهhضHVwrJLۙW ־r Ĵ;*ɾm*R lΈߏߟ˼š>݉ƻǾäΣ "T`7n3.a?ߗ݋[xՖי٤Ռ Ƞ׬ ֿݕ>`˓ٌ|\0۾܍  ߧe'i8Ɋ̡ɨ쾢׎IГ Ϝđ܉ /s9B0/ Ăງ[xحײֿ֎ ʝԉ '߈庺Ѿ~f"ʸv،ɜُȑCT|ӒEz LJ̈澸ѬТτž[RѿÎο{R79hW.2[݋݌[vÇłֺ֣Ѫֺ ֯ Ҕԍ%c蒖WY \=@2y혺ёΉȥl'~'H͛f:υñՇ ʔr oŞчЅ )J`"FZhD> Hoʽ]0=ֺQ㴋໇[z؋؍־ Ïؖ ֝d֓vD,rʕƊǨղ j*e߇űywЛ ݈—㎐͍Ԃp<|E;,Sw< )f) ޝ%>l ⽃ט ʿߏ\h"ѽǐŦѷtνֲ}Ͼ νѽŁɿ ֚ FHݏͷ*箞׳&ṣ 쨜 N4οo'ɍu 횒ȉՋ ǎY]*gO2>e0$?/ ~zҳC:bڳƆ ̈bop/[f݋EÇ׼<,ٰ/>eaٺ6YxݍAֽ5|Uٰ.?f`0߮Yvݎ@ ՕoID3Ԗ f[o Gǥ Ѕܻ £98אƕGɟ޻猥ʻۖζźՉ֦ЎȌi#pOՁuĪowVBcI5Eҙ) XᬒW%$p"ѽÈӆ¥Ⱦν.Ł׽Ͼνѽԍɿ ՕpIDƻ ᔢ޹g❗y G؋Ϋʆɤ䴐 " M8˖eۉի Ҏɘ@  Т ݘȓkf#G7zAs HKYE28B(6ۡ*lǃDŽۏ~ܞ֯ڹۯʁ΃ ՕpIDۑ%0OϽ+efa[۫ݐ 稾 Eoɛ)zҍˑ"r蕋· ᭊޮ߿މ܋ ϩϮԝՋڋǔ#wܟܽDd3OصhY<3 㪝⽃Ӄ_vռЁ˂ыזռ ՕpIDũ+4T|gǤ܊~ L2 äė{9׫ߏ  ݄Ͻȍ#%+tF{ET?@Ϗ3);J)bڮ*ܓ՞ᕱ߷Vzъעҍֲש ҕvKBݗۯǿѽ#ݭ|3ĴǢ  /R շ@7 ўբaEllȗ¸¹ ֖͝Ď̶6c=ܬ׺8'M1p8־DH42sp<Nڍύ5Pݍ҉}p:_|ֺRQֺADždOز:ٳJr>:`{ܒKֺA]س9Img1qazܒJ &^˭dïߏۀ >p더Ο垝տư~!DбӋť ʻڛćÇ} # ѯ۟ˠ򺣕9xԭFd4Ń҉' ȃ؎ܾ{ԉϲؤ &eͨŨ  ﷓ / ߘ ˛r 0C ޻㛾чk踈ϊ 瑚 YVފ  ﯇ޱ9Zǫ]aʟ{0Ch֕nkj ڂ -]җ-86:\}˱c SնV9ۆᒩ.ڟָՔڈ֬ Փr^$:B翥 ڮO ⾹qƩAI^׊fž ޤǍӍ ε ୃ٨2'ʶ=poCp樯n[IˇĂ2֥ ̈տ׬վʃ^$%݁湍䖯ʽƯ[] `/防 ׉p0 Ҫ(Gؚ&ʼnfh `mɠҦ,琳 ʫ;s=QPߩ&T%dݒv+Eau0y_PֽՌՌɊֹ҆^$%ԍԾnwr}TfͯtC bAߔ䐲 1c,Ïڙj~ܣ 蚝ņ  ᯈ `.@*wf!ōh݊pC01WOKᾂŃV{ Nj ԍ״ً֝ ֜^$Yɝ޳ٞʜϔ #&3ʬ ֌V0x݈ш.y(XΪЕ뭔 P4WvxOl# .z<GκND58K2ڋ᠗|Pef٥jimxu]oڊ٩gր٤riؘ~׼foڊ֔lց٥u^$ Ӱ웏`k\d|䎓߮ޡV,󹡓N8G Gy)[^׵: 9IH욢P6-1ᥓ؎|Pgkք٦zn~rډUtڍָlօ٦wn؛ֽkẗَoօ٧z^$^ َe}2/ֽ׶͉֚ʁё˅]2,o oسܑaQădm{zzak}ʤK-~v.xؐɪ7E̞ي і   w i gY xa"ׅឦ"ּ֚֗Ă٭ґվ.82,o׻늋{W Āokknʤَ͒\=qn4׻'ù؈&] ꌑ ؉ǷL  Ľѻǩ0eI9ve؀yKEډń༓t^ڿҋ֏ ЊǏ׵9T-,oBHᮍ VV*ãʤะ!bu%ޮ4;  Аsԩkyזߥ ߱rύ ȇҒ<} rlAϟ֮-r`؉ؘےL.ч(ҎɫE %F, 6987" 7Maxv{Ad׏יhʇ̼ةڽćՓژܠ·֘ײɈ×psȋҋנχԛڌ1-NޕӔԏ2ֆ·ȉ{`ēmi |ТP15Sͤ{ ~̧씻ce{ 뗎ȑĖՌ. 9  A ȋ 㲪|UCiEEdj)N{ȱy{R78:- -&zNxjӹbiWyߔYĎa~Noۚ]տUڎpطMZwKJa+[M1ӟTַڊp  tȌ G54:3`\6༡ëϟqz}? ٫̻w>+칐R,1̸ˊ%RbO$Dy{#ZcK624%(546+>IFEBXѩdHJKB  9TNMQMb_}Wfhy ܟz#„(Xn~_P®˒n@'t tƗoOgywQ0^ 69FAh nj䴣ܟܘ\Ö7﷈瓉ⲍ애)ׁ&4Y0Fsílpr~YGJN8 323@DCDCbljljyغľ^]^aP !"  $979774RsrrqorҚɹH-3˄Z̘ ŐWƩ¾ xnjߧe4HXcWh! ) >a7G 㚟에탒欵@'5rʔ׭26*13LͽI)aSҠ4;nik_5125/0156Vhf`ڞъٯ}r>?;889:-+)Eca_zlaټzI'+Ewج xw`éےƧ㷔mfk ˻ iذ 7 и ԅЇ • 𗭢 +WҐWƠ빸]2=X0GoGƴޢ!դjm o?P\5/EF G>0.,//0+BFEFKSɪx孎Ӭ ɂԿQurWREFH0  AZ?/%=VT ?g"]㇤ṽ{ݜ sq`mşOǨmj ʺs26 Iɢߚ Á6܌܍ ŷ淴>oprl1jz)G&%qlpy·]cD~3v@*ƈdk0m9NKJ32'<&?CCE(9GEBYGNnkvpjnkvƳ|eZ]`?!" kbIƛtbnrqrАnj ֽۺᢡΠdͷڧ75 ͅ g̐ ė ߰˂쬖 ޲ҞR տ"Ώ%ibiĿM5|qnoǵԵ׺[ ^+?H ; ٿ'ܯ9!…д]wnAmjk=qX1434"&ο㥎suyR6;8:. \ dWͼsejȓȡ ꡑԓռӈO-} 1y=^ꬩΩ cx2̄ ؎ɋɕ瀸oͦꜲ)0ϜnG.xmkzƬ ȕؾ١nב׼!עEk߹ܑ-┮c7 ㆀ͜ڋ6Odchږ؏ߋ  һv,O ^1% _{6^i ǹ ȝp| ԒjtUv,vylPcQ>2oqz&&lozzlhuϬʁǧôFЂب&㭉Ejʌ[Μljಉ 5TǛNHWіz ƖŜ v}ʲ،`k 𞷥2O\oʏõڹ׆|ʐ x 4ɺmy ̞~6 ø.2,rx5sݛ)dmptzoh|ѩ}פ׬ןƁLjӄ)t ̺㣝ȃ5T屉Ƌ@f udlmmiklgsvfl řY l̙gƖΩP5x3Lʠ)`؍ |ޠޫez⼃ 騈 4݌1ΖE~0C2̾}smlyiiý֏"رՍبֻ2Ȋ ع΁Ɓ5TȄ ֝uagomp{zyxfԨ}~ ،`Ϥ[ڵ}̘ɱ@2 = و ѫ쑦ԡㆰܕ!抬ϻ#a9;PM$wrjt tkryԯ٢׹خۜ}8Ȇ ސᙥ6TȄ ڊvrqpqٖ HNwԜ^(n O5 &ģ ٥w8e &ȿ蔗¤~ *̋ü}L$}s3,vʷyqjwjp̒ػхҌ ٟ؍"KˌPݘⲛ_,*Yڐ Y{k ɾѥ N ͊2t#Ծ{_Ζx"7Yޅχܜ-U+!,Uʵli|ûtm׮׽ר إ֗ ŀݏڳᬜfIR%\LPSOݲ߳ҳƱو޳ܬdE,.)A q֓Ԇ𺏝ߦaeݹ}ґ (ɪyjxpt~ؤ } 5?ƓšڵN{Ơ෍&`bҎ﯈ 緿l]2qbd؆7 ʗG=ӚWrL ؅堗≞ɨ͌߱ωNmǧݪ׿olxipъ ؚ֩מ ߃ӯŬ⍳ v^$=٦Ōܹͺ ܹR G3켸Y s`ƣչe^wϤۈgֺ#гqkphyā ׌φЃ~權⨍dxʍ嗖ﱆèe)lɋ (]r΋ 0Zc߇pOޮޤ̯mp|}isǠ ņשֲS?򝍮\ ٣X"ЌʌQ.ˆ &we貲ްа˨ ްň!Qp𣘚ïЯᰳǓב̇꨹Ǒg𚙽Ћ䤑݈͋ͯunormG~ڲؙ҄ժ۠ԉԃ݅ ϭ *`l݈ T ˯80ufr ⋳ĺ υ Ӧ熑ƒˣd 20ê׬ ţtfurroʢ†ЋDv)ĊՃǬƢ ,qx$+Ōɩ⽿ݻϼ ̽𲊖Z:SDfaɽƛ룂 곗 ߻Ҍϙˆڗн͊, ͺ~krźyqHܠ ښ1M\ۆ݉ٿ6 ͸c+,nnm& % o/½η_뢻ڐL ըƌ뚯ٍ잱Ǐ t;ز֪Ȫwvjt߷uxh֪<ŏ߃ӻN)+mՏݜǾサ⺻ֹ˵ *~Χȝzɧ ﹞Î۷亻ع¤̠ÈЎ;mHWMBrֿͳoGב ڼկ ¶ڜ;*У!U Qɢۇߗ ݈.hƻa5֠ 遪ﶛɅ٢éĚЃ!-{ߴY ϊS(X{wˏxqՇ'xˋՈ词۔H?ì̋׌ύ xÏ&Αʦ6Q͑\5zZi 䖜轈׌ ɞᒜ& Kמ­+߱ YrrtI?껎ԉ =Ѳ˶ ்%YĨԴd ǨX$˝ ܩậua_r̜졖bߒE7_ĶͿ޸ܽі(oȷpnٱ\OqpJzy]ˉxӽ¯$XʓF_/g̕޲ןȦ좛˔t  ghс^rۑ۞ vԡey Ƹhӗt~gT_ǿRٜ-ae~ʬ{bc|V^V̍&Xm%Jcم ֡Ш+  𗡪iGeՍḗΟ vp֌֏ˡʐlCǛʓ҈X ;۟fŏʡ{oy܍ѽƹٝмXདef'ʙʅ> 5Z暗 dzϵт‘{ͦ~oRʝό| ̘β+GHڿѾ޼ » w;黐ȣdZԮ۪^kǗҽōⱛj$ް - ܉ ڕ?OЙȃے ˢ о_}٠ Ʃi!ъ.ލޖ;6ݏ|yohRsJ~_Yõƶ~ݘ `& MvԍwѯY9u ͊  jЙԘ葀|̔2үɶݴir`2ΐ=`ЖyʿXW]nҥzn6Hã|ᆮ ̛i!շ~Ҿd~ԅ s² ǥyԈ؆򗌦݈Cr{͝׸a'،Ћorzɻۏ5T͌ޚM`~l̷̘rRۊCيdp ^̶ũΚN ްܷ׳sCw5ؠo[|ͳԊ6Tʠ؎ /5 ˑQޡǛ3_eAHZؒ۳@ vƾ  ĔūČ֔ÓE ՘ȝƏňۇ~٤zߵADM`eʆ囚ĥɖw-s _hYfgݬƸ–Rȥܧ۰ժ ̤Ϻ(Մ&lϊƍƍڱĝ᪗ADq`lp}Ә 䘓خg*|"̌jvԵ쪆`=欭Ϻ'Ҟy΋nj풾͌| җՠޓjɥbΊ~ɒr^3]Aģё˱ ǖ빑ϐۉbLǡ0MLxӴݽֲܶ]&X;tٍ΋Ǎ֌ʖV ߖ企΀ fɥb|/G Ы(ډ߶𽋽³ Ͱ 񴧩󞔡óӓηؐҝڇЭ.NEΊƍЋІ ❁̑஖t ޘɥ7 62ⶫⴇ܇ ݌ԭ  蔹ӼғLJϞ>Ӫkδӷ޽ٹҷ3ݕyݗL%Β΋nj؊߽ ߘʳ{㍲I? 몚әƻ*苫þ~}з ܟ萒˸۴җ䵙ŵ ئKà}оߖ4qȬO4΋Î呴፪Ց ^ߟ x̝{ ὈIEȒ4c-A,yǧʣƔ9DڑƆߗኝ Ⱦأ׎˔CÕѿǿۿԹw&څbג5m礲ЊԇÈ ̓ ϊٗۊߍܶw ʀ J?ɽ S|ȖS9Xbn ҁɵ便 Ŕ퇿º;ҹؼû߾ٺӸ%j0ʍڋكԅϊ ȊڵzƟT#'gL̘և X— ODFhnݞٞ_f5‰ ݏ׏ ٝ޺ دĻȺqs៳'J8@،䊳ۚ Ö֒Ὴ 掗Ϲx ̦N14pŠ0 o  g/_hcIk­ ڤ 搜B ʌ Ă"܇Ԑ'߉Ưڳ ޺ٶѳ䄘&iʵ׈ɍƎiڢ } εP/%ZLM(cDȻٷ¦ 󍢨Ƶ޳඲͟i$  񬈺͵̄Ȟ@F&#MՋΏζ OZzJ G7,6~;zFЙΒ(x䈴cD̗ ׫ մݧ݄u_ٌڷ۱ ޺۳ կbHHڑϬƑ͆˥ d(^ {ql S}㍽ â ⻧ȝ {%E輮ևľ␬ы ͓  މ 乬"ÖXҺҍēމʏۄYa }ǎqh ҙN/2r"΋xuUOgz TL9ʕލ_}ˁ²ۆJY߸ۮ ը{|ԙʒۊ }ͣimn+捱ɈN+̋榓̸ṗu`^xY}Zpȧ 㺶rcǑѹфЇ֏ޥ Cӹ㴪ʾ쒣Ўȃە 鞂ا^$bz̈́mȌΗ3̌~ɸ⻠¸nfaؖM*٢/W ȑ错މ j_ܚ-yy ۾8ǜRϜč;ւwi^$učw/Ȍ~4Ηŵ±ȩ࿓ƵTv0rt̜ ͻ˹Ց{s T%d047ДĢ1߱ 眒«gی  Ga$F7AHLyu^vüʍ 1Z͢֋ب꜐Ԓ}nޖ ؝ҝ ڒJك״JݑיҘ Ȩ٩~;")%%F0/8G}抳i~Jn{qvssL %dOu,#8+ͱͭªf_+L8ݪe+͢ѱȌ}ԌԐًjh|xڛ )Vۦܦf*$ΗǂzٻP%L='gݘ&=(q&+ŭݘI ",Vrđ#%5]Uj/-/..%`̸vrĘ,OԠ\xrm-݄Ƅ_-(.9iϡȌI捚ʀH ߙ go@U?"ُωۇŔIsЎߕG穕Ƞ}v7zc%}Ҋ\ـ?&/uvʼ˻U}Ah黔U jT|ȖiJLJ虗7T uɭx7ƸRa濜9`wB0}ۊ ܸžоƑ ½̼ ƾ²=' ӹ3pž !ۊ߂ÓޓύݒuzCԺ@+柫'Z]|dƽUFЩӭ]ɣ.oqސ_Oz|Y0iiNZѧ&ȾȰq3BU[q~h6LF;7ܓ鴍ЪĴ؎ǁɎ L͟ʩ햱ڈ渜ˆ]kbKTԅ|HLğofxr~^4|w'[#Ў=~شЫݿ<]TXYlǺ䐗ߜ οX_&ݞysnp~wzpso]^}rvA~,8܉ϋФҷ̶쒻Ƈ6˖u\ ҌӉۊ罗P, )|ݡΒp$r̪zrlZ@4acsa˴sa]Dн½YIr G/ͧ}¤rڌɦ/_apUxlRuqkrtp[R*SWۍ  󹍌ڧܧ `ܩ ׌4otٷ ÔYW֊澖׬D ЩĔ V"VrrwwS5Җ&Lc`A~ #Ζ䳙XȻr#ӽٹnH7Puemŵʳ޼Ա0Sf`žR8肱zȢޫԯ=";E9S@$?va!먐ʏݲ񔩫!k௯Րb˿ t4ϪЊ.缗ʖ얕ް֘ ڎ:գrlpq{n)XYwWξv7eȌڿpȍhpǕӵᛸ5žۓh䑊fy~uP]PikCލ鐠ˈFؒҢɬӚЎԕ'&Puy'>÷Ž^sl frƤY\ єɫ}ÄʺΊڂΏ'ӓuyviޤ輏3܃㌨ߏΐ\ȕ]%yՒڛ@pʍYGFUlf(,˿džh_[Xj~ن߁Ơ粴ɶ{ސߍʲ˿|ωב5ROᖐْq=n#蓴럭󤜴ѕՎ W*DVU:,b<} }۪힆CqÈ"ԋԈӢ֒ yvt\_u֐(-F"凯*< ӊϘFՂ 0h*"8R*Sr<1}ފlpͅ 7̗ˣϻ żཌྷ쿽͉҇Alͫ ޕj]҆ Os1J⏘чĎۇܑƧƅ`[u{m"$H;oR Ѥ3P$S5)@f~Ҫ~ 4·ȗ ➐۶ 푥9ђKXŌ (줒!훭ԏƧOߺzϒݓzm/M'"g:ɨ7ԎY1N̷۾㲰͓!˓֫įﴱƞȪˮ ׍Η\z؋Åbp㼇Džڊ!|ɱݴƑɦ QK5{k :  O4%hȏRfc?Usv+]ʒ_ɵ~̌ޑ؇ Ȑ ̅|0騭ۡϚ䖓Zϓ锚뜈 Յ݄Ԋ¡ bwU$5S~ լE⍻c& iRŗu΢epԐ1(n۵ӷ ̼ڸл 옍ػϼ伽ۻ V/8ދYn𴍖&5χπ嬔v֨ڕĩkԷK4ͭۈ)ކY~/'Yw%D^KɌQi ßZ;-5_#޹gx⾖ūȑՙ˝̖ꏤ͖ <ljW#h⯇٣a44Ոɐͅ}ܵˍƍӹ7t*Y  zp-b靈74v s/Fmʃ| ALAk[c͜~{xuxq~lyΑⷹȆدնɷ񻸳ĄΩεƒ츷L&򹆬 %Xˉɑzޝڙ^-5Ōّ҄#{{̜ٔ‹thș#cԓ{#,tŕxae# f ӎV +hȈފГ J=غ Ǔïr9PIzɱ݄ ۋҶ%߫ѕ$艺ވKDœ ֈQҶRϐ!ʗUJ*Ď܉͇ ʹ²Ԍ jˌ(`@qۼ~Ԕʦ+Ǎ D j>`"( $[ëyldw*3}=ܤswyM^l9u˺܆ɖȸ 3&ər{Ŵף ދJam؏&g։ԡΤ9ب񱌙8*)ᓞrpz}ˋ&zPhsa ں},z9VĘpa'0҆MU (wf ּXHw_d[l b%&㱢Շ ߡǨ׉v%6C֋ˀƚݣLRm沤LԮ߲7ȇ Ьĥ.1uꐦ׾ל­ؙV% ڰF ۫Σ 0n־Љ`ЊΌڑ¬,[qؓ䟖_ϕ ӎ~%O ޞO(5|ǿƺ~1eTNNu}y~ԌÃѷ.ƹ  ȟїٍӘSܶ/徑`Wr0 *lǙĊҏҁґlɛߖ m? Ŗ6韈Z㘩|١>' ߬g.bBˑ"̐GF]bPИ¿ڶ͌㒼Ԥٟ鳮 ,>ēsBp4кX :yפʹᙧ拪!sԍѧĔ r+؊ ٛ3ޫ6 𵅩W ՓŰ=܍ԌLONӢzT篴*vﭧ ⊴އà—ų ،w7>(LW5خK͓>3ޫݪ⓬$꒷޺k͖񔕩ݙ h&s+ ؔǨc?݉ݑ𳪹뽟xw풞 : Ö׋4z{o xH͚Ϋܙ܇ ꦐϋǢ絊GSด=Ցg;)3;`Jm԰Z@ڶk/P體ٝܓא ݍħڃ֕ĸɐ LA9`!Чئ~^͑ j ̆χm"CˤƟάQyXʤv 힔 ڿkuʝ֌݈󴅶ԏƐI௓i>"^{RpgP"?^մ긢p؉̋癯꒞ɒً ׎I$4TA+ދ_ZrrBq(ր ϥ sј Åͺ,*3ևǻP Лvp؆ڊ Æ 錵؈籫P̐`wG笵~kي󶓑Ȣܶ*:鞉pYҦݵRٗnȻ͍ɂЌ ߑهu ɗʌҔ+Ѿ5őժ줄 ʈЊ듩˕ݾpד­  ̋v Y^  ㌬ɴ  ៑}:P Ç,㷸˕ͨס ե{p܎ ȷ / kk ځfrɌ癎*ɬĬ؇K מ襆 ߐ҉ф؉héì ˋo'ږTk*ᩆ꩕ ob܌Вc 5;3ŧԞǺ~D͏Ӣ |dulޜ } ^-ѸĈ dz{ʌǏ˪ٲPܤ ц鼧Тìܜh].XЃ| 5Jh+v!~ܭΑՠh_nV҄ߛ 𛙕 ʻ,Ń鑸ԨإzɌҥ﹜Ġ)д޾=˚󴈶鋧ˊ㤚Փ濗HHχ p+Ѡ?Ùҋ܄ՑdDp+݋ҙؔUrQ0;g^VϺpொ ًο 뛫뿑Œǹv4fĞ槉 Ӧ"٥ΪԼסczްۋƃ윒߻ΘՐϣ`"ABȻ힒 -3EʦIJpooߌ ᨞̒O0^ᖾܝ{Ž φʋކ𣈹(ཌྷք̦ү˼֓ŒNJǔ~Փ緣ϠӮ]/Ŋ]<]rɦGʕΑa春͔͑ ʔrM8؜ܒvē ҋ$ ɡ嗬?ƿΓՔݳP˱ว㯛 ֈ졍{elIݾ߇ش ݹ ~d͜~Ϣœٯî b̸ЫF+ѭ矏 ȥՄ]l׺t }.鞶GǺ Б牾Ҽu ШЫO@ם 襎K'᪑ՠ̪Iٶ֋SɈcIJqƬ ޿ ʫ b$ ߨu7);XK 뗶ꄲ ɨn #܈mhʡ囗 aiX: ֏ϗՉƯ7B駝٩5񼡈鶦jͨߗ ϡv(?>谍 2^y 텫覇 ݜ ~䌷갴iBc)7œ ڒ͢#j_ >؆ɲ$ۈț)ѴőȆ'ߛنʊLȍŜ]eeZM° h0,_ﺅٓ.ŪB&o!֕ˑξ ɘyabk?J>hᱚɋ}hV ‹҇Ӎ>%,װܪ̚ ֛ G:sԍݖ 0TGJD$r H䡓̤̉ܓob޳àCl+` ˋȊЗݼ  س갘bM煱𭍘󮆚ݩĢ ǹ õ ԇK `݊Ȍu☼ݙ (Y߈2H#TWwDu*‹ۏ Őy¨b~( ōĴ ȭ"x}d ,zѨe-䶜ศׇʣ~‰˚ĤcG ѻJ\Nݙ yu3I!Ȓu LsØұŕy7ǔrxb}/n齘Զ"㙐ߵ˵^زč^l 顱ﷶ̶ K&̟}ʠЩ}œ 퓤rHݘȦۊ 픡~ iƐ1+ތ,`۞͐ȕJώ覃y<˫ᕒŲץ1V }z<쐿؍Z0c1 ҩε—Ѐzѕ ŎԔɎɮ$ݑښrǽśY޾韋h##/ԋ ݋ݹjɦ >I΅O'Kfa~nuܧy<bzg' ʦs`k}ىBƣے ­{el{ϵV֯Ѐަʌį֋8J%2绍ʈ񻘑z񪎑yOqι簂bGzn皒Ԣԧ鶧  v  T|Enˇ}܊odt:׊ ΍zM(rћ་ɮQ|șޖ⪮˕ Q{ϳQ,᳛ޯΖ݌e کǰ͎2ͣoꑣݍ P*w àȯَ Yl x ׎,Сʐ餇ҍ֊߭U⒝ 𣂗SĘìޙìʇ|}Ѫe  ';֋ M(`όˤ܄Ɖ~.k} Ŋ  Ơɏ̹llܮhvM Ѿ-$ ‚־އr싼%ЦH"& 斛ܖìޙŪC곆ðvɤ LLՁˑ/dҎ˦ LjH$a4T|bx sЕ ÿzxяaоp]qѐ; ҌɄ嗖ɣB ʙìޙߘ꿒-t`"ډ >؉:ɪj]U1y  ˦{fom㴦 늟׍~⏝ΏƁ蠋ڗߣ> S{Qìޙߕi_7I  x8Xri:[ǧꋶɔr+Օѿ_e6؋ 㞟{dhڋ  ϫٌ {͝Qބ ބ$ͺìޙ t ~tz 픶\ ЋHhXte(׌d %>bahフuu ΩԉɆК䴛­ޙv}C< ёW зxXȉf ^63^֋䷺󏸑ԋ݂ڷ7]8y︷ ͢Ԩ ۖή襒%"`㧶 RԶڛښޙ@)]ޓ?Nz&ϐD݇YѾZ_ar㏂ >Něϭڞ r[܊|ֆ 0e ˇꏷ똛ϒԓzs dķޙxvb& ܤޢ Hӟ D́xͭGPt:tx񏩸SVL?Ԡ¾ˡ ᄑ޺}su½ ͼΖ诗$ ˶¬΂Չ )kޙ{xɫ:B 5kr}vFߞݙ |)Ԍz溯 q*ǩϚ؈۸ κٖ !`Cahj|5Ո 㞏Uzӊ ʲ ߃G} ޙN"e 12䷊صnwn)HЮ؛ڬ ֟Ç ߯Ѯîįnc䳴͝  Ӑ#Sorz򮆺͜L Ʀ̫-Y  ޙK\. G+纛⥨󸛑0s ܇bata*nD gƇ  ɆŜɪ䲅dދǦߚ hߔ-S_!aSK啲N? ﶅ̫u(ڎ͗柴e EA쾼 ԍܷݸ˝g;C՜ו˜ͻ Ш7ݡAçޖߎ ٟصTl{hөȆB bꓼ͸ ߆ɠ׾iF:6,--,2MeۈȜ&ݣYэy ϒ嚍ي̖ތ ȵ{ ı ڶ‚7ܫêqs˽}ԥb BHեk%A– ӏ6FM7 l1mD-3=BML K?/+8Z֖yǫʑ%︴ᵷğ]UHoܐ͖Ҳӊ Ǿ2RFհ ʼnǥ· ʮۛg72xޏBR܉ W֋ s{Ss fɘc#z t7*4c جs7.2;Ifx*NJǕؾΓO ޜ띖 ϫꗥ8.ߐW ʮ ޝXߕƉT _ ˈ- ӏ``uCP[}NR`޾S V2,AؐM/$:捭줽 ͵FDИ܃ˡ Ŝ^C ǰuˬ鏬xg/$l ҘՕ؊{ ~ME yjNV 4X0=uB8GkfbϟŸ#Ĩѭ{͋ݎ ׇċ8h ˵ڼF͌Qّ NnՕdɊ{k&r¬`{˙ĒW թHa55 ̅(%8fq叕śŗ񍹕rބaփ豱 ⠍Β5XϨȥӏܕɦ؅ϙۙԖ׋]k!E5{‘sڏ ƙ^VŚՓ`BŌ墝jR/<# J.HՉ扦d欎эʄscBJɧoKʡʨۗܚ؝o~slܒ藤6G&t߄N ԸŻyŚבrR2M7` !#N 褌݇Ŕ#֏p,ӥɝnV[؄ûík  ϴGV!ȫۖɧܮ˶Omеʤ߈ǔ¤ 俿ȿƑ k[ڪy b4 x'"͏򨇒 LJǮР)҃OˮƤ 憯ܡX~P C‹ ۺߝCǢʦڎbՍLɥɯވc$Ј 󽔍ܰ  Ϙsu\鿐ZM(~ iS琭֦ K 슨Љ"ƒݷ 3O,Y Ց dzlʓjΟ1ٟ먃 W ܩՑމz Ùݥ߳ݭǸ²ɜhW%ϕ^"-y-P Ѭ-Ɨdn 3̐Y͉˝ DĠ (ځ s ɩ͒ѵ~fWD:S6BAAC*<兓xǙnԖnȎ諒㢄 e%8@䖋Ⲙōpaؙك󸉳 ˣg LSm٩G>a1.dŕdf  իВ\ 1ב g$޹Џ)9+]ulghew(_ ߕTאЊ֐S"gxלS ԇ縉5 ﮙŒ率߱ɣ[$'*~C+7ܯ&|ڒ.حƭ旓ӷhح ĕѮѮ »е܉]mەáߗwuא由řÉ ˵ ;M·킥 ׉Ġ}ˌ7Jxj(Ӕ聽 q֖ ų Ο̣渘 02ߗRƜj룉ɵԌzܚl 읅 И™ټ۶Ȕ܊5q5Rp׺}\䣒 蝋ߎ a񐬏훭 ؙܸ׈޹ D vuߗ°fN꩙̕Ćj*P7݌z) fK*_왮َb˘ɋȖwpu=G| ed ׎ oȃա㯹 ֕ k;ؐPߗijٖ ×ے :B(ajꑦ ۭžċΎΟߴ)/Z"{Ӵꟓگz픱ڲכdäՎ޳ٲŴ ː՘ E ˃ɟߗ^ٛώĸn  $۸ } ƕ܎@1X1 4+pΎ鄽c֑qΤό ߗ}ۓߔ\{RnZΈܕɐ ﱮҎie(Q Ov1r͍ےxhٗ ԋؓ ۇR ߗĶ͘ܕ_WN ӑ뫙—Ù8zQAa ❗ś֪w֒ ڟȗg蘗`8xWʔvȗ ֡٢>=k\ ΠҍɐԬӯy`(΍̎ ߄ߖߖØҁ 㮄 @8ՀhmǯϽ|v1VǎВˤU ҂Ô0Ձ׋묎񺏔뢓J\Y זǧːϖ٭Sx㹎9 2 iŁ䐺 ѝdK(َ`qڱפ©Ǝiތ 閾݋ɫͿ~|7AڐٙМȊ֋WŊgsӑڽY)B;ǭ䴔&"$[ǩ_uﳣݑVJ݇ԓ iyօ粉ɞ ՠ  ߄ޣÛَ8ɒΊݹ󽓓ʼn蓶޽鴗Մٴ݉͐؉ìۻ®(S{ظʗ¹ T%ߪ︉Ќ*Βǡɔ ښ ь򣒬"ݸ򖔽ү ڷ Ⓟ|茾銭ϝ!Ոԉᕖ㭑ç٥• ՃNJΈ¨όҗȇ ῥ,܇o*}g)V͌±ĉ֖ Kǩّ Ⅷ廭"ۣڱlaÀ⦾  њڎH⍰𿎋ȭܱ֭󮃿ВGGű쵔ؓ o޸AqLtև ͥՒG׌긘ߍəݓخv~ؼtB}ajȽ xG|Ʉͪȭ¢ݡԟFJڊ઻êŚيϥܘϥj`2J0ό fRϣ8xg ÏɓݐⷜǓȰ ¼d~ ܔȘACK܊񿔔ժƇ•V1ї܇ŠףZƧڱ&v 9N׎  Ǟ8̪1#^ ڏfĎǚȗ݇*쿰魳ܺȯsւC 󶰱ϋӅ럱–ůڏĊɰʛ͈צʎ񹇠ƪ˖ ڢ֔:΋ńմ 콣{~᭛ǖMV Œ-L{]𾥡 1b眛벓0ڐሖДpmכּѓⓞ夓ğDŽ⼓ ̗҃ï嶙؁ΓTnΑKI춆eȫXƞ tَGѐ㸆ѹPОxŖϝf52'V Ωޠڟ ˷ڻϣmﮞ׳ü ޮДϏѻȌ衐 份ӽ•Th霦ޕȻѾÔԙєϑҏxǧ추ͤr)$` ƠqRZ N뷗 K \霐]6\^M=*,FR8^ơ%çՈ䈶׏…ꍮxaĊ|ނ㿾똹Ŗ ۚ؉㊸䈌٤x㴏n˚ȒӞXEޖ ª{.] к ޷  _ڃ) ̎čjt ' b͆+)5@Pv6J~ lh㶊p܍Ͻִwxi믿Ϳ·ԏ‡莡܎ۏ{^ޜܝՌ əR$z`Kdړ ^~㐽ƨ˥ne Ӯ˨9 $cMm˛Kd0xhe&NΎ˿䭆^ŋăǒ ~܆םݑ1ݱ޻vߩ:x9H1˺ /ϣ0Ϟ1FĴǶӕ&Ǿuoវ ըɽ 嶸Ƣߝܤ׋ʚݖߋĭ݇ȗW.X'" e@7Jokੈ E ⑗.y+yׯޖ˹'֗؍א柟 ևͽ ӐwddʕyӐlΓ؎ݙʨȒnGqv  Wݬ{!䱋򹕑ǜ7̑ՙ=9֖ 宕צ  zذw ̥ѪŎg肋=ؕ͆ͺ̗Ɲݙ؝ Kw^ˬšڒr.p Н 緱]֑ Ga Ĺ˜+v鋰̻th~‰"吩茬銴˝@BÇIrsƯȝяђeR{ݐU.Jh?ܹ  י,MݭNEumYC@; 즈ؼ  uۙj╧Ϣ@ԕd3ۗvv¢vĄuG^sȑ^Ϫrp"X BIڒ臯ۊNs"9J畓޿rĹ ґƅ0`Ŵ 岜 ̾̕ޘк¢aoř¶ ɻиݸޏDϧV-/v]YM-4135P7:Ij=&9A-7E5h<$Ɖ*'e'0J׋Ȥ90ߖړôxv K~, 튷勴ǻ4͖5b)ߑ𲖪 :4 ͋ 簈 pț渲ΐߏǦDȲ,ȼ}l<'g3tX_[-SM@WIQ(^:L?HkX)=E ѻpАעАH5C <@띺ݏ37 ѐ߬ơּA8 r-_ն̎Ⴛ뢇xЊ [ Ȣ\ژѽޑÕ *͔ʾ´ý 磜EُLh3قiJ>^PC1RedF/>=Uʗ}ޔבҒ_6҈Z #Fb ZDёfы鐱C?ߋ a){ 叺ͨ j`| Ҟ 꽈JƔ󿥸򺓾qlÎvx^9w_ɐěɈ^Ŕƍtydžwҙp`ܒM`%N0{Ѹe.ιӐ"Ɉčو颀պôd4I챀߼a 䫓Ĩπ쾼ݸfꕹ!rjỻÇ̑ìJ̭&֚a-ݘÊʙɒXE͸ZAJԻd W䤯ۮԂ? β䍜Ѕ܁z / ӏΚ 蹛ݫݮڛؗ؃sO}ۦ`ԕ ͼ֔=ތطmv B ̃ ڛ# FZߧޱŲխ)H ¥ E? s칲 ䷴Q͉ ޯщ𵲳ʆ՚ֵ̝ŋuݖٖ֘š؊W|%S(B شK 2ʠwj!c'D- jt ΎՐ ~Ì石˨Ϗ 򶆤“䣤mYܱ؇ǐڊL ȲƛАҵ+W3C?6׷⪉"[ 9ӓ۾ż摒Ɋƺi¼ߘ z?( iﮉacŇהċ ȳdrRІ䲿攠 󵒓Ԍ,Ɓ֕Չߍ駑ԻځϘi s ^|9J䞰TM A죇 /VJ뾝 ko変֊` 䙔lj߈΋ 霢-叠ßڏ̱˸ɼƟŴݝ׈zִ  rE.*U! N6 ])   ڑv˺̹3<mA;Ң  ۫Ѐ{wʾƾu]y҈ ĊZ ޏ^hh.V%936C.e~1/ݫ#G$D=8'}L= Ǯύz ԵʘƟҏ+4VcsT ×x h\  Y?:@ ڄҊd۝꿊󡒊}+j ۗ܌ ⓒ㤂Sşpƈ ҉ ܙx~.׶ 4"6l2͛#¦0,E\OcӎŰȍɚu9v6W!8 ֦< ;jv4Ќ4߰ޏs࿨H2꼿 uݵ噔 륕Ŋ 밂OǞxՁ  ɏw҉.-(Q"~\drw;9MIs_(ܐư6ю܍݈g\ˤ]QCpﷀncr{^߫~㝭-_ʏT}ԲӍ Ջ+6vilkswU)()"L[t 5/0(n'0/9't ߖ접ȿ%*ŗԐ ٞs a Ӵ6:݉ ʜ׮֭U ΍ vސԐk]y߸ċa鮝xcߕझ\㺕J] 'M.[%-'rӸϏpCۍ菦 ⷄȗ򿣧௙ޤ ㈏Әb"Ǘ͏ڊdzًIc 쪀 `kj̒Ϲ`ƨЂ³ Ύ̝ Ԭ ջЙҙ8 ҅ @JW͕䪔m,{娫 ළնҏ쒾ʰּ̉贗 xѲ)<箎cûϋ˻` `䲆盀ΫͿ ݢļØöĭĨ.mԌһרԴ ݌(]&%mq$S U溝cfI E|ֺᯔɡbψšx 9 UtŠȎ^t󵌽@ |܆tvvwۏkrʗk\ʧƨ〈 HЉߦޠ߈}63u Y}$#ACقՊ%717+^Tӄ _τ䜐\C8'{ܔ ᖓ貴Ճ:瀩}a^aZW{Ų衅 qdlŪ㬭َAƊࣙ~}˲ϔ? KCE T 㰚(<Ǝ:ޘ 獧 앶檇Ч&q-ƚǗĦ܈̔$0ᛘТĝңѭ۝ޏ2Ѷӆ 량⒥Ģ ΜT #eyvao鴔 nԑ췓៫˓萝ꗌ$ǣ7Cѐ嗳ÿò¿|…`ch{vqޣtۆ׸d񐌸Ň8ׂį )৊Ö ;.妍ؐVL p fdh|u Ԍܤ 睫ݪ ؤƠJKϑr+ Ꮶ `׉ҧ⨊u¤욘鋼ؚђwƩŭş׈ F.ʋԉ\0#&NÚ]0HBa8Yُ{Zۨ뗪ڙ œžn$ʹʹ:7 ľʞ VѼk]c`bixђޅ֣Рۖːzz˒E7ɌZrr@Ko5t<舿ݱǨ֧̚ (b*k ۍߦe{ S}|Ⱦln ňȀ)uߣΐج ưߖЌC8ݔ~ 󴈕Tt!g| "hgҊݥ l﵄ñն̣ؓǢ =AَG3Įi ҕty ܐ؊(uǨ͟򸊜Ɋjw6C؜닠 絅 A菻`%,jfݎ ؊<߇WßΒڎ-d7T,j ̐ioj ꫊xӘۙlΩϘڟ㨲íg¬ݔ kמ ] ڈ 3.=7 " Wh \ƒ䝺ЕÏ"╖~ﵥ+ठ(4ҽۭ纳Ɩ ڻvv !x޳ڋrm׳ӘpܚÔ (\ I 6㸓쎓AÇ͜ @R(5eڌ؄!Xٓȹ rejƚ׍袠 ҢűӓÉ‘Ҵ ܛ~]Džk Yq[ `%݈ 䤒حl )Tތ8. ۇǤڡ߲ː ڛ笕׍ɖpzo ۔䘐 ؏ Y,I2ZAt{͟ iԳܮ܎)âݦ[8H̽ʸȞ뒚gܙf~ ҍԉ ޟ宆ޘ Ǣ ˦՞ͦȏь -Ow?;Xq %枖   (蒺bS܋\݉V1 䐯ΡœŠ ꪝ ҄w̍t ݽӏ'Ṁˬ✕يȆ èۗR 鏝Z'"Qq5*сَ ֟΢Xw)0vE7>亽r`v۾Ҽؖ—ȔΡż ֽeh ə񡢉⡼ܷܠɍ(ޘߘٜǖɄʦޗ茷ЫGArv ҏY/H" *=5C ȏߚ&pޜ(Eao,wjnx̋mrﺌ ڏ|Է~c絕Ȋʳޙޘۚދ֑܈ؐߗ— 璉)n- څ젝 l$). 鷲Ր ص ߐȼe'75w;9ػҒegsԾË ^fƾp ǥsi}iiǏкOٛܚ܏ڐ뫒λʼe߱  |B2Ѷä状sJb ٻg(lCk}C0 풙֔ᯛﱵT_Iƛy͠xȣ }tݚ̈  iɚz  ™ׅ覆 F[=RChw۴v.嚶Gy顖%ĸi`c<9 ໰ΎNjüv j ىgzfѮٌ އԋۛݙ癗䏷  ~x镸 觇# ] ⮟ u;vmǚ̏ -yÃ+u y}͐ƟӬҋΒ~vطLpǏ ⋖żҟ~įҤ숰  ݱɑ橑u'mUM# Wl ʢGs,J[?9q7*+"5;jlѺvɧS  ฟȡԻ ZʻᤨdΛsY` ẾѺ pƭ͇ ʌĩߏ ̜z4dY!>仢㓺ј&]A 4Վ Ń ̜+j:ٳ5YO-"&#,JNUI(3Urh᫋J ȋڞ c㍀ʾꕱʇ|܈ ʉǧڙܾ!U r鸠⯝ɒ-|9k} nĽ).Vf,/9=XɦxqL3- DΘd ꊶӖxÂIڛ鍝 ߄ՈУ ݑׇՈ 30ɝ ȱ&JUZ g8n۰0(ɋĄ`Ȃ ՚id9a0-0Z鵂-&&zʜҭ Ҋ Ś{Ȑ h~ۙ̉ɓяŧԅ ҔOnڒ x]:0 ж:A)㖊߈8& ㋶eȢ¢ 7MۺxI$!\}ҳ Ծx麫 g#ρ{ӚIǫϷꖝڗ|ʓo'b jΏ͊| s'ЫR  ϊLҏ ׉ǟ 栖۶oM6u}kל"!9n൜3a椖ȵϙbžؚb ڍCFWؘh76鐚 쏾' ٠쿽Ґq)t,NI&9חoP mt膹Æߛfߙ՜zŖđ 𿥊Ўґd ˜ ¿ ~㿇 ҈ \ޏȋGۯ 钠͜v5;6+8Rțφ ^ ʂ݋筓ΩƨٙǝĤ  ү ʑܧ[pl4ی L&\A 﫧}J 뭝67 m.i(9F܋ ɏa {Yي͗ާ  ʶ : z)˚ gWUCrrӅԌf%'-ڥ򴑜ܕ f)c ]qͽƽK Wھ^ kzƽnܻ Ă욗Ľۉǘ J݉ҰɆ¹` q {6M BҊīQny@fn-7^ ߇ }蚎zŪߌٟ܌ }誉썟ѵ x&:`щĽ“HV ̄ÌLlZ ܉ s?ILՃ ܾпɔ`ߝȿȱtƋ/ᒢ޶𧊕Å̧ʸ |5:}đ﹝̕z֒몄ʿՇ` na/yꅿO(C֒ ߿   s몁ʎߎصݣ͊̉!u˔yּ GF-(l9횟 ̢󲴷 8LЧ*tnχ溌 蒎֭ ^͙ݙȾΕǗ {~đ tPO ̪ v%ƇĐ벟 9(KA |} ҉ՔȒ ͚ؤ𥆶ڍ˄ƫ ԾՑ +/X2s֎ƻ ™ꕎ அ!DH aՕ ҈𾼼혲Uͻ ĻẸ _n~ꖞ緍 ʰ͋הŕ梏‘0 䧋XV᪗~ 䤴EW+匴݋ę*C ֗$˝֥ޛå † Ơ׳ٓPEږ6BtOކݯ探z &dňs#ıu#y樍CE֯ óۅ~Ӓߢ굳ıȩإ qgİq ߈ϊ䖏 xǧx.Y25ǖ ᯁþH .چЋ Д͌ 9+EЊqΑه 淗~ژ̜ 񽚘߈Č ڑuٰ̐ȦPy 쳓*_ϊέ ϬVtWGݾjgþ扰Vxۉгɘɿͫ Պ 緅ҤǸǟUؖ俾ٕ˕o ݍëw6,$˜5Ѝܲw9 'QCŠѕ 짊ŇΎ'엤t׎ݙŏ݇&>r)4L}݉y\v֕ ꒻ ۈO" HӉijzqQג ׺ڊ ȿƍп|ڋۮިoݿCrǿ 9;zސ11𺄽Ŝu2頯ܙ  ۉ[:i98!&15:_h ׷ݏ؍v{ ,[ ~h5/N ֐ۨɇ܅[& \_̇縁ЄԆ  ׂ䚊 ڎ ى^+ C ޫ~ ᛂU:0)$''54-Dw~} Cp̃ ֝$jD022)u#.KsȥχݵŒAؗiI@(8/2·؝崇þۇ qX7Q҈ 䲉ڋM# yqC'鸞MUՂ`P?<8$+28>M@ ߳ պĿӌ ͻ 4 ckǾ藘痙琉} )ӊݙy2PZe%gȇ$WΐÌәف3T Ҍ_Ɩ_: +P$%:ˇزaCjSA-".,;DRf 슻͉]򹕓 kt݌Ӡ%g4F\֌̤e2ᨤ͏y/LJɀ 魥M*µNJ`r\RB# *9HSkøŸ눇ξ𷇣뷑E؂ҨxƬ奂ݙ|k뉻ԔɔhoHJK͌~.z4(5*ƥە̷|eB41-')049Pk | ˕ڦދݕ򴎖☖яʒ ލޗ!f*^`IF ΐ8ҙߘϟJKߩšlw0"B7cȕڸ~sYM5# 2GTW޺괳 ȟoQwͯȪ͒ ʩ* 젱s Sܞߖʱżǘ5WKK̜ה ؐMU 8GH $–VL:3*..0/H3.61.+1?IRvݏׇ¬񘲏ٺstjgW:*#$'8+D&uULA2+//15M\rڍ݉܈ӡnm\@ A^P92$(,+ѾLJɋߖ@dBƛCny  L ډ ︱ą~hͶ=# )07CR[bfke:0*5h̽ɬý"烈ϭuf><4/'.43*Utݷ ©ۇ%2붂‚9'tšsE@Ljҏ&_W'}֔ LҭĊז ᗑוO<5' #'=^ $몓鰒ت&ծu]R* #/2?JTvz絛 du勭>~܍ېLJٓ،ߖ `Wތ}혇Ցڶۡעު ALݝڛݴ |{phε!:y ꃟV:PA2*/.13N=Rw߭˼)ԟ3syq7|罇ƙ ƍ؈wM>TAo 1݋w̬sūĈ 5Bݳޞ篔ē᲌ UӉi ~Κbgۋ ԭtkI<66.-27;Ullh)~rd =GԋJ὇֍ яu-3P Єńƨ Rߕu]톜Ը ԋ 㶼  \֏*uό 𑐨򭢭(ඝzgRF:8.,,?=).])q~qCtDᵗ礏ޖ Ԉ؏擶5T牨<燼뱯 Z" ʢkߙ빽9kdg^٬|ăFaUH<+,6*.4DQ}i 捴{ppl 䳍 Ú ,2Օd)s 閉Mݣϕ I̅⦆Λ kj܈ ぢX2ʌe̠ۖՓۊֈשg̭|_G4.)' "*/1MdxZ ꇸE͋ 辞 ٍ%s՗  Ć 4ӃᐧǾ풟 Ȩ܋ ļiWB-$.59Uk 󯑿[܎}ə 𽗑x֕وBAhS2羈ԗ򼰮 吱Ÿʌ{y h퓚E*x ߝç ֐ÍоwN<3.''59*8K_p&DՊ¡^ȀlNU ﴅ Ǚ ŴՔ΄'n\IЖ 𽛐՗籃ʹ X ˊC"ɆȆܹͰIܓܒ؋ο_tčɤ堫uġ | `FBۨ ﻊē ėܹ é|.2& "*ds)КǃΦn:VPHД 뫔ڹ픔ឍؕȓÆ), g׊𐹡ߊ ᨄYڛoc〘w҉| ѿǖ ՚᠍ަ ƞ߮r| ̿ӢĞ`q-ȼzL?3+$0,ȿŮs8Kj4U ީҭٍώw 7MloA7 ڮʓ v [ϓoԿȏȋдzِpϛcͺ~YL>.4? zthAWG|ڟڐŸ ̕翣x`su  ՋЃ[鳓8{֋ 6_žϽ{a̾¾$ϻ 'Ni]3Yюԛ ћ Ғg3zX ֑ЕBωyZڅ>T}Ϛ Ơ ⿺h뺦 ڝa2ڍ ׏&N nXM&{ۑͤޏʚ݊~5Jlٍ꣫ԍǶ Ƨʎ ϳ ͉ۋ |Ոnz˺ņƟ띉Z řȤ v? H^ي΍yژԋ "<oáЧUDwנɁT poȒ~%fh욥*k߈ 銜ُӄmˢG uyUM{ 宕ɣӊbŘغˤ؃ ̎ل߆v %f$m] 2ȑ*\qⳭ펢ʱ΍K ˩V8ً͠Э~ǡ5F㤝оΧ ׷z ȢٹԊюӇ{ku mcڌr 8͇黒=v˙ˢ qjΣ ™˜oڅD˔ȋ#ݍߌМ:Ƌ ۑݕۈߖوۆϏs+L7و  ӑ յǖ >`ŃÔ񯂣 | pa ݼŊ~ˉĩڀ-l҉h]э԰ьϚۍю:ޒܹ㖡ӌwIT ћ  )\⡂Ţq_bYuԔœʛ 迡ًΗ価ʢ q҉萖GKԥݗګ {Z䖦ǓԬ؇ƕA> [ک Ǩi ̘ׯ̧cުɖԉϩۦޅЉt(򺃳t˧،ˊ ͙ ިՉΡ̷􋇰ۆ0Y͵Ppŏ޿ 𿟆ԭ w݉ۆ 뫩{׊ Ңnޓ Ǜ𢔣d3NDեҏ鋮Ɲ ¿ʉǺ ꕖ﷠ ϥ+Nn>*ʣ¾M ҅ŋ뛀o+  Iᡜ͘ꉿщ֋˜ԑȱߎa [\Ա ǎǓ ҏ̞ 瘎Τ zᴓ¨ џ܊ʗĐ H55Rǥ;┘V=Ɣn( ղυĹ꒑ސԊŐ ۄۚվ ܲʕ̕ ҙ ԙɏ̟ᱣؤ٨󚏚䖅瘔Σ﯐߉Ԓ CE}{1՛ؑώoS ij5-򼊵ݫ״"ОЎڵڻК浔;*ت ֏{Ɍӫ ɧۜՑ R ͓ Ŕ 份 Ϥϥʈ&VyA<6¦ɗꆴȫ Պ 菲᳍ ǎ²Ҵ'q،֞ ґRWݵ ݻ Ӓž߈Ύ !kwoa Γ锶҆ƊId! 뭰ڡŐܴÕaxT?Š⬐ ۜWhdޫʶֺ ڟ֋߈ x[T _\ʎ %i4 ꇫⴑď ֺֺcq~ի}꒟׺ն ť VݯҏÖܗq؍̢ єԽ ̒ˍ &6!ƺ_𸎲lAdҧ ᵠ؍僐㒧 Ė&xŌ^Ƒҋ˙ _-uˇ衈Ɨ ɚ ԧx ䷍㓣߈$1i 4vSx3΋ %!% 񬱳 }v։հz虜㿉аCWؒ _Ηݷ Ŕy7-UƖ й ɳקƃ҉ Tzoe# .AڏI7{ ッ ؖ ꙋθ js˸߳ʝo#Qx̊ Æ*܅j֊ Q/1Z_˄ ܙï Ò۾͋ dyz{îJ`y ⺋ vn䋷豠ij~Ԝ璝߽ܙ& 蟆ٌʾe3ߐ哘œ@-,DctRxJ' ֎|׋߶쯇7.a zh&jܫجӦgB td ޽ŋ 󡓘☋C( ɨtڍ娰 ᢏאߕ [?.0'./(=UXyü┋¯챆iI |D yo.ސVGl؎Ǐֹؕƿ뒵ǹٕ͑cb~ ېњʏ{μě俱՝fCjsr߉꣋̰洇ﭙ䏵 uouȾ_VZĖ$ ިȼXGNɣ羳Цϼ򪆝ĔŌ왯gڊޅِ๡漚Jݐ^뗭 p q%sH/䧞TܯXGⵤX  꾼·̋鏖ѡΰȍ .sj`Ο و]{ˑ ވv̮ƒ |SЗAӇ A;LޖohʏդtB HgXGԟÆȊ yݚǸɊ T簮ĿpxٟԂ ߯鑡Ō ӯ򻇞Ɲ_q}뫊 'M؎EV8+ᷝzgYXGݣí䤚ђȎ癑̎ʋˍĪޛҥĠЇ ىč᝟Ő珬 汓̎ ⱗl؉+[ b;ǚӞ>XG͒ʌሎ਋ 󇎔ˌ ߄ے֘Ǩջà ƞГ܉񙙷چٛƉӊՎϳ Μ4{ بړiWxъ34Ɣð „iXG ܚ ԋ˚Î ˱⽈ Čʋُ2ŐҷÊ ВrĈϋះΣ 5φŗW ܏_;d6؈CPCP˅ȫUD (ݚ~饲܉ÁЧƣ綴ʋ箳 مʌگɆ֎~;} ӟ丝ò֌ذʓɤޱЉ i̘Αޤ˙ߥ%ٚƿZUy `+$qc @꘲~䮓܇ ɖΉv)gҐ䞙Њ ԅܧФ‹ݾ԰߶㞄ЛTFǏ.Şޭ bؔǼ䘑ֺ}o^ݻѬ)SՎϡȕڌ 󴈥έ~ϣۮ֬x֦ ՒPEyz$ К΄ĶÑ ⧯ Ŏ|bwuΐʀ>+Ƒϡ뙓㦕/S 񵇣ŋԵ ԰ަ ֧翅  ؈<!>(8s  ˬ g Ž ބ݇܏ަڮxݯ ٍ󰱲/'֯  `tΚ ௱ⱳ덿 󵅤Œ šⰉ¡ ͞ ؋ ؉>=l+T ş ղG2 ʾǟ[|ﰃᨽ  Ō [ ɶgp p󴉘ꯒ ڼٻÈ Ὅ搼׉<# 簢ۘ uZǪװĔ~ \o İ֜нзۡ ſrؽĺЅƙѩ Ⱁѱ ܵʖ˙hڔ;$rӃ┹ ޯk ߴ‘۸ ͈0> ﬈Ė͙Ȭ ݳżԸ שڅ {; ՝ J2↙ʇd[č󺻽ü ^ٸĘÁV 鸽ݵ ɀՊ Ѓӽ 빻绽|ߎ觐 à ٺ <ĪɌ 9)uzƏ s 11l]Ciܰ駧 +Е z߈<|E ӑߦڴ ͜a!oo ']r]ȓ  ґ׌׏ މɛs ~ʝ`Gr߾ﷰ ۆR SY ▭ђޮl޶t"ہc.$Z\H*aϡ̃ٗ䓴⣴b _ }𱮯6޷'# Ԓې ӄ﷈ ҅Ҡ˵ͬԢu"椓ЗtJ5 V|6  ļ绮枉ϕ ռFĐ0ǜWa˜#Ŕx ꫞  Έ Ѫ㹗ݱ!њ҉yVIW~m͎35j TOАꦽ鳞і؉ޔq 鰋]ڌŽ\ɤ"֊4>G Ŋ߱ɐ  ଄ܼĚY ʔXi Yz杰ɀ?;"Kgm ߱Hш: Ҩeߒ} 򯑓󬲀 Pez@ؘ䗪 H…ƕԡୋ]vqZ|l3j#fl9Eه Q !޻? &Uш騞րw˨x T Ï  湜ҟǗʴʦ0zX]wn\ ؈8?뚤%މ:-?q`̒ 䙱 ؜1" ƍء͔ø`ܔϱ -: ԛ빡 ɤ gҔ ս ˹麤$R qxۥp>&q'Roᖛ}X/Ȗ | ϰ¸ۏyɝrjs_ ٪fڳ A&ھĢ{ߨ̋ݥ0㝎 — v>0Ǜn-g^v łʕ~xȖ i/ ߋΧ]moj`ޖ~|Ǝ韦s7܊ҘĖVӘֶ칙ƙ`9~ñ‰w^TO]1 T ȓԎ뎸ۺ 商 g_ 㤐+Эġ׭󹯱Ҽ׏鯬|ָիaբLd h ҳUjäȈߺ*>U?ƙp2 𵈔^;օ펱ǀʚ$ԁ݋؂ʧÐ 㕓yҷٌ2 Tœ0ֽ {N5 Ѯܒô-8 #2j ѨɓZj Бؐ$լ컜ȦǙˎ‹ yaf{)׹׹閬 IL 5ֽ 0 ջ Į X"Ӳy` Ψ 館ǖ먺ԈDɑij ؑՓ Фhె˂ގӤ앨G*t ۍjK ܨﳍ ת ]`w, b2UԷ ö暫r继،Vϭ &ɠ؇ʊjꥍĈ͌덑 6 ֯։Ý )r\rI   ؗ΋ ܹxwړ︓Ȍ yƒ ٟٶ̆ϓ٫ ܬtϙ$K 씌ꩇ֗ MQhқ˒n ЍǽȊ즊T? χƵ ׼ɚ ѐ̉ӏ ԳȮ풛ɐΆd6ɔ╮= ꉵ갆ǘ . yJ ڇ4i% Ōʴ9Ɇ ۈÎĕ  Ԟ£혓ծߜӮՋǨEɪ̖ĭ2(R믅┐ ( &䠜DVu<*^ۂb@%S* Ӝ׌֫nі ؔj}ٴ␤ǚꠌ!, ŗҾÉ v \m RĂ¢~׍㨞6暂ۇ pkɻڷšыŻ- ى 񕝻闞en}sݘӂP ٤f ߹ᐍꖓ 7~>ӊ=ߊ؋ Jũh`Ȍزȉ2} əЍ܋ӜŤݑޘ׿{ ǟ ̻??طh܉ݏ )65ڀ|߈ ˑߛ#E о}Ǔ׏ᬋ㉹*ÉКҎ{ܒΚśr] 别ռ ń #نۆ̉ 8 ^nBHNU@ڼҍӊk ՛͌߈⪥ סꡆ֝أsw`[㋚}ˋ,뽠v։ׇۗ›CM܈ geM ŒYɉ %2ksh> ˖暵ňŠ Ħa~߮T DŽ濕 Ҏۙ ݧި䟠֍ֈϭňʕÆ͊2흈ʔ쒐ڹ`i Ƃq" ڿy⽠ Ƭ꒚Yzm~Ў o\s\░߅Y ۘt ǧ1 ȍuߖ!0 ꍵ봋 ֎ϟ͈ěКֻkˎ= ԝӛIJۣ gUƉސ #|Df2;u/vƂ߃㑝 ̹ڛqj ٮ *љ샆ꑓǜϤ Ĉ‰塒׳Fܑg2> ­엳߲ݳݬ!Po ه ?wEMLŜ |(Й'Vȑދו(Է 吜܆![ + 溑b.™ѳ֎ưɚѢч[_V;ݸ ȨԻ.č b\QCc,)ʇlq7 쩢ĵl~Joʵ։z oאͻtҼ׌ԍ쒆μ#ǒ]kۻٺ椉ͱļŠ`ōӤ)  ђΝ ͝<ز |{ǹ !23D ’uƀ {aqثް 랷œˑq`سj߂嚟 ϥwȸߛɛ9LJD򵇮G Zc \@\ S㍿ɦђ̖ } 󞩰?&Orߘ[z{՞쫪Ւ}ݟЧٯҞۯ 㦢RuԲլ ۭɮݨѝs2 ᔘvW܉甑A;(# ǥ ĘԉИ zڊ `+ ||a罤Ě jҐ鸊m ɣϲ藐g܌ҲFX:蝐QTˋԃ)}@-3\ϫږ؂ɼ㞯؜ Ԯ F΋μǗgxԋ߽ח/ǎէڸKΎѤͣѼϐ ɧ4}ډ[ hEL }7h.ꑫ˦ֈ粪،մԝ wѓ o]Pщsg]ԉ ڦӳϥɜמ IiѠ%ڹ چ 3lĩʗ<f ֗Ɍ܆물ЂpO tڋo2'ujۅ˼) Ē k$XԱ,϶8 cI 㚊 ®q ĉڈ _9늶mܾɏڄ'ͤՕ q8ސ娟i(+[N w`T tE8ߖ˫ވ˜ハbu՞_T1=Q~ފ }G < هҿČ 呫m%4&- 1odؖʦvވƈ៰ؘ ̱US` *B ڋk˟h(Ҍ 锳»k*R":cȴ׸ᄿʵxc-5(}g;ɕa 嚔 iFMīʳч囖 D•ɐ gՑ ޘȚOcXU!˘ꔝÿ#viiGD q_ C 2bxL íᓜԇɂ 9D ٙbxŋ ਑ݎ.?׌! ߎǴ~pjܮ~MӤvx ѡƾC_쟊옕 T<M Β ƀkg י I& m אʸ꜈߁ȐËb8 Гٍ }T!ު䝴x Kɍ̄Taz 4#q΁䦰uo鷘.7 |קx͒~!!}Si뚒Ǵ³ö)ªC'#jrĴﹶxZ׭ƢEl𳁯窈Jsg&s 奭H 掅t| -ܦ,װ暢ˬgy  Ъ椉ڴxth w<4ۚdܦµJUm <׌e%Ũ˥ݡ ۝ǘs텑 Iƛ^f`wܧ ߨ܏沆ü:cŝ =ӤÏߦ㱖ͻƬ эй޽ųþe ߏ/6ĸ -"'B׌֗ڕF j=N }ɇׇͧ ޫOAш ]~gd|uܻ Q̣̩   ڽn& "K";ڋ{èʖ0KyQ ݅Džϫ/_ΠUk?A̎߂˴Ւε vN[K, ޘ쐾įǯ￰ v (P؇,x}Ԗ¢Ѓ ۍ썙ʍVkם}vk$~FR9밷З)฾’モS# ퟍ ̶j?ɞ (NnF΄ꕢ쿇ŠPFr]s ȽĐʴs򹔗t'ӏӊώGt ͂ T ږžƽ F$Tu?搝 h霉™z9،`iOJה̍ %+ ȡ҉*MŠѭ" fg꒷Xr 㑢}ˠ b(!zf K"Pόv@ Ǭ۔֍򗈙n,>*gԏRCw山ӈ #yd) kŊå~kθ؈iɬ٧/dǵ+Q!ڃ͸¸WZ ʒ JO Ƽe<󳐕m0ч ֠B'W4oĤ Q/撛d>ɗܬ qlsv~lpiƳҎㄜϿI)] Z˔ Tfؒ6Э2(z  WM@ ,ș G¾ j㰍 -rθŠ޳ǥnjm֩0;Ԙʾ3;7 s.YhDôݎْaV<哻ʟã ,]򛤾ଇ hГrn=ޞY܊Е{$ ߕ      ־ ߾زؿ ߺ[֑ؐ֬ lܶaղվ ܼc{`Ӳӿ ߒTvhԞ ՔYzԞ }п  ; ќҾ ސ݁ݑڐفّ_︍뷾궾߫ݦaܺנٿڱڱ۷۷ԺΙ֙hѹѯѯҲҲ˺ƔʩɲɪɪʬʬŮúǽ˿Ⱦÿݼݼܿۿ̿ۻȸ¸ܸڸ̸|۪٪˪nklmopqpponmnpqp qonpqpprrqfdfffffbͥͨlq sІԆ~~~~|ځ}|z|~ہ~{ځ{}|ہz $@W_~t$)XPJU^lwD>t1+&('   !$% }t  33ZXJ"33}y%#8%'+(  )M=:0+6CU  ,-$1".3"=VE2 -!   * %/@VL6ETdYO'7:OVJXUgXSgM\ZmaZiuhogcBR<G.3&265)<9<AN/PdfSZFTSaQCI<@)3=1 4.2/ 2$8FMUZV3>4   10*)    @0;?=DF.,;9%'@EEEEEBCEE53Cj بL>=k Ӳ&oӼ1U  Z1 Ǫ堻 ;3O9߽>H;۳ڴֽǺ:ҩ,o8NVEǬǫ-<4ڼ޶øBΚ58B\ۜ8۝<յബίٱֵᰫ8һ˯żհ±˯ɭ´ų  Ջׁׁׁב  ȡ븪+ưҕ͠Lⳋ Onlؼ+7荍xy墧ˆėZ lanbWӎcdZeltdc.[jypWK–eʄ\j\jxcNӤfdiux]ƔcXzWy4mm ?B}UȅZStmE*ڂ~R֬gGʄʄ}ɃmF|IfBЏXlƔSk|ŐHՊ Yzjzɇ~L[*ĐxЏqfʄ|ɄcǔVu6 ”ypY]~Z_zxs\+EzXkWƀxvc\{^Ȓi}pÐ[u ԯѺ˻r+lضw󞦱vыZp*ki𚏎_NܴñߓӻʼʶofĬHܟ_ddcgwvvxpceecoxvvwhcddeuvvwscdecjxwvxlcddcrwvvufddcgwwvwqdeecnwvvwhcdtvvwtddedkxvvwlcddcrwvfdedgvw xqcddcnwȯÌ ¿Ũoʶ õddr&(`iu}cMroskv恵îz*ߥdhhgl~|vgfago{mghhi}{hdafp}xxoh;gz~jhhgl{w~rbi`fumghhi}{reieaqx|rfhhgy~jiealz nghhfuyׅ ` 妫͘ 򥝜 нɩo˲ ˾x2xmqr{TVfs]Sw`̓qb*ߥeiihm{NpmM;NIU|nhiij}{jZ;WvUK`LQi;hz~kiihqWX}~GBN=Qwnhiij}pHJpE=TL[shiihz~lgG>bLQ_FRkiguy ֈTRS5{ׄO)LFIUYYOGHȘy ╬z޿ó 䵿ũoˬķr淒3rdmuNZUc|p_||剿͔ɋy uƪƻ ɪƯܵiߥeiihmZoiGS7Z`lnhiij}{id@VmYcAjPajihz~kiihqbOxrSM5\Bunhiij}T`eHR7jVvshiihz~leK=Xt[_BiBiiguyݴzyzu ҃XPR=i\oSy؃F9}Nn RJM\aaTJMϻߴΏ 㐟~xupڵ ̼ͩo˧r%rrnK2v_TvZ|wÄ~ vk"u+rgfg uwfߥgkkjn~~~kiihmW`wgiiguvGshiij}=\khpsjOgw\jgpriOsys䐍p~T\B  zii Mpj g~+TLO\``UMO~jlqŏ ɨ ӽ͍qq YT`]>:a^\fCQs7n; cѾܪސ'{_۪ƏGvna ȽH8~yzvghhgraJzoghhguz{K|DNZB޵%IaG_{`_ okOvN WC<VLheFAF,vJVM=ci~(?@Ymy AXwWaCH9-eTEBBACABABCABABACABABACABAC+0DCABD,,CABBAE1*CABABACABAC&2CACBAAB8&CD2ktyN`ha  )^y%VaTeUY|Ť[H~{XM@C|uJ Һ chYp}NWUmcdicsIRm ٯ]U8pmFuB'x~\DKsjxPmwUC'{6pYO**KHHIF>JHHI&/JHHK5"JHHIAAIHHJ/&IHHJ?EIHIG 8JHHK+*KHHIF>JHHJ'/JJ2:8!JHHIAC:1JJ0&IHHJ?52JIG 8JHHK+)KHHIF>JHHJ'.JHHK7DIHHJ"4KHJ<'L"sy}C\A  !  Cwnu wYn`YXAHRczyϾnF KuEZ NW,g L\\]MDNbwKXd V PS͇ES(CJRY|yUED L~'.ÊIOYN55JH"F,BIHHI28JHHJ<0IHHID,DIHHJ82IHHIB,FH->IHHJ55JH/G,BIHHI28JJ28?/IHHID,F91JJ92IHHIB/62JHH.>IHHJ65JHG-AIHHI28JHHK5KHI0;JHI4)3M4{xy+N6 !"+TS_f($Xv NRWg"֎>]lsJSMca ѻ tw\iUdEvg U~U݇JbV?)j zD BBc:SQ_)IW}irz-{|uogQd+A`!raaÍYLJJHKIHJIHIKHJHIJHIKHJIHJHKIHJIHI.tsLIaw|~CUxO8'?XYLHI,?IHK91JHJ81JHG+AIHF*DK:X|zb PO# !"^Nc^_ZlߪWP9ӵ?‘DTJǿ ]o@YhBMglSEG?WB MxQ;y9VBpr^h3PtKUIF;xjz]OY6<3$V-+YLHIB,GHI28JHK91JHI?*FIHI;/JK9 ^{}C&g?  " `F<^QScR鳰kMA뻶l a涻 I*DfF|l_vTsɍWHv iIy HbMf HβmŚIciBTDGWbKE-wilir{E M aj^ YLIIHIHIHIHJHIHIHJHIHIHIJ;,JHIHJG(?JHIIHJ1:JHHJHIHIHIHK32LHH&IHHJ53KM3 hz(N| #" NugxYc]ADMĈڅ^齵n V ΈLMoHI] ZTWg quܓkD Yݭ_vrSfq{GG^yZ\dWNNiI+svF^Nv{ YMAAIHG>FHI@CIHHID?H=HIC@IHF>GHI>EHIAAIH>FHI@CJ/7JD?H?:*GIIC@IHF>+?JHI>EHIAAIH>FH I@CIHH.9@HH%?CIK28ED%|w"^{rVH) ! k]hYX=&V٣`TRUTQTw6F㷷búX t$Fp OhCVU EOJSGUab~}`_aJM\kJ ='\QYP$#LHHIEҶH 󼸹FF^_soVU~<ȰG땿eW]lW>HzU Mn3+^KHJ<)CIHIE(>JHI/;IHIE)AIHHHJ?,HIC]||HbS$Usc;"\M}rSzx^{vHaɃA Iʶ땞赺ɷ GŻX^oK]aa=OJ=U9YVn8iwSH}\NG;EZ> |Er@]SpC&C&"lJŠ,T}BIHJB(@JHI/2JHIE)EIHJ=*IHHJ>-HK1 i{|.I`Z U#cV?^(K7)@$,KHHK3L<)DBAIHHK-!JHHK0EIHIG7JHHL&%LHHIFK,?L:I}zk^] pRdځtOSdYTP}TxDȷ m^ ޷F\A8 ˶ёhdnOqHgoM B͡VN ezo yv՜KpGME_XC症@™`AyE iIYJ?>NXC\=5Ց@LKHLIHJHJKHKHJHILHKIHKHJ=(3HIHJJHLE(:JHHKHJHG*BJHKIHKHLIHJL71JHJLHHKJE,CJD J||W]] O5I}cSTR[yCP&AGǾvԜe ;޷µշE| uB 巹ΦXCJCN[Y 8M|4ƏD=Ɋz Hq01}HzVJڡՂ6p @B{UUpF[}iOsuq122Bɔӑ@JHI=+)?JHJB(;JHJ>*GHJ07JHHI@+IJ>]{~C"`T y}3gd^}UE^ho$fP=ż:IDy_e`꺶d8_ D~ ϣW}PEK'V8kʺ }lTHbjT;܌܆\UrdZ&,_4e]9X\o}hQO^m|_LJ \[0ґ@JHJA.)9GIHJB(;KHJ70JHIE*@IHHJ;/IK0qyD'|Rn WHXC]V[ aSRI |='XaE\Cùµ̙Q>g0]⵹ϣWdyjUj9wUqH9 W$RWquUQpK?z7?dlJ>}DdRh4R׬~|˓@YJFXBH*#ё@LJHKIHJHIKHIKIHJHIKHKIHKI8&5HJLIHJHJA(DxwBPQ 5b(TLOHT?UdKg[U@qClq,|vNV7C!/(HY΅^XOkSJX@.ID@LJHKIHJIHIKHIJIHIJHIKHJI<(,DKHKIHLC(:KHIKHIJIHIJHJ.5KKHJIHJHKIH IH+@IHHIKHHKD,FIHJxs[T_Su{"_B2nwxǾ`[Ebf?zLQY3_ŷ@j 7KI /UAWSkarcNh3"DR /G{O f@%-nJ^~g[dzUYVX OGz@JHJI5'=HIHJB(;JHID)DIHJ8,IHHJ:0JJ: \{z_^] IO5Sq. VwpHMz'FzHļĺ¹8qzs忳(S 8t DEN;9@IIH8[-e._F$o tC W[iRb}pz%[P҈ZMwҢomRdG< :-@JHJ@,.FKHJB(;KHJ?*HI.:JHHJ81JK9 \{~9)V^m>}q`IaXqO7S YkSG'cQckLͷƊa~ Ļ6ݲ  7ʹ yhV Z|fRfJŰdKyaoWF8`rk\'5n)'۾VKRNcSz ZS඄0|CUTġoTQb}RvWU j@JIHIHIHIHIHIH IHHIK9'8HIHHIIHIHHKA(;KHIHIHIJ63JHIHIHIHIHF+CIHIHH K28JL/ ky!U RI Ew=MoO \FzA ʳڶ ĻƶD·i]ùִ~~c GعY_5RQ dQXqqYDު_Q˶cemg\;IbGg}KHoW|;H;f= 0YHO[{]XgfN H9@HGHFHIFGHGFHIDIHGFIHFHJG2*?JHGHFHJ<)IHG9EIHHI<@IHHIB;IHG8GHI@>IHG<5)CJI<@IHHIB;IHG8GH I@<*:JIE9GH I9CIHHI>>IHG9DIIC):@IHHIB;IH I>*9JI3|yn[mu@rBbSVXhQmke澹͸ BU´ ִEһ୍Qj0NEkzTTdGEUBY68׋VUQvHs@@`tuOpL^hiGSRQZ`cKj6+0f@KIHJHIHIJHJHIHIJ<(@JHHJHIHK:*CIHHIIHIJHJHJ?)FIHHJHJHIHJHHJ3/JIHIJHH IH,BIGJ|zl~'Cp<UaPOv%S·kd}Ӹ ƴT Գaѷ ?=[SfNdTfhyy26 vdi,w SýFK{?ׅuP@ =ȰQl>~ e K`])AJHJ3'AJHI7)DJH,7JHIF)>JHH ID+EJ<`||]~^W|RX`sSYlX} 㶓qPa>b{xиNַɳ RŠ4 X QYLoDV7=EDEpnMk7 ؗr&Vfd6h? W`~f]c uRN`V i^[]_`^Y^ Df3,#@ AJHIJ2,FJHK6*CJHK:*HJ30JHH J?,HL,nz|@#0FRH|V\R``cayQSq}\Qcҷ<丶Qնպ GͶŠĹmn"UGRzǨI-҉kd>0iF'E\JLad5~ pVVXNBLaH MHQK<;`p֖eJ w Lp@LKHLIHKJHJKHLHJKIE,/HMHKIHKHK8*EMIHKJHJLHLHJA+CIHILHKIHKHLJE&AIKJHJLHH IB-HL*lz|0IdZ^FYOZN\NCǛXqejasvkX_m^LT޹?{̊ͻմ<_IHZٵ, -N`wpJHHI,?KC H}}PLyCg\]rCPpe _D>K~ نDCﻺFM޻̖źDVXDcSrM?p~GadS1Gx;lK5\+.mnl 0UP&B-h?D>! !  @LJHKIHJIHIKHJHHJ5,HKHIKHJIJE..HKHKIHJIHIKHIH/3IHIJHIKHJIHJHJ.8KHJIHIKHH I-@L=^zB&M_evbGq=LEWc[b%eBEIHIG**9JL''KHHIF=JHHJ$-KHHK3JJH-+@IHHK.#IHHJ>EIHIF6JHHL(&KJ9+D q*3KHGH IHF(>JHHGIHJI5*@JHGHID+2JGIHGIHIGHK='BJHGHHI@+IKuyxtY(q~$pTDnzxR2fjNyN]{{_뺾YaRmy𦑑ەŹӈwWVyP`zUYdSaPoOiL B3D"xv# Bޝ-Mx !%<1*3LIHIHIHI.5JHIHHJA)/EJHIHIHJA(8JHIHIHIHIJC(@JHIHIHHJ;0JK <}xu{Q*xK3>qKS=URp⤃aqVpښʗ뺽Ox6FB $R~ຮ t3EP JլQWj {VtlFIhO"uQ |\f9?XMm;! !!!# <#o*3KHK6-IHK=(8IIHIKA(;KHIG)9JHHK81ILGxriO"e~iK!D}nSXedNqFvmK2t^S{^RXYWb޶W/HxcaIp0_嘎ɷ 饔S/Vud tU|BaNe<@|z:md~3lgtoEsZxq   $! =2*3LIHIHIHIHI?*EIHIHJ6(?KJHIHIHIHIH;(-UR-7%!LHHIE;KHHJ)KHHL/JHK6&@IHHK*JHHL9/GIIG5JHHL"!LHHIE;KHHJ*M@)50JHHIA@IHHK*JHHJ<DIHIG5JJD/"MHHIE;KHHJ(KHHL0JHIC*1= ^{|G$]%Avt~xOӋqCK o]t t~Q^p ['43*uq ̋EUGônIvFyuwT樊TSVעdg~N%bRKV5fqᒖhXЎ?VONj|E:8eM?{!#<ql%6EBIH?FHBCH ID@HJB&?AGH CBHHJA(3IIH@EHIBBIH?FHJC;.(:JE@HG@GHDAHF?GH@EJC(8CBIH?FHBCHID@HHJ:/BH1 gz}?(aY;J0Y{U]&fQAp tC ߧR]Exȡ=wȺENsGȒ|)cPVZiU_R[TwdcV븋e^8n=9p;OefY""! .%P 7LIHJHIHIJHI/7JJHIHJA'feu u:n\` Cws#bP߼乞KNe .反]_蕏6ig KDTZLgD4Py !"! !A#3/84JH"F+BIHHI28JHHJ=*(BIID,DIHHL0CJHIB+FH;0@D8-);IHHJ54JHG,AIHHI38JHHJ<.IJ50K0;4|zk0s1-{pDF`AUӱodc{vA+ a '|y Jn/m>FZIsWû|kV U?e .q؟,x,B ikU׵jSF>Nyp !" &8GT,)KHHIE>JHHJ&/KHHK5 8JHIBBIHI:(JHHJ>EIHJI+-9H*,NJHIF>JHHJ'/KHHK5 JHHIBAIHHJ0%JHHJA.)6FI9JHHK*(KHHIF=JHHJ'/KHHK5JJ+;L!3?||a Sfli=Asz݊:?G ZeR'r޷ *G <9]`Knmw1TpL .EV瓐DWh jDs< M}J  "  U{VMJHKIHJHJ<-GHKHHI@'CKHIKHII?-+6BKJIKJHKIHJHIKHKHJH JG8*3FKIHKIHJHKIHJHIKIC,EHLA^}|_SNq/ADsNZ|l Vdu 9T LIǷsR<ⴷ[MRw['HCNo+yHw0U Pd|oGzd`B  #  Z,VKHIE(HJHJ /3JIH!e{|W `FundEwcY˭}Au[lN Έ[Hftrqr >RӅOLmXiXy~g GOK?T\Sq@%_k DP_B|D  "  O#yVLIHIHIHIF(BJHJ>'FIHIH0*BKIHJHIHIHIHIH JHIIE:/)1?IJHIHJHIHIHIHJA 'EIIFmz|/=}\ zsnDUIòc*6]bKbKز? LXOVBٲf!Jt;pP^VnͬXshTd 3nO nь 0 B,pvnjC !#   Q!VDAIHG=FHI?BIJ:,D?HHI=H?/*.0:KJHHF=GHI'rVHEHCGHIDEK7+IFDHJ;'EIHHFDJF-0HDHIBGHEHCGHIDEHGFIF=0',=EJIIFDIHGCHICGHEHCGH IDEIHHID$: JHHJ;,w~LP)QCMuXNVwƿafGta iYNQTTS]pcU i_IHT ﺦV]Eaϯ.A~0TT? Fǐ&>EN]\gC "!  C' pVLIHIHIJD'?JHIHJ41JHIJ01JIIHIHIHIHIHIJIHA:/(*5CJJIHIHIHIHIHIHIHK7/JHJ9*xwyR1grG_k]Ƚ jTPw]xԟeuvj ܎QboXWNQ 毁>R/wDL-WBIW[|~V}rC!" !8N ~L6^n?5V}~e75pGYKHIF)BIHJ:*IHG*qFo\TQL@Ɖ? !! .Dh#‘\3\3k* '$LHHIEJHK1JHID#AIHHK.BJHJ=EIHIG6JHHL%$LHIKE-,),;,MHHK2JHHIA@IHHK, JHHJ=EIHIG6JHHL%#LHHIF:IHG4DIHHJ4#GHHI?7IHJ1.7EH J(.KHHID4GH6AIHHI;;KJB5*.=CJK;=IHHI@6IHE5EH I>9IHHID4GH6AIHHI;:IHG4CIHHI:=0/IJ@6IHJ>qyA#vD^TSk!b]nV .Km ]dgJ mXL I yURSTNTawYH«IWo VUk[[iX$r>(~=`U@CN!" @Ñ|9W6}VMJHKIHJ70JHIKHIF*?LHJ<*IIHIKHKIHILL>/'1;IJJIHHJJHIKHKHJHIKHKIHJHKIH IK1/IIHIKHHJ6&oyA'`fTLPnCmG b`/&vE|r< <[T@}WTtqE <S~qlK~LtLWK !!  (H|4mh>VKH+>JHJA(GHI+9JH IJD8,)3CJJHJE./IIHH-1oy{,<VPJ[Q uG|) xeArymx8e_~@VK[Zizk}_azD^yh_T`rnGZjq塈4vVP_X~hN .=I !! (l‘{3o6iIHI@)EIHJ60IHJ<)GIHJG7(,;FJIHJC)5HIH HID,#tywuFN8UG Ǘh[Q[۩xi-Z_~$YwQXp`GD OCUjCfUa"zK][^cCҴh[STTSYhqImO,tnFVBxAxbP !!!#&Ñ|3oLdtJJHKIHHJ62LHIKHH*;KJIHJ.5LJHIKH IKH8(-AKLIHKIHJHIKHIJIHJHIKHJIHJHKIJ@(9MJHIKH HJ:1"wyxqd"pFb y>cYއCPM` M=rii5/6\sEG>pEkQCcGUb~tccaw|RSUi 츭wDSH^PFwZrMQIFQJh()  !  "BÑv4oUJr10JH/F%@JHI06JHHJ9)K>+IC&CJE(F5-IHHIA%FIHJG&",=HL10JH/F&@JHHJ-4JHHJ9)IHHIC&CIHHJ5,IHHIA%FIHIG(5Rz?}&'LHHIE]Ǽ ZLPY UPA G׎{$\߰U?QUxKEelL!  * lڑ unp]V75Kds;#*AIH"G:EIJ28@AIHHIC9*AIHH:+;IHIA=JF)IHG:EIHHI>AIHHIBAIHHIC$4JHJ9 ]{|I"RqcAsh>mjYgGXu MI Q:8tCkPOĝUBʱTGQ|S/l.voW`BV7EF]W?SAWJA\I*5 !  !DcޑznPG=< BDCTYsbL[r$5LHJHHJ27LIH JC+GHHIE*EIHHI-3JHJHJHIHJHIHIJHJHIH JHIJHHeQNY(Iu 3Q+ ໴]OUgJ TT֤>hIDXT˹aFOUWDڒpʗ!L=S'E   !! ")qWߑ iB3Dcm~~ޑ`OM08KHJ27JHJ?,HJ>,HJ=(GHIKI<*)6EKHJA'@JHL-rx!WdZ#Ye]KbXbcT̓bgjTVx &W>['#nӑ+IKeza%KQ̐kIYXYK\UM=_ [BxQ!! "+ߑ>?dؑIcU7KHJ18KHJ?,HJ54JHI/8JH IJJD7**:HJIHIH)7JHHM(}w!WFuwRjz <{DJry`h {:v\N- Ve ۮYHhX]|KFyQp f;ExGnܐF]! !  !Mޑ{2\Б@x$6MHLIHJ90LJH K75JHHJ48KHKE'CIHILHKIHKHLIHKJHJLHLHJKIJH?1*/;FJHKIHKHLIHKJHK5-JLHH M({w Wb^zSy^^۩þrFT;ߨ}lmȹ_EFڷlcar\Ukl ՔxØusI`V wG@8}bdcrױ  ! !xߑy3qΑ6x}%-KHHIF>JJ?.(1JHHK7:KHID4KHHJ44JHJ?EIHIG!:JHHK+*KHHIF>JHHJ(0JHHK6!JHHICBIHHK3(G7)+-GJHIH!9JHHK+)KHHIF>JHHJ(0M@'F7!JH M*{w%\BB=-{SXe Kcxl  Y>zrŻ |i] ޻F 齪vkJV HXdbFHd}   ! /!7ȏw;$5JH"F(AIIB-/7JHHJ<9JHIE9JHHJ5DIHIA(FH+=IHHJ32JH#F(AIHHI17JHHJ;,IHHID*CJJIG+)/:IC)FIH+=IHHJ32JHG)@IHHI17G*IHHI.@IHHI,AIHIKHJIHJHKIHJIHIJJB8)*/=GMJHIJHIKHJIHJHKIH IF*BIHHIKH HJ15|yo_i{RN`_٭q _U:lBSiyQV /bC ~[PVUUVh QH̳ u K^dVTUT[lq SWWoEYY b]k4 [d h Ex  ! 15e=ˑ6zDEKJF0EH I;5IHHIC0FH1@IHHJ87JHG0BIHHK0%KHHJ>3I IC' 6|yodT[HqqWinGWf(BOݯىQdܼwBxBK˳ F[uM{}aѵ{jn^JbiA۞IwH[[zo9BqϦ_~eRT]`>`EIHIF7JHHK('KHHIF=JHIK#/'2<0 LIHIA@IHHK.#IHHJ>EIHIF7JHHK('KHHIF=JH-KHHK4J J@)W|{bFLp^a ƄkxrRGVQ_>+ɾP|θR lWDNOHWOhG^pfNfEz<\펠koN>E?]KKHp`UI:ք:q]0spxTeKMYd {] ߧoQ㳟8!j\EGvjlvixbԑaxbMn}XQa<і cAq¦RGnW  ! !+  x3ޑm8@&MHIHJ9-JHJ)GH J:.\||_xTVL%\QWw8mZ aAE6{ZSRF{[}pQD٨ڵȰɤd@LbpfK6? BWUVVTA|xOp RvsvOw钐 LãfNB;޸6} ! .5!.I|}=(4#,B9Wsh(@IHIA#@IHHGAHAEH ICCIHJ;&1GJHCDHEBHGAGHDBHGAHAEHICCIHAFIC'CDDHEBH I1.^||.JQPtFϬv,eӴ&k) TPli" &A^f3y7R uO7s9{AI&LHHIE;KHHJ"+GHL/B*GJA)9JHK, 1JHJ<EIHIG5JHHL"!LK?(?;KHHJ)KHHL0JHHIA@IHHK*JHHJ<DIHIG5JHHL# LHHIE;M:,L(KHHL0J I/"oz|1FS3J[t {>[b l` G`]rqQW@ȏK ޵PUjGG{rh@̔KrXaTD\DtGzҼNJm#5&LHI,%NKC:% - N:/E2$ .]!" *mP5;w2jv4r_C:&HAFHCB*>IHEBH*eKE?tLsTR|fN^HR@Ո nQSerkRj ]Roh#4KHI*0.JHIJN'00),'7 ! :{{4{z4u@mn*NHJHIL31JHIJJ:+HIK>-HIK:*IHHJHJIHIJE':JHJHIHIJHJHIHJHJIHIHJIF(CIHIJH I/#lz|1FSSlR$z0O=׳#|\ga]yJowڛ[WSGPbIU t EoۨdGLQDz"r<`<YIBk~G ɱӱEMIDo Ѳe׼HHS!)MHHL35JGFKA""4)OKJ;# ?($! O^Pq33C%MHI?*FIH(>JHF'DIH+6KHK03KHI?-H J/"lz|1FSVxP+7TUgViΊGRYCxWN ЉF m[^vng09U{UHX|Ȏ܍j\P HNO >umKV# (JIE'@JE*7*&=IHG1 1!fDrgsFdjJ='MHG*AIHJ5.JHH-UxMcORcLHLIHKJH.9IJKHIG*ɣ벸MXXve9j>|vlw 17LIHG):MHHKA $VHIHHIKJJH #   j9:{ۨhR6)@VnMdIHHK2EIHHF(AIHHI17JHHJ;,IHHID*CIHHJ80IHHIA(FIH,=IHHJ32JHG)?,?II16JHHJ;,K ?1+w}w=`VrD*o_l KQqN\bVHvʿbUdQ춬eWMMJ,^0\Je ֏ﮞdVXu~n? Kcf| LKJK7/I7EHIH$F"KH J@j  "" j|A2f1nH5'&.eIb:}s,KHHIF>JHHJ'0KE'B6"JHIF"CJ+8L0'JHHL.FIHIG 9JHHK*GIHIF>JHHJ'0JHHK6!JHHIBAIHHJ1&JHHJ?EIHIG 9JHHK+)KHHIF7*GIJ(/JHHK6!K @1(w}YMxban[@i ͭZTOG QHv?ݓ_Njeև᭩X-iOOF\ojTlgtsT⪧fFɬ tMX Nsw>c\Lf$8D1<%HHID8=%NHJ@k  k`R!n/ͳt8:qJHLIHKJHJ/7LLH J90JJ<)GJKHIH+;JHKIHG,DIHLIHKJHJLHLHJKHILHKIHKHN74JHHKJHJLI @1(w}pYMcߥIxyTp7gR^ha MaN ;jOg߲}Xؽ siMYE~ L\ | +˘B˫ N[I#0 Mcymkŀe$# DLLM6J(4LHJ= D %hdRy2΀!l7>qHIHJ<.IH*8JI+8JHJ=&EIHIE+EIHJ09JHI @1(w}sí\W HCM ɻKOU?\ e[ jqf^tZD UҬWVͳyN`DPS&ƮhDL_uZ)- ΞqFSN bR#(,1%-<" R#0 8JHK7 #!:`VkEԫ(BduAqHIHIC'DIHJ?'FK<)GIHJ40IHE+DIH+>IHJ 96(w~ W]S_KpJިj yL^Lcеc[z 䱶?[#[Ǹ cEiSȔޞxflUv9 Wz@NւQT Vr2#(./* `M<>IHKJK4  "   ReCs{96uAqIHJHIHI/:KHL11JI+9KHJH,8JHJHI-@JHJHIHIJHJHIHJHJHIHIB+FHIHIJJ 87'zgR]OaUV`XuǢ {omc`iX^niW`xzΪQb Ԣrb^EVMKzȳbc rF CO$   $8@R7-VKJJHJ28N#  F{0fCfCz?r @IHG;EIHHI=AIHJ7,?IHG;D*:KA#=JHHIE;ID(@J;DHI@'AIHHIC=IHG:GH IA=IHHIE;GHI;DHI??IHI3)JHHI>AIHHIC=K 94({[ˋY[gsUf>=SSmEveRDu[^ QݚVNIuBB嵽]x^D}pfhMkO{V`𖖸F  cLH]H{l`! " -CK"KH!K1K " !x=.KY>h:}v&LHHIEJHHI?AD*DL!JHHJ=EK<+E5JHHL'4JHIEaGvU=mda.N_ }RS~V1 >c[RTړMPZ  !,=,)+117h.  fXaCy$Fw6p7Zi?IHJ>-IHJ6/JJ6/HJ>)HJ<,HF*CIH .9 I|{]YX\SSxJþ [sqSlǴ@+ӸҞOfɲf^베 ~A`Y9G'9FTNXVCMf]!  ! !!  Am)\RGX5{j'AIHI@,IHIC'DJH(=JHIG+?IHID(EIHIB,FIH .9 I|{^[Zy^SyrE{MTHɿC ׳_AWgdGapgdKIXg>i73O EMO&jC|l T>YI ! /_;!  !! ;A{&6h:zRP>$LHHIEIHHIA9I .9 H}|TPZXS Qe|ROi 6xjK u)Ca9 ̿)RcD DrCPSMk^PM$ vuzd ¿?蹟mM[qpgU^G dn ">Vu  "iRUQ֡*7oD\BIHKIHJHK38KHKH J>,KHI/3KKHJ*;JHHJJI90JHKIHJHIKHKHJHIKHKIHJHI/=JHJHIKE,< S|@(H]:BnSD|ؚqUPyކi=ڮTHO 8͔DR8wAI[Fr?颉 qILMND @p tlDeoJ~;hM k3GFB -HE=(kj6 !&z[^FX؅ڇ/7y2*GHE-5py@'^^%RQWKĊw)nOKO TfͯqPCh[ SAgWLP սQaM,N^Kt5Bpn|Y aeۢ@AU gY[VbC QЀDv]Xt  eHIF,DJH*O&Gm "#"!;~[H*!/SM I_r3y39%KHKIHJHKC+GHHIJIHI,AIHJ<+LHJK,>IHJJHI38JKIHJHIKHIJIHJHIKHJIHJHJ24MIHJHIKE-5oy@'^^Ye]̈\fR{V { } ֌V0x~DD rDRVWWYFSԵ?ln(WǵyQXUvjEgWTUUSFFO<]!  "='LHHLIHM&9H#!## /ui7LHuF$@JHHI-4JHHJ9*1IHHJ>,HID*FIHI?,IHI,8JHK1:;oyD'aSzx<ZCS[hL~fbYeꨜKO[VkY)9=elMzi4JlSC@]IЮ!!EJH N2 #+8rXNT4}ܑm88%KHJ18JH I,?IHHIC+EIHG-?IHIA,GHI@(EIH.@:oy~@)})}p7͋TdhESF 㹙c$_^lH i qB V!:Hajk FOMfopf?PUx \UX uW^squhWj ![LHK1 ;MJFC0 R;mr6Fڑ`88%KHIHIHK18JHHIH I-@IHHIE+DIH IHK17JIIHHI,?JHIHIHIHIHIHIHIK23JHIHIHIF*H(ozx_đHlf eT$0q@SBLMG9-(@ 竪] =HRӰoZSSfQ C?IFOd.tVzN K   (U:LHJ9:KH KP >1z:K7eؑ_88%KHCGHIDEHF17JHHBH*`; 29MWR~VL! SHĻ9uJnN| ّgjmjjinXgKtՅe&Lm[?U\ KeQO !486IHIJH L]q$eAn6Lב`9|6LHHIEAIHHID:+EIHG;GHHI@&?IHHJ>&HIAIHHIC=HG;GHIB>IHFAIHHIE/4@!vyxqBcTHBb) ۂej5_ //"-8-u# 4_{PjR| z[| d@#F{N tMjI\as[fhFuXqb`kᰲ*I{o] WCF V?LH J>EP3MBё?\zS=$KHJHIHJF(EIHHJHI@,JHJ;1IHJIJ09IHJ/8LHIHIJHJHIHJHJHI-4JHJHIHK0<2#vyxq:@0ѓB2dWp25PIPqTЍ܊M7K\?qk6sUWMbX ڥDS&]W hJWMzCȺKR\LL_ EPFtgL N yPS\K! ! &Q NHIJHJ,)O\\.:Wy4l̑pDPLHKIHJHK@-HKH+ALHJ-BJHK 21JHJJIG+JHHJ&/KHHK68JHIBBIIE++'JHIDFIHIG 6*?JK)*J-2JF>JHHJ'/KHHK5 JHHIBAIHHJ0%JHHJ?EIHIG;D(7L+(KHHIF=JHHJ'/KHHK*!:JvyxsڃDx];moogzUqlkqKY6sL hhiiS[ ڪUnS CNkk#L洒NBJ] RpXiJlhk*EsCww7 U[y #T=0DKKMJMJHKB6T[E; KWTHTTUR<1V>lYLH"F*AIHHI28JHHJ==JHID+DIJ<.82IHJ:',FH./)2JHJ6300IIG*AIHHI27JHHJ;.IHHID+CIHHJ81IHHIB*FH I08);KK43JH G+AIHHI27JH$)lIvyx`<%bTv^9rhf~=Wt[ ߿oduq!Z)FIC t&`F&X ߯TTH8mew-f_ޔZVWFat@@BefD^0{Ndު_P `Hqa^MWAKLKO5 :G-@ o\8c__]wh<vT\YLHLIHKJH/CIH LHHJ/4LKHHI+;NH IG(CIHJE.2IHLIHKJHJLHLHJKHILHIIJF:(;JHHKKHLIHKJHHJ<-6'vyy(W!kn ؋^:,T|rln_ci_9@Vc KW\PC켾fM#Pk;͆FkGxHG}dIg och:P>`Di]ےL.Dc(P7N{ !: /  &')E&JJHIJ513c"vyr^SrX5f8۾c|qgpM_ΊqGi DFUyD~<zR NQSg9F MZ6VYRiqv8u0)+/=@.&: KseC{xW k7DC@k eqL^=b !yl+0017'  #!"  *)/7642Kecg/$go}| {y~C]LHKIHJIH,NN3)K.;PBINA,H!;A*GN++LHHIF>JHHJ%.JHHK5 JHHIB,'4AK0&KJIK?EIHIG7JHHM+)LIIJE6=82,=O7lSUAxr|LVyoM1\sAzTcOb<ƻ)EGLK  tлHf{ ,kþV\6ΖkTY ٱVi4"1O3|yb`S3]B> {YeRQGXw>+sR,1}dѾC~Tm|),]uZ6A@2$ .) +31/>getypWY\B012,  123*1213!"6?@&0?=>>EMLNLKLLKLJK3/FLJIJIHIHIIA6/.,+-/28BHMC%kw4?xsn4RǵbOjЧS6jUiNt_m@+t K{]0PgywQ0^J¾MAh Ni*hݜ~pWVgtR7>]p[Vn]E\Y7i﷈VD|gL`XhM),:(q8:@&%LKKLLFEEA9,)!"&+//110/0)&+*)DKJKIT{{x}mlqs`=?4 '& %2>==>7#AEIOLE>0%s4mAxum\5hh_KWx`DjIdo xRTXPc~bMlt+QnjT[C Rh! ) >aUcz赪 gBigQ&[AlcaN)uvnfZ]t|b@'5DLr֔aVZfQLq %9/'c ,GEDKJIIHHIJKJJKF?< ..26<@HKLLMLLKJN!IFG4./0"!"!":HFBYkhiigv:rovaVWSVF)&%%&$"! *"154?KA3)/R{]1j w X|{V z`x^&ktlu}tJ+dےuҎW9kB?8'S H}ﮔltzkU _kɁ ;@긻`z`B jﶔ .jphȻDfD ORXh [~nl u_+XbP\`vDSTSZ|A2:.< 397>??CGJIHJI:HC<51.+*-2:=AEM8 BKIHJKN4 COMLFI84><) 5w@!  .21259efehijg5vxw]Bd9 8f~Y(arWA,./ +;" :7 ) _{|I]+C%Noolpuwwqjn\%{}dr{ur wT$ UhՙRcsuO¨wgicbUomKNη A]Sγ_ru6YX@6ϲt mb{f 蔡9w^6JLkءaFҙQ 6, xL# %73#"&*2=DGIKJIHEHIJIDB=80,+,/4JKLFA#=>6!//0, %+*,.+);!,NKNMKN;5}|tMb|}}vkqC*jlkmU;=?)_{|LVEr:;nqnmmkiju.Kc% ! !#dwRQKtu ƒlrjj|ѵtW]`b㹸 ?d eQ ĖŜeUQkN EFQOʆOlK6Tjc\^tU ɖkY]j!6#+d@ '%&48'#$"!$&.39AGHJJKIHIJID<>86/*+137>IJHI>GHJ@GIH IF BHJJIIHIKIGFCD951*+=IJHHJHIHID3?GJ@EJHK7%KHJ.8KHJA 9KHJ5/L$KJM>,HLKKL-=OP:FM.9GFI! A7ዏ ǐN5<|M6i a{!SUSh5;rêO HZSNH{qT ۉ [Ap_ 9˿%J Nj⦅~jC|7Xl ǹj l}jlYdp|T 6D0AQn&Seq+  5&.zP '#&,88#!"#'%&%$&$#! " !'-7@EIKJHIJG9)-AKHKJIHIIHIKHIE(@IHID9IHF'B>EIIG(=JHHJ7*GII -N9+ILMYQRtL3O{9e8oX yw!WEgbӐ? #aWi. [YWwcgFz Bwrr3c \CKHP̱e\ogƬ׸@ C1^Q bj, kTF4UnI~mmE/v* ڰfWi9 ׷3 {:)IJGBC@:6,%#!##%$'%%&$ !#+4+',HCBGJJKIFB93,'" " "$$%&$&%"#!#+5>FJJIIHJ@-)>KIHIE'@IHHJ-9JH J:(FIHHI,4JHLK7-IJJI=Ga e\RYit1zz2V {w!W=^S d'1/-qxqt^+;~v:qN365?p\HE K`nr㭠}J}D _j =@m z_`cgCRtԡm<`CY#G}鬦 17Ig'CC'CAEHIJ KHC=7-)% !"!$%$ %" &+5@FKIHIH:(2GIHK4.IHHHJ>'FIHHJA'@JHHJ9+HIE'AK5:O$8@ SݚObꔏAWKXZ {w"WI= Gi_<:)"  ]nZ wHN*d@F .2&ФntnXXgcuNdcao >ܥw8e &]RE|}uT]'v *Jﯚ! "(B|/e\JCDDFHIJIG@92*& $##%&$%#!" '2(AIHHHG)9JH ,7KHHID&>JH K4/JJ0 <~JCOiIJfM> |x{]FQUV6MlWFw ?[xk BBʾβr|[ KΊ2trRV[D^M/RZ}}SWDɿñZU7Y@@<>AmpeȱHbS !"`8KSa~}]OCEFHIJHE?5.$ ! #&$$&$# &3AJJIHIJ:'>JIHJ@(>JHHJ7-IHK5*HJ02JH IC'@IHL1 B쒐g6K_N'4|zn }]nFi +XNjPx \@\> nBv>Vt*.ETyVVٟ`R8'a @xMG੦ A6w`MDEGHIJE?7,$" #$%&$&#! +KHHIE&AIHHIB(BIHHJ:(GIHJ.4JHN/}{ {[9=lAl)1|zntE~V Hm7hVYVj~cU^xscPJYu]o r VoWMLNi6idU~WT WYWVS R9 qYJEEGHIJF=4-#"$&%&$"&8GJJHKC+2IIHJ?'>KHHI10JH I-2KHHIE(?JHJ>)FIHJ uS_㐐 n]Q5:Tox4*1|znGVaQ9H{"eq,DPPËMGQڄ7Fw\DBkWkw[a.U:agY?ܭ Qcfg [7 m[JDFGHJKID:-% "%%&&$ &5BJJIHIG/-FJHK?(>JHHJ@&EIHHJ;*FIHHJ/2JHG)9JHJ?G f6=R]wNN0|yn]H:QHPn>\avpwSRJKIhƍHI yRn~-'MQJ[!)G{isE}> \nj[mHXA`{O 8 kRICFHIJKF:+!!"&%&# !.'>KHHI,8JHHID&>JHHJ?(EIHJ5,IHK,{ߑR7?p{4 Q|{gqe`}WJmbSFqYLSl Ab^ h?sߟ$Nqn=^b\ M| 3ZvjyBNc4D2_KHHJ7*H J/3JHHIG(9JHJD(AJHL jbm d5F?fk ]}|^OChu5nTjufN?SC sr=iG!\ơ{K;eUN ߱{%@{ #zFD bWek fBXЬfVV _ Dt`PwbOEEFHIJG7%#$&%%$ !(4BJJIHJA-+?GJIIHIKE--DJHHIC'@JHHJ:(FIHHK4/IHI/2JHJAQHf6>nߑSLY \||^jyF@fl'[n =^P[ЏؚwcQT`ŷNbٱΖ[#& NTRSR^ jLTQapjPXȸ浔dޚ~G_N |`NDDGHIJF;,!!"&%$&"")9FJIJI6))2?GKKJJHJIA0)6IIHHI,4JH G)=JHHJ>&DIHJ<(GIHL(OG_r>=rߑc62/.**+.09:@A@;6*)4EJIHHIC&@IHHIF)=JHHI6,HI5+IHIB@RR]Nܑ y3s'nz|8,yCJ[Q`cVȪ\OP;hdx֭s. =Ae ,h|~Y 8aM kVIDFHIJJE9*##&$&%! ".:CILKKJICC@=;10,+,/4>GJIHH.5KH K4/JHHIC&BIHIC&BIHL*jVE ؚrUIݑx3soz|0IzMf6VFQEtkR DzAJiz_IYʗSXb[VXtQQeQ/^4d}E> 8> nPGEFHIJJB4( %$&%$!!*2^s>:p{G5$w}ShzUgA {XzG=QMpZTHkԂ=h>k*~esVShponrnZd|эiW$ pWKDFHIJKG?4+"#%$&%#! #/=FJIHHJ4.IH J-4JHHJ>'FIH*8JH M+ZjJ2djU;"w~NGgzzTl gfD< X>AZ #|qP_ qPQGDisPPfQ{v\zs,!  ) jRGDEHIJJIB7+"#%%&%#!%3=GJIHHIB'DIH J?(FIHHG*:JHJ5,H IH 8ZBN0QPX'/xvOU[y(mij] O9"zMI_ydYՊAyE_GI ~ 븗UMUgZA1.-5V]?:Zq`? +Ҵo-}gSEDFHIKIC6+ $ '$$!'3AIJIHHJ03JH I.5JHHJ9+IHIC(AJH L2iqG҉ O2P7nL|{^\wN e{JhރbwfmYS!}ӂ}j Hf 缧JUDTcVGPaRrgbY%Gb')$ʴ%k dNFDGHIJI@2&"#$&$&$ !*9DJJHHIB(DIHID(EIH)=JHJ/2JH JDSeHٌ N3PmAJ|{]d}Jg5Ki}ޝ=!||tR AɞNEF 屪K'yP %[Ṋjpjq4SATT`mɈS\$ wcMEDGHJH=2$ "#%&$&!$.*GIHJ<(EIH M$Dg왏 _B3QOYG|{^xb#z<̢rb"+4)Ya [}rrbqTX˃wƵnbD ̐I ݓ摇׶#TKVp~KUjye;RxBraeȵYdTXavBFH r[JDEGHJFQ?~""!,EԕP"ofIS\LPDb@zO DлAFB ȰqYγTAsi?YpUPWwK| vdxHا 絥ݸRH{Dq[JCFHIJJE;+""&$&$#! ',7AGKJHHK6.IH IC'DIHIB&EIHIA)DIHI VkŌ"G順yzzR>9Alj?E}~D |~NjCx Z緿mYqbdRdl@7V aX7p𹔍NĐf?j[Dpᏸb|UwH[spOVy_;McUFhUSCݲiUGDEHIJJB4' $$%&$$ !'1;EIJJIH+Pm>f|T{@'[MNm=;yPGndIJrz  UG5EWԲϰ sB 8LSz` s`n:ZfX0=W/pVGgAOnkRQY~MĺXXyۓ hVFDFGHIKG>1&"#&%$&%!" "+5?HJKB'FH J,9JHHG)@IHG(@IHJD_EO|GV䍠[=toyH le+zlK[ZAuwef"lI B~h_b}~|ҎH`QISc JcL@M=eU XۜrWVs7ƾCu0۷ }aQFDGHIKF=0%! !%%$%%$#! '.:E43KH IB*DIHJ7,IHI;+HJHHL0v}OdL\ڎ U_o tAx@TStٳnBw_QyFd!~ֱs[LCEH IKHD9.' ##%%%' "!&.8=F54KHIA)FIHIG,=IHHJ(I EF<ҧ|WR]aޖыzS3Gpc ryxs*~olJCS Φd G[ZSIV~bhb$ވZοIx^OlZD\@@a[gíy> uw֕u\GH IJKF@8,"!!!'!&%%!"!$5FJL40JHIA(GHK5_vyBFQRiřWW lN?=QBwyxpMY{SS+TwP %L_>v ͶZ_ZmGQz<XS| ~wuԲbN;SKaKOVfOCC-I=_ֲKGHIJJIF;1)%'$&%&%# #0@/;JHJ8/IHK(ON@<{A2@ϓnXD:Ha~)vyxoNNBUcdǾUYM۴VܭuZeX8-ArCm gYXjM߇pSYXg\ka]DOMIվ).s;[XtP5ߙrFHLGB3*' !!%&#"8HJJIHJ.8JH K=AytnA쑋bEI{䠈 viQ>;FVqJ vysnu~a!UU QPmBZ DƻOa5iZ 9z{jb@u ?smB phwOXm>S[`=db96dCHJD zQRv%&%&  '4@HKI*?IHHJBfIDu~ Ɋ؂K[⦊}yz`RUM@>?Hb{EV0.zyr|HJK xÏ&S?sSk\5zIZZi Zc8UzۘDoJBk`gNV[BhFTcnmRb_JZ󾠜ޝ\EHKCs+ڐ!"%'#!!(37*IKJJFERQWE 3}XTPm{|~gC=>:8:? R^\fsb>AxswMZd >AnjiwUœ٠ ܩV벬ɍ~'M~d {HGB!c jk[Y XjVSueh뷯gz79å:_O꿡ީJGHG*(@SC#wgol7lJP꺗mpoշ;l?ymҭVLYF_/gxR޲d tmbcpVu rQ EnrPK8|u"Ng ۆ'hl8 - E\TUDTD%1ODVk^kYq<֠ߢqDHECEGHI@/c-_7BD!! "$&%%#!"K/Ux`v|[qtxB5ŏ㴎>?|MKv%rJc@T l ZŶvrۺ\Ph Av \kyJ6@fMА\IAih c(ѿJPYkVnAPgVyU3RH:9 駠ߣ iDH F\taMFDGDtZ;eX9B-G9+$ ###%&%0I.D;-Tgxzyrq~J|qBH~|F'e_>>EO{i dX`\ :}R{s4HU\FfJ1A}l UAh]`r 7=cRƺBZt;!~jYICGH EZWZ;~1JHHIJL.*4*!Qz~*Knx!w=,vyt{onX?DS~yrwcQaxJlg cz}B'XKD BMvBMW~CduXxy{hW[^pZXwKEo G xB WWjb_c^HR71 VdxI=%kMGDGHFVLj[@6JH2IF-BKKktyU`<õ<-"9LL/1vKD@@Au@uVv#KSaDnq{e|>ǯaKrK|轎:ѽpd_Ī~rԅ _j}@#߬ rm-DA?[Jsğ;w`7zXE[ʖ~\JDFHFR~Lkbo,IHJ>GM*JDXGIvŪv>&t!@KMCYu@wV~w!WN~IaM`NDAwz~lQ宎TNOޮ]MmiVaqqrlVioH^CF_Hfp LOrYucgxgcM\{IPT|BTޮfLDGHCPOiC??IHHJ46@FrEu~tRVAUCCMEa~ur}:Z {w"WiM@N ly05 SQlCPsxYbKaeAHVTZTO@ '{ֹ Xn{zHJnmh¾IuO~XH ǒܖdHJIDCBDd^-VrBHHI0 ?b=TDNuVLbT]OB<]vo:=|x{[?nڸoiO\UT?H}F? <,q`~ۣMnMV9T aFRSSUSSj-mPOXVDNCrtyZ{[ûI;\-ڶia`u].r=HJ?,2S\kILB> H`\ut{ow='7|znWxj9Y?[ľDuEw3eq_zPGRPȻǷ62jlCK_PCôNLG WQ:phTDy]ùGKӫ'ő݊w:a)d{R6IJ8,"ff[||2A x``=|ADxYƻӴHzDhjKFuOfCj @PgPT ڬ歨\ԋ_I֤ tutRe]¹VvOc}Ԣ^4@S ~Z}ToDeHNQLyNTTgT _FQM ustz p9gh{|0GVS4cy\hw-AM[ܵtnɄD[Q At[YXGeEޮҩSÞL\_wn_⫞AS߶CTDSӑ֣O&@ ~Pm7cKpmFqPBD P;c Gl9n~}s /uXmz |1AQj{cP{ GS|EZC^ Ls{QO >wu֭:vCXu beǤWVNܧCR¹;<;MYئ#nfp3MJI4O3'w|6iij=d0\Q pg `J \ʶwrcLJKeѠ ZpIf Pc혜jG\aoA ЮIr ;w~yw"fü:P'E에ڬ^Z&nk[||~{DjKMSLwKHnBb uqے hg]O?2Mm5#v tZcBL\TMjbZֳꚟbcDwTZ~A KmwVR[_鵦ެa;͵Oip]l! ѳ }C=gܶWjT@`Fښ&HFn;;HMkvTC[LOsYRS\dc g],*26,5i_E@: 9=IISam.(xy"6q`~as;z\F^SFZAcDYruLQP﫦ٚnjC> MsFEqt uqs^[un@ﶿ7u_JwٮbOYx_KM|wR\WX}}vpQBpmqU ~[cibRcnzC}{ ` pk l SD}L E\mB Гt_Z]c[Qe {cyR켮B Xڥֺ\mQ|I oRVUiZ CF _Vt F Vtܗz"ZiE_KjUGNO=Z(J |jM I|{ ]ӘN/R2rDy"\OHicx1,NkRy T\XCKMТ䪒䗛Dj3{I9?>Pm𶹾APJ(s ]OAV ^sHKJEPBOrc K𶹶t oCZ yNLJTbPpwXN<TA xvPBYFux@'bz=mK[Zq3JyrxuwywyuzsE/lg1; VtvqX|LΈCo{٢/WQE njn9MV_E va\X궸F?-yH\ ߑ7iaaiA֧cDVcDLX؈UKI'oy@'uLw/KV~RN4Uv~vukxt|{yOTTbu|yntsq6_oVܿ횚tVc GYIRpTK0#[} Զc nT%e*z(;kW?yBݡm/S̄q bUAkS|D6xXNBr |su~pryC'bF7g`γ}BYSA`7PR,ltNJ@Rk~|íuvu~~~~|u$mrt` ZsOMgmHVvJlmcQab\SRRJ2VBm fŶf SJ8w/LQN_FvyTc[D FujHvMJ]HGVoVLPMMZwb #vyz%Ib}~G5yJnyCqvsm/  |(9+ϵ}}oto{s{h2xwpwj=+RQ3[M-ݪh2\mJBJKPUWI@,CcﻶY Q)c0ߑi7'$PqcPGXsa\RBk}kvZy3fNMIWt^N]u}pWOgF/yyws\L&+UXP̳l|~Ixc#8[jđ#%5]Uj/-/..%`мwK5{{|{8I|r,ƢRפ\}igIѺ-y>cY\ckQlININL`MSReiL]\Pf7=BE@^͸R fgo&בJKC"`NDfPNl@TKQMaaxY.\EzfKJEALMKnfNn7Ixr7?W&/$)°wux~y~~yzyzuxvtr*n{wrxAhLNyxKp`0 ks~|wwȖiJLJ虗7TJv~so}~OAyyu}V'v{y~z|b#nCnadNqdሥZR ȏZOgCĠfR fD SC]TmL;& {LPF3U_ّQqJ!_H`;VdSta[OLx\CammVGJD?@QlVO{PYCxsS|vd·1lzrruz~W*|}vss]l.^9v/'oƩ|u\<  +kX.ZLլysst|z`z hwvpot/zfT_)6KTd+wg4cjp\cYUD݉KRyd]^]`D}fFwnMw:IaA?N FM]hL`uttX[ZEؐcN@\9mcbFSH@x]5s_VDAKFDD\bOFHFADOcb.AxxH#M=vqwu}_Syvssljsrsttuls{x}e#\~wnv<;}}o%?Wp g~moXTywvoqoxztvoug GfWc ŵ>EpWe&`r*-1-855B-~q{O2zstquv{ $V幝A_yoi}{#LݾwryuusuyDm7pRyII|0mH70Btzyz=Myvs}xMy_Vg4zZvžfcmR`W8L?nPhJyRصhI$>U~aJDvw{WS?vPNDLdɅeWw|{}cXSMZ΁cTRț[t½LqӱCQbg t'yE^G2cZTٖ[NWzWk\ƠYOx MYl٩dLLKPB>5929MQ.9=>6tCH|uu[0>͎wv^DSPXoػ{n~zuCV{8q3Pzltkjk rztz`n~noP';~#LkGWLrNkDFSQjzaMY'ԥTfhsuyP+o}zyeF\vzsEpckLK umzoO^fAD Xd}]QRL7YA<P=4ѵyP'ݷVxUhioDh~ەOPwD4<Kun^NMRTR(IT_bGrѼj&$)4?NdVDD*@;@2*5A{r}9UI&{{vr}v{[6uWs{saщHV츎|vmxx}~DXwl~OJ D]5? GjWHRwћ_TSTCLX]FڰwH-ǧ`PWopxuKj{T/TNT~Nދ]c]RU]5TRhmQT#DeFfwjj V✖ѹI|vKɷJ S[uLuU༎VrBm =xRNCME1T6Zuӟ_P_2sSP{Ͽ~b\]^FGV_^n{sx|gRxm 778-(uy{wqwuw!pcPURZpf*u}P^ߏ^F~ Ĵ{l s~{^YgKT O"L}RO#NwOt]G|mwE|MWex)|X޳vxpeJmKES?@%Do}uswt~PF{FgNhb\fAbɴUiGH;krgMI crm; b鿪?HJD*omY.jOD W]-}LxGUJjcuevjVĕHRM}[^\h erŖyPa*3ldT \"̺zdca^_bj|og^u@~ zfeHZ+Ë~?nF] '}itS)IyqWEA8|ǸH/..ǸWWz|utu`eO2rpB%6T{~zxnvrٿ{dLIJVhdTQMU `駱G`VJ@nfGMꞎG}h5uVsJfOkDlDa8?VjekWp|bRF:sbkJgivMW*3~l k?tqydYVZVW{7ZTtxPw]\:Oߎ zNG6MwHxPӲz?i\Y Qz e˶+o(q)aͿz{h>)-c~<",8=T`u@:ohidRSU TAKR\L,E=FAw?ϰ6J\ohKer~2ZPTas9d[eӝ#EVgkygekw^~?vob т_sn]c'4||^OǼnp| ^yF8BO|- c~YScSTFCNZoOI[iIFR|uĹϥ2`wk`̺^"@yzu86nvPs;UOaSmT[KtNQF|Ix꽺=c^O,?$v| vjȭfA@CjCb["Hfii{_d؍OTvlw{I󽗈 T||_PY+-5BQWa~*C< [_S@ YGs|TI]FVF:t tk*"8~`~ldc>y22}`^{ 7oJ[Fjuߑv?XIroO kSoL!OEo|xNi}`uH-5yţfhz|Z SUzPRH^/M'h$gd:ɨMR[vU7lMŷNU|wqd}yqwKeM^]U!TNf7b 77۶LlKT[BΌߑHZ?{UuߍA@G!sa]Pf\ݹEStuJwnzXmz|371 D: a_S O4%!hORPfW N?TtNϴ]Δ_s}~tsJn~{}בSBdQKP `P‹@>]zL3r}uaGZTn \ϮQuW`dE >N[=>E@Uk `hI8yx|"U4 Dļ|E׵Kkc  =RqXvm P-sسߺvox~rFM?H ˭Hz}S ^LDOUc{º8(0xU?bI N;SlKYyH5XUByAH>[}W(G^wbZrRYĨiGw1&w~ D*նOAY~/'Yf\ G^K?JRi ޡi;eZ;-R#޹+Ěpx{zSZea YJ^spRZiC> i\û$q[CKjLY!@{AсBrl$b44CXDwVnMN>3VĹKѥKS[׭΢0Ku@}xt~Azp-⻶gZb靈 74J Ms/F{|Mm<NiQ Ak[ yРyz{}xuxqN~H},RR 渲\ArZw[^^=w <6 r:g#Rhq/.muHWR\庵{cMgF}{^U`{#,tʴf^pXxae# f MV +hCD`GVqS غ Ǔs{s6.8}iLzJ> I~ҶrNXzYzEWMC¸5)oݾMhUrd nD:vVRG!\IVJ)MEBI ~eϐdhnԷJ OKX^\(λ];QfzYzwgz|XzWMs+غBE D j>`& { d$[x{S{V>,lghSϴ4=ߨqwyOA9(+yM˺P]AYx NKkw5 f=fLBmDf H¸4@D۶@AMHkxɦ` 9VrqI Z= ޏn XfEdNN_XCz¹taK u1%{]~y ݯbXfؙSJ*kAM{grNsr_L`LY.ODS_d]Ӷtvyx'VknZQs7yම\A| qԌLWN k|QIB SSKS `zSv4N`66?, |WX?\יִI+BrtIpJf QWzImGinձ:=TRz>ŀJa Ҙv^St+۔Q)sڕP|ZO>sqRyXe9*iSVO^Ye 3JElIDz A}?saG{USMPoYejm*6I vhP[^ Щ\V^'ؗYC9=\弖c`SLhR~i<FvE۴JpkDN`|[Զ 1=xs!%qG뿶UB]gWIXks ׯNK3^RZ%Op eIILa5UGc %;AB*q}r{YK:UfEۣ@.] V;lgSuVM]CmVɌx_\[vz/יRQibYx) D]Q^pG}jNZrN8MiPR&zbZʵ K}yp9#@?\ ƵKZX6gE^]w1hkKp>'Z >6|{M}YBQ"]|qOL`M4yvZ嬚kފmK]Shդӈi݆s ur,BQU`JVKTIj$ r4ﵓpTUx[ QpDuvL]^uMIy#Վ8omIT_tԢX[ Y{{Q+H ƶedrRa3Eޫ6\qBFWbss|yZ ?xWX U<:IGawJje%MKKபY98}wp1訪;uAu+OTv GLLBj@[Og< _JiX>w&bRRI)MY5龔@VQn֘A [|?evJY>V}~>_$geSDQpWZwoO`_J[그 ʑiz|H&s.M m~UuckCCSjv}zDߘhKeyrN#AOg*Tg dYHIŒ/Gvv7SexLm`Oz^BΟݡk ׳m| PtQCδHmևCsHS[=YΐWP=h8+6_Gdʻ{`\o>>߻q- T{WLr{aUdFQm< cJShgnjGPP\y[۵ ~w,<a^tj`Чp`lCxR4\R 'sQ @ҴCߋHOΖKjۯqARm 'sDO|{ǯG8 sQJ[^@gWqwGC|DF[PkueIDV<O^PIӦj= 5=J[dcbgo{UthK0}PVޏk/Li\twXL[w?FcXG[~fXeQpOG[ö B7|w!WV1+B~_Zu.7bqN(DV7x uXr_e Hi`__`ZQi[ @XI,mBǻRVΏtfy(yIP rafLTZtAPYF Bga|x NIDل{Hܯs]`׹seZqҹWRUSwAyOJFZL؏oRue\xT jT\\]Rغ_[Zq~鷸Ywz G]?:rUUUWTT{GYRFP^qRWV W\WtrmC@cc]a;ߵysverP= ^e|urt ˼JgK;VǺY RDv{N;NwgFvu{FYײ_ixkO@E\eLwaE qMejF'yQFowhܼjK^دukKÍfJ_HNDI`qdNgł]CV}s eR̚ybZ[s ݬ{} ԕsxD' vSUqZ:);UUUWTT]g=Op ZX\L@>i[s> x|ivP=H𢟠 %AUWD@kjPsXWmlb\e-EE:N\`CkphvUAFƯ7BtewH<6ɝzO:wlEe܌tTZxz_QSSYev@WzOVh9sDsd\[P l]`[yvyz+BۃLM F2^UUUWTT]gxD UztA dI: g5|KgamU 򮪫iBf^ׄZ{Y~]ATn_L83 ?TABKC$^Crcc)ԶMN~RLpӛHQyŝkWTpAXX*_m@IBI^eeZM[QJ kxywY@ɴV.ŪB&UUUWTT\i|!^XIS ]Rr,LTTj@ǿN\@Ji[10hIfB݁L "%},xp^[j֞eDoyKR|`Pg aS yGZF+JjWNZ]et 39~xt&a\[[XkmJD$UUU~Vr ^ TVNHˆ[kTbpEi[Z_rU~mHTr Y뼪iuEV̵kc H jx{tzʕ ‡jZW\bjZXdJ7=>}L]dA\xQJm?fͤru^RSZa``aZQlWE CNs[bheFIu_\wG +<xt?2H#UUUGRTq_ T)WDu'IOFCǣPwxIzyRuNr}#w5ֳpk Gʆ ӌ}urt .rzwQc|e-֊^R]Z͐wmCByo?zDYaGc̣q]O<{ qRjy{?b_HFTKZ8sQ_sg FT}xqHq3I!UUUXU T䃓u L_\\{GmwYy7WX["'gKQz ЍRHV"n~n~LN^l g}ɜzUE]cJ GМ}d[Za}BJ&ѯgJ_lMdif]bw\]y}MSdx cdZUpWG^tG Wbhoy|MD1+UUUH]TT~,`ۡONXWyJo{Ls ߢx|{YOSZv2Q賆FcMgI?ȍ$$ Ҟe?p%Vy;qX&ŃIQVZoRuAB>K h>F ٓDeyu? dL,|yttXh¹S*>UUZITTTA{1VxO n_NY] d2z<oOLT[)Qmȷ uyuU}Eߏw@wsKYRh y?BNNfCME$\Im"d|u`]^/nʺ^v]˙w|{|hI@)s{0A) K}zwT?sܖqEzjTs^ t@1|zm ƍ8O'KfUU.KcTTTxg~nuI~Nty<ut}dtO$׳ s' 7y9I2?o蓐S z| pn?i\\[[Tᕄ1SfIUHv ]o%2ړMLD\S\=KyK[cOunT[b\v^b\Pdڃ;QC|qaWeQTcA4m܌t vRW[ V S|zi ʼ< T|En]UU?ATTTq}gG] t:\FkmIg K{Ib~WbZsn<|^RRSߓryrsP铓GWXpEWcQ U}cW-ЇbB^TUlʁWQj]IW. lOo wIdɧPE{P5'L_@%1?+KemxCx k`rWQM g{|XwQS(sqIHUV^^]TTT-y$B cݨg~_VꧥFGbH쳟mJv Nߒnzu}wzqmehv ^|4CS J5AP}xZMw%pHuTMXOѷxu~ ԿR_u0Xf@F hU)dcbD:H Zm{\`Tr_|=Dd`kz|26]6gP KUUGUTTT}[P BSQPwhĸRŭx6o𗏎YR]^RyUt]zq||~~sry PY>ܛ}Yy ЖbhHs[R^loXRSQ`vtsv `zFQGbŔtDĞkQZgf`VRfv!SH< =+N2,5 Z~_e ҅WF{sy}yyhdW %гKUSUTTTvzdqcW`MVGU~@Z?N˶cy1`K<ǚ[]btq콖umnqmvxuzqsy _ӈL)7 ص@Kvgңe?r>sDy׃IoEKRmL[ =^EPٴOUBI^xdQR> k}jN{fѳ{wmyp jUlV ͐y Mof_,lGuɬP[pCLP|F~T^w^]tjSVo>= N'6WjׁS޶[}_|ɺ:R\ȷyt[YjG|yoF '&zKUOr^UTTT bzM(_Jp[k=F`upW~2ПFfɬn zRjtsLOէlt~}~vz &WK]FUUTTTsV샓 :ze\a_MT 1mqAPĶu, ۜ|\K| tt{9srjxss܇t^ GhN_Lʗئ5EQd`Tc̛v\^[Zo{SDlO[9iI^͙~gtڗEvU/ dӡA_v̼Qf}_Y^~·A|ozy%KԲ<  gKKUUTTTsbV-Xi";\`wsIqɔε]hXu ^cHW6J fiklz]/Ob H eb[Rg {=zJd NRQGKP{fRNtM1 hfpk)Yͺl}_ \uſ ˁutyu{¹HqUmKDBUUTTTv-jHDNY^Q% DGlٳUJNxO 6 abhZzIsVD\J&&yv yPXrHNpF@hOUTFsh[w]Վ9qje\f~_YV_E'zys ɼJgTNQX^UUTTT`8_ j,XFBwP9o׈ Y*7PHMNRHT:f7V z dmvoŰQiu뢾 qZزpT`TSa]~VX*#axwTgkcZ OYKĸ`a_h0úğ,@z` ߌHh?OK &DFSUUUTTTf[UDAjn]_Z_^" YP} QaaAtfo;PdHG蝎{lu1IgA 9[XNaxs rvAN]`S`VzCF|s {Vܛbonf d9a^Z_CcR|}C& iZ; bG~#UUUTTTh D9S+^ձzGPT{t +OxEWVjIGFkr}^}df aaӶmxYۂ[$fxmQR__jȠ|CT79EZQud e*cuzfd wrX]\_~f`iy%E c2aº5knIFUUUTTTvFf>|^^ |)CJ{zؓ~!δwaaVEzKEcN~KbD[J[t`[ Gd\| [̳pP09||`tg_!^aUUUTTTKXN? oyAjમ{;u(N\?LyGuwjJhe[kgLvE|A&AxooNPIӽdYdT =t ɴwzz{z[0RexkCt7uReYNK EţطZ~TG8P W||IݹwPq UUUTTTgxAB b|BuT͸m ܲ@kiپ DcLS&LmxU}ewq SaL_AB>[J_MlK `]RQ_r} 㫝iUS_q ōRPa8|obQ\z_U\v]euf}rTQlWf{|,JrU[W%AY UUUTTTPmL6FUM7I N5Z@bl1̾ S+CO{`S%isoqm{SJlr<}bYUxdҰGq ԧ}oPTS RVt|x5Xh뽃XUn GNqAxvKTvwM {a=O=9#{w~ zOV;BRUUUTT]G WI sؤS{V@ J[l]c#z θ ιSX+GYYɗqmhO HMa|rYdYTGniU Ե{\ZnҞiZdkZ]qsvp*.wQSW > b[ŞK<J"E}ynC-v UUUTT?N``wBC>8blVR;^zE̙@S ķ°R5L}]p@E dL\}P_ғ3NkQH [Gd^C ٧iTZow{]WO|OXvpVf.vFq$slh aۂK}=fz|ZKH{UUUTT WdNBgTCSmçNV 4Ķ݊iVhwJ#v쳳a'i~lvW:c]N؜w BHDO8h Ƭ`TZvēN$lJPݿ]sQgyQ HY NBºK~>ûvxEF{^9&UUUTT1[Jv IddpbZ^TZW Dʸ կ^ OWbx[Ji QLYa6l"R~d\W𘏎nN1KQ WiKSY8VŴuz`X\]sתq[^ORY]t??GZzO_Oy]\EL?sMlvy{.8E{R:fUUUTXOzX ]^Vԝ`RdFX|MNJ墝KUǵ# ߼PEGUS`[d|BHp3|M[=,H|3^PXyaR#ccf˔ \U`RxvIXdVRRZsr{-(V]aquZUyoKkGv\N_eRopSRtEshlHHM\83}xwur>bލNUUUT9_JTMП aWyWaQ<Y7` ݫm}pJBRVW|#Nlb'`ed{x^EUTz,goCQeUUUTm2TWӟqQ_||}wWQc ﭢR v[MxJz} ? ɬPvCUS U[BriIj:Gb~Y)Uw;$^pPQD 3_S|Y~gDU RIV ȑ_\n`PC`zKns_SocnSCcz~BC7\Aczz`ɫrZZjҫYMuDGZc+[UUTIX`TI VLmƂLR| י[ ^$'\PݛL[ɩFPtZ L gGvF"d~v^dX_^j3!3OO>[ SSozs@^a^Ul ѝ|b^DlMoTz_h@S}P@Џ c`UB°b5hzw~>hZS^w y;SD .[ Y`UUZ}IUT`qJf~?󵦐dNW%`Ol_"2{߹ޫ\p  3i]sk\Me,Eݭd CqAy_n (:K >Bw ȣwM߰U^eRZ`YX1 9;ECCE,=兓?x^Y[\QZuCS}YZ3y[E^ayHZ8w g~w&9ZIц^GJ na\UUE]qTT=E leՋoPힴb!LSn׋*@Ͻݶ?MU=  ~S|e GuW> b}A1S^ h\YUhS$ː-B1ayf_`]o(_~ `\JJX\caSeL5pd7c|bhù[}EBI#H|yrzc]aeS N vUUU"TTEq hywJ𺶸n?`[$'*FlkTXRqy@JSO\RJSSqO[qpK] \^ScQr?`VO<{bώ_JrŻ\ny|V{RjރRL}KKUaUTTTJ0RYufP| Q᫮KYNie߳ Ov1rQtNPKRf[.\ HYTS|QIa ByOzQ[ \xQҺVtf\qVAlKjhH;ֹuxA",NNKK4 UtO^TTTSPՄ_ٯPSSI}pn[Й_Xty8QAar| tRe\v\,bO~AS _[ik\QJԛ`8xZXztgGZ}TuݳXm q]b^пjgB>ȶSoTmչA)zxz*DŒ<oKKZO=UlWTTT@R}c k=rpIShI'|1IkL}XiXvBNREaT jJcرec e_AGR clx 7yTi c-]_e]oL?ʶ><ֹAFxv XHHO TPKKdUOUTTTUV qQCRZm֮_xQQhXzSLHl[0rCcTO/ic^JU0#:Ӥosppxp}R\d9MK3c{GU Tʷ=? R4ku`M~kU0ضHMs׹^{zdVjpH5NKKWHgSUTTTT' Klb_@AJ] D{OrN݁`%>VJEOFp&\NO5a &pJiSCڵ:\yq'@a}rX^L o%XMT{F|rM_C bú?j ]~`YOA`}_iù<عzw|I! ? FKKKU8@UTTTH O>J>vpnN Cn/gmYfgvfK ~^Eh's[GZ=/aL~Ϝ{ж~bbq\cr(uRpMb_\MkL WpƹbeѥGUwb`W`f{~PdPعm_$|w,=~тFhuE ltKKKUUTTTJ Y g~sIMyjKbYqqz&pX`A?'V l;ʹC|4_Yex  Q=IW7O\SHbMXg`ze^Xwݹ{QSqY:wEZROF~q {2EPl\R[zYq[dq@Eٹ A|xvn솮ů]? yQEKKKU~UTTTFY wN0(͡tKqWQQNrgl}Nzx]~Fin@w\xRyu2ds hwKQevZ};l[C|ߏfJr=\YCSZLME KB=ZYS[0lDH4۹]|{hĶ긴Ӏ>f =KKKKUUTTT.o`FTo]䧂|xS洗fYXZM2TbdW5b1V]stFKQUmlpYxe5f L}Q<WQ6HHNQ}N[Z^cc`Z`yPYͯWDaczBZuQvwQnrHfl[UR\8jlFgķPrGܹP lz|V õw̶ӒMP}9;KKKKUWy UTTTT)i 5:IQS eRk{WwTbDI(LHvl gSJăKלvp\wRrV1Kkք[XH9D7(EQh^HصbKo=GlI۴J%eiTGmO[dkR_u[2[qVY?jnUhֵrgNqݹ[}w|,=zӉWGy&LKKKKUo;#$UTTTMU}zy&oZH]QRZ~^ۂU'C`bS[eHW 9Ll-FTt`?چFfIU jd=EնD<oLw]kKXkQP৸y_7޹*9~w~ }껴յÐVDTKKKKVUǒh(cVTTTNc%PߪbcJFlIl=O@`7-QykߪWNG @XC` KߥoS| ^ZW:YVx_  T?1`KH}A_cHCDXZ~QNtXPϡ[=`XWr:ȳm1OuMI~x};W{f8mh6}GLkq@Hɿ/*A^UWSXf%iHAܸY^k¹ueXY|H^gH~<sx~M޻tbRBYAqKKKKK1tU7tTTTC BX raqTGk~Jޏ^XKkꢪ_V(zo}NR`Ck4fKO?Yge`X3B\F93jVq Qz]]dPYxߵ FBW {iG콩+FG@s_v>xt;~{@TztOV~ZBaYHV8Z}{cf./qRzGyqxǩPzT;{Fn]qE\f͸J=úXb!xx|23Ȏ??[vNKKKK UfRTTTU<X=oq8S{eiHDFFr}Jo+ N]VgVXPЍcLT|5LtmL 5L3Yghޔ}S hbW^=HIjEJĖ/}{cJ=?~xvԴ¾`KDk:&zUKKKK< U9NTTTN. RN f.ëy2#^ ZOYi]X{MM`ԩ[ZJӾCpr[# H>gw[N۹OHJp8Pg^MVpߙ@cAqCy}@nCu:XdNPDdxYlPP`GD|GRV :SKi_9qJ7O nZG Z|ylܶgRCIXyL;IZ¼MVMKKKK/]XLTTTe\]jsmu R1Q cda߇UNEGRvO\i|CZeAV|[wxp= eTgpUSnvufM>Қe_kٮ\BZWbȏ4ȻT\?~׃JDarP;dwÙ45 uUF0ssWkZ8SHLI}fwMpOq9Qeԩ|TS sx~@ ^³U9XKKKKx{SMŭZAGUTTh\iDBjaVz@jzbYOɞ{z>ZRQZ{YɼXFL dxA{Dj\pQXMhrpwzN WF̀WuAVOI꼯_JFkQVUZKX@QU4uI;ǮT^ppPyFC_zhdT7R>Ixf^WSY5DP{S~xբu|8_^zqIGNYy±qY\su}xx]eNY դVEAyqRZKKKKOGrUfO\_TTj<_k WĵrVfcMFItdQEǀTk%u˷E\_CNz@T@J uz`,QFb1:zӚTdK AٔP֟L\[loK `GBZHL=D˧?tA@gm@=lkBEe?rRPSPB‡CjBcXEZ~[Upvg cMOECBIVWOVpoopeSRXcs0@|{h鵒gU[m ˎlTX} KKKKU\RU^JTT1wub MooiLay ' IASiVu ҋHceJqyoX=Ynh߁K]␅owá|AkpOBcpS6InȨ<=ADYX\CAR y?Z^9nQMPdbA þ fFiz|W齖wOSPa`KdKKKKMEU W^TTjȟNvqne vM9m "XTuZQ<ȼS9}l|xJ&NNn{1IxT@eNj[kJ¨>BU=2tR{Ho rNy\|'=SYrjsSOFι@{&~w}33˼纷KKKK7U Ve"TTq(|aX\pB ]Ƹh8eIgY&j y]VX5gcF S uC_ ՌSNlUhP@;Joo`r6mM6Ds[`ZH~Qq;LCZ\SYSWv۹/;}w|" e@7㼷JoKKKKNVUXXmTTX/~D|} U9_mPy QZaA~թ2˽CѴhexYQRb~C-⬧rJyP\Tq^g^Sf Ab O]) =XIFJLt~F8R$BIC^EZSuFB5NGqLS}qξrRܹk[{zi w ϴ KKKK_}R[ݳU:^zTTa!ԄK*_YYPZ^[lpSd`fͶѵ<лS^tIZ րXPrH; p䟜᳢n~pEtp DQY ~yIQ`HSMBmqVXepn!HG9VDÈM_kWh]id uBfA]f[j^wcsRkTCܹsx~OԸ.p=KKKKZMUUD] ^Xg~x@\HX ֍E=\vQ dcJc ˹}IcGӴ þGEWSPt|S;aYF]"Qw<K|KGٮdDDOkw&{>AJ`ƿMlcDCZ٩e~m}p{bDG}eAwSQTٰFܹWxx|1h?ȑu NKKKO^KUUVTTOa_RCW,MwݭNH'Q L}RD涻 prcRﻻ tD– Lp~YGIMRϓs}[DR7 Pl_h~XumDT6&Q xHsDʡʣ쬣Q֞ά~bj;([R͑Ox;:9DlvmkSjJݹvs&<xuB\\Oŷ^MNKKKMEKUUUT6ncNs"M;MXTa!ǽ ZSĦ@Է ՅcRTRgbJ ֮Y]JOîlr|_M^\gb^bXPz[TDq5z}GHo>1:6.?`u@;R_%B(5J-u4F:j<+iGa_DzUGIGqIg`Pry\:2YbV_d޹S|{T K|k@~,LKKK7KUUUT =O[ǻ4['RUNv'ؽTSbpZzø G لC੦gP ⚑r}{ՐŲPVuttumV5Lbs=þSDPץe` t^TmSd*6YaH٦Pd[jեaH[_H`N07Xyz*!uhs 趔e`QN9FB>pkuGE߹ qx18C B8<KKKK[KUUUTAhn`zZX37  iN}[g UKJưc߳ öL:mA*aaFS ߾pxvΪSS +VO negg^EOO>)00DUt\a>O@O0 `\vnE5BKcemY"Om C|,AYSiyUVTQp~\SV^TJ9MG]TYWGe=C0A~xyd |]C_}&lKKKKozSKUUUTUHY(IhGӞVC >o.Ѷ鷹S ˹.<otB[_Fq!L˼ S[zw~p(aft$:|mNmdqHUTUYW_þpZm/&CIV)|k]:LUlL.ZnrfiG^\i-!+WA.]3}RN^~\Xu[SdhoKUpNzalPj`n^|zj /E>ǯ cKKKKmOKURUTZ{}V~g[|MIu?jN* S߸PO\ ĺȺ吀;X lcQىqy-~}mqgKJqswDTX͓k_XYb`HvQJGC?%7z'7c=J,QS_5[;^ts(X!Bfcp^(HE+}(8[4FpRgXGtKKº;HE^4|Iؐ;…O jz|Z #K9Yfb Z8KKKKRKJU{rSTeA^l\<`gP_Xvø緛Aص>Z_H| Ͻ9){fn Owp|qux횱|0vtdY[ldUf ܘEcU}JQH|\AtU>Ȼ̢rW잊ǯ:JL]Yw Ynֲ)_K[j@iq`yTMҰC~Fb{x~42|se.TKKKRAKdU YaZ>G%R,<]YYVsLLSCx2ûԧPMڃ7۴ŻIh@ zVqvP7sPlxP\c!"CZWfqT}Xj@KKU|yYvgM\ϩ^~"d*YczbIqAH_}GWu¹VE͹vEr־]_DC1xvwd WvKKKR^KP۶UTkR? WٱN}LcRɶ7s՘2 뻹C Uu# xT񼷺ړOcaC}Fc ےcqsFDB{NOYWUaY^MLƥ]最_\L?X ⱗpkQXBV Aķ|J =8I帠@L|}SٶŻ BuKKK?1PJU U-mlWXL,RXog:T# SZZl}ߧޱO5׶£FMʸD5O q C zK E# LRei]JhI陔doCQ GrqAI`bݑeH^T'@[svpZLIŪcy^VEzڞbVTrZI{ڸBª|EHXY@ ¦B}vx}8+qBtuKKKARJU UUVBGR밸YK 2dYOjw)еcHTc,黺hmފb % =x䄢M PqaU rt{MJhvBU edOk @qUFUVnp]ts"MksIŨ]m]d;r1J ׏ykXQfåbVPP辷Eͺ̷GvUytY.;xy#Eܶs@6uKKK6KNUr)MWUT"R Y9UޠqżST_㸓>Z¼I] 濵.\V [ؿFe AWKʢH ځh|U1A ԆVkeSM STJxX ]rs,YtJAb~GˤbY]d:T LZA1Fb輕jmjWUcm$PķLAλ4]Bź9sR O}xs ^|ý̊9J|uKKKKdYRX}RUTTr}TUkY `BFZ q°\:uɻ:-b»UnLnQT ʽeRanlg oETQGSvioys-CF xUFICDHvQV kWclz-Z\WKPaVn]ůҥ֩ٮXe_9Q~2Bh\XYRjoaĶLxF ]dµEXѶOt߻ ez{ND.*U!縸 ܖ66xuKKK:&KL9\WVUTT S]2j QY WhZ SHW{QdL8UIĿЭl SQPJ x{{Grvre|I Q+^D GZR EN.w]P[Z')$\`x*4G3L(4L'C@0H#D ZݧVދ=QPEe{iHD[G]J=<igߵCɜ{w~"XcsUӵ rzh\uuKKKqRKKT(UUTT T̀YYSB:@ =GYqQT@H¾{:d̼ƼJjTG۴ B\hJ ӟvUS{sP4qfGzNqC Eb ^[+5?.zWӯV]R3H7i9χ3ݹˍEߛ69MYޤUyJj|WKkٖ~L4BavqHKxOnS;@򼻵?W;R}yp6Wö$8uuKKKdWOKt\^UKTDXTvYY (jv4\jkNܼ~COoȡk̶#xƿN͛vjMݗ M&ɋ^WW[Vt qYVGe ~1L{u@_ תOF*E.S\tZU^'sZ,b'o<:WBj(YޥUzG'L\HJWk>6R|¾hjfQ95yzϵiTҸg{{c|t{NguuKK Kh\OSUUPTEUTCYYFݑph~ tTɷöbcV9\pnxϻ?CܾuQeٵQzEU UA =cIt^P g!e~ -8QqpYEXD.d>c~f8` u[{ CyF(rP>g([ݥSi앂`9BZG4eǢs_VV\dcbevJa_[jOOٵ=¿ǻ ߓqy|W1'#tmuuKKKc[KDA qno,x f+1.o=c>EBfe._G7n@f WޢSx"/VH<_׸vbSatA;E UL뺸}E$)岧#4awyTZ%uuuKKKUKw"[ U\TTT~ILmTW~YY@pwDZzyBֶªuKa}츸 ?QFqPāHQDΜ91uwFO^lr "bJAym ;Ea3RM{axAWf_.UUbwf¨_k֛ݟ[ڻrS]ΊSf– `;:^Pq|PTkD]m:(668!z$BFECY0I=}{a b{ vu{9=^TuuuKKKeTKdkDOVWTTT !Q&~YY7Du߫v7>̜b<Ӷ9U]Ƈ^Pk|wAôbMLDfGG񲳭q@,6htx "1tka`H9F{PV>x4md}Nx-QE]rsPLV]SQNՉuD `KW ?QKD̶kW6`=FFKM82? my}S 5/0)o'0/9't uuuKKKNOFrVSkMAPJ_ZTTTj2*䄓}*YY P7BMj#˷ ® rj𶹹e }纈taZWW\ŋxQFbYUU KaAtJ W~ztpQx6mY~-jіh-I]ClA܀d+HVRRu_b[`SFYSӐVPQqӒYF{|칸Bvcooݳ:J] *Oxx@(-'ruuuKK&KDRfNPAYB`yTTTLgsYY ⟌j4Zntρ_Ւ̻Xfnp ~Xͷ]hz[>NG}5 .HrIf < ihR]r zus cELSlr\B`=?tuSvrLW`SNSUXeD ]8 ؼ{TXR]{f·Cfv^_yJ8ֳ~ C2}xv辷WuuuKKKLUSVQcXU:+TTT!)hvYY ֏j5RO^dͻVVMNE~\Ujp Ζ+Q~NfvIW _H_Yi 6ӆAqmx~ͽ lRF]rpQxweY[`Q%jIZ6~|yʸoslXW V_ecfJjǵ(DHABM]&%§K}|N#ٸS UuuuKKK_UWfI(\UKX{TTTI ju"YYYbDܨk{X纸 Vƻɚ=u6]{Y_ZF' I|rG}EdMˋiNuiu%GC z{}{uutue}P\ "׬]t+V_uv4IW_VKYFT]bVTSajiiiJ캸;CwmA63u sx~>¶}$#A1uuuKKKZND*/YMITTTT%78@81JYY[Z똇4}GsLKq滸Lù[4^NCܽ`DYZVVh|YeWͳ ZUnoʂ=rxy|rg|k@LҊ ?kRy|tOT[F[[NEBqGm^׎:_SD޶~QvLVDuA M,~w1 湸T VuuuKKKFK:LC"Sd_,+TTTVW@j^i?wsYYYJ\^KtOS¸V[| cCUW5nt_GϺĤ_RSG\ܑSzpl~trD㍒~Z$0ZEb\@P=TkntVJA~zIXfT'ՆA hEў?rlUTδDDUqΜTR %G|zq {v ҸaoxuuuKKKdK@EOY{W TTT_QlTߑX0aYYYڕQZ TaVPf¸ș]JkP˷է$n빽QNQn[븬2fʼnrzyszx|uAغi2aiWQJZ\x7{rO~eTTVC\[ܣ fCtGX ;.tK_ָEk`TTGF LIjz|O g컷 dh|uuuuKKQIKFVpӥ^TTT Gk>EYY YLZݬJsҽL oSWSeJKROδú᜗Os _`ъtuy}tuH`@SutUp`]FnI9S>XxtGM@xY`YipAF F/He1x=D*$'SyMb`w}0Dc8YtuuuKKLAK@fVe*STTT.Zu1_[yYYYK[|L]·ǽ^Uͼn$ӁI뺸 g`A \Wuoiw}zvs֬bTf6IO[ҿniZsQJFRYu]yqmEE:ZJl;¹ˆErUo7FjB1~w{q5t<tuuuKK6K8ZfST:WUTTTƴ{RoUwm~ZYYYMXvN`Jl ˘Krʘ Tƺ+LU^Wfٴ 좛LGxMߦ 0 _SȈoymKDn0nc O\':oEsK[a Z}JEiD:“ CYøb]é@ XUkѽC!G||W ͳ"jѺgtuuuKKX!K>7i_LQ]UTTTl'FH^HdYYYoDn¼STowH^㼸@2DMtiù[tzs{Km}~vr V@PְFSf(~BuXThnUTyGdM=96Crc}EHj!ي?qvAb1úhlEǴKfzB(-jftuuuKKQRKNF{e7FUUTTT<8md}!YYYWb^xжFPL{ⶹ,g<|T^\wўxnR;ģ Q mo{~zg_ yG,O_CfF^^exRQ\JbKx}kZ}}VM |mkgLv QGy 9oǵoq5yx|*:׵" Wh btuuuKL=LKRP÷KSVP[UTTT"%`hYYYYaBŬmua]OͲ*^TpddS}Gړ}Y N֯~ku~{|jH nI!K[}^jÿFYI`hcZH~@x_ wZ]pYwSOH Vn;Nd kz|`Z'"Qq5*ttuuuPӏ=QKKNK]5WUTTTM ;YYY֟mnOy<{oo`Bڍ0ӺiFKP#'Z[WOk9 Ѧrfzwzwh ]OjmEkZPԌkFgULZ(\]c{K9\N[K={KC_t\\<JwGA[QvG DbkG \w~1$ *=5Cttuu vˤ.IpKKKLLIW[UTTT"e$&YYYpWoײ]Gdoko`(TEa{{Զ*e,zytC{oI"JX ttF@^{bz yKMdG};7\zs]]`kZZQIScDD~PfXW\N\ tVWkw)eQ-TĶ ;8ke M|zjڶ$).tuv uZ`{RNn?KKK>=KUUUTTTlE MwYYYZ PAɼQiopo`&R75euT #aBItrd Jkd ˏV!H%Qm{aL={/lmeW ^bbZNOPQw{THRP[^e鲕}`XUt~wye]̶߱ aiùUk: wx}XB2tguĽ\yM;ZWT_>XMKKLUUUTTToBX!mYYY`BAlOZ~h{on`h /kfnܴ Y,ѣNl}t3ZPgFIS}SQ}j%UahRO KEzp]z>4FzSp[IC KbgzNS Fxh[uUMSaݱٵBGwR\w}w}MUM# ❍cTSV{MutuuuKKKKZ[JUUUTTTlCG؇yψ؅Y YѢYHNP@s2UMo`,M\R֮B\(O XWAD ΐhƩl?e irQDSsZRE5R[9I 2TFuľj\}RmC{@ INgPRx`PQWFR]϶ tb@ dY]!U|x{"dY!>Ԕm]PlBttuuuKKK LTLLߺXUUTTTe|&]J~Y [;YL spS;~k ^6Tpoѳ`c+j:~²ĉ3DI^zN`N IlJ_UfRbb {aj{QmYCkpMb=]vW~~FE| FuXLS_ZMXeTR̶x`b^ǙfTR[t׬lz{^!U uݐj]JqvttuuuKKKC[MJTʬZUUTTTSE -YZƃ9YgykXk4 ]iBmooc`ZH)/'@\ZcOǹN[XR| @sGYNTL+x{pyy՝;}rBEIFa|Mf }Q>Em [RBEU j|20oRU: ᨅa6~w~9^ g;vWTTonttuuuKKQSURW0,QSTUTTTYYYg.k; `=X ;foo``_2UՕxB\ICٱW~PY;sET Ho mʝv}yxfVP|ld hV\uIjW^u}EFEZޗêVOuYLzp>W UjKUn̵GOy U{xv=sֿ@1 u-qvttuuuKK9EcQZxkUTTTQ8&YY YBFIGFjmuлo_`nl=i hXRfljo¾ tttuuuKK:0H]v]UTTT: GYYYYLN SEho +_\R\_|d`CcźVw(aۻΨ<>΋c3ylu~tuSTz[Zח?䨋^ yf@;N?_dý LǷdk9 -{x|/Y^76tttuuuKKRdYNHkeSUTTTC ' YYYY`EnTnDHJT`l_ )δQ⿵FYfPVF  xpjAHuFQ]?^^[ܣfAy[c/Uun}[R qI\NLvd W |j¿ⴹAtug{ypƶ~tttuuuKSFMOKGSUUTTT{ hP{ \ōYYYYOHD׳_op>~ ox`bk(ٷ]]VWPZlcAô  {}FjfQT|ULZv_הЧe@p^p B@}Gvk ⸁hkZTdp iOyoOruml4ﻸ=N N~w}@۵AtttuuuK.RKKKKUUUTTT t}PYYYY^smK xXP۞o}q se]`?q鸹 o0gذFbH AO joYa`HZߪ [THU{fXa}nW ĬvUOx <;j 5 wN z)R[ H|yuYUCrrtttuuuK;-HPKKUUQTTTKC %+-YYYY_hppDnERJdtoUo p}gd` tɳ ]r뵩^ce z@.KM nvFD]pMGLSАWExvt}=ATlVr`h`ȿûAzw syx|Xӵ6M BtttuuuKKOXOKKUU%RTTdSVYYYY`rSϵQ]0PmuXoo~iUZIм hq泵hVMa?>qr ֤Cf m~rxKGulOmmIGĭIgLD}kKY O ]BLhҴqi[TV^RdjF\A W|w}<KtttuuuKFL^KKKUUU}rƽTTNaQTVkYYYYU>IfKMo@V\oo F x}CWVUoh< lzL:8 fv{o=`hQOicZ||󘓔j}LeSJ8RitDq=e˭w_Wxŋsa`|sy{c5:4tttuuuNQKHKKKUUUXTTe`~шYYYYSy=˿QCG`oBnooUa2}9 <)vf賽8dST]͛ux J{z \_ ѫr~vLRMrzJL޴OHEm>c!E=O\e\ Ŀv{x0{x|0׶-utttuuuBEMOKKKUUUUZT|l[a(u9YYYY_`iN o߯mIBzoolkoNc⓿+tx|YSfCؓK^ IASMe ][״mpyxpj|EsJ_CT`X[vwBx HebA[NepTùy `|yquôPO }tttuuu)t/RKKKU UWPjT\CTPlFv-hYYYYD|fCk.GcqoojSp V (MOKAV SE NSSYgڒw{}j FWQS `?wop]jK=qA@Kj뭧Bƫ ʗW@Ey -}w=ź2s{tttuuuX(Kt=}s@PKKKU US'^gT\oAE{YYYYv{f ́?pbooodQ(`N }WM L CPVUU\DoeYo]UCjaRmgڳzgry{jZfٍM 笂i_H>VhXlOQxRIh3 uK;wdzyvZVޮttttuuuutsMNeC3KKKUV^dTVnTh+eo@E4,YYYY?~mJpeʭmTuooo`Ǫ^ eF [K$a_qCannUdQwr ňvn oOfULOudpGjVv^SW\CCSU:HMN~9.w|ROettttuuu^ij2iKKKUFC# XbYQTDS^SxYYYYsI͗_qPnOoooo#`Gi>vLbfUOYE@ExI@5~ Um^N>xQMrƳ ezuti PVabAtCeL_WGdZO L_m`uU|w~ [25mttttuuvX OoLKKKU84%TATL*[? YYYYEkh9~oWoooo`J 5GNοFsSB QKXDQlM׎[?z⏓mxtd}cJ `]S_pogMKOYhxDKz P6ٰ齮@EtQsx}U mttttuu{E\h-aKGKKKUW\F_ThUuVWnWGYYYYutpZDpoooo`gz>E0rӴeFs\\ְzEF ٍ>彨u{}vnاgr?YfͱWqYMggrD]roa yH@{U|w|#.$mttttuui7`2PNQKKURVTI[S{9YYYYCFp *Npaoooo`=#EXvDItctXeAX \nStFgBbg L'\oۭzy_MQ}Q^OrPEvNCPc[&6渹I|ytw{c4L}mttttuutZE\nI^TKKU n[ 'gb 7YYYYE`CTp p^tDoonF_npE]2 K'ܐhTVVXD~PU8cƻ^ZŰ; ẗN 8Im Ol 9Vr abkZ[]q\_E[uIHR )费=`Rzux{e-PZemttttu%u30$WOWf ˥ ZEQjDoYUu qiqOac_$`htBJqFg׵XV&I}xx"H\mttttuuIǃ(V4eIPOoseKKUKJTT|.={;WYYYYHWQppOt!uo o~ye``"piX  ZrV)¼ ͩ JTQ`mDBBnߎRV2A}y ӳzvH`+}r;r;FL ˷R^wx}ZkmttttuucfJVMTXNKUYOVT&MW|HWYYYYjQpppoooJ`Ŕ|ʩշ9sFTʽK| >xO<\<(gWhsLTIDu\XNY]ZOTеGS[$G}xz``IFrmttttu ~lYj*3a"K?J^HKU]VTWSjWYYYYe=QppEүod~Dpoo[ PQM|"MffWJXrǷ˴[c zK] hT\%rg6r֜wefSP|JIyTO|?RN 㶻USxyx|]mmttttu !2 >~pNRjZTb1P]_#KUTW]ľTa^5_WYYYYLKcQpuHorWY]vo oPޖ7gwELݶ g{=~dbEQ| ZCHU3cFXVUYWQS|=^emaj kM}]|w~&(TQynmttttuwم#[NX8DXbZ4RKW S`LUT[Z,|WYYYYumQpcNooO1ol sǼ~7fǻ #!PKHS#Ż~l Z*]`a (]A{TDU~E_ykttBTI-~w|d nmttttur8S&/:R:zKX!|TRxcPBR^TTU_~߀O jYYYYEHNQpoo?Z\oƻd~h{SSnKͷ龿 M1|h_wvþjINMRTVb tPQ1\C oP7L<by͔w9E{inzjRolzw}#P2|7nmttttur5렪pߑ`)Vz:^LRLLcnYlYTTo ,e*QMYYYSdVPQp*ootHksz YYdQaE|ChX-vǺ漷oHfdN֧}wvE J2|Gv%fӺTTmj m?\ZG乺y|w}L"pmmttttu mh~$bICPSf{_LKKUV]^VTTJۅ +0YYYZIQQp"}oo jbI@ ɿyuv˻kMGLlSEOqP4}fpr0ේoBXH:FuD]HSZ xyxx@dBnmttttuoV4 K.aLKKRUSZ[TTT e0YYY bp`ѷDVQQpM~voo X>3dzxr˼xW"Aj[ɻM=īɎ <ȟw]E4z5OR!'TиGϺzKaW;DyOeW[)C~w~<)mttttut&TqK[lyKKKߏIW\aZTTT_{ ~0YYYLcefUsO/FOQQpdroo ߛT \M޻}tytvzu &xT݂] wm%hN?wXEMTԅ^J9Jr=K`uY3hdTGtRJJQutOfB…;JXTBKJZvxxr `Wmttttur4PGHKKKY&s߽WPςkTTTUC )1YYYhvE-G*PeQQQpNpoo䯦v dhKnľ<,CG~-VvYMb}nbL{ɽȔmaܮDhg_3Mrrv'xlJN_GC{@ AKYVD[T}w6@TAo 1mttttur6YB?KKKKIqN$Uqq{TTT U0YYYWIbxppgN݁WkF@6IQQQpYpqo젛BTΆGpҴQϿF~LM{[ZjNULa U堤I~i}i hO˿l)5H" 8m-cy/M)Yl?ML_[[ blFkOF]wxx{i3Pjttttut%,KKKKKX]QayTTT& ږXmYYYC[-tBPBݻQQQQQ yHpf o֠w MGm ·\Oޘ/_ucGI ad QPvnkhk}m}%mPijo'_rI}@dd\LpPUVU\n[Iv|t ;DڐQV]Z|wz$Vrttttuxu|6iGKKKKK9TUbTTTs ۓW $YYY b{8y.dQQQQQ2Op_QB(o甆IoadG巾R쫴}^ NA[UjefC|1<\`{L {ÿg K|@g1@9B njՆL `G W,5TBmVabY\fxx}Pttttu {ttPTKKKKKKU*ITTTY O(YYYhh9hgIWQQQQ/u=gzAob gDö b9ma>X4mhJ :kSJXY]UGDgnx\yneH U툃is~r7kBH ښfTUUTUfi LDGӵDDdIeo`czxzuttttu={GKKKKKWV)TTTZ v* YYY[[,hega4 XQQQQ%|}rlnQrKݳSh ܵŽudIXNωZ_mrHg LHAi» {^b{64>19L{_ ]Rf}Fs@ǶJ<[F{D.v~IS2ktttuTtnKKKKKUTۚIL`TTTZ RYu} OJUYYYb,c>Cx~L&2OKSRRSQU{v ss)'~nwWh|+Cr :TanMdE*xeumx nENL ePBL:^9 CGܟfytg{1Z!PE M@s GwKX ǣoRIg_SI=pzxzp\Itttu|nbKKKKKUcG-SY}UTTTZL`V{[QY B=U>YYY{"`6.[C@elm2ě:I;НIIUHVJYapb[n^XOyg\iL]h{5ݤ{ ޳18cܺ `FBt GOIiBSEOR \8PK } X|!ˬ\CRuLk0-hwBrbU\SygUTTSephe@qg΃D`?RNNV{vGЀC\yWGˢ]W_f/;}w~Nwtttu x[qCKKKKKWj\MWTTTV%,U|Oo?zTesfYYY/W|5ckss95BXSglY79 H-p eEm{iTW~FCT JKNO=9}]xRAnlXv\W[qOPġ]OchHC\ =ñm`xTXrBƸFȚ9ib;{tyyqkttu urjuKKKKKK]bV$9GTTT}e]ջ~CwoN-|A{MYYK[\i~OcDb_uP`SUf:>Mp{i#|3^~KNzWUܚop ]帺Z O9AB97\O~[DFG=WU?sĶSעuD/7@"'TJFv ?kE\@eƸ e8MylDbIѸ@maGQeP[Rw=1jttuumuKKGCKKSXU=dVTT2'v~ݐVajOF frYY[Sjdr;Ouqer[Q sccqD6<RpsM0T* JpEF|SlpFLQ/˶\_Ucqji\RE\_ RǤej*ĺ׳`yy3 3+"iصV zWTYgrƑjVWgLgYNX†H@p}`BP+{wzk gmtuu~ \`dt{w+ϺI|xq?3N wY xPO}bKFZL SxƚBOcxCkMxj{w%PA7tu usjEKV[U#YT Te nJx_IH}bYYOO_QhYqQQPOpRQpqfl|OڧIpMWSIfⶸtwgzOɝIR[ENXvjgDcZ q¼ .ReZ-,V"9TJhLCjQVҟhAcL9_cğ[Nٚo_U~w~C#>& qu u\}\yK_KWXT TSQm`QZRe4fYYhm<}xQRQމQQprS/`^OARj[JQ̿GlUT[Jz Y9`_P][FrORA2'֦&Y^0N|[MbuUxa ٶaMakH G7WOi$}w{i{YX ooVoIUiB&ITTnDg^fcXOFڨy_hYY#^mx7Oq%7TQIQQpy`mk]c] XøsӛaQYhNЯڭdQa2FfGM[NaBjNk ް b))(|AmHSeUoqPFVkc ^d}QImZ}w|%LlQJU;dZTTkyv =NShm×3YYu;Fsbys\VJM QQUQl HLI 1dBDOMxUqZZUYamlΤA]bcFX|T _o_ ˤ vj 95\VVFO|qXEљM?-Q]mqJjRj BGiD$*ww|`~oUn[ܘcmhsTT~K$dž(YYoa%b`|4U \pRJIDKQh^T;u~m%fZQ_q)kDE{G FbXnNy_~yu>]r}hfS]m?dۭ usSNx@U ZGpnJӪnV^xFky]G`y`oEmO=S B6Dmwn{x{h$mt]Sgq\Ye*(TT 2heg݄GwYYRvRո_H'OzHmQRrT !Yón G^lecUar9@DWHYo&nH@xbbLKJRP<pqYaEDI RKYB[{DY;9үOEuzxzpL7tuD  AUYTT ^Wm׭Y >*ttro¾M }vlPMQTTPdbl[=Lo \Pdnhu]Y Y/<Qld_SGV`kkH;>=DuJ|yOkHR]OTX>njRާgjaʭOaC [\KoV^ MMU fPfQRZ ^MKqj] hlH.{ЊUQ`Cv hNS߿oEĞ>\P~c_ J lyzo 55Rttzq;l_n]X[wrTTV ?tm]wnu ZYYYIYbSUDPER"JpSXXPG[QXwX =[n_ Z\gEsׯ~mYBLE _> c_NQhynτnsFLXODvJO|aQa[?]V΍oGXڲiECCDjsƺSei|w|-H4/1tt`Qztnq|⠮gTT*1 ľ{v\o'.YYYYQHQ|R/{6KS["rSpaLMČwAطŔUy`UTr;*yi P:0WNѯGV{ xtudR VVPc qdWz Ԕ~i ָğp=qAcć<_]aqEpy{s(>v}UW9A<6ttCsp[[pOnTT%tv} YYYYYQFQHxjq|8ՙ i|plF NJ]DvE|ЇLh}MQxLh[dTw'qJ\If e]RT]RWʋPW S`CJ@QVUqRedatɔiNT ܞoPS ʐF>|HeDM Dxyxzm*att SViKXTT,Nj=[#!YYYYYQ?OM[T4OpujNncTQZ~IlKU`ɉwUHHkx,T?H{NCL \abV^WA ^wz<@vfe¬Tb`xRU ƘU=}~=ʶJCU tS|v~?u6T _\ttMQ{TD aSTT%:OZh{;}4YYYYYQZd\oӏӏNJprHGBzgщRKxdPuIOrh Tv ~{~2eTh Eork b4HTINZZ\ Mcn W޼cUfַF9g]HEEK F+$|w|d٩!tt䦓RVTT~;FTv㳇AdYYYYZMٸt?PXSVVM~po;ϋjIP`BKM{6 ^Ngmj TKmrzBBc~QJQOG}w|cpf.z{tZTS[ FiJᆘ`yYYY YmMgTRSވӌ Ջ}%ąqpoۄjkn4bS~XreSծ^~DJ(YM hAg>96KorKi2XPU\zWcDWct}ݼ߇IeIMGA1󮐕IaĽpM:UĽ~EzDt\Q&}xx}"b /&jtYT`~ܳٗq5PxrgBYYYIJYQP ^cc9=% Ospo EʗNRwJyH lT\tRV]HH NWj v9&LvQernNPXrrngP ż7+Jpu`xXI~jdJCEVՇBylZexe{xx|0 R1D yo.sUdTSW\VGYYY%YQQNMHYFrpoMObtY9NuxQTۧnC~dRXqf#c]5s DQT ``GNv/bb`՛~߽Bh]Fa9fբ{oGưeYPOTjnԋDs[eOiz S|w{O\_VZÀ$h TT{ռ~w~XGYYY]UYQQRRىqVppooC5ڙk_PdsA~详izAe{=W? IIShTl_hYJXiMNC_`YQQ|6dr@٤g^ppok DݙȠyINYtٶjOTϔ岃JUs /s҅TTcgiQSmDjTi DU/|wR UCB̮ߡ(S]Wo࿺§vdVl?kg[ ggTF__~H@aFGvmMz>MSaSYy Ѡ!>T rKоw@~VSYm|wUG34Vx<5?  tXGY YYYYQEQX&sQQppoSNiN`јDsͻ dXJIOy mQo_eWjLmpP?osTNW️F U"tJZD`IphBo@g rbZjԸ7]ľSMBdplYZ{w}_ Nc;d6ZoJ]G-G-/pUDY Y(^`[YQp?Q U]RQppouxOm9uoCpHm @RIALAB5; hHԎc?Kv]h|EKUpdHF ]LRRpE^IrPUkTbܻP9O;Wm혦}^Zw}_Wc<`+$GGRTSYqcY YGWX\YQ|uQ[/cf\Qtpou\3pՀUjhOV\TBrI kJgYGXwg{(1cPQDf^sG[ƻqH 헻?puAwqA^ZIpȘpP^ES͌\GpU8qQ5qP]S]v}aHM.ihXQ}f޵Y Y^R]YQh{QQY`k\R\[u.Oo~*z, diNM_p$zLUa lSaW q%`iDL ?pINv ܤlSUjуESl?Z 㿹U5Q ™?[L E/^v|t=lE+TBhO I2VVY PXL@ YоYn=QQ3ڱ:BNwoswz  IJLb Yx0Hf߼ q>octF]ނSNl mX[n ĖUEÕYM`È zAGpj9~PpF/[~v{s  قmJN]XjV |Z}YN[wY^YSSmQkQ |DqqYK^P\}|VTYy ʈcQTW{hPa v4Jp8ڝkAf //[v|s ՝x;>T=^O sJ2!]Xrh@hL-YVK`LZcQ=poSOpopo XlyzH]8krieb[]}/I<~سMӟ ӽ8vGL"<|MioquOR Ԟmu iQVz ”aTg :xWKt»_gK E1c}w{sQ&.qP @U 72l]"Ci[[JUWPdF|Y )t,ELX*GRUrrovnom.OdUYBuS? huٴXISð K|]:t`SOsN\ ƉfXa h%Z!CE~r9q}w{s9!s{`]U= UTS YgJmشaVY ^ʛP|?Y(FK:n% 5koof{oJbMXޫedf_OWSGŷƽ̭=mƷĶ捃 @ŜZaW@QEaKn SY Z~JUNˁTCľgC_ uD>÷"f^Ľ8Sa< "p{w}wjYGL\HJ*a^rRPYapGQRQm]CQp9os?I vJXkӲSms꯰2cv RUs}7 ӳG^zE]Wr:Hh= H?YA lJd~Ha˵saUwx|PA,?Il3MB#VLDklC}F{YNZY Y>5]OQQ wSPtQq!?Z'N¬&PQJDjKEq`cmgUWmqc8*Mwlog\yw Oڟr OXL pgxsw|= Z+NcL=)KNcyuWK[兑<YHYYYY TarYQQ;FN\Q NC1\pÝqgKHO+nGJeHfVO!#} zhlMF7ʼnG AhbtrFVQ SvHqT0eM ֛ucQTeff k]Q`pӟZQk vŶ[Ǻ+w{v|v[|h_-Kg^v?} ueUe)NckK<8_YWAZjy_xYHXYYY QIe1QQRQ XĬhJphfoߗITB~t^mRߞq?~Y3O~16NQehnTo8G̸]dRPNwDbDLV]Nmrus_MnöZB{yw}d <5F*^dTO]1sl TUTR KttYHTYYYQoQQQQSȯqLucoǓy TQg {}~C cIoQ+Ouuvho|ngfNOiL|ָ@]zYRraݺ»fGFExwo>|x.(iÃC1x&zAQ XTTڕ[~YM(YYYQvoRQQQXwp,@UUIoso Th\ SէHiԛxrj}0{=N ?uSudg^hfEŖn^h_oJcaL]mOOMrSIvἛlWP)л³|PDSWVVH=⾎Gie&U}wy{RDd>HL P Xf"[UYUXV|xYMYYYQ{nIwUQQQ!tRBo y18?hKeG ЉD}Icz4 ) Tbn☛HERL.! U}~GepL`Ic sag>h ΜVV`d帆yaWgUjȴ\JJ^µ<¾cWd!n}wyz+U?_p2 OGAXUUUDT{}V;YKYYYQMJ@QQQ sNtuoaX^`s~?8:DTJH:tlPtQt XVW[`{}.Gۉ2 ]? MbUNUl0dVSQi \QSSm{N5ҳgNB[zŸF¿mT@x}wzy%D#2j v'VcYŭZT:Sx?d&?jY\/YZYQQ*QQQMWgiQDoE$˽|Lt~mhdCs^MNS`GN [sa?d,/e+Y~ ԟd[\Ak7|eL 5翘 0 ١wODNk¼]d hA?V =yyw~n $蹆cf[OQiposPo` w$Gd rJXVVZzuTYYiJZ~RL_YQQBEQQQtH[N-\xoDU|֛QSA` RTE o΃A;MKرqk`XtJ*t RJg<KjKЦ`D9a½nA cHBLu ^D~ywT/ |KT e0\[dIUԷ [LKQ::UUR}~"_xYchz[QG3YQQXJQQQpi}moVI P}eS[tp&iICMGbK[^fXG>x[^rKDJC=CXRK6Q ݟg>;`—=NTBH` ,g~xwR^[p"F[]I VLgKUoiXUQc mVz}-smJY ^bZn+YQQRfQQHpqxooh QȐL+*>TJV?J u-PSp ^DKÌARaDZ6^ }DtWbԳ^%L еF?]îc:M> 9{zwy~9hbSn `PANhK\XUUg—QwLw_%?Y [WYͺCXYQQQHQOӃpqooo a QEWO ĬOh{@rwGNBEiXMSbk`QKRGm=>@^MAOi]h8dWXr`Xj 9 快lu<*^躶wUK& LVcQADnS[*'O)}`ÊPp`R\Y@riJLaҳ"y tDo}Ѥ[L]mx"򶘛}kWQ_z۸E=Uy6pĻ x ?{zvz~NT:}Cl~[@SK2Y4UZtf]xW6 ݥ8zefNb$zYYQQQ1H ~pAzJSzooŎc`H- CBD XdKTUfv/#fS\oK:ZWZK= oVQkg" ΑTYbӷFDBLI» 9Y|xw|m,|[GL=I@&KN\]UFF@Yrڋ:s1 9W OYNYk>YGQQ2 KqEzd?:{onKÇ`Oxod|F5} ]LHddnT \tlH鉐o^JNFT,] `__YX^fTg گ~wURV^??ŽTCh̶ZnMCNoS R]n#ZT·:Ü:ĺ= :@{zw{zRCHNoU@ ؘyAACBNrKOJU^_YkuT| Q:oWYYYc.5KIuVQQzrbQpvqooRkys^k@dJnDj#%2ӯZI`eCc\2H Ws q5zNntC]][ Q9WbtK)E:U ]tF^atc~ٳY⹆gS;SYYY O*\W/>QRN`Q pMpooHm ݧިBijMQ^DYۭCYXbZXNABG(eDO\`lPDFCődgpcfnYMVo 6/ev, +җijv }GS`Yzm~M𵹹A}?UQ r>{{vzR^] ZQSuKS,JHi^Xd]^DϳY v熓~UTR$YYY ]fRi~?QSCPQrhpoo\"0 LE߉IA }x^Nhπh:jCrbNɶaUDagD۬PJOrѝdY\WR[cU|cnD gUcd…<|= Dg Wwxo.h2{;u/vƂFҽºJuK$B[ޝW[XV]"S%kI=qzYM[YY YVQeUK@QӍ[hjQ Ã,poo T&se_Nx#_=Ai[FfZÞfIQUN6ħdqQ EFxlR\FTqct*/Z۽ơ}s\ʉn^``^hҬ!PMo XKµy?; *{|wy{TGMLe |(К^ڢ(PQuKcXLW_+؏Zm^p_ TNfY`(aNYY YLWǡMQX)XMKupoo QKbP.uRV_bOǗyutQ\`_XfۥejaRnR\KD[7Oy{~[8ˎɐGExUX_ȼyT_.L۶ e=m{d_BNo5úeAyyw{}:ECc,ޓ)guK@KcnALqY+ɔ`oiY5{YZJfY\Y>TSQҒKBFppooeq7vx QDoa]MԺʺqhiʦ%hSjG_EVSz~LJPMSAnc#Y[ovǬVFjwCM pGf\O` pEyXޣj>r{xN^z`Lݶ]Zsz¢PJ+exx|\ e {fVvNKFMh[ Y`7VaƳ p {[5]}W|Y Y!23D[YD:QQc*D#Tppoo]`u7 0_{^{!{PYülqromodeqU˃ cZfXFSŝQodG_R W]hM>T;J({Y4QQNS` OppootqZXtY2.K0\f[:HylƶrkBT_l]^3pgoNյtQ\pĀ{ɹb n|fljWO`_%g6|W euHdEs2 W]vWEIG»iyv}u*;G(#] ΰm4:tuKKKSvLZ Z^R<]TTւ8 .wGY`0[+!{+JY/IQQQ]p>ppooso Hی9PܐGoRnpjn oG˳OM}~]Rs|tKݧ׷VRjO vdee"W"EϤMd}AeQnDҞL\QTH_Õ6qs{wxYCW-3=\u|G}LKK]P]N: ѕQeU3tBkR[KQN֋row l*~YD YF]aYXIQQQUCQlpootm[GV*`7x~W\vŭH渌kurjˊ[.<᭜yqqMռuV[srJ^ĎM9berYn xJqo=i@rQg ӫt`ZZs4}Di[[ڴ|< j/vzw|z5 7h.}ruX9J?KKwKOWEUWn_{GQSnUȐ=eY~YRf#HYQJRQQRc9Vpoof Cl]"9VE$q}k|EϸksmdI tdָr\XVVdWYX[c}Fh s{`qk9%hJ۶ibSW%ܖoĐKw sX\\YxAEķkEº 5L~yw~^"ũ[<Tfu uVSKKKK^N@C~yASUT`PR`JA`Y Y [tYQP}YQQQGTbl!pooA_$[J'&Z_u?AtnmnzCwtꫮ dVa[VWWYe) TKyBw k`xjo0U][Xl,멃I_i;\8Y۶lG h}wzEKE[u u{>LKKKKGU\H̞kaUv vXP/vEDۈYWY Y_9ZQ@=QQQ`\[@popqܾwϲM=`v'pXdӻpjfqf^mg`|zt q8 讚Joigr,+[N] wO;ﹸkHv0u|w|q(wZu|DKKKKPP1_HWT RsGT WU[g YYY\Ʃ*Q!QQQl\ Hwqoyih(}O>tJK WZnv_ӟ]0%[->xgpmqeCAAIeus?z}}{~k<A xm6489:Ziu 8.R_3g;Xa _WölHi}wxLHMN{_uu<=KKK%N׆?%Dk_TT֙Y^[j^aSYYYYDQ#YQQQ3Q l]bzfpowR ba^BeרҪa>7hJ Hh\aAJ!ȊNXeaCAbk"Jv CD绷kH"{{wyJyL mruuKKKCKVd>Ima]OTYh3@aJYYY Y:0Q!wQQQ*> _= (pno@J{ ;wR;y5MjZYYZu|dMKPW[@{w}~pnjiprwO @_t NI| n`gimÂB,oe5C_DhH±NK;zzw|v+M To uwu7KKK?-KBew?e]m`TT _CPN JYYYYS,RQQQ>` gIbp{}QVV\cD8QY\}ŠHib/tomolpsr xsIMA>XުXhvne6 xZK?Rľ7hVD}xvV6G#^quvv@-KKKQaK݃ɟUf]' TT ܏?:VSTR)YYYYZ> [QQQgY `ojtlx,FTKd[]Qǝ`io: !yk_fnqlhikoh?vҳ\_Tz Xs?qnoI;t}e׭mElǵm4iĿ¾d<L[}xxTi&sntvsS`KKKPFKQ UVZTOWRYYXY YHYQQQGTA'%;f -uLtG5ROx`mŪ|e\{ȸQ庯ğԳzghkno^kp}? ޘWTn kmЪpEЯy:cn ~<4`d^9?YbqU:WúMb~w|{@n <Je%u~pdpiPCKKKKpKUUcWRTzV텚YYY^Y Y B~RQQQREg\_tܧ ߨ[OVׇ@Sĺٮ֠[`ȦognoovE°~g Bնq?cNqNP`zPtrnӄZSY_z ر K{Te P/6sYe0t|w|fB\J{svK`KKKK\KUULUTTTUO svYYY?>Y Y+תDQQQcQXIut ޫOA魠CI Ͽ)_ hGF7 1'ܵ͟nknppYڃpnL Qol@f[xJ AŗLn&̶r{w}\M";I{ZètuuKHLKKLsKUUZUTTT.KYYY$YYwUjVKu|QQQ\QvOjml ?}Lg@Ѽ̩4@@iӞX^?Սpim~DwLzVzwML OY d,ǵ ]Q֝iGX]Af vqѶszw~[RV<xuuKLPKKLEKU_MUTTT1YYY[YY(%3[QQQsRpošooЃ LxL^Lò\ZeϏ(:.Wm |zyrpolje_ZUIVޭ߼޵8BIMPatt8BIMFMsk 2SLMMmtx[>; `\s;&x B&.K[$MW?GW uMS<{h.7CA x &HVYu5Kw kb^Hu8U<NY#)J`SN?%E  ~V^Pz3%."448}@ V(LGV[PS0\\TT{6&;/ .]Ua2 vevh!yi.4 {Uw|kay}njU y~Xrozez}r$+#1,+&!6.  HpAB@jShNWTqZULwzz `)U~-" OZ<-OTQjB>;4.%dUR[ Un*L@DmH,]/  jQ"$GOrB 13@l[R|J rxS;[]xn5((5qhYF:'/ ' qj\wsT ,%!*ZVK 5:3 kI69G'"}b[Iqsug~^mUJ;MA <oly+.\=9+-KT:G*HG0$  ~&9>    2"/ 4,2+]hvfz}{'  (0.3FEE ()7)58'  !& N~XEB:U~G$CSe||VDB450hgM24kgo]ht[i>DzXRf2 SH5~R<4.j2$XS!6HC4L22lg{;" K"BF<-tl1 )/3gU;rb3i`K6G[tiB,'sycdT?7{!) dh\uvQ.!$4S|WC /8$^*B;"c_3!moxwgq^rSH8%U@ iU~%8 Q?- 57JX@P'}G?) y &3-   -,/ .( jI]\isq]qyp&y)(-K><#4$0/  (FxQ{u^=.**Flrssspouus_T4q''DDDDD978999:;DDDDDDDD@<@ABC=BB<@@AAB D==>8742452*'   roT˨{la\WUSPIE9$AFqb]XUSQJF=%gi~rlda^[SND'U\Ysn^ZVSLFG34&ʷ.;0"&-88:){{j`ZOJC>742%`\[uo_c;+@&̸(r yd6hsncZSHC:5.+,$a[[hgY`8(@'̸]ibfv{E Ѱmf_WPE?61)&'!`\[`_NW=98*?%?'̸N%hOR?'0Q]֖`#u3 ` Oj>Pc]ZTNC>5/%"!^\\|M ; ='θm x&3W+;د'r(tj҇WxYsݰ& r.pI\ ]WYSMC?6/$! [\\wE#89'ϸ#\GUX+:Ԫ%wxz=ӫ% xרyV@VRVSMD@6/$ W\\q>QOHZ|$5'ϹOSD'ڦ w$|+uY jHԧ x٫2PMKD@72,0$ T\\l7|BA9K0'йd#FnY?,2[l_t9[z8M ^ uھEI E:º+#M]]c,Z\Vh ('йfGhl+`t$qhu>IT` v~vU@0&"K]]_+s{%'й5@+,@03$1?&5>9 0.3>5 /?-5(064,Se`^]N& G^^T$622.+"! 'ϸ9 8    \^Y] 3#ƺ 3{{}||{yxutquz}|yxvtrp0M D@AB@B@@AB3546    ѦѦ   f&sojf{a{cvlssT&}(lyM}ima{Y~pjpmxfuyTND@~<7fL@y?S}c|kk?eHZ\BE;|%aFDDaEBS$ntLJe}_GDEdFDEr=5rI@z?Wrlqs`H_Fc]>CANnv@fY9M~V.D.`YuH._NT|S%ZKc~HeeM,oh}_Lc|^Ldx=|oT4Zu^t.E,nXlD3`SL\mu>jOuZ{h}e~f\sB^_c[|Z%a[cjD]f5wog}_\d|_\dv>tqEatprnsp^kLX`iSXkxkDCerEJN|cii[CW5]@UDS&0_WazWePz;sQQ9nf|]Wb|]Wa`I>ogIDYtkxrys\AU9]=TI_f}~ogvjuJvIu']GzruWqyjjvh~KxJz tBJea_b]>Xa'``kCMaa_c[;cgMNOFIONDtе˹϶CNMNNOEKNOBξɹfhcw vxw~Eк׽㾶@yvBvssYl~ww}B˺׽໶@|vpHַ de 縹뫑埓ֱI`ffeiyxxzregger{xxyjeffgwxxyuefgelzyx{oejmp  ȷդXMޣ͡孋OZ[F} o`ޣ褒ߚг_ffekyxxzoeggetzxieffhx,ysefgenzyx{lejnr ̩m@ۢƣf cѳVnVmhdGnlMpbdq߹`p޳ƹԷ߼ӹ1޴Dchhgl~|vgfago{mghhi}{hdafp}xxohlqu ƾڱϲ ºתWLݲțߵƘ߶Ԭ#"*)&* $*)*"#+"(} m̷DDh`9mmNhp`v{ajݱŸ ͸ ߷ ޞݤ<ݱbhhgn~|tgebhp|kghgj$ygcbgs|ywnhlqw ƽײ˺ ¹ߒl@߮޲ྜg aǡh2hourbnqr|{᫐d{[ܚ DZ줱hݥ ܜܚWdiihm{NpmM;NIU|nhiij}{jZ;WvUK`LQimrv{~yᑤ圈 }ROP1eְ֙ ̮ΩWLijʿԲּQHKX\\QIMݜ– ݝ֩ UY.-z?&iM,1,XW$^E} k罪c2cour_jqqǀ}➜]^sژŮ瞸 qޞ ژژciihowNrkH\j[a@oKemrwʱk ֢xӧڦ׶җشz zXRT>l ͠ѸV rF֓lmd@~^` ^SخذPKN^aaSJV؜ٵe_¦`y,`}sx`krs{vٕ| vvb֜Xzgxufoeץimۀ{Xrv׏Ūkgiy՜cゑgp ekkjn~|'P*0eoE}hṮ\%\mv]kurٴn ܃k gV&]ӛMY~`y pןYtn蜂EzՊ̽igjӛ_Ղqrekkjp~~{LiYGHHMYz~}njkkm}<~xkcFNaQWRQSkotyxۯ绗ʑĠ~orq֪(m ʠϸĊ!ȀVtRՓlbkD@xjbi\׭ծYWXW V_ԛr}{qױg ^ٿ^x%^ztvu^kquk?{ Ұwu ՘wқҴ6"?[E߲o_ӣ[X^_ssc:gCa~$Ո}ڇҘц΄ 緻ýћvWy~~{ikhYjyyrhaljiy~}ljjimxo}qaaj[q %һЃs߹й1_ ɿ㙻˛Ҳ,ɢ¾óͪWqeMLf~3ļ°Ա˶c_`QMMY``Ҝܼy}yյͶӝ֠~A-U**jz}}gݷ[[qt}\krtlշ: Ԥu Պ~Кҳ- LFVq lӝXYfcjZ8_E[#҃ȹv΅͒lj빇Ä߷üϚxz~~yikfYmzwsddkjj{~|jBiovq}o_cj[u'u|Ѭ+mݖƟͼמ!ý±ՓlYoA@{c3Ż׬Ѭ`__PMM[_eКvʅvyӬw[ѷ[O4%[P4j[lLQխd3J l` _eʘȶ< ~eۨQg]ia˞5S^kcjK@PHr ̀PÆaxuTXsd 䰳>7КNd{g K{hi?un\thiihzP}kiihm^TmiivxW~ WafsȐԭy ʛѵO`;}ͪYeiFL8bÿԱʵc^`RMMY``ћlˎrmԳ Ƽ˙ԙ@n)G,2*P}cհYG5YG4fZmJVמo&]dsr ]Uǘȶ. fvޟKlZf o˚7UaoahJDOFx {ʠ[ņUh^dsd ۱1DΚUXm Pyhixgcqhi||Qi(hoVZliixs\yX[km֢| ݘşNZAՓpO s9 @8cÿ׬ϫ`__PMM[_eϚfpҩcWƮϹ]T}]T~Wkly ĺ[f:4 ojtnWfǼ fjjoDϹ hL(Ԕ~K3JQ߷Ŀ꧸ۿ ùw3}Z ᦱ"КbyW?{hiihuhQshiihzD|kiihmVOmiguvKl ︊x]sܷ;1EА ʛѮ_z÷ͪYtd> L?}e3ɿóԱʶ]VXWVVWWZћٻx{yԱяKZBr1.01-Q/f{}]ʧ˺[Rp[RpWfpx ³Sn+9 imsoMy'djjp7ǺҸ v::مxE6G fݷʻ硙奾⵮ s8|]Əܚצ#Κ^zEyhiigy_Yphi|{Ei(hoMVlihxoPfޖhht|ϴ"V ܚşͷsaʿôՓpel0 @z?ugȾ²׬ϫYWXV!XV_Ϛw즢̓uxҧdSƭEawiEawiSH yf<ﺱﺍ6okl5lo¸xz{uvwwv|ywy}z~|{|}} zᖒ R Qﱎ8qkh8c}  j`bcfmmkgdedekrqkllmg`_YZYZbdedjgdcde[W]\^Tadedfdhgdgfefeef]Y_\]TadefdcdfddehfhfdbYZ\YXY[Y[a`bdededefhdcdfededb`]WXXXW]XJKLKLKMMKY]WXYX_`_a`_VZ_XY[ZY\cZY\ve_`dccedcehdefddfgdefdchnmlmf`_[ZYZ[YY[dgfedcdfdedgi\[_Wfghed cdfefdcefedeYZ_^]Tdedgd]ZY[Y\ZZ`dg dfgijkggdfghbaa`]WXYXXYZ[[YYgWKLK[\WX_`ahc_`^YXZc_XY[]^`~ ½ ºl5* /ִϲδԯƸ֘ٿӶ yڲğ˲άψnpZ^Xȯ͵μֵ£׶ίү ϴ­ϲϰم ºۻؿ ϩᐏĉVWug ȋ mąss  č Аᜒ خꓤ 㒍Υה㋈ת䗓2 iԎ ό昒 Ï o؏?[ z Ҍ ȯĴa%QPž2P̻chO&U  ƻN݇  Ƞ яsԑoB[h ¾a~DqYLoCU}DrXKnAV{EsݬX]pWPCV ~E5}ɚ) gjhkg4|}}{ ƌ^~ }~݂兂~򒁂} ̒Ӄ }釂È {~\o}~CZ ך 󸶹a  pxIp*Nǽ#Ǽſƿ8 q   ߭z~  kԑ@[} `=} S~P lĄql¾]]p ׬Yᓐ ׏ؑЎ ߊߊν >΄ 敏֑ ԏڏƎB\, ̿.7+g077/m+7/l+74O,7+i/74N,77*]{c;"ìĸ뽻ʾ ŻғnQ;c˓ Y    /.W&/"a'//&g#/&f#/,H$/"c'/,G$//!O>dE #? 4#رůmnloi ݘn̂Uя:྆~͕ х݋ 瘈؋~0%(nzG[S(10$,21$c)10#"-212+!'2)"".2(h%1.$/1'"+2*"(2&""'2(h%10$,211'"$1)""/)"#%1.J&1&'"+211.$/1$#"*2$d).$")212."%020%-2.I&1&)22*"(111'"$011&%2.(11#C#,0i? QEcM fܨ fuEO ſn Ô  'jCVؾ (1 0;P,1$c)104L',1+[q+cC-(h%/H?.01xW)fh*~s-(h%10;Q,02r2b=i5-J&1(0,v[-1/G>4c+$d&Ck*1-G6-4L-.I&1 03ze+*bl/01q6/0v'>m/1#-LyaTwL]M~`TvA^M{_dZ1h wxry~=ᣴ¾ڿɶ’ҿoԖ6/ Қ ыMпԙkᛟۺᮙ䡛۞ 蘞 ɝڞ ӗݗ/ j$Wc{}m(1 03{%1$c)1'y'0.8gUQ7/(h"=Z),It:gGU[((h%102}%/6wP+Q4N_3,J&1(+yTB/.<[,_Z'$d!hVH.1.wi~xn'.I&1 ,q_ZG1/5xP2-MRs)1#6޽߾Ϊ Mdځߐd} Ƒ ҿِh3  它'䧫  ^  q jaCZ_9(1&{&1$c)1){',11,`A.(h%/,Z*1.:h/5UD&)[*(h%1&|&/4.B){(.J&1(+P,1/,\)$>A.$d"\Ǧf,11.9m'.I&1 'qȧg*/36,RD01#6- ٧.IST [DǾƯ {{۾ľ{ ֦X廉 C: 衢 yɟ ʟ ǞԚʟ֙ڣ Зݣ  ՜  ߟ̘ڀל jb? ҭ;(1*z&1$c)1,\w'+*1$q/-9)(h%00Z*1&p1UE'c)0(h%1)|&100?z&9%D7/.J&1(-cq&+00[*&%1$d).5`@%1(S:hs(.I&1 *uS9(0>|(3[*#6xy}3}Uڢɪ"kH=ż ȼ IJ b ֣W}P ҿ  㺄   Ŀ U b`8Ƶ(1"u!2$c)10,[2'JS+i,)K})(h%.(S'/C:j@ !n)1(h%1"w 18FB|'1.J&1(,VZBO+'T%6O+1$d&F08JT0O@(ܾ3,I&1 #p7IP6F)/'ru~%#6 WH]V a =ɔ \w¿. ֣W鷶 ϳд |Ӑдٷ ߷gڰ ߲TA<۴ l" (1 02`+$c)1('a0`H-(h"<ִL%SCBL301(h%102a(=5G5J+1.J&1(*nY/ִDg'21$dppB5Ӥ{$&h(.I&1 ,orMpd6:/*v*L,#6s7k-'$T ơƝǾƯɾ* ʿנV \ ƿ߹ Ɓϡn˿ żӾĻ ˸~º <ԃVM](1>?:0$c)1/@B-'1428?D85E6,1(h$3A<@60/;E1-7F5,44011(h%1>?:009E1-6E6,35011.J&1 -?<+332@<@6521$d)1A@+1517=D<01431.I&1 0;@==,:@$z)9E1-119//6<.1#6̘ИΗz5-qoVf]+ު ʹ¿jI þ= ƿD þ Ąqķzf ÿҾ Ϻſ¼ P}g^~(10//01$c)10//0101/0/011(h%1/1/010/01101(h%10//0110/010/011/1.J&1/1001/1001 $d)1//11/1/ 011011.I&1 0//01//1A20/01010/11#6vÆyuꈜvŅyuwƄAd+%1\$  ķ¾5ʪ# ˧ů IJԪ ߠp^鯲Ӱ޷㲲Ƴ߰cXީ xɰڳ 叕9iܰao^ߗ$Y$$_z$^{$!?$~[$!=$!#$6$\HA 2nеǾб ȨľH 7JF  R   jth¼F  췟Ťxj[W ?B  }LJ     ܻ ՏP ?Dƺ^8 evLE%<\]$LԇҤʦ ~ਃá ᾦݠ D˿å  ꫪťˡcyFi𦧧:8޼߼ϒֵ߻  i0*89>O íÿ , f.VhCt6I9  t9 $Aчp2 j E͖T}h[{TgU~g]zSdVf ^ TDM=7|ܧ ґvtwwuχo&l{)'BIEZZᓏ Q_ȅ ᕔuX i⒏ 瘓ߎ揕 ʧ     ‹t?hmn[ m[k^b|yojezoa:ucilZ| cz bq^ hkjmEq1@o(q$R0迵ċt5p wz/([pIӁ~ɣ >i  kŹ ^x yZf fxw׻wzcbh t { h؀ƳE1f(w*x3ԵްޟQm괮x6yȏuwwu} 3F/ kz.JC , ߃ɱڕ  ¶5"yf ձκđ ߜxnjNFePpY pǘ\jΝʚ]O]ʚ]ēSwJyeRv ڠbzpœQgmvE'")SﱻK,/ ^um ʺe<Ѣ ӹ&   ɼ{| fy ϡǿ  }r՛hAI oPxC| ʙVyQnxu qvy p˖E'( ڴ ˌ}{jkke| ʁ} 䁬ч~ BWG}ꦀ:־`wσ~&}ghykۆrlӆwџiߍocn|Ys&~kĝp|sq }X*܋ylƟzE ]W#@[ A ɻ   wІ ? m. ƬŒ暪 ْה嘨Ӝ ϒ ԜأŵǒϬJ΂v8jOCh+Kyu8lQAg6 Mbu9mLK#%  ϱ ['43*\Ԏsttr5fNJύ x| ؏ s    y `v{  5C,&]&Ă ߧ ǛݹcֿḺ |Ż   [  OG I F(wmnnmսm߳ wȺw ˒뻈܎茇󥄆΅߉d rjфZ؈FPNRbiC U U eڴy59h¶ $  ]WE3iOJPyۻM  y{{x) ޲٣բۊݙ ף ȗ 𨘦 ѕ 럙ؕWRBbI$9 [ZE>f ɪ .  w݆ᨀ ] ۿ ۾Vĸ՞֔ӤɱԣO_S/% ' iȢ . 羊k Ƴ  e˾  v_Ve_a_qeYo`pwBt HA ɿ * ο.  . мk€ڧ ڵ ̥ 񰩫  ݫǣ⪪*+Ǿh| ^kRXUXm\RQYb[}]_fV[ga^`_ jpwm͞eSNp 6 s#+  ؾ  h ##r|布 fl̈́fԕkd |ݹz|ݕp |؁¿gc/ ~ֽ   ƿ-; Z en  ’πƃّԑ ʎh  ڗ呒ٕÎ֐* × pțivn֠ Re b`V@xX^zgY  R Ӆl ȿuѢ ڿw q  :NU qŇVZ΀ҏJ\akɢp ֥q땈g!d8 z*6kL  B+l́䙕գ噕ޕ × ֠ d  ؖʖٔF`ܜk{JhsÜ挠LȡZ}'P˴ʲklJѯf|ۢxߠ}jԴai@4- d`8B-7ޒ  X}   h{siqpqry&rսlryvxw{yÃt tDqZNoEV~EsYBpCW|FtImK@U=L=ø>Žjš  . 8ܬ~Ծ~।~Ŋ~o Հ |~ ؅~ׂfh ;K!B4Lƿ솮a  . (@ 仓ÿ  皔  eпgEHۻKN+ ڟ]veuvj ̽/  瑋Ί 辏ΊꚎݾ‹壎  󞍏 ەԐ ͈䠍ŠËbǿg7ZcTB4ڃzք 뷘 \y  ⇁ ߻7ǿ|g;I8&'<@P ݿ}|~} Ё ܁ˁ  ) ݀   Ѕٮ~Ո  ꘅ豅}~ ɼu'&s^M¤x Q B ̼֫ e   0c Ըd)ҿ  х E|Gx]L^GYGp\OsFZ~Hx[R& ƻ 쵙 }͚ ޲֗ tˊ杙m Ϝ IĖ տ ؽ֚ ȕwa 礘աxԒlóљZT^ .K XL ޯbW 5%޳ ɻ׿ ] ɿ-   y_v[ba jqdsmfc_uXp _u[YZ~\jp{frjbZ~{f Wzޫg|m b`/&eg  kΠۛ鹛 هϭ  栝ܙ˚ٞ Wɚ ͚ś yyw mlrץ{zaV|zydy{r֧nsh몱n _ځ͞kݿ^6 O  Ǘ4 uș~    a |Ywv]_ b;gkFgYiYwV~̛ YvupkAa`h mdlcM܊)i* Hӽ ֡Ѣ}  ݿczT  Fl| 3A'~o7 ӽ_'ː L<Т d ̣עĥɮsxפɪ zU 橨   ǥ ң ا Uۤ A'{ ļd1 kܿ{B\"  n 2y g | e X    t @'{ٹ0 k/7ps < K)Y{/˾ m 2 ξ ZGﮌ ~׀ʐ gb it ㏏ ͣ EֆB'^F ԗ~:4$F s 56l g Ͽ 9 {ⴅZ`,[/j aNCFv _RpJWGt[NpE Xr|GuT$IOPH. Gc<ƻܸ %m߰ p͇֚ Å_pӅ޿畅~~ ޽꓁䉂 ҅捅HڢF ![Am~c M ;8tk N XTQ6 pvxY ܀ @ ԣu t||uwqu txx Cl, * HY(Iu 3+ !ʼ D񡖙˹F sљ{˿qZīǔ ⚘ɾ ߛۓ ǔꞗ wpꞗݨ^ÔɃ o^wmfraӼWs gϡjϡj uܡ%R"NP#`XbcTwx &W>'? )ҷ' S  n{ݪ{[w}s y ䷊F  |Mjpߎ Cl~NjoTk}f_exZj ~ Oioq NPК HU {:v+ ضͿ ɜļ]|p ڿԀuӻ}ۚ՜ G{)y  ݙ!gdӖ ꡚԕզ \k y݃xmsr\kj&`Ȁkksrgg\t~fB NPܨZ۩þܟ;ߨmȹEl x 䏄~p`ˋ?H )L  qr Xc+nxq!}||zxr̲M[f݌_]rftfwl\ugv PQ=-l Ĭ  >Ż |i] ͫ ƾƭ ؆װš Z\ϽԜvRš  Ь"ﰯ̪ݪުX`dۀy>nZGSՌcjX_sau!Yr亗yWrfw``wciyzqXdJwڨЁzϛК q+BH+߭P̧ e .R Uļ6 ؾԓw]Іng ٗ߾   ӽ m  B D]#}ECc:)iLm\$ UGmt#,¼s*MQ_ 겻 ż ò 珉ŸuֽnϺÊe3Wܺ  Ų}  ѺȻݺ ޺BIa# ȼ'憎ظڻw~O_"!vH 鯸 ¸ɷ ȸ׺˷jx߷˷۾෱Ǯ ֯ ~ִD =`#hչ Nq陛wpl{  荆煵]¿ҿyƴjy 5\    [M 7`$iNءȪl /bC 򬬷x  ֤ ū 苍rV]`p2 ǩ٪dwqgʬ Ҥئ §ʥ uS fsWݘޮҼܵ;c!&ݯىQd F{ ݃9鼽ȫƶxƋ  |䡕z~  ƿ \TuYkVQ|YhZn_~XhZok 7*ɾ䕙R l̳>򤗗ƿдꜙE  ƕ ǖZcg~ק+KUj 蚙=Tڒ 瘒 Ў즬X Ƭi >`Y0   ߧ8_UБ Ž m 禆΅i Ɣ  k ȝަ٠ٛ 쬞ٛͶi 'ߖe ǭ  ܿY ƿРʨн[R ﲔ 楕 ﳔ Ξv}g^XMj|˶ظLѾTVʆJL㞕 ڒVɚu _˽fRz_˽fvTȅt]জ[: gǺq i2 [k멨i "lyX W8;.wADf> ۶q   wѦ~~    9r lkuom}co Zǔoi rB+rĥôYe{ 틂 ݄ ߄񫂆uKȾeRLiVӔ~ĖVPFo} EnI{ ZshWP[b~{ ݋} |6վ pǑxזӞoǐxܐYh}|R xۖœRkcj cFâ(۱&  o' cy ʿ x㮇ɭ{ȿȤwˁϰwֵވō  8ߖw i~ G_6r~Bi.ڂqz&~UP@~ׂ̘_b@Z˲r8lPEP7Kyu;lNAg6Mzs9mL"gB3 ۏ[s G 햎Gꝋ}dӾ ﮅ ؐ )gRU_rоmKsnF׉r⽛ַz{Û֔uJҧEy~Yzԯ͈͢ ৌU6ֆs&zhiz8Ŋhi{7~bvXl&yjⶒjnvlkn{7ǣsi \Cvjk~he+)"gB ۬g~ rǧ"eb @  ؽgwԿ b 續Ίӈ𪑏κʴͣɊcp=䩏ǣװzĂK  dԼ     "gB%0O4meaX Eo}}"r |˻ ~~ ӿ~ # ≄-ZI[crSdu˾{ʸnb_弛躉ៃڠjY[^WduKlLyQ |~ 닄ͅ ؋~`j "gB(2T٥g k9  ~ <#  njΦ~˷/㦖ǧ|Ҧ 緌 G . 2pçc !j?ۯ#ݭ|.  7Q ư aElñ ٸŐ ΰ ԼԱȰϯYޱRTi} бȻНʸᱢxɶmN ˅k ȿ 찲ڹʱ糳ոױވr_ q+JJ&کγl$]E_캻̹»𗙗̹ٷHRǼ6jΰ Ļ ۹Ϲ ׳ ڶĿeő 輏Ew$ޘôϰǐz}lttrkqž?u  찲e ɱ粹᰺ݹjijrΜ ȖëМŪЛ[F =`*wɿUЩ Տ҄2j?    ̩|zv_[t "㻓˪~گك  Yew bQt}evlduhu[D YMniǸ ӭև­ƽ-Of삃J 󮱻t ڷ   ƧȬ차䵛w ﶴ®ꐵ  \I ᨨ٬ê I [D YMާyp2á Og g ާ+ Ŧ  V  ߾ Wp Ҷؿ ҿ   D [D íA  ܕUԽS ' 蝚𔕔 Ȗ򧘗⡒ Ö Ė}' ԛ  驓ʞ 2 ҿvg6 sZޱr\xHɁvohvfڲr\cj hmvRB hmf amf NioD ]D"_ި  #\ c  t   z ~2a   ԯ 1&t ftxԹunc~ kx kwy؀ưG ]Da٧֖̎ `ɕ ĹzÔs   Ҙ  ȿÿۼwZh"Ů ȕ àc(   Ҍ ߻Ӓ,!ѿEw pǘYjѤ]Q\EuZi\_j߫eσաí ߫gj~Ŕb~~kkp,MG֬HK j`W     n    2pTtLins v~pvvz_`L p}̗i}Fr_NhFXfGt[NpEX}BuZ*d ;~ǭ Ⱥ} | q& ~≆   Ể 필㐂݂z ӓ ԅzPnh [ 񙃁扂 闄}  CVwقujփsnfVtݣn&pͽ7u_k׎ypθp vSoe y}.*  7    ޺¿k T^V    Ŀ ܳ'}a  ʿ؞ ݜݝĜ顱 ٞޝ֟Ӝ˧Ԝ צԴ8 +  1ŹzJ֓ 䈍铎WaѡT  ti e  ϯË 46 +N3 گ(a t3. ͖ɺ, ݯp ̏ 1,9 +þ +Ѽe] 팃¤ Y '9އ ⻽  k~{~~_jͶR| ӛڊ؄ ~*\ν'B/ +yɿj‹ ҭ؍dJ9< E&j  Վӿ*^mDrHK sCM~DtXKpBV{8uW+oϟo=cD䗗 㚗t/ ߑڨβڷՕ򘘔ē Օ]f{×ڕ оܕ>d4k1 ߯,   ̾)cDυ   y ʺ փ  f  ${5ؾk4 :BڮO ᴻzAIa ϗ  Ǘް {“ՖVRo$P gᵔ ڗٔ g>e  ;% Ѯ[] ` / ӻk* ۟& , xP嵂Źu >}    W9;Xyy cb\UW]dW~Yn`aXn]wW}YLwcaf ]jtlɜ]%ʉTfͯC qA קȨ ,تҿ   ޒ뮦ꢨظ 𼥥hN@4պU묬zةݫv|_ ǥ ڲh ڻ  歬  p1`辄 te_ghᔚ݃{hhp s؁übY $(.= ֌V0xϡ ޿(YӅ  ^4}sڝ 7lh א   kex` ƚ`Zbb}[_S }[c¬jIy`v\|}ȇw}ȋ|ȍ _\d|ٳĭcWFҮ𺸴嶸͵ Ѷ謱 5Rʹ Óm[㯰G 񴰷  ٹiе o KQi߄ wۀۀ|ۀ|w{eIT}ᐬ󙉆]}ɒvʑ˒^ e}2`ےL.(̳մ ˴nx1ճ᮵íf猑ٮ୶ µ¿ٳ ܴ VpVTkݜpclԽ_pwba^ag!İ]htd`fgy̪ sjaV~]:D hJ a  HT4nмǾðx|wʶ 3Ӵɿ鸻Ͽbݺ  }`Ľ ҷִ y۵ ȶjQa 1U;Kƿ|qΊܛDR   k7Dڻ ǾʽǾ ɠPɿۺ縭Ϫuv  kyv H ƿ -a ;j8ĿNl zy  ׸ٖ0gEpѭ˵ۿ輩/שּׁ񬯮 䱲筦 ²ieʩ  M!: 7+Ϯ ۪iק߻.9DCCG&UZqKp̶خ٬ÿ:7k aJIq2yki Ͻ{  . 8 A  &ͿyCIկ     5$-Wzjmu^pe]m"^p$*M1߼TuSB t͊\6 ? w>+ޭR,1 ٝ՜$˖號Ә bdl θ ݺ r1 G֧ И͐ &Td^]a[!*){]N|iA#t #ԲPgywQ0^iAh ^7﷈ ˰پ{ a!ٿ twK  ܿʨmlmp^%&'!,ECECC@dѴߴW5:"}xyǿW[}`w nj'ۡw_MOh! ) >aӾ @'5rԘתοɖ  힙٘ĖUՌ\֗ Ȗ 螙& ƞ sٙ cIDAE641TyvtⴓY.2P`ݷ||³|zے7WPA g 48긻u  +VR ҿ % Ӎ   lC֏#XT ߇ hnimi}zpkp }{i=9RT UJ97598861NPQW` ׷ ޗ{rWZQRT8   LhUMGTaaI']Ğ~}{x ڦO lg  i 6ԋ懃 ⁈ɀՆjkûYu䢁  r酜9, hq׍x V괘hg{{gׄs ßdrnʙ? rxؠz ;իF_[Y><16G!-JNMO?IQPMckm|{zzлiloH#&'% $}а~|yG ^Ⱥ d Ėՠ N ľ    Ђp ʿ{  {d^_Sя }fjmva‰郟 n0G%ձf!JxQ;=@&Hťc/@CAC4!ȏzЯ|}Yšܦ  v=^㓐Ő 1  }{Ř ljϋꔏ֑ˑ`n`w睊ҋ   glfao teTy_fsx^s w~iÃ'S8tfPJ{̱Ȭ6  % z5ڿ ǹ p| W񘉊Պ   L ,GA1^ %ɬxX y|ojue8~w Sxngnng>[˳ U .U_NP՝JRڽ  uƦ ѿ \o屦  4ٓ3쭥Ѩ詤ڤZ ꣦ ӯW_| ںu&쩥Ѣ ]Hߥߦ¤nh> P AgHTaAՇsc|ZtAgZ{BjXRmMkSc&Zeֽ>_tIS`_|Mk6ksIRe <΋ NP Y x3Lƽ(` ޻ez򩞙󤖘 p惖 2 !XH9$,$ʳ      ?  NP  `걹}ª = ԡ Ʋѵ ׯղ䳳 浣gߑ^$  ŭϫ"ބ˲ްମߢ˲s談R; ˙ PP  HN ѿ r8 ۉ  פw8e &򤔧 *ɿۼ־¸  ǣtk ^ Ҽ ؿUJ"ZJ z ,p#` (]] m??T W}kȾȹպý ̊2tҌɐל&7YȾȽͻ̲hw w ܿ Ⱦǽǻ,#YYȿ ǻ u@% Dd"  ӸXv ಱұŲt*.ETS 7' Ɣд$  窴ܬu設 Ʊ}d ޜ͹ ʱ ڰ̱'Ι㸬DŽ˯ ڼl ͫi밳  @zC I_${c" r Voi7  &i (ò   B&R_ I_%9,"̚Bk.ɑѠӛ ܞgši۪Y 񤞛š!ڙ t皗 ͈[h$&D\%QHvj.~-'MQJ[!)GS njڿ  쩗 jl Q o$Dא딸ؐٛӐ땷Ӑ 듸ŭ;Jm p./I^b\ M| 0V4 䞛ќ.󥙜  ퟕѕ韛d]螘 ȜݚҔڜ 3آܚ „]ӽé Waɣ{ tVxirl䕋Z_ӣ|&x읜eZ~qjĥ lʣ| vTl覬Em5n .UN ߱{%@{T k   z܈  ր   t U’j[^qSÑrr΀—nɔ }/' -삚}ٱΖ[#& ȸ튇廄暈Љ\: ԉσOef ć |쎃㚆ԇ 䍈ㆈǸ9  „ ́~ ݎfSgLU^lfTQUT wj^hœݎlb4`(f@]"!k!,: kT)!  쨩 ־ ھ ޿ A xFf, w |g}jz~̖Ff,̲TkŴ%6Vh +i岿vG  ͊͑>z   ڕ ͉֎Z~U 앏Ǎ ޑ ^[ t b@ A͑VMRd翈 %h ᖔ勨 ӑ⟓g?W Ɏ  ޿Ѧ. Ȑ ﹵ڑƏ ҍyQkP;4cSGc 1(  +  uǓut  @>&QH  ōM%V? 񰐓Ў擓V 㓒  ܽ 妑ڢŽoW 掑 [bʐ S^[D =EMcf%  ÿ ֿ   /  :< &\D!z<٦ɥU#ʥ 㢰 ӿɠܢ~{ꬨ  ۢ  ̥ߩ ﭧ䩨 ҥ 詨    ?>Z(mg=;ѝ y ~ܱ      !ݴ Nxd|^ S|^ Yyxdaw~aqw&wlqxOJapl |^pl {bhr $G & !ipz UDÿ GPs k   ↓  h  iwՕηbw iy ty u؀ŭ' )g5k;ʗijȖDԕ朜 Ф제י ޜ _ 矜xǘ Ơ  윚 MlX ԕ} ћMĔ׮_ēgLT\Ht Ĕa}h~yojlw~ 8 (#̢rb"+-*Ya [}˃g ~  搇    rn'   z>w6 Hl;˗˘wji{o~x˗i| j||  (Q~""!,EҏvofIQ9\LP ZOɃˆɆ=B󑄈q܊赐 ႊ ĴӅ u }.׾   勄  ѧÅ싂 Gtj~i9usjnOnnOކy grmgsoNںi 7һiWSyw zBo| + 緿laLqbdã7 WK Κ  |沙v     ӿקѵէ۰ͧ۰ Ʃݰ Ҷ ȴڽvzuw . =݉Ċ펑Ŋ vH1ߎ\ӎڑ s`lnɉ锏Ӎ"Q͆z  Ɩ ̑   0뗏ƍ؝̷ܬvwxrx $d0l [ Exȍ  É荬測~ l ƶ    1ԫj֩{x}|xreV[{!Q- 'weكȀ~ ɀp ݅΁} g~ ~҆ |}~zĠ|z{ } u{Ӂ ѿ я몀}  ) 劃{竁vYشlt}vs}s( >] ›Tf p ^ Ȍ  u Á   Ǡ^ 疜 畎yA  <XˤqppS3 ?o,>'yΐގƎh<S>ߤܒݕ ʎ  ˯ꖖӒ"򕕎ݣ k hÐ ㏓ ܠЎ ̆K9o ׺峻Lŝ{xxzkǾ唒Ϗ ϊj{Ґ ŌϑҏR  Ȍǟۍג 儦֕j ޔ$9 ϔʉe   ?Ÿ   ؽՓ  ԱwLڹt 'a8!U Q ƺa5   ӑP k﹇  Pf ۓ qҶÖv{ zĵ  Q`|v [y^b[VlV^pHZclVX[wf ^di fE ]pkśmQЬ1fۯ@v PW xÏ&Ĥ䢨ТJ\~\5zZi 誧Ңڋ 馧ء݄ͤpέ |dw [hc ڳ!lפzB[“jĬԿ 裟   ٤ʤӨ ؉vÅ g߁ܺd✳tuj܆_hn | 䱕o w؀Źx}ԫ{>A '~d UEF ܩ Ͽ֎Ta  ׋v~ of_ ע @X 쯃t~   ɘ [M`zfw`mmeS[LlhkwbuœʧȘar(ࢄ߭unnɮ '{F_/gȭ޲鯰Ϯl۩~Ϳ{ ¡|ϭ ԙȕZ׷vٴfx keY\l  ъ ܤѬԨ{brg Ȯ 쬱 𱱰̬   IJ ۰ tGNsv阱rɗY_zHJ] ٷx[ʷwdyvxqt '{%Jc 꽿Ŀ[RV Ndy ȾݾŬ x l_l]pjgp h2ȂݵҾsėlYW ſ! 'ì \PVْo\ Hs]laɬU{&]ܐkԋoo|ߋ΃} eӵePӟ{7iƖ捀Į{~^ &>  m7u{]ݿTܼú   ǿ ƃ¡{w|s$ܶ 5ަ}~vyzܫЫyrvl » ú¶orԼĹᵺż ݊~ف 뺅 ʀ ~ ˆ -Ɯoϰ~ý{ƛ $ -  ǭʮS铑 氶Ϳgٶ̷  ϲ{kʿ¥ tp~"׳w[ ي Ʃبq䙘ҍkɸq̵ķ㲸F괹ѵM(궸+ }޴޳ ׮V-ϴc֣voiz~ % Mvؽj ێt)cݒ 9㻘~|v}~ֹ}⸰̿xw˙)ʖЇwӸVϕqYnlCԳD2E K⦡Լ xwK`plmzz}~ PD|𥜝›7~Ӆ ò Ɵӟ巜7ëxĽy~{~}ҹÿ{q5辐OIDQ̼wffc$lԿydQfբ`m|ڸnQ򪛷٫硥Uۙ ݳꨤB| ΚЮ/è}upH NPM`~lfCap  ҆=٩{p|ʹly6ɤӻz}l|Z“uRaٔ{ѩs׺  e/ֲδ$Cǩ ܿF8 Αw}uǸ PP -5QeAHY@  Ț Ę ν ¿q{x׽߫~ouơֳl\m»踹ٱw1ĩknwƵҳ|y੢ǘch弖 ɘ ʚϮ6z旚ؽ ;  %䞚)b|}z ϧ ٰ\fCx˪~ k/=UHޫ O(`~ۣ-   ܆Ί跏vkyYp`r|ùњ{Əz,ᵑwn봊 qΉ Tkȿۤ * f%ةYප ׬.߷X^߫}Íux D_#Y?ľ3ƻ62RC ދɃ  ˃ 񔀔לtTϤSQyuyخ~j_UୈxlGknR{{}̅f䳉œ`QS\ajo̷}g~쫂 ӡ ;ѥ΁" օݿ~qjlڎԺԾˏC)UV_ʷץts J_#ֽMs Y Ƹ  qֿͅSʮٸܓv¼dz|mˡ̣ ױ*|О*  麌z b[ur_ TUu T}^gdgb` ~^t\rY ef_h xfc Vr֤( \Һî m ׯ ”Qqu϶Ѝ쵺᮶įЕƴ̿ﲶ  ׻Ԭ'b[?Ԧ琅q YG*1x0 oݶ v^ cGƀ؉  Bz  הNj  ކߏ   誡ٿ b ʨO&kxxtYD2&ZLMcD\ǔ 稥Φ梞 f'먥 ɻ긢Ԛ Ԛi 򢞢Ց쥥ךꗮɛ 맶8Ϣ ϵɟ 㜔p΢%& z[}gQN-#56~;zFӺcD i{[ ʽ Q   'ڬdp'jDC 򇄤xl-xl S}   { 弮yϤɠ߶  瘟께֝ Օ؝ڛ ؝Җܘ^֞܌ 왰󯝟ڟޙĜ洜$r#Ϋ׮hzzљN/2r"ީ鷈uo T ׾]ц'{ Ǘȿ  پ#ݳAXƼ u chegcvq&nphejs}vkr {rq{rxn+Nޢ+夒ɴ۸zrƽ uѐČȇҼښ𣅈 𔅈ψ q҉ Άÿ !򊋌Չ ִ؃ꌊ  ߌ"^O lؓz iٱmzᆹiĖޑ&扐pzᇶ\{×oȅٔx m{՟ zʪbzm׼˶xr~ סΝ٢/Wߺ ~ fK dׇ  F Hfc zd]Z |fʄmpZ`Ǔ mj9O{k׃݈uw/~ݠ ˡ¼~yrt p_௎ÒՐ v  ஍⋏ϊѕ̿Íϓ Ϝ͔ے +` b e}y{`v}rԱyk_kœ {~mþȞu l яӱ 畒 ? 㕒켏Л|l 嗑m7x݈אŽ׊Ҝ  ׳ɏoGBE ˓ 唒͓(( 񿋵)}|dĻ}s̷ǼѦ].탯ܱå}>r~Zө ȫ~ƨx#  sr !jӥ~~ˆk   Fw   ' ɲkaOV٧Ɖ(# ûø ׺<uiW}~~{䕕ϿxvϦ~~}ܹ֮U~  񘈋u⣍Áz  Ӓ  gp]劐ע͐'/P, 'ܶ&ē༉̳]ݣA̶#|j}嶎J0Ϩ¿ۨŤ"Ȧ|ur *  О P ݩªl lUp ׭  *hSL c쯑"7gY|{z} $ⲙXԥӿٶɶ:yd}|kxW`ƶķ$OžʙRйӬ{~ɱrƉ!ȯ ;~֎̋ [֛q",*ލǜIꝌۡώzGպ~d 5ɍgܖӶ8ĢgDřmnhzgDF|Ƕ򼍋q{]id[ ۠ժ ᪪窧 }%9Ȣu}ĞQ̏ Ţи վߺlpȢ  Ъ11eբi"Ett䪖{㈀ι_,}sxr}ނس 겏=E{ ƚ ȼ GL qꪞl  S# w R֌ i     ɼ ꋰŽ͆Î㊳ 銰銰˻ )pX?X)4(LX~zuH0Bï CU~cdZ Lݢ#NHӫ՞޿ 壠ߡ BY"  p ooĜ잝!  ԗ՚ߙ œ []r w}~gzŽuXoůwĽvR|y nӬnq _o䤱,ޮgK JUɺW"̹}o9Ұxc߆ 'BHj.ĮޑfýĮzy  K,Rݺƶy dž}╲ 6`  o zdS㽑h~dytɔz|dLx  py-:K_Anv2I- 襵 +u%Ƹ~ızvuýل򰀎玉 Ǎ ܹy?߸𑅅ʅ֍ ߕZ騆׍ΑCĈ쮃J 玆Ԅ okV orZēuaqΒԔpt v{vn~b4n@wïϘӤEdFõpr|!D}+ ccOIawϥ-ǰw״}g鯯n{v߭j}Y  m  ډ  Wq p r {ɕp L[/vw wsͱ5BwήθzNJ%-8-*< F*"8⸤~ȭ 7Ʃ` ߔÒ߬}ʴo͊ ̔zX[wˊ `{ Йߚ `= mÍ ȍپ;k}g9}pk~f~ /avk~mkrpUAǟhg&lԙqk}miry7y'w w6yi9r{ d$N` H $[l `3|= ޥQr˺碣 1%Ϟϣu 󻡣򯢣ò̠ʠ }gڡׇhˢ̛ȑyꥠy  /jƞ!۞ ִµ 輸Ҷɴ ն)ݮݷ{{ǾľپwQu },¿z9V'0 MUt ֻrѿre a$&~ ֹu} uo  T= ~  OiunZbOP|Tyjлfuda` bw]cwl Uhv3*3ܺ׽ǾǻܴbЛ%z"W3<F ¿'0 JupǑÔU]RŅoҭb{ʚn ēeœujhͫЪتٿ8a}U`zr嶺Ѿ 4Q>W? ;¾6V>'TB"'Ԍ;Hȕɛӥ ,8 _䮅}4히  ꦢ x٣llk* Ǽ뺾߹ Ǽ ӻԴ ߰dzн๽ ๽﻾ױ Ի#氩 Ƣ+ ο¾3ޫ6W{-٠'h>yᢪ) ܥ ܟڶͮΦ  褌͛tҿ ʦҁ馡 ] ģՎ㌒ҦHqtzO,)  ߒ ҟ%s) ɿc< 7ӟ~xC  ηձĩp u  zTrV  ' ۵z]6`'Ч̿ Lȳ˛Zᯃqؗ} w壠 okuѽĺPɝ}Ьyrњ с񦝠ɜΙ|{ 飜V[װahcַt| /  "Z3MPT+_Z tַNq(  ,ǻԺkȹ  򚋍؇Ԯyvrd ͖ !ä{›ۿ ~ _ #ľD]-o^!􅠬M` fؿVӻ둖F n }f:L(zWWϛՌ c ӌdxʝkǿՆր a$ޡڨ~ѱrG}XҡR  ꘊ$ެ8q$`dkhؑewLΛc~*:i:Ҧt١{Ȼȋ  žz)>  Ղ㟄󲂩 Ǖ  v Yjjji-݆  Ҁ3w, Ћ֔¦ĿW }0Ԗ 򚋎 .c}ůꏎsɵ 和] Ϫޮ| (|¹ʎUpܟYpc / ΅   &߿ Ļ o'Tjjjin݉q* c ܗfԅǺD|  [; H,ߨ~ۻx |  2|򺏖辋< Oaqj\ bmC[TC`sCj^pWj~ThoMfZWude }gmk› ؝߿ɂ].jjjii܈X 5J1(؅♵%~b 񠟰ΚhŞŢe#鶁Ȋ ĒÝ}՚ңzw`WɆӜ ދc} ty_䟳yhyutt㟲 x`njyވ z؀ƶ)̉$eE p+jjjiiߌ?d>>gaԧdQrQ-AR¸྾з}ÿ7ʩ  QtrՏw   okV w񯿠NVg~ g͜{]iaMŒ]co~,ĮܬS6\? -3Ejjjii䒠IJ  O Ŷxﲺ ꤡͤ(駨ɲþ֦sȩϥܺ}ay ѥ  h 뢧 ~htj񦡢쨨  s EIsEILJp~TJsa݄s 0 SH]9rjjjii䒠G  raꑓve   lᮥЀ ه  ЖՀ Wͬm0׌d_ҵZъjl|ҶZoնZ&\Ė^mzrْo͟z`e ׿:j2*jjjii䑠[Uձ}& <nꉡo Ȼ ༺!޺ŵϽṼ հҺǵ b ڹlʻ ݷ ϓۣ ᰶ%vrख़dz̹!誐̕!ꉭٌǡ;bܭ{ νƨG+ѭjjjii݉ ޾ۻ t BǺ{ κﻴ䱺ƽ޿ 趶߿㻾 ܽӼø˵yeՐ˻ n–ӳ ޱ  e췶 ɤy༙wdz~ ľҼYb|  ە 3);jjjii݉@N   Y ɘj y Xv{ ӽ    b9vܮձǏ~v־ء~  y϶|    u:Z: 2^jjjii݉ ⡫iB_ hǣ4_{ >󬦪ۡӧݬ d' ҥʟSޑ_s䙊JI̳yܔ| ڃ~> 򼡤ǯw㮕㎱ bƩ ݯ$W\eeZMfE>dо.ŪB&jjjii݉z!  k>žyxW "bj "ȫٸ~t܅+娅.tƾ˶mnļ ̂>GA  vyԱb ݐ  _  HJ+x"j¿JD$jjjߥr s iۂHʖΛ B ˜ϕ 䥠 ֝؞~} ަ ըEJ  wx1̕iyuuJMcȻwy 㠠 m h]uj{ 縢ßߣ  G ^u $~2H#jjjˆTwt iyW~Du- y Ǥ ɾ$mן{ )zڗ۠a   ƁƔ͟{|%KmٳxzȥYWw ͘l ݍlS H_fʲ 3I!jjj tj ik㓠u Ly7 ]3$·󍏏Քˈ^l 匊~䍎 ]Բ } ݿvpʲߌȲ̵}Lʟ ⊈狋ݑ$ৢ{ѱ{yr ȖÅI ſ1+jjjjii,`ۛJy<ֳ   #󸊄hv KX ƚⵇ& A~浢 Г̑ȁ  T\q nXd]XqWfUYlo\Spklq[r s\e S}oҡszy h3W>5)jjjkii * z<9_h ܝb򛑓̖ 驐 ̍Ґ󠐏Őy fh܋ВΫkRXyqr{鿌yÏ ͏С ﬖ锒Ǝ giⱁ pw}ෘ ƀssoXcsסⲁ עg׆ f؁Ġ(6  G^-pS*>jjfiii1V y< X7ŲЂ≞ T  v~)ᨍھ ŋl Რ  yrǔ WjTi\wlox@qVrVēœnpw_1І/j ;f$O'Kfjj؇iiif~nuy<u ƿ||Dɜ}ɁRTR}π~񒁂 |舂~刂Ї 䇁}Oy۽úsъ࣍hOŒ 䠭}{҂{ ʄ脧~| wqĖ S]͟ȆfɂgftžzƔǔ̝p␅sKyk   T|Enqjjʷiii}t: yQ`P璒zvֿ  ֔   ʚvwyz w}ͼ#svͼvҚuվ ͘ & `k~gߦ휅@WټoQ𞞼勮iO~&tҷvG}ȔwѢwf ww.QKU S(sqI^jjliiiy$ ݨ_bۋjٰqYQMYlܰ󞏒 Í̊ ׳䋒 䋍 󞏑勒Ҕ   YШylq{rw^\WQSQVm Ν ԥ &Ë즋ꥌos{`rgi{ ezgfpsՠkppz g̶j~jjhsg jhih ~ Zqd@F!h1gP ajeiiii[ S o䛆z     Oq=̼uytz|j|{ |üz vt  ݝ⾴v(*tW+ajوjiii}zU?N[ م 긕fjwzzwކͿz܉ èƩ 鐋ӊ 󚅡瑋ԇ|΀I~x}zp㈌뉏Z@lwS ӄȽk掌 Ŏ䆍~ʟIòDQ! yajƭjiiix> PڲޟƱ|͍]lw  З0  '#θ{s{zⴧ𴍦ż lك ⰍUS `~ 'Eajؽijiii M(`~ zĶtWYȾhv¿M*$ ͍1 fV ƔvȽd 󁢪~ 9 "ݣJ(": ¼YYajijiiiˑ/^ t$ac 뫰xǦ{^Д־ա߫ *Ʃꨭ٧ Ӥ裨ڧÿ שּׁ ܝuĎ డͻp< KӺ ˹;ߛJagjjiii9ʗ{Ֆeޒ s5  Ϻ  ? ҰL>YQ_ ĿMPFa؃jjiiiCX:Y ɔ󭣥y蠣nJx͛ آᢵ5͡ݣ̡^﨤 砥ͤ i}Ўמ gg ꜤV"ͺ u}r+'xʾ_#a˸jjiiiHU !Og?     ֬.ЊÁ /_{ h{ vzq{`otc_]uc ake mv|ZIJd@W  ]mjjiiix Xߦ4Όٻċ;sG[匋 璎:㉐ˈ򐐍Ľƿ w֊ ꟎攎Ë +? ‹DZي~Ҋc{٘{ l|Q pʉ{e࡮ܦ[dw s ʊyʼn |~ў !^ UW͡% ļ?N&ijjiiiDٽV_҇ kt A~~ 8   г  n qşЕ Ge^Ŕ]_\VטUc] xYcƓvx gs } Г݈j%  Jjjjiii DGPtkOVیٕ 哒ȌԱb]uIm$ ꗑꖒՐ 镒ϼޓ цկY  qɈqy fĔkqg| ї\n{{œ~l ~~r (s߰Ҩ}aT>5kkjjjiiivF|)y  t a^z 粢 7{fq3 q줜`&ʃdkvDŽ Ʌŵ L ȥN4b ǿQ"^jjjiiimH~{ |'⅂ˀ~{~cDYV>c B } }~x}~ | d 򅃄  ~} ၁ۄͿ ҁ{yJ{ -»}ǃɽĈy IarNYbIَPIhXVMOXҤYBh ^xl_\bb^r\m VM]uOWj 2X  ?ŴZD 'jjjiiiG+0s taDf\   ݽ #  d Kjr¿ Ҩӻ+t_!ajjjiii怠KN? u(eߒ헏 ĈߊljލwQ7@}p ΍ Ў 󜚖 ϋ ΐ̉ƍ֑  oō* 㘏  سӽIUjjjiiiB b͸i&U     :qڞ |zù _F%A jjjiii6FM7 l1%䍇ΈK}XO򋄊 掊猙 ɥ́ ݌ 򕈇ϑ QVa豏ՌvCXʼn ك ȣ h4G&uBRjjjiij Ws{P c#zſ*ՏS}  Ɲ}   J. W YůK- jjjiid``t CXjKj޿S ԗƿΘm4sƛ 諾  ֚w礛֟ǝiCӟ 䝙ӌ ۝d%S]Ԟݟݞ򥝟 ޛi0 $lù{jjjii ڥ LE  NV4#|  8 ҭ 醴XQ R {@&jjjiiĨnƛ\ W> г ӟڢƹ}ةp{ڠ ٢Ƞպݧ0(L暨җӥ B;{枝ՙҘΥߧXsw̫ҳܪbЮ̰|µ ۮ恨~ۮ|灧~݀ ᎁ  ֵĿPi1b2{Hijjjigh ^V ]> 墝Ŀ#  }c    Z׿ оԋսt|Mȯ 쪴fﲽcփt q[zdr[Ad}x{e s~ t {q᣷nsl2e8qތNjjjiui صʶy7`Ͷ#ݮ۴v{y˲U[Ű»zʻ ж߶ ⵱ jiK ׮ٶϹ{xˬ zĬǰʬȹvlŇ2ձ ذƶ$ hv Rض hц xV׷mwkUnyIq ȓTɓ uܮ\jjjiֺi ׻¹[צt ؿ)鹽Ѐs~V}Kz 4׹ 꺳 翹kG ֶ ϶¾ֿ÷Ȗn źa Ը  rYێrZj~tW桜v ē~œcltp~cڅĺBb*pjjiֽ|i  ſ\Z K"ƿxr3OʿuW ĽŻ ؾ ¿ǻ 鱕Έf ½ ڼ wOc+Pc.ef/{w {x%suɔԃʔcgXͲ˯Nþw _ujjkfi޳ijǤW$ᶆ^"*w婧 3ץɤo ݉@ (Ϋ oŴ ף  ʹžEȨ n ۣģ mϤŨ [ۉmʨ տ  1`~SOwd;}b2`|ONwҩbRd&r3_|\petSB§cf TB\gstfod c8PG apjjcii k LSmg<  tr 1 eQ  ܲӏ  Ȗ  ݏҪ      VůK!(vS `jjii] ꆀ~}|[$')ëD#}~{.|{~zڰ}xح }~|i} | 冁|˃| ހ{wn|y}  TL}ڃyۃ ܱ{ ͂~٣rù\;Fjj侖ii פ7 } ̙ μ ئ ԑ ȿɕׂh{ ^x l cjjgiiܭ  5p  ͍ Ā ʼnˋᓐ߆  բ ˑ͚⊑ x壏ŚʑhSڑA ٝnQie?p4z) \j^9*_jkiii뎜a wp|  y EI6ʖ  Ɖ 1좚Ϳ ț7^<_`^zjdiiiƀ)"{럓㊆ăٞɅ ߉/󘇇+昉΋}󈆃ɂҝľNN؋֡ 0ʃnϿ #aa}jiii @1 4+pxۅy* ֣ظtϽ0٬ƗϿ˄WRsaaj׬iiiחǭ 󣛞ie O좝v1rș֛t 렝՚蝝֟ "О f tі ҡ Yٛ{hcy̞ʠؚ#Ϫި ϩ ϪިΫ ÷׾Ͽù,NaaJ jmiii 8QAa ƐϺ 'G"<  S kȀ  n^vn \m_ma99ol; \xyˍn yhi{ﭢܽ ο;XV>oaaoP=jiiii '|1ݤОІ 񛣟ʠ驣,Ҥ"_b ^矢ߣ ֏ᣣrlkϤڦ dl݆ jvdmZĕtdۀjz֙ r{| \§ Jž -пŻD`O Sgaaxjjiii QQQWî֌ގY ~¸ɹ N pǕaN_R|љwyљIOsŨ« Yje}aLzjf ؾ 4kݿ2daalHtjiiiڌ  D{O㶷Һèѫ ۴ȵ-^ʹ ĵָĿ ϲﷶ ¶ ůڵQ  c}~ӴӸ 󺫹(¸ |iv|yEn5n'En5oj~VSBr{{ɲ Ǡ!  Gaaajrjiii  n/gmXúᨕֻ絽ƻ̺ Ͷɸ ܋׾½Է 4B rvü 뷿(ѭ 0kojx<{thh{0joj~pQ yc~'y׷huaup|j^s%zx|n ʋm[Q^7uE vaaajǍjiii ۯ\߻&p>?'ʸž襍 伾 Ŀżþ þ_ \ſ ĐٽhéžظŽ¿  ׿ ּ ߰0i˹ yQ\aaajvjiii K/(=x]Г<髬׬٢ ܩ 諪SѬ ŮٱƳ R  뭭ݩlÚeˠձ¯ϥЬ ꨞù̿ =aaaajVjiiinhk ׻1Vݳw i      kIئ܄yϺ; ¾ȎP̾ӿ9Saaaaj jiii~4  N(߿٥ˣlj؀ TQȸᱦ    ڨ  ţ Ҿ Dܤsͥ^ٿصдۦbپU?]9ʿ&baaaajN#$jiiiꁦwjݿVq  ꭧ  ºx   e  ò p&룢ςѺ  ƚ&u$xľڿjaaaak̔~'xViiiم%ߪj (  "␏Ȍ mŒ ዏጉ2Y0ٓ ԏ ㍒ ^ q"ӏ܍\ӡP ֢ݓՋ؎ }Ϳ,gaaaackp{xgiiiꑠ)Vq K "ۡs s> S0, yݛ  7nj} Aqaaaaa;j:tiii iG ۓґk◔  옒hp᎕ڕ  ÌŻ ୯ 𩓔Spo(Ȗڐ+  ݾǖ[]Hj, daaaajfRiii8 ⾉   | r0%   Ќ*  ,,E~r\ri l9֢1v^aFON\i=fWbbFYbEONU^{e8*q sAyII w4utIH MUXWr ɳ#}-پ&ykaaaaj9Niii B0#^  )ޖ|Ő~jne s[~{|},Ђ܅}}}~{ πО_\I}슃س'Ā]iWzA ^ZfK u"[e\@@њX+:A=>i:e;?i:sE)8ϛV=*TA cXBCgAs :ƨ ۱  MVcaaaazmLiii胟Κ]Ӧ1#b  Εܠر  eۡ l  ީ  ۵ $]bsQtQht%1׫6i,9?IwZbW4S+pA4S̰wLݴ氩ױϰEΩ 歘 g߯ް Ѱݴܧ־|¾v{Mvaa ajedhjdiEjiCmm؍ ӠC ſ轿 n þտ ݾ !¿¾ֺ¿߿޹x~G ⿘ipݼ  Ŀ޿ ģߏ+1'$taaaiaijn ii i:mm Į¸ `"п ȁŽ # H |   $)Ȭ%3ZJ3~TZ%aaada߫gjqiiimm ֿÿe$FΑВ  pŀ 㘕繄 ӓ揖ϏĚꐖя:ޯעP ۑ юߔ  (64996EH9x~}u﬛3Iz`{v u{9=^Taaadb^gliiiѱmmߪ.Ϳûüٿþ5Sþ 'ڊp|ܿ ޾Nؽ   ÿ+6~}~{c0/0'Zi4/0) o'0/9't aaabYfͮ׹vpiiiw0*㔠 nmmġ¿ǭ ľ|\  ㆄ {U  ͱъڿۂ元1ݑ_IR\[SQz  }%~}艃Ђ۬} Ҁ}tæ񈁀ȅ芃~ J] &JA!-'raa&afreeciiiKmm ו   I 觀ݟ  ܜ "tYԚ  ¾¾8 j)l ¿5t<aaaaiĚjiiiĴzmmm  ѿ %x ߦ Tڹyu_  ޹ԚxʽvaJЦ٭夌   Q  䦁ʒ pB7z ̱C \ Լ"j þgaaՀabbaڽgjiiil6׌c׉mmm 򰳳¿:Rө̨ŰӰu۵r  ቡ ›޸}q~ƽva]c~.vuyξκ˸Ĺ֥xa|r՛ ܮ ꮳحİ œDŽدð̳ ߮g3; ,jfaa_adqJjjiii<txmmmWa1ǿſ ǿl\ź r#/í ɤwȼໝxtqrdz?z8űή͌Ū}ƿ Ž¿ɿ  ǿͽ   ։sܼ k J ο 1CW4ݿ" Wh aaaaafԲbfpjiii"vmmm ̱ Ͼ+޼нƿ ļѽmuǽq~ 2M~|gcɲKоŷǽzӽ馋ߜȾ Ⱦ翿ݽҾؽ ɼ½Խ˾ɾ仾 ¿ο $ I 6la_aabYߗkjiiiAwmmm >Mݮy)5gڳʵȹ ˴ӜhiʘTN|yձu[pׯ˲ʷw|ǯNj̩K_ 䶷ص˲Եö tƭθ 絵~]  Yq[ `%aaabmêjjiiix ׳ފmmml IJr)S ڪ  ƣzЧxʔٸĸѮxkr s   Ԓ, VAg/۾ZAtaaabhjjiii %mmmܮҩuhs)橧ͨݦ XĀUdޗ楥̤ӤW䭮֤ ɓkɥ ٦Ƨ 祬ީ qצͬ ٻ鬫 *nw?;Xq %a_aabw`jjiii )mmmт*yosYe  wkͪwoǿNQ Ų}y    R Z'"Qq5*_baabkIljiii쎦 Kmmm֟PsJs)0Cɐ }VkdM"B=Q|iٷ񘓗ϑ  2nmhй웕ؔŒ ݖʗ ɒG Av UFe *=5C aaa``lpjiiis߆&mmmpܹs(Eaχtw{!%mj“u"Ҥ$s̽tpy  컖  )v-  ߿$). Ӆaaa`ajjjiiiဣ mmm Ƽs75ⓓ ϵ\Yo斕!k qhYߤ ʏؐR{ӰfՐ搗А ֐ѐ㗖٩xяǗ  e߱ӿ )B2滾ۧ[aabdjjjiiis7mmmb tes(lCfb~|qli _qptf1   z ޿CXO¿C ~޹رܲ쉯aaaju"jjjiiigGOmmm ks%ſ쉁~  {z x{}~}}RЀ~ U } z8GnǤkϬ̀ۼqp ~|y  | 󓘦Ѓ {}~ * ] aaacle>jjjiii.mmmm ]Ms*zqj}v  |̯y UE  넖 Z ݱ޾r;UM#Raaaaj`jjjiiiwΗ֕m nТmH+sIY۰蟘V   ߾ɏh­p Α ҈た 뙖䚖ϐά{ ΐپݗ  ‘ { 昖ھ ޖԿ IdY!>Maaa _abmjjiiiqߏ&]Im o:m ݖ 's)j9̰E  !p꜇խ ᎔ b ĕ    }~۾ ҿ$!Uoaaa}`jɲojjiiik}.-mn͂9my o0Wso-ƮϰJ 񻰱ۮ߯ǨM 縱 ƯҨ񵱭㰱ʴإ l ﳹ֯ ۭܲپԁ ׮뾨ץβ Ӯ30 >eyV h ~6 naa`ؽi0,ghjjiiixmmmfBqss2p׻־yƛԠw g  e|w˧   擙1?~쎇Ⱦ SnҿĿ$4. i U<aatfn}~jiii8&mm mVazsPUﺷȼĽ քw #~¦{ѻ ŊЈր캼罸ẼvƐgxs~  ܺ γȼ۾  i}¹۾ f 뾾ķ '_ jz&(h aa̋_r{qjiii mmmmL ޤBHstز·3ѼĖε ~nU 譯l᳴޴ⰱ*󎉸ʯw׵͵׹͓( iˎŷܹ  #ѷ_ _cS¿t76a`fd^|whjiii ' mmmm˸̹)ms#Ou ʹkтl D 7d~mq|ɼzjqw~࿗   ܌ wљh ! ٲd~ ¿ Ϳ~accea^hjj iii ~ \ĝmmmmKު㛆 ĎwKLsQų 갭߿ž!щ󾩭 ˩q ﱭᬭԩDƦtǭ|nظ ׾fϳӪ אַ ׮ ͤ ٫ٿl~E>hol4 I7Aaaaaajjj iii }WmmmmI 贴簀 ~u4L}ޠܚV\baaj~pŢikFmmmm s A]W Yc9  ր՘֘  ؞z癚[ʬMz Дʛ 󡒚끺UFlteC#q}'>4 !t MI%Syh[JBIWjtwunok~Sj  Ϛ  oݿCĿ S9z鈢b0haajjͿiiyn(mmmms s SF| 1 smKzꏣ uRb `mM&qڟx|оrsq Ȗst  ׼ɄW: \_݂lƒ\aajfj[iث mmmmo ޯw Y' +! ?Y} # xnV k  k҇pZO阎b˫s`\e]s⊣ } ݵ A g@( 8/2aaajjiMi Ξ7#mmmmh ߪ|Օ@]WYd5 IU񞑔ҕ  ¡ 5▟ ck Ubȸ\| h \ƿ 閖ƗƛӬs~ Eefݷw(򠙜kBiتTka蟇ߟz ԍ  )¾w(8PZe%$Vyayaajkkiݜa\mmmme ંޣ~Ϳ׬YE.5 ٿ h݅x̲v~vӓR!̉}א j˄럆&жxs²oʌ|Ϲk||w  wn ܿ¾#KC\{V._bsaaj[iij9Ummmmf۫ 㶘;,>p 咥ݖdׁ`RRqײ MX  ͒ɕz ډ ȹzeەƺҋ ǔ~ʣdWU^̧ZqȼļӖ'Q  $kTc`cajdki\zHUmmmmf賁ͥ =fZVWYSҷ6W ҄ ۫~{~hq̘^\p찗 t֝لsK[ŏð ׾?[`IFǃ Y8wa]\ajqڎ kijUmmmmjf| ۄTS'|ke`3܆ Ӆ~O̓o ~ሁ>İӗ ϺyzҤȀصzu(ߗq}ȧ¨gVcwӴVQh˿cHgئӑ($, < >`_։aًajibrľil5^Ummmmmfݧ ҊV?Kݺ*  ܧzx `Ve qKɳ|̉#zТϢÇƶz Ʀ )ӫڊUV׷c !  J#TQyzUbclamh{ jik*Ummmmf|̻~ ö՜ibYX[\Crq+x 㕳}璎|Evyp⑒ Ղˈ נ1vɓKxt~ 󹐄rhHpѽwZLRYhz¿u ֎Ez{щ/ۨB[  ;+BQci֓_fSgiii `hmmmmcfrƻۣϻEP ؖT ؒüzt  !@(akɈ~mC R鷼  Ũz p J V%¿MJ2|7ލ׮NsabmՀknii ϵMmmmhefѻ⩈ 3 v~;~nlkok?܄}ő刄]WV  䉄`tЇ}~}ج򼃇} ᇘ$Iӎdžȿt Մ }tHZitd`_iO ٱQ }RheHd$ wa\Ѧڑaaofm@ii᫡Vmmmff}٢#"Ƹ¾ ځ׆vү| }Ղ  벜|oхٱ/ ~ϝof޽¬}hַ Un Eήj  .?}3 ĵ_g]봜^a͕clk۱mUiiXmmmffx ~x}zpxytɾݶ՛|ԙMKu䑓뺒阗 וڙ ޶{ |$7 }kaQqƠu{̈́sn19< 1|pyb_஌aaajklkiiOYmmmff둆ҡZ~ 坑znن S wߞ ჭ≫ѿ!{xv)ӿ$@dBRa沠]aaejhjiii蒠Ymmmkffۦ 痑sxy wΜc ߘ ߒ 41북fkvO뜗 閒ؖȠ 㔑Ձzoܑ ! ޝӾlrߢs䊐wڗ tA"{#ބa~aaaifopiiiݎYmmmdffᰂ ̡ٽpW!  guᆹ靅u֞s ݯ Ѳr~ ䷆gs̳-U߰%:  |% `Wꇶ^_aaaӮaчܱiii|EYmmmfffѥ ɴ̿șP̫nkϼ 2J ó )ͤ2{țy_~Wꩮꩮ  r{iݫ䃻٥ $>ݥ ܳގp}zԡͪj ,y > ֿo;TAo 1ܚaaaawjׂziiiVmmm`fffQ㯞ijh)je^ekͺqkv޾O HԿН |س} }؂`_  Տk˸폗؁  9 Ϳ sA3P|ɀثaaaa_۾ggkiii mmmƾ`ffff  ʋr\%ȷ ݵ)Dz͸ⷅXIjdnllx论򼹳 YjvKշ󽹴渹 ŶøjXٷ $ʂͶ +CĹٶϱ }vӨ tƸT)ç VмLQ BhaaaaaÙjjiii mmm fffffw ě6fķdUܸϷл{Yw알îb3M鲽󿼷*ԣׁYճ综 ȹƻًԳ ҹ -#%Բݾٻ {ڼ|{ЄUĵ x`s˿ b< PgaaaaajtiiiM mmmIlffffӼ|  ¿X1 dн !쇠c՜e 熽E& նy뒁rѺbҿپ6p^aaaaaihݵiii W mmm p4 nffffح \¿ӫ ٫ƻƭzŎyǴ嬈ok|Зfk᦬묱ع 캨 һ7ѐறҿī㦭 ٩̬ȱĸxzФoҕڻݱѽ?]S2}uaaaaaimֺxiii ̯ޔ ؈'mmmua_b feޣ塓í ÃE*x  4+Eߨv} LGl`jniޤii JXڏz:~m m׻qf fefz v  9޽ ƨ ҩ  !꭫ફѨͬ ب $ئ?zL SӦϲ ;<{겫PХަTojo۝q߶ii_(pŖm mqڽUq pcսmfкqŧS%f,j ׀  ! ݵ dH/KԼJ t8b$m]h߾hmii 2lۓAmmdpv-sZvfK V8ǵៜֵ xcm ʹ#޳δ̸¶3I 񼷷ö򼶸Ÿ(nٴ4 򹷱U }ޗizjƧiiXt 8-mmdif<vgɧxg j ͙D żּpY˽ ij߯ 9ҼǾỾӼŽ S Ϲ ﺶ˿y _^Jֲ ︺  p?L7 ۿjfiik^ >!lmyf f!bh̽c Ə-lt{ 3׼ƿȿƿƽ ż  kɾ¾ 6ۯ(8(BϜ>ɿb便hP ۙjniii 鈤v)ܶmycۮfx`fc᧎tDJ ߩ쨎k ¿@ĩƯ񵱭㰱ԯǯԮʧ޵ ì  e No︤ɪſͨ᭲ɰ>X [ک ŸwjiiiƇl\msfƨey{t(t _ A-ɿ   `e  ڿ#GVزNkiiidÓ iҤmm l۾uޘي  ޏ.Po  a՘::昞Бґř ˜   )p;đWH ďΚ(m >*¾M fiiopnmmܵWcͿ˶rqa[\  nߤK& 5 Q  W'BfVs G55R;iiV:䚮n jmmmpجf-rcTqVۯ  ȭ ޙֻvVі;Oǖ잚ؘ֓ޚƚ -E8ٓ蟙 ̛ݝ ] 9=”ϖЖܐԘ ׿`B1iiw, ĸ߾).mmmmdf̭њb" ;*    Mʌi ^ ٗKUS }!F T“ _%>ֈ݁#yA<6ii녴Ռ nmmmmfҴftғ}C] 'q ̓敆~ RW 2ǀဈ ˁ݈ܐ" *I} ㌆.+Ќ>ܻPu䊃 :즀o6 ҅"ýځʿ -1ga iiŊ?\禷!mmmmmffb]d T? V rR `+Yඍ*2RWh !ŽҰ_ܴՁߝ ~ T _\ òii%o4mmmmmf׫\ ˬM~H ~H~ z֓ЌӍ铎ԇ瓎ߐ 풏   ,'ӌَ-M^cgc ۏ ߢ` Պ] Ӥ'siٳyҁܗ M!iiIt㱗Admmmmladddcݞư&x   P VJk;!= ׼ e# H   ;ٿ)~$fPaֱͅv:ρُ BGf 4vSxjj1%!%mmmm pШNuDtPzupZ|CW ֳ@{Ѻ}~}~} ݄ } 3gG$̪V v/ Ĵu쥀7 9 Ծ싃*ڼ}Uӯwك́׉ue#k` ŦI.C]J7{mmm mױτddbcfto#P  )&$  / l%n  1ўWը %b 1չ`hdU̪|y݄Ɓс z{i]jU`ymmmkzcgRIJf_ ʐ$ a3ٔޖ 줔요֓Ǿ 뙕 ֐뙔ד 㳓 |  ).󿛕i? ,유Ϟ Ȁ;& 3̯o[A`.Aټ£mˁʻyPD^ &jitܲgBmmmkfe`]\ܯ ?H     &dҝKBv5Kֺ~jrH:çf>("$.װ_UJQ{gne$iD yo.ihgbVGmmmmfffg g͂뱂 ` ߿  ໽ÿý ý ÿþ ű91 EWιeþ ü F&b͕ɕyR5|! 50V^C.iKR=2.,'=ӥf ڷ _VZĮ$#iiӼXGmmmimffac OKծŲٴ۴ά쯴稲 쯴ܯ ӪͿ  ﷳ Fd:Щ;賳AٌGp #"%9Zڑ佩P<PﬢÛ\Jُ^ o%sH/iiܷh\ܶXGmmmnmffїwCV}  -r Կ     ׏ $:o ֹ׼þ!K }͗A ]UIޖohhbNܵ 6DXGmmmnmffϖ׮q  R䠙 ѷןܟڜ ۝ Ԗܝ ˗ȵ o ] ;gx<U֓!~}~{yy~~v~Zߢ} 6mEV8դB5no<XGmmmmmf__ gʹsb      ݝ դe+XN~ a>#v|~|||xب*+~b;vҚsֺ剜IXGmmmmmf܂fiqfwٞ Ԙ 盛ޜݜ斜ה疜ѓ ̬ 潖  ޤ -Sؙ Ʋ%T`&m`@ޚ'Y "̘RƿU34ԨR  jXGm mmmmffέdf zᶦ a  ǜ   n l΢ f1b>-'  a T\;d6kF3F3}UDm m(rnmffvfgfܭ|ЇS} ĀB8 ʂ܉߈~ ~  ~҆   ፇ   y!@ڹ a<+}7vك 䭤һIľU Sݸ.`+$iqcm mFknmfلfϨܽif q+ ĕ   +گ 1hvxuڷG SV *2  a  r?ŵ +޸ٿ廋cB˽n3`  s  F-՝c uJ2rm|mmVf׺bdP枓 վÍ~ ǸC훳 ۍɈ Џ֕ߎגĐ 藔 ҉Ðإ  网県ӭݾܛ̩^.j s> @$6 j 62l]Cipjvmm X*hئaiKs 9x޾lǿ W ܮ  QNھˮ`G  sӟ ¾-4] i] ~mtunm ɛhc͌ m[uҤУj3QĔNwɠƔM|ܦ Mܩ룩׷äե ԿգĤì  šࣶ ϨϞҦ¥qICsẶ s!?/\H*afXmoym`d ¿in'x6ݾǛQrĿԪxo͘Kz h   ԝSQ]j st þfG6 ﷃ̅ļmpvݮm{s`gzְ٘{d]Fﵰقo1ygdsnūٮ 廳谳㲴ֱɰ Ǻձȱ =ɱ ⯴xЯ ְ&ӿ𶳳fJV`y̺s be0m35j Q Xsoގmqn޳|mܦeܴe f``ظĈme߽u ΆٿҾ7Ӿļܵ28W »ýûϽ i ݑd # ĺ ý ڿ׷%Ա|t[YaLaVý:  s[s?;"Kgmt molmmUff fhfiżŇfŇiݺ:  Xlz<ƾŽ <ٹü»#Ŷ"徺lY ƾ ÌS>2ü}`\\Wb̿^C,  sѿWtl3#hIkwAEminm m:dffef!\de@l&&Ӽݪx   ¶̲ g ܈tN ث̫ǰ ݶ"۴0Ҫ۳ų ά t橱٤qjR_a  s׿-{x\ 8?%gЋ:*9|ZԠ`mwmm mdjff٫fnߖpّm7"  1d   C'2   Ť-I ~Ҵ^GPc{ sվ4t>.dvձ0^W|ˑZ䕞:m|mmm g_fffTrX⤛ǿ  䣡IB٩ ֘Ɩ 𵘔 y0&)# Ė ᖛӔ  ޙ˞nJaa]  s̿WG-g^vĎwjyܾٱxm{mmm f`1ff_f]mw7 0'0l ǒxK]  sۑ7^TO]1Ukih `m|mmmfffffIbM| |  㝚+|~|}~yŖ{~~|z݂~߁~ }}{~|懀z|߾|~Gd"Ձ| P^QZ\q  ꖆsS8Ã1x&zAliiٛomrmmmftffffߦݾ}~ ԟx! 7w^h_&CdĬWORq  2ϧ蔚s&@  m [jnjlfmimmmfbfffٳQnQ䔔 C7ґߒ.! p敔Ð𱑔䘑嘌Ęӫ  뫯 術ՍD["ؓЏ#PUavV`lfK>BEXʿ½ ^φ…󤊂sp2 WjjYi;mjmmmfcΑfffְ~yw2a S ?ZҺx#\f_%"3e\ί`_FEQp½ ÿ\ψƅ̆cᛇ@P #2j vijoiOh۬CjmnmnmfffffxOja! & ۥPܒ] ӑ ꗏ пיߔ  蔔ﳎόÎG+dγ]33 msNEPiƿ _{򤺌r z%` ]wܳmkklgmqnlmffefffؿtvD D*t O   q.CMR6?Ș GkuQ@F Ľѿs Y* _4UԷ jagSjjhώrwmpnlmffgfffYV͞|| Ǥ 6Τbb Ԟݨ ԡQp  稧 NEWhid)͓I6ɕz  s ¾ %,ZI ajgjgs fĉ]m onmfffffi~h׬    t  Ž$ Cd  ǣXo  s mpfn yaijjyÞgᜱs*?m nmmffffd⥯J ԭ  奠`3Ưh筲ɮجѳݲ 䱱 󾰲#򵱮𵱮 ğ{ +D] ůͭ.ʭ  s *g4i% bagjВp9tׂ爝y mmmmffffhɪR 樃梔 ۹rͼľݻ ſ־ྰȻþ:W %*ͺ~lƻfҽ  s $18 DVu<*^ÿdaakcgAo1Sp*&`m~mfff۽g ˩W뗄ܼ! "Z Rúöļ  ÿƽ  Ŀſºۨͽ   a͸%罺 ηþ s s N~¿obaIjnj6 m׳{`سemfffhQ﵂뗄ү+ z׊V2ߵ˴z 񺶱񴲱 㰮 ɪõ겵µﴬ˴ ŭ ரLhrϬγв s 4[=_Yagljef~ mWNl mdffc؏附֟0| Č䠝  /  ̺̿  OQ إ}oIC̾ Ͽs 'O2|޿apajek i״mm)m hm[gfݔ[p۩* Rv  _֠ c;  ;jcܰ  ﳏꧢ ۽¿n ~{{|ȷzכs 4@HNU@ۿa_jzl j%immmkٹ_efbn f곂ϬԸ +݋~{>N Xt 9  ƴ ԾPԳ ¿ Ƭs 8Hksh>a{jll_~عnݴmUmmm ipffu fʑ׵ ݧި|y 2ȥ ql  쟬֛򸛞w ݍכi؟  ӭS+ڜ^ 뭴  Ǿy{}y}||{|֩s k Xa`xoqk}ιn m&mmm kffeVf0  ʲ ݱG c    ~  ·s 5bd2;u/vƂah⤲jj hݣi؃m[pmm mfΣf ~Hzj f -ۄtojTs ʤF~5& ʂ  ̂򌆆 ꏉ   ĺ ᄌ }PL ڍ勆 ʂرpkmolnnlmnuė琅 s Y @ML |(Й(Qa|b$ݒor}| imu'``mm mhcf b6h bʺ vy[jP= U   %z 0 ƹĺs _ rCc,>)aZgюqnF ˜`mnJgmkmcff }Gbڜ{tj SUUt~zᎠDW Ď睏̋ﮍtːꔐֻ ܢ Տ 풚$s xsttrzntqО_Ѥs %*)  ֹȨca`e mAlX ڊym m!23Dpmȇff]jZv̾ {~w ֮|  }7  Pǎ  ¾^6KMLGho딗s D}\@\ S`add jt kYf׵ ⴶmqE&ISHmffg dZ~]f[NOOMU~|qsE~z| }|w {ƒ||TԚ}ٰ}ӿ~ɓzҁ| J ~…fhihq^/M|}ŦĤl汭ﶥ /_;(# Ժܷaacbkh Qۗiё mt8p+!|mnfffiaǯ 翗} SZH E~ GݫB  s ÿ˵C7bػlgɘƈxɮձ :$<-3\baabb ΒijCk mM mFmefffgf~ |`]]b}~.骨, ئͥ򲨻 ̥򿦩,|ޱȪ*lХᬨ +Ӧ>带 ӽ̮Ϯ ǧ |IC  Կ îzU4w۳tڠs 矵ِ fal z7h.ܒ`Vaaadզjllڅmmcl" Kmffff f`ѭ q]gÿ}im| έ CcְO%ƿſ ŻZėž5׽ܗŽ ݪ޽ 4   ʭuFa} só朰ھ /*é<f aaaab^jipdmm ptmfdff fgAǻlhhdp) kǕ[,ÿûº¾˲ º¾÷ Ÿ ľ ¼ϼ׸ټ   棓cg/sר眰Ŭ~saO猨aaaaaljk^U_Tm1=pmm]1mffffgG˸ < ιëmljoϻ&3 q[uU/Q ' ͺ ˿  LFL{\s"~~ltئ眰Ư鎲-dvqcaaa`gljiZ}ڈSPof mmmqΨ*fًfffiuh(֛ͭ _/#0Y-5Fcs[_ۣǯx ,,מ͡󽢤󰣣ᄁ [ rG fhbɚ<) ࡍ ș hٝ 丣 W {ΉN@zaPss%퓯xv֦眰ƯՐ¼ ,CMk_aaa]ڍlii՞o郠v[mmmmDf[ffffhݷ  KMn dgF&Vvpkx}pchz s@m mffff{骃 ޫOA&üÿUjܵҫ~cޥz Q j !ſ|j w ` Ծ¾ ƼsMzv㍌bmxw֦眰Ưδ٦ϯLJ H";{èaaaaaajjjiii/Kmmm#mmwMffff{~ x^ghjif4Q?ڜ|JlLT܊|Ɓ bt[QtLX^4+j ~}풁~䘁  z|~ ~}f|Ց{Є }涄  ~| |~{~  ̿ s\rYSbmxw֦眰Ưδ٦ϯ֍Ĝ Na^aabajjjiii0mmmhmm5 ffffڶЃ ࢎǫɶ[a{k$E{~=5{Sz!   ެ =k WʆW~{혀Уs`͡gqd[bmxw֦眰Ưδ٦ϯϲξ™ú LnFыaքaaajjjiiiXnmmmjmmtBfffh]s Ƚ$Łkrw~aౣ&'~ߗGۛkaXJ  㝒}gl֑ uꖓ Ƙp@ #. 𤑔ꗗؑÒ ɈE{F딗scɈ[ptSvi_fr}{ޭβϵܫӲдݨ ۢמRu? hxaaayacоdiiizmmmmmmh6fffgOJ͠I ĸ&.ʸ *Mş܄m.S ٫xˠ f&  S>:EuH{! Ǿ ΎA{ťZ̿ £nLO1?P)QU3fKAs:]p?xkI]`QxPwencewfsșujĠw˅ul~~nkŘukw̋tjw~nlʼnNv@ qbaga`]a܅iii=3mmmmmmf<(fffrX Wǩ=kҩkpz#ސ)~W-(~ꮍ攐qɩ @"':\RܕƑČ ܆7">ۺ5S ΗɈ ‹ Կ ȥ‡ytqt|wcx{}xxs{zys{} Ƽe<l:_aaajaabii ֠CY4mmmmmmffffΜoR} P1ƾ< ̨B}b2q W;wrrc  _  ؾ¿ 񱺼⃅nstҌȈ 픎ʇܑʇ̊ۍtvf6 L/{```` `hh WSY@kllllle 0ddd}ި~{ vҀ`Ŵ ̿nCû~ L ٲFџڃUnX۞֢,@_z j ] ~ۢ Ǧ ~̂ 򻻣쪡ܿ禥ꭥ ؿ zê|}vw]wqߎzpqߏzpZƕo|thDʸfffgfgnnWrsssssl: llȧ듉ɪzʬ ɇ,]ȯ ynBYزz  v![ Ƿn~ _ o: +׾ տ ƿ~xp~~쎐~~ƒ~rtOOrtjyߧ|s J        y{ֵ|s|‡_eW|Ækr򘐁s򋭶r򙐁sdyӟws  Ǯ|~;x}֭~Zd̶zzڬzz||ۨy䕀z۩y㖀x~zںїz焂Ӵ ׿ɾ  ȁմ ̲ەا؁̿˰   Ɓմ XnڝͿͻOzǺŽյ ͪOpڝͿΟJz3ڏHfݡrѸĿĿյ @ٕ֨ցͿqE2wՊt̙ؑٞ֬ËӼԵ ŁDշԿ̿uG1ufYsfspsx{stdvF֟qŮԵ iµշξüԿ˿Ȼd0o`}{uwq}rxs↠Ûulfs홻ﻁͻѶ Ƽзпǿ¿1Ơڣ蜼Oʀ{ڟܚ䨻̷ћȳЂ߶ͷ ·зпù0޿ؿ¾Ŀ¾ ҾҽΝϾցցց׭׭٨߁ҵв߾ޮݥ߾޹פڮԓ׿ڹ̒ݙޙަާؗ׮яڗۗߞߞҙ׹ɏڝؿڝۨۨ՜Ԯ͉ללۡۡΟԹĊ՜ֿ֥֦֜ћЮȃӛӛןןʟйӿққӣӤͮ}ϚКӞӞǞ͹л̙̙͠͠ǮȾwəə͛͛ǹʴzܽлϻȽšš˽ӺͽqνӺӺӽ–˾–ʾԽӺ½ṵ̰ܲȲ¶¶˲ήͲjβήήӲȿԲ̮²pܨɥȥȨ˨ɣͨdΨɣɣӨƿԨŤ¨kܞʚʚȞȡȡ˞Ƙ͞]ΞȘȘӞʜʜԞžeەǕʕ͕PΕҕԕ•ZڅƅɅ̅s΅хӅpӁ::::6Z܀ׁ҃Ӆv:::::6c݀҃DžΆzwxyzz{:;:;::;::;:732323223224::;::;::;::;:63232232232224FDHFDAFDFHGFEBDEEHFFCBFDGHGFFEAEHFCFDHGFDAFDFHGF<?@AA@?;=?=A@>==<=FFEDHFDBFDGHGFEBDEEHFFCBFDGHGFFEAEEFHGFBCFDHFFDBFDGHGFFEBDEEHFFCBFG2(%$$#$##$!0œΙzplFsssssrqqssssssrqqqpuʨonɸxlY(__^^^^^___^^^^^^Vzxo]ǣ{yr`oř{wronmgd_Le&XXXXXWVVXWPPRXQTXRSXSPSXXXXXXWVVVLyax~z{kar|ywoed^?%UNVUUUUUTSSUQPz}nJTUTqgTU TnlTUUTkz{}eNUUMPVUUUUUTSSSI~zuqnmm_seirfgcYfzPG#UQQUUUUUUR\TTUS_JVUT HVUQ~OUURPUUUUUUUKwtnmihi`qekqy[V`KG#POTWQTXUPTZ?XWPOSWWUUUUTRRSWPS+NPUXUPVVdEWOPW@QWU+LTSOPPOTWPUXUP SdBXVOPPOTWWUUUUTRRRH~vsolhfh_}qpiydjquy^YNF$XYѝHq|hGYTUUUUUTSS2TX-VYQۏG~lߎKUPG׷M%KDRScُG} q]LVTUUUUUTSSSI}xuqojih_~WzdjpkwhVGOD$zP;{rrr5lJVUUUUUU2PsCUVX=^u<>絽5;v5[= `l3xvHVUUUUUUUK~zxtrmlj`xk{eiqetp_UINNC$)>Z={qI2TcSWWUUUUU2RtJVXW?_G[&KJLs7X*[%Da? ]W{5Z}ZTWWUUUUUUK|{xwrqn_~stfgs_rjrIMM@$DO\>xrRD_ηMUZZWVVVVV3WY\DV_J@_Qf}HYT[WT#p`FNa@ ^bGfήHXZZWVVVVVVL~}yxutu{vsp^}ox{yhkpgewZku͒IK<(ne;LpRXZQ;jOH]\\\\\\1VZdTN_SLej]\N4kMcqFN ]bY[G>oHL]\\\\\\\SxqѾzyvp[ygrwrda{NrkVA7(DItMgi^cc`_____3`cag|.]aZHBEy:_o;R bVtr^bcc`______VtixzxpXwf˭uxrb^}HpmadX>3)ni[;HmknZL`EcnlVBaliYLEjiiiiihff-giigekcܱokYL`DkvF\dq`Z>ZyJXriKrUHmlqNRpf[6PlYL` DfphTDbnfYHIkiiiiihfff^jgwuskSqbolnoppsvsm]XAXlh[_]ZPcM?+,kfejpmlffhglnlfflnkffhommllllkjjkm.fdsMifhgmmfjnmiffkogjnkekigomlfhnjfekpmkffhg mnkffmnjffiommllllkjjjbiHPOOQQSWTRL9{CRTTUVWURN@^(9::==<;6-,$.+kkiiiiikgPRZӸ'½T:Y[][eI+wVXOP;YZ[;YYmM0RJkIg^`_b^N_CLfF[OwT8txps+X(NkM5VXEӳz'¶NNP?~z؈Q*RPNOPNRReR2e^2V%WbHBaiCOXNqNlxnoTdKViKo'¾TXLxSgB`RPXMPXPT`Fƒ}h^_^rwMa|HMT\dDk_Rpx~tuRHqQr:RPVLPVLQk=^gHgcd\LkFa;\gĭ]Œ~|xMˡEɴ'úiXīƙīīQĽwtW͛O rRbýyspv_Bϒk'öusiRlķtspu[Bс{ûİùɾǾYZQTZYNOZYYZPVYZLѿjlToh prihn;տ=igfAuryZ\nhqhm:пз9lg`K jj  W񩐛ȿ qnjerxwgefehwxxysdeedoxoUMn} va ﰱs📚Bǿ|qnjftxwwueefejx ypdeedqxp޽eEi i\w\vl&h<ߞpsyLphkyesHC𮡬ðþķȶ xtnhy~jiealzznghhfux N ݍHՠݽ纊Z_aecZ[dd\Zcdde^Ybd^fE} vI2Im_1ޓrqjMgxfyfn Q捻®#üĶƴwsmh{}hidaoy{kghhfxx ]C͠ؿjh۸o2onsrgdrtrtw‚󺑲k_ǿ½~ W𮟪t{^~q_~qr՛懈ӳqxj[we"uxtoiy~lgG>bLQ_FRkigux ƹ۾ۻMrGOGJVZZPHKں Ƶ渊]|gnfhnhjevhuI}uӿhhnsr^fshلb`rƿ½  異³ttaoB_xvpп֑܀ҭjd_xc{wtni|}jeD?izIT]EVkigxx Ƶ[] BJHKWYYNHRԽjfټh蹆3h\xoeaxvrltׂÀ龒vn ȦҾ˘w U֭W𮟪ŇrZgczӭРoՄmyO&oxtoiy~leK=Xt[_BiBiiguxȢ ȷzwYܑVۼLgFWh {^TJM\aaTJO٭ַ Ѭ絊ލ^écgx˫|kH}sb3b]vn]fustlfʇ񮜫 o ݿrѽ v ] ϭݬ異ƒrV¿BdbtпդãtÐ~ovOkwtni|}kbK:bm][EiCkigxx߬뿥 ȳmmXڄYZU AVl qgNKN^aaSJV Якifؼh,h}te_X|rotrՁ|} vfևƚډ{|̎Ҫoڸgchc~ 𮡬Jwspusux}~yЍѷjlij tzvqkx~}ml_B[dPXRMQmkju~vy_zvay ,{םedۼK[pEՉoj\VXWXzvs~Դ ̬ߺ紊Ubqje}ə}J}sb%bst\dZ~pqsdɆu 񒸑m qV&cӀф$oō֡aҽgcifǁyu捻tqstuBo~{|{̉Ѯimhlwzvqlz~}'}{kl[B^aOYPMTmkjw~wXw~yW ޤ~tגjgXIv~A}u}rXWXWV^}yp}x͸e eּggzt|d^Vuso׊? y| 멎Ձqb{׆sY𸐲u䳵qottxZzatʮףU~őۯ~ }hkW𯵿¢Ƹܺ nij%|uvxd`dhc~~shgfob`⢼َ,ۼIS iDu\2b_`QMMY`_]cepѱ Ψ沊Vd{oohe||}raaur[dWwqa͉: 鶄~ 뙝ĊjauN᯸opzv{qXubpǫϦTǹѭ|ԈvaBŶڶmij'jl~sxud_ffe~~pgipseb{W ܟ޸ʚV@o{@ףrZ2^__PMM[_d^~eqdʵk~bѼdR:%dS9qa^B>mb1T zk hcsL7@뼪vlyްQbglenZUaWod`xrEXhje_ G>ZPhlpƿ@yȏǸwٍƿɐ2~Urhiij}F`khrsjScNer_컛޽ NT%NۼJJxmCd2b^`RMMY`_Wafrέ孊Q]Ëyejjc^~}o`K;2`K:lYe?A_l%inpdT޳hN7쵫ph4ܭRbinekYW`Vsm_{FOy{~ph8MshHx`{ǿzBȄƸ}ׇܗĿʆwWqhi'hk}CejhupkN^Rufa~ؿܡݸҲQK\~W8d~@تm0^__PMM[_d[atdƲe_ɼg_&g_^^Uhûjh"uB; ւotvftvmk{PرǰO{]/欧˝wUk4`ٵ־vt ڞ_AZhsƉoi ̭(^ikW^ȿzfɂǹfy}ƿ˃2|Hshiij}=\khpsjN^neoc7F lb"۽IbnBq@g^2\VXWVVWWY]~bepֽͩٱ㥊ߋx~}pϒejjfgt|}ja\ua\uVa\d ]^2A zqty['rlk}AֱȥLmj衱ǙqVi-$tٲֺ~ww ؛^Kzerftd͝)qcwakɿgBuƹmÿrĿvtKshihk"}8cjgsplGXsebz&Y ۤݸfa!U^Y?fCݿe`XWXV XV_^~eqdįi[PrzwPqzw Z4yhvGW]$ ۽}lٷZϮਤrT<62UбȵǽҕҿD_mbsƉftU ߳jzsrWcþĵlˆʻk½·2|Jrghhi}>\jgpriNkitrpvIP~:t ۴ڋ"ԭ۽FdȽA2ӣVLO\``UMQpu{rrť˸Юamog^mm_`ip_cbhdagrA}fۼ@@ S+|[_]bj) ںi'ֵFͯο㞩oP:7, iЮƵ ǻВݬM^~me쭞uVݳ~r|mrpüIJýmByɻrx½ztNrghgj"}:bifsojHqeҭrr|BXs:~ ݣ׷ɖԧQQ >2ОQMP]``SLX޳qzuqsὬڿYѺDzkfDzkf W[af؆8C_-[1wQȪǽؼ|~wrmlcɫнˍYӨ7b}P 綻ְϹWNiVpqVfi¯qy ztApfg$wxxy{7YifmyxxyoiJ臘Y ߞҲֹ`^p۽Ej¹@2ا\\ԻTILZ^^RIOױ߹ۼɪߘ턊s}ݭcԶƲdeƲde P_hYrA9sԴ(Z9b ? Ƭǻ ݰ|~wqml` ɪƿνɊ~Z񿹌>fpT޶ձɺZ{tWBd{]`ɾkezlEpfggix!yx2`hfoyxxymjCtZ ٞζد]]xOĸW>2؛[\ذOJM[^^QIUְ׻ٴ׼Uȷͻmn Up jłqæcƘٺ ƻپÃṋЬ¸´ƿƿ³ƮƲƺέ̟ ε觅Ȱؿݻ|۽D@ާʶhbdmophbeέӲߏ}ګ_ʶɼ½l½lNt \yyüĜdØ ½ع üڼȯsܱˮɭµ±ſſ»±±ŰǷϧȟ ǹ䞍ĵޯN=ޜͭecenoogbj̮ѪԺTùżżNOcaaclba g3źǾwƫ8;踱|ֽվB> ǪΫ}ש]ŹźŻBWaa`eka g0ĹǼt¨٪ŭ CE沷ѾܨL< ޻Ƭˣ<?))53(Eijimוܕ ƺߠǻ / /»Ѹ˽D@Ǣ%?<<?%,434%S}hjipוܕùԠ»@?鸞̷N=ÙȜʰ @ >Ѻε̭2PON5Ȝɯ캸 T SɵΞ.ROJ=Ȯн ǿۊ}z }z uvwuwvz{vǼ| y~vwv ߌcӚύ֮ԯƕֿ6)yճѾ~'6ވLJx㶑qӉ φ wz)"oԩs~ūxs޽ի%yĈwƙۈ^ߍ{{ ǃvqɁ㥢{vrv! 㧕᥉Őӹ 뼻ݷ?Vjꦄ×rטEMŕѶ̠ ܸζӷ뽹 tඟ Ꭴxyj Ϟnⅳ v \f߶yڍtyuemŸ ⃎|㰆Ÿ ظݬ s| ĸz۫3ğ MʿyD Oך ڞީֽُܤr׮,{(՞ ץޣd8 әd֏씶Φ ۱З ٤fg:ǫސÐ|݄/Pܑ榏⻞܍˒  Ő컄ʋƞ츝ʚ ةݐΔ ם x ֍ױ ǚ-ɶَT|x,m鸈ߊ lP{{SqڛaտWٌp׷R^}zSr֛aտWïٍo׸X_}y+SsڠAdسSri[c!Z60מ Cũu wʣޚ>)2 ѹ ׊˽ ɰЗ 򹏔|ڿ¿ ։  ೉n͝Zkw䒏 -hٌ󥅐搗Ƈȹ  虉ʒώőǘһ ˅ 鈸ӌ y#- ×򲄼 lP囚΁֓ׯȁצ҆؜΁֔֜ȁͫצ҆؜΂֔۝_֌֠~?C8ߏi#)yNSݙ($ ́֎؁U'3 ۚМ 䓭Ռv y׈ ч蒐  ͜B n)uȑ] J ҏܓ`f֗aj 蚣҅ѝ#.ylܱu綬ꗔ藭څ PՑک᪙՚ф[BǟU$ޕCs&  ݋K ыO+V ʔ  ِៈBڈgQޓr_АփD-ގ2{ފ͝Ðklث٘Չѐir ⣙໙w됕۶zڊ _P߾ՋثتЉۭ̆u }b'8 ׏cӥߪ{9=.U ò ?ࠇއdΏL;Ѯ}͏幻羺䕋gjc̙¹ 3%ލشWqٸ 躷ʸόⰛɬ ԁݚصÄ ԏZÙ ǹ݂בʵvpطܐ[ç؅ ۲\w]P߿Ë՛ثռճ٬a! m"(ɂ@ڊ<ɑ뱗@/VĢ &o➊ġݶ 峏 sݎ ڿ`iĿWu !'锰ݕݚ\vyȺ %F՛ əî瓖 Ƙʈ⏌ ஊ͏yБٷ щُz b݌ePׯу٘ٝ&פߜ=GצJWgug똳D.q ײĶ ߳Ŋܻj` 使þ Žҕ ɾVyuټm'0㗭oc 2ٻ Rž強ӂԦÕԯ 㺿݈ŽӠ݊ ۼ쾪 ٽɽߑދًѼoٶ ǚǀ| 亾 лP῿жջƺѳ û̶ ԵԿѶռהƹѸĻͷԶѷռӒ&Ӻ٘t6X9[ɆwhF&UĹ߂12x +T ph  ∽a"cْla"O֧җ㋪뛪f绻ӟɘڈۏٝoٷ9 동 lPih8]{܏Jֹ?|\ٲ8Gkg8_|~ߑIֻ>m~[س3~Hlf9_yȍIMΊ˂]I9-\ $M4}ʩǫ܏(31~謭~6 凙ӏØޮ |ݯ կógﳲ'Yؕޅ˼ݯ񳘓 ᳐qlЍծڜŒߔڛŪڴ ݭoʮٷ Ά ׬Pӽ տϦُҥտֲɇͽm kz~Ip*NǾْ#u73Ɖ8 r݋ ؊ Ȣv`ƷlR1]沟yq˙Ǐ ǫ3҉Zuǒ彿ĕĢԜ铸ѵŊ ڶߐ`iPڮֶٟגּܟ>}ψ SǖƔU }az|-9Ƌ´̉\ļ^qД ȓ񭃾͍ɿnѺ ̻ؑ0!Ӆˈӧ۵칽 칽׾č чѲҎA'ͳۊ ʌ ֽ ّ鼼кݻͻٷ κhneinnhfnhfnlfnfinl~gnneLض˂ՔʄֽfNc;"ꔞ稜Όj/7 ŻulNڌ߄ܕ:f㋵Γ ?=ۯńڸ ̄ÆſY Ê 煙ȇЯ֜ʐ  Ӄ/ߊٳ祓ci`diic`ic`igzai`cigyaii`D3Ã֓ʅ׷ֹ۔FG Ҙ#?wʓ 5c궡qٵ͈j2@诰 }m߲ԏ>fۂӎѲPԳĉ봊׳ɳӷճӕ$⳶˲t ԋᯪܑ}Ȳ܈ֳ`¬̰ˑÕі׶ѓɅ‹ÅIJ˳0%ֲ(ҷ̩S؜γdjhahjjaejg`ahj$d_ekc_aijdajfbijjib_hjc_gia``ejdajhahjb_bjc_ahb``cjh{bjib_hjfbjg`gjaeg``fkjjf_cjjhbijhzbj ibfjjc_fkjjb_bj adkgejjaݙ9%ٺثַ֝֞n#JAޘ VEcM ΑO fǟ]EPP1Kړ÷m z²ḣԺƂ񯅱򺗎ׯ݉i͔'P٘ ܖ ѓϸm׏Է ʸ߇Ȋeӕ®Ѡꙑ™ɬ'ٺ󳍟 릋dj h|vhjaejg{t'hjidrhdahoihqthngdajh|whimhujg{bj(hmwgjhl{gaafjghgwshhzbj hrggfilkikb}hjamޏ%sn@dܒQտEڃbس?MpmAۧjܔP޶Eڅbڑ-NqkAfقߕOTߓAkߘ {xrpzʩ~=πԡH0Iܒm:3l׼ӊ 򘘳ڇ ״vꞕ_݆l⸫syaCݵ´ 瑚ˎȔ͠|ꔶnmħ܍΍ Ԋ֟ aʗמ Ӌ뵏ઇeo/N@ӎՊdj ipيdjaejd'chsoМmid^zxfforʤddajioًdhw؎~hѝoeg{bj(eoigyxp֌fa[Ăwhjiх_~fhzbj g֤\thhv؎~keufjal.íϕգַʖձŕњ֩ϙڤָăʖձ׌њ֩ϕդ׸՝ڋܬ_ ߘ PdځɧۗdВϑ} J0aɓ·h# Ô  ތh𽳅r}b( ݩχ ϗjDZҠכ ԝɊ꒚궄곆 pύq ڷ_=ʝ䎛djdejaejif'ejjchr˪iidbhoygjjqeolbqtgdajdehrƛb˫iebɇeh{bj)hqۿygjhoze_hia]־}gjjf]fhzbj aaɼfhrƛfeohja.׸́ щݦʌ&b|ޘ 2IìśSThߐ#NEǾ 㾚 80nLX CBpӶ Ӎ~۸ݳ 苬[Tˬ¿úh t ݱ֠Ǽɼ@nЮ\Ƣ֕Ҿ∨Ȍ ɛې՜ۏ  垓  ߿ځ|ݕ ߕص q<Îdjgejaejdȇ'dfj`djsʖddahsygijɥbƴlaajdajgejhl{}hsʗ]djh{bj)g~s`girygcbjadhocejaoƒfhzbj chӇgehl{Հfoqha.ԶÃֻחվٷb@y}3՟}Uψ#hL=ż͈읚7/l ҫSW}P ϵvҀ `i⊛ƴ^쓥ty }a莸ֶɱb }/&ш߽󞔟 ī΄{ЍڽΎcbʛУׄϚ Ĥk]zϯԕ ˆXź، ڐ숯ɵĔdjacjaejguf'x~eaowXddbglsfi|fg}oXʀk}hjdajabivq\ŏsX_”djh{bj)irhyzeltb|lijae{c~pfisjgzbj ]]ʂv|uq\ƈggiea.‘ƒا̆ײۏc$ WH]V a Ͳ=pkމڭ>.޿/ۘW ̋ ͔s씰ɤi멆Ց ٚկϼyx |s̕ ݴ۠'(싎ʂΉĕ ˳ۊllݎїŇꢓ ŽՏTA  Ǥ 騃dj in}gaejiƒ'vƸǺlhd^xrcɤ{Ƹefjjdajin~dǨmǺjnhjh{bj(drqmcjja`ɂmӽ`e~ghzbj fֆyǫgiipnia.֫}҈Äۣ`(K1Q'%U囓ȗ юw22߷' Va \ ۏЛ΋ﳴ ͣ𻐓漄᧊θ塒˂Ͽۚ lϜepq$BY̆ݒӜ؝ך ʥ؇݋ ٽaדdj kvrunjaejijwtg'kllovwkpxjgjdalvquliiuvghrxihnjijjdajkurunjitwhgqxjgmlijjh{bj hwnflklvqulnijackwreklkotxpijljjhzbj itstpgtqedswhijkoihpphjal.Ɩrֈب}tם־ryݔar։Ã}tמɇtzْs֎uت|׀e&soʦVi]w+ȓƕ ْ ߐyA-*頋+ = cW/ ԕvُ ޙ˕ґǥ؉NJۚǠ衮Ͻk ܟxärR`kQݣŽōԚ ޚɒՊ 䴢aj񨐝锠ȌHÛǕdjijaejijjijijijdbjijijijdajijijijijh{bjijiijij adjiijjijijijjhzbjijiluijiij ijjiijjal.lja{١ndؓz׺`jѥY~a|Ȃmdؔzװ`jچaփQ٣lq8H؝+%1뽉^w ֵ̿ü ߊ;-)ه㐐5& ُˋ͜猻䙥ޣֆy ԸмⓂ_| pZǖAWYЌݗ䩜֊ΒܑcX– ¢ isĠ ŽJi~ًǛZaX[aa[Xa[Xa_sYaX[a_rYa^aaW.նǁ֒ҋȊcߗ]4̘B2nӖǾt ݐ4">7JH iÆ쳑哶Ӈ{R fՊΪ Ծ̞ rInݩH ͽR%zʜՎޓFӞ 站ǘy΍ ыʀ;H$ܶL凪 ȓۋѾXݡƷğğ͠Ÿ͠.գÃɄת֯٭ݘ 3jq. V˨ɤˎꞑƉ܉˾85Ԕv8ֿt ;ކ‹؍ַɅFֶnw Έ 蟑}ù鞸XՑq Ѳ4 •rg ȇ ݍô쭱 7# ˎę̌Ҹ .־‚ֻԑ֫٩T'u:`IΚ̕ħM6Β ϠӒƊK|V6-53Hudn 7:ß ㍪ϛԎهі'5mv֔ΌѰڬ䀠‚/4րMꌙ'ȏՒ埖şǘ南̎  y[mǬܘċǵH.٬ץΊ ۚގ 5Q w=ֽ ୻ ͼ߭}04_ϊP2(2;,(;95,*6V ǭ E߮Y_ 5# 񜑕ʚֵ̎õ8Ըղӣڃdn 괹ʒƆ ͵ҹgo׶š Zț‹ϴה길ԅՃβɶ󵆐 Ԇⱆ ٶʶԵŶ SʷԜ‡̊ɳΊ.ϛسՋֲ m7R bu@ɕ+X  ᠍ $>2^9+1N~ހبwJ/+D ψN =.䣞 ݵ' q ~5l`q˒ ؒᘥ⥯ Ξ ޏȘ؎ى ۍO܍ ៬͌͌;ئߥϨ l.qk<`}ܑMֺC~_ز<ƈOmj`畍ͣ⸄טɕ)Ԍ̂܊W{_fsz Ib wdҠ ͇΅bMܠ  e֭ا '^ݎ޿yՍfcrgęUA׉   l.dž\xڞi_ّzъݻ[eۃ᪄\yڠi_Ɗs|׺[fۃ\yڠh dlT%5K_§v:ۜ&Ͻݩo ֙ ޷-O1L֖ʻ2wxk2r橧֑Ӓֳ͑ӱϺ؏禽 }||ї] رږ ۼ~٩`rDkʕ֒ʄˆڠ Բ휖ɜۿՌՇōƟ ґsf Ŷg佂vk߉ܓVC6҄Ņөźώl.Ɣoևا{sנ׽oxِoֈبzsь־oxِt։ةz kxN2ߒ*ܴ˨։ SӚw - ׇ[,X*5݆q؊⦟鬁 ƫ֖ҊӃ ӌ{R gʮ\i ĥDz|Y"u撔s –Ҫ ȞX鐻ȋ Օ݉˴ nf ԍv⠔˧ŖClUʾ␎҄. ҒೄҎߐ ֧A=ҡ[f׳WX ׆Β`饘ŋ2X6C݈vϼِӖΒЪ޺ أڝۋ ոjdw:ڼ ޾osמՐ aC"|⤇ȝ ӇǛE鏇ŜՐ 5Ƒ抒􊙒қ  ɲ ܇ևh߸?ʍɡĹ.֍ڪЍج ֕ f LOy&૝ 69챖 f/o+zʶĶˉŬуEt?婟')gD3/wڍǥ IJ v忭Ԟ ^y ս(۵fu ײ 񧛖͟ᔷ ҺϏ _ğГ̬ ϜϏ 뱦†ߗvh뵖B:锼.՚ԠэՌ#asCg̘Ę𥇮 @> 읩݇=<0[ƈȰ޿˥筯犳һx\鸙؄G`0z .8ؓvyޟ ϔ͈ 繐iߍ0+`ٰ ǎyc㱻ˎ݋ 믒qӄҕ黏ߍ莚ӌ ʺ쨷Վ 廾|iePof ?Dۉ.٢˒ ҕב Ԑܴ`"ߎevՊჴLEΕΛ%?<ҧRߙ+rȬEGʺѠ駇Σvm𙑣dL%直яJ{t^QQvXԷˏлڔ {fԄ7嵠6ММz^ ŶĘ ŏ ׼؋ ًjΊjhꅸۅedƚcyqqF܋ѹԕmъl/ϓֶ֡˒׳гœӖȄثϓַ֡ц]ְŒӖרָ֢֞ m_$i0*֌;9í7|N/Q?DО 韦h^ ˗Ͽ-gd0O?4,R͉ɜdd:!} א؃ѓ ΂wr[}'Vۆ0 ܚڽ $؋`u̡`x@mߐچš㴵ԟƮʮp`d2܊lr Ǡޝ̒  l<{rFgەVּK݃eصEXtqFhۗVѐOمeصESup خHiۗU@;GM=Ԓš7ъ|։ߧΘ:D]+ϑ仼غ ˧rj5r T@OSfƔ ^RHņ ^cpGûъ هBԕIO ڎԋӠ~ѹ^ûXﹽ ۉŒ¾Ɩckӣкؤ  툞 ݐ»󿰠ڷǩt~al` qfjgq<]{u]]{Z=tZqhZ rp{ [p] aj= ΃ ԢɊվ^#,r(q$ƈR1ڏٌea/Y{྄Fֽ5|Uٰ.?ȕ;e&0Zvݎ@Ɖ8g$̘%㵥  㑙쥵 ['43*逸 ⶈEDߊT*붩Uܾκ墣"֛̑ߍɓ5fᶟ๽ŏՏҞُꅬ⻾ {Ⅾu1s ܴѧŒǏ꼽¸ s İȓ ˜ƻ ډ䗖גϻ ์ 픴 譬İᷚĻۮȼx ֌ ĻՆߤ.9'#Ѹӿǻ~Ŀ‚"ѸðɻϹž͸Dž%Ѹӿǻ֯ѓ \'זی{Ɠ]&ېy _dߧ푴Ȟʄ\5ɉgYՎyߤcДᴠԇǁ׏ΞæϞ Ҏ]z蹠 ۇ4ݰӉېnrȕΖ҆¸Ʉֶ͐ߪЏ ڑӊǐ ㎢۹[ ݦy Ԕ мƒפ|6K ڈ֚Gأ Fډᾆ(鼇Ɓ+}԰Ҷ‰֌ÉŲᢦСߩЎᴠῇY̖z˞Жɱѡg }|Q(Yղ ΎƳ c`۞%ِ䉚ɲ݄Ԃ{ୂڃߵЙʈicʑץ Ṙ첩ʗ֯ ߁֐㴸ZĖ>بؿ ҽس٘}6Sg Rbކĕ֜iFm U nT X -곊ͶъCЌ뼣˖ʧ񇞢鉔y᳔ ૉȥ8;Ŗ뗆ۖjNČ:;ⳕя 쒅 a~Тޡ$𿍙ރË׌ ې~Ԡ؇¡ꌎ֍ ǝІ㕗Wۃ<ǁ٬ưםω"n,H8ŗyڏӎJ ϓܥI1 Œъ wٳ»ٚ)̙͆ ࡛ ϟ鋞㈟rApվ ƕ ĸ bڙ ̄؜Â~տΆފ׎ڡ#Ë⾐वנ쟑ڠ׌ތ ъنŵ 翿WR×:ᘙۯռQ4j? }[ZГʚךFدy+`>f 㩶!z .⭗ نŞ ߌ׈΍ br؍̑y*(4dq}ޖÖʵސ򝅰ȉӟąথ킨љߔ ˁˏ^ lJ~Փױ}ǁܑZ~ъ˩Wbӂ֔׮ǁצҼؚ$֔ׯً֥BEAz0)ՓΤȨ↸zeH/ ' {jЖn md.؁ Ā Π㠓dŪ[a0F򵳐R}D+3CN Х߮Úؚ޷ܐ ֖ Ӓ^ꎕ䤕䧌ýܮ㛬ݗ陁ދ ϝbqe׉  kzaxOoۜ-SװVtضNDez~Opۚ]SٌmٽF[{v$Oqۛ\׊b8T Nކ괻E Șu^29*h ^͘њ/ ؒФ ka.Œ ޓ Ѡȃʶ؊ݍs%!M|Jl Z557~˺  ĭkƈtbܒhޔЇ~؊ ЖՕؙ͊ܞҠ Ķ õӅӶ*+֕tr Sj mRVdjT ^ipSca`^Yx^fa` ltkú~R׵վ~ռϫNjSNq_Ь  7• ̍`2:sߒAׂȖ[&뎤+ ƒ˓ ؐ͜Ɗ ÔcC19Ly >2+}܊댳ǓŔڨ˅߁_ٖܱ}񩅺 ܌̤ݑۓΕ ##֌̊à_ܥ }xnu†qx͊ntaXkъ zeױ ]ʕ}Tʁ́Щ ׵ڜՕd/×ފ ~ŏғؠB3;  G21 ׅ̑g ؽ-;ؒ ůZ ݉ en ۇٻĽcC4:ЕΊ'A̻đɨиҒкГӡՍLj޹ ޫѐʔ ݤÓ댺ѺŚǥ؊܎܍ﺺ载ڸ幹ޏ* Ԫ܈ݾ kt Qp vTm 7^\}T֝՘ Ġ הl v әYˬ ೖ C*1 HӅđW38m Ίɏɥdžt]Ρ ࠥZͽucġ B49R0^ް ԉɧ ϙߚ~iР؎× ӱДr{ܰޣ ߎ Ӝφ׊Ǝۇ:קk_ eQkx]UcT֎} בĥm؆}Tֹ̈́ә ɰOG; z*6ލξ =&=E LڕuΝhrҧפ˕ԟޒ }g ܃ By騣2ҠϾw٨Ŀ՚Վi0;͉ Ș;/kĿ¿͐Η ɸĆ ɾɓ͒ ߑλώפ ޜ 빋 қ™ǙՌռ 񤓊ĿՈؚު{Q{³diѰBe߲[Ӱim뮐DºC'Y茧tin{ݛsۊ[̮϶enОێ}WżбոخƶѰъԎtԱԼбոĵԲӽ˱ԱԼѲոŷ׭3KC̔5- Q‘b}ۈ i2-=9mBӊdpØŠʾ- ੖7bꆲϮ𧍙g .9܈ 91Ŭ ߐӍ嵕̊Ӑ´ب  ë ‰g  h䱉vq i rnnt~&qmt~ywqv hk}`rh8^{҅JֺB}\ӛt;Gkg8_zܑIۭ-sۄ^ز7Hlf9`yܗ/W7+X认Šá?ŽԓS0ʎlřšw ك܏ᰞ.ő ݿ 8ߏՌø\ʩޖd1 匜ڌ8<ʯ|pϦðџӯƗ┠j^᥈ۊ׊ַ г䰱 fqݮ叼 g汲f下}U٪ׯΐ"ͷxֲ8͏Ю推ώ4ϔƿ쉇ۊ_Ə ҟ陌؋ sѿެ.ہ ۸'?ֹ_|ҙs,Y ȓ ˒N/yi^vƙǓވ } 誋› ¿ 웬ٔ˚˓ 񘗭ʐpneݑ}TȀءט¯٧֮#6 ߻՞ܥˡ ޑ]yǒ ŵӍ^Њ \ ͉鐒|Χ؍ʌԉ-ڎǚ  yޝڬ{aY^u YbnviZ|a W |aYY\\Yconl\׻Yco Vyʆ}TשΈ׶ݹ֥ۚz`$Ȟēɍ~n b`/&=/ѭଔyʧåŵ  kpԎ܉委 Ϛ.AuVvꍆ{뿜a1Βzbw謯wļā̽ Ƨ菟gƖ ¿ػ筮♬߿ø ˛ڇَ޿ ؈÷ÿʊҼ y̱gs艪 Mh뀭wqogsvdfϏ>gtkbagꃯ{ͦ_e{ͦ pݐⵍ}Y҉ Ԋ Ȫʑ ҐB:䗐 Kw ㇯T&䚭ʟҡ҈ 賏4⧔ސы o.];j}W 뎿H4bǕߺys 젰esƝxs᥮  ꗖ ĚƐݍʆƍ|ܼvU蜈Z^ ֓7k4mnhwV__ͭŸ wVꝇՂyvFeӑƌ ]s ܏sԅ?Կפִ ЧƄ Ȍn)sۏ7Փ ܽ۩R Z$`XQ ēȠ"ӌϹꌾỵOVdžė K8EZUď] 啍Q5J䒔wЪɕŸؖ oaݕ`}ڍ ǐ ̑⼀֕գڸ мŸmc{ {ŕ {sdĦOufd{񋧄umҒlj |ը^ӝ{u⚱7ئч֏ ҫվ֯c,,o"֊ ުވL ݍ=Ԡ~{ 6\s1뉄դkѐوljƦѩ˲ĴZ ˥pιgьvwɑ өd3^EڝYPV. ߶Ä  ߟՊߓ`Ӝ֙㿤 㷴 ҄ ڐj䵏?jwπ`@m xjguaka׆p02mxrmzlgyխi`xԭ^џᣘk>lՖ]٦xڹoɃֽ͜lqo܎mօ٧xo؛ֽluَnچ٧wחT(.k=~ڎ؅`X 6͘mO "T) ;71ZФRd͐Lj $ʕɈ۸뜑ٛԲj ӒˬۚАaddv*_•ӵJ2X ә ᎙ᱴۭ汃 ӋNjϔތВ п譖ӟ̣ХJ:ӈ˳ Ӻۤbgͽ6be[XܶU VRģSbeli[Rbe[FhapbU\o_\ow[ʉk>fʊu٣sܥiڣۗ~׻fSڊgր٤riؘ~׼foڊiׁ٥rͅL* 珲 ϦF߭K2t ݯa j<#Ѥ˫ ڎ ݘwԟt$ڒȥG ϚkL 0됪މ`k㱫觨8T|ǺԔCB ڝ%Ý~̪ Ǎ Ƕ Ԡδݬ`씝ÊvK ÖČ޽ܧ9ڌ6ֿҍ˂ի ʓ׮6L. H܎ب 撩󘒻84iԎgb篏 ّџw ﲤјݒִ_؆ވK?tz^8BovǬ~Xϩꗧِۡސُ ׯ ԟdߏŏ܋ЛÕ⤗ew Iձ粚̢ ːl| 5ޘ6ּ ΁زѕˢՊ"ZqĘ٢7 ޵d68lwʲʢ׉ ɯL<Ơȓ g rcƛeȚ㍣Ռb-!ҩ˱Rh:>J„ad χʨɨsi<* Қ ` |i ۏꝮڐ ͏ţ ⱴ ńǠТ͹ ݌IȄ ⯜6֥ շԓַ"Xݕ ļşԎe8 ÅkꤧЎ{B\ &6ŧ֖ߋz և½ nʙҢ̧ 2yܑ —˒*v삏A6S8*.+_|Ý 䌋 јe vuB?=Ӥൖٺ׋ Òio ԎƆՅǎ񽹿 ✒܊Җ ë Ğ 釣ƦQ݌⭟6֙ڟ΂ ֳ҄#Xx4ʔ 똝R47ps < ы× K)Y1o˾ ς䑡飌 ܀2 颂 о ZG█擶ۙʧغλώ46 ݓ߄sʅ_3/ Dlþѽ ғgaλ i./I;ݛ‘󾐐™׹ ͖ڛ~λ 嶋ѺȻ ׈ͺк ǻ EѺᡍຕ8֛ЖȻػ ӳͪ׿of(^F δώˣ̰޵~:3&E ޓs Ј麇5a7  ߙg ] 餉ǎ9̍ߊʫϕvz𼍰Ꭰ,Y ϛӓAxÊBmI&+5L{ȑ݉d6Ia>ڝ땙喴٬몚ۜŸ])Φ˰ٌ۶ ϔ × ա7ƍjD7q:֜e|ܐPֹG}]־@Hli:`{ܒKֺA]س9IرMg%;azܖA٨h%̦MORۨщK0ɅࡳՉ G,84<͚Ǽް׍Ö d淭$d߰Ȑ ©ь֝lȣƬɰ͐Q+ͱ"CޮM+ -Suٴ٘ Ë۳_Ysau֝ݐ㳳ʒ}ぺ˗݇ ٗ̿қیұؾە 󼰲ﶱ ͐ 屧܋񸳰߄H̱Ư߿M;Ь֛éЩս̆ЫԫոЬճ°Шսʫٯս#Ьճq٪i"ڑ_Aǥքmke Mߎ Д:8tk{O96P߽TQ{z̚g7Њ afw~٪71 xD5FoJX1)*4Zᒰxӳýc}zOY˞ȡם̑Ԗ 蟠临秚ќܚʝ պ ֊ ~ Bꇇzs {s 눆x~xsr݂~ s{~{~ 쉅⯚މ<֛Ƌˇԑӵخ٭~L/¥ʥ̨ 消* ğƤHvY(Iu 3Ԑ+ 5LϘ ߔL՟݋fhΓ˹~F叓ݽr҃Ւv Ɂ׋32Œ#=0Rhqiķ^E'$7q|`~IWОĮӡ נ쫭𥇫w[œ車ќŬ®鏂İϹ ޿ý¿ȳHۿy Ehlonnsc访t o҆҆~ ʗ⭝t F֛ ַֺֹ Գ݋5T#bęXbcTమʺpx &W>'!/0f.ы&ؖȌԄ ӗ Ӈ֍hdݍ,z:S}٨gH3(+;hӐۡꗧŽْw۔MmUQwQ ݎછաƞyՆԔƕТŊ Ϛʊʜk`XˢL5sڈ9sͅ5r|[_̨AjzUl ͅmm 5rǒݘ֚ ֻ֣֓ Ȩх}5T B̌[ {:v1]0 薌 ̵Ƞ]|pʞΈʩ鸉 딴ȍ]ȼ֛V1nc}ísH1"V܌ ƿ`OpP'Wړ؉г ڙٍ͋ ݐҒ ˆ𖖀"؜ؖ弿ϵdl А˚ ǼҾc~yʓˈlwbl׀Y}StewƂǂ`wgۏ;"֭ۨآ̀һ٣ }5TÛ霜\۩þ헙;ߨmȹEى1Xl ۺx쩊Ǎ ϫ tc滢ߊT3D`}^9#$-Awl[Zpа°ˏ៿BKp ڭ)Lُ{ Ř 윑͓蒘 brꔍȍ ݎqe aS7Ύmd"\qek{|cģۆjBKUּtڠ8?ٔH׸T`~{UtڝcYڔuЧE`z Uu޾ϡb6W=-b ˜  >Ż z*Y|i] Է˿ˋ ΋n\͋Ϣy ڊҐɈJ6݌xΦsB1@iޙ ڰѮoYWbˢSG ֔Đʎآv 甄̘ߟٽԉݯЊ󒓿Ǚ ͹퇲ÍθoR^cԡRQkrVCe_qRm_\ PveUk^Urك~_pwwRrŠj?bvÎخSOٛLֿv~ٔv֍ثy҂Nyٕ w֎чݫ^/;֕+߭Pт e ,5 U0Xܱ¯Œ6ŚԳ݃ ɘZϱ9##8xАԨsI)"%/N]췏ǒto\C<˒ ֲΣ덥\g ۑ ̍×ZțܠY   D   㛢8"ˆۤ֓Ïįݓ:C`ECזV:)iLһV=+ UGmtɃ1V#,ۑ֬Ƌs*ΡMQܕ ’뙱 jD. 6T׭掌{ěX;& 1J蒧ۡ|N2qqŃ 趯 ڐ΢µ⪰}݉ َb‹Ӌߐͼُc u؋9Ѝ֛Ԍ֦ ־=EΡ ׾슄z'Ӏѭ{w~O_"!vĎ ~+tݒHғ׶أӐ Ăq ۊ U.^ӋɿP7!2Uihއӆڑؐbəݎā\Ƒ]ԩًғϻh͜ H߿:ٖՏԌ֎ ב (Gh˛ȥ怔ˌmӹ Nq陛 ܊ k(wpǢj{{exv춘 ߏӖ ܮԧ苐뉱ĆV9'"+:p]ޘvt{js~ߞ㰈æ~o5\ᮔbƙ dž䊙ʜ͔ ܊prt RᘬBנؓ֐ԌĪ͇֙HřiN˥ ̃šk櫒 /bC䭖 ߋm( w ܍ ׈̕ ͗~bb  Œ萆Sq_di{ÝjH++>j2np ۝Ӿ`~`ԩr¿qೞʓΓۜ 읋(­uלǝ g`xj̹ѩΌ R ՅjcG΍`׸b`rÍҐפύ֝ʧfŽ֭Čӑפύِuֵ-Hڒ㔠²ѣ&iݯىQdԩm( F{ͫáaË9ђ~ߘқ|qfe]E1/6]Ƌ_e ٥ Ǟlru݃Ϛțծ ύǻ̋ʋdoך p]݋񽹺 RṍjeIEۚ25ZdصHUvsIh`]ֽNهhضHVwrJLۙW־r Ĵ ;*ɾߐm*R lΈߏߟ˼š>݉ƻǾäΣ кȾн䍐ΐ՚[ziݧtI0"K ܽ珕 ѾȐݽģ`hƋVodHx ˶А=TԆz軻ɤɩ ɓʽ׹񿻼 Ќḿƺ︳W ̻݋[xՖי٤Ռ Ƞ׬ֿݕ>`˓ٌ|\0۾ ܍  ߧe'i8Ɋ̡ɨ쾢׎IГ Ϝđ܉ےȐԶ㥋о s yY)1Bc 椇oviT,Ysaʡ  ݿ񹠢  Ҕ`dыࣉ҃ݖk짤ۛ ܛ Ρɞ̝ ݥ ̝ງ[xحײֿ֎ ʝԉ'߈庺Ѿ~f"ʸv ،ɜُȑCT|ӒEzLJ̈澸ѬТτž[R ѿÎο߲ ҿº̿㓋¤wbHvmxf櫟̈́\D-+5Y𥀦пŴaoX¾mbXFcvYbŞ}cʿLҡ򱅩ƈַޏپ Ϳ聃׽쥫Fh e]裝d-e]裝dF~nmej|( d쎅 a6 |}݌[vÇłֺ֣Ѫֺ ֯ Ҕԍ"c蒖WY \=@2y혺ёΉȥl'~'H͛f:υñՇ ʔr oŞчЅӖɯ˗ٮ|˦yw} ӝoF/*3I~޶ Щz lxԆix`~ ȧﱅ원ݳ 9t —E~~ֈpsϗfۑ ໇[z؋؍־ Ïؖ֝d֓vD,rʕƊǨղ j*e߇űywЛ ݈—㎐͍ԂŌΉ 곴Ӊʕа÷Ztscil]infqΑ֘زvQ4)3 Di债hӓܬީpcgbʎ\vd[`]YccOsͭ }ѣƮÒİޑً ׯҳ5 Ԇ´ՆܜϘKӉ \ظ\̚ Նv܈\gvhߏ\h"ѽǐŦѷtνֲ}Ͼ νѽŁɿ֚ FHݏͷ*箞׳& 摛ṣ 쨜 N4οo'ɍu횒ȉՋ ǎYoÍݳ ے ϒ{xԟ}Ưlyb_ŌT ?-+9]Ou]|ȁݶy՚။{ލ`} ܐϖ׎͍ǣޗ  9d  [HUTX;d·'yfqd9k[g/f̈mbop/[f݋EÇ׼<,ٰ/>eaٺ6YxݍAֽ5|Uٰ.?f`0߮Yvݎ@ՕoID3Ԗ f[o Gǥ Ѕܻ £98אƕGɟ޻猥ʻۖζźՉ֦ЎȌiţ…ͷ λζ ݷӹ Ѻſ)µoa\YѷyZd¼ɐL©ʪ؜oaԠqH3$ *YoIdɼͮ佛ї|~đƞ[\ѹ]icVŽ割ϊd|̺՛ƜƗ̎ϻḽߓ׊ѺҺʻ Ўһλ t5s:elrNRelrOQ†cla`'rwZipwrzPQՌqx LVy鯓pwro}ᬒW%$p"ѽÈӆ¥Ⱦν.Ł׽ϾνѽԍɿՕpIDƻ ᔢ޹g❗y G؋Ϋʆɤ䴐" M8˖eۉի Ҏɘ@ Т ݘȓkyՔÅbϜ/vԉͺ]NUkqvlgnХt75=䨏߻дi]Oj}߻{ӂ~|,򍗏җ` ܖ 瑝 Юc    ۏ~ܞ֯ڹۯʁ΃ՕpIDۑ%0OϽ+efa[۫ݐ 稾Eoɛ)zҍˑ"r蕋· ᭊޮ߿މ܋ ϩϮԝՋڋǔ º݈ ˰ŭ ¤,feaie^ewcvzͣtUƣťəcHDk亘Ŏ ӵѠYc~{d]_eVS}xiߙ}߶vdN`Pҕ΋ ɱƱ뚵ʛѲаί ؋϶հ   ׊Ӄ_vռЁ˂ыזռ ՕpIDũ(4T|gǤ܊~ L2 äė{9׫ߏ  ݄Ͻȍ>"鵛 މލʍ˱&ɋyծlcV{x3봙p\=8Tkotѧ 緌uÝ ͮ~t HƔЊ ͎˔.ϟnj ҕٞ2؎pī߷Vzъעҍֲש vKBݗۯǿѽ#ݭ|3ĴǢ  /R շ@7 ўբaEllȗ¸¹ ֖͝Ḓ̌ؗʶ Šq^cùn ԋ3˽_+&!<\yȦ貤Rpzqmlidk zo~] y ƕΎ؟ ͓ɐ ǎՆܚߔʝ2艹⟞XqˢᝠOӐ·٨ֱّڙ]3M&کm&]=\ۓڻB9_ȻξKV˽﨟8j ݡ  Ż ߕ圆ďl~~ v$ជo]E.1{İ䫋Ç˒Mnxskd\_k|8~I 綃ȑ ӌȖ 绌eĢ›׭ ៑Аݵد×̭LjûЀ痭&ݜn֊j w֍ݭܪب~Ɔ٠׳vyٓZw֎ثzסֿwٖy֎جپN2=`*rͥ֗Лœʿ쿛?%˝ێy{͗ҿ ՏǏB함l? ֌ԛ؞֍  ޏso ӎ"}U<*OZWT_kmg􎻨ȶkw܆ੑ֌ŏ ꔺ๛܏؍ze҉jUsʁƟcpG؉ގrۍ2_}QUtڝcXُq׸T`zYuڞbھM0YMܛn̘iʲƏ 뾙և,%ƿ-Og󱲽O˸߽ӊʻ   馩ȅކÕދ ̺ގɍљf:5+# (lѣՏ ٍƖ~ ㇴźɋ홾 ͕\I ̞ › ⵜpŽ Ҋʹǂbԉ=ז ֭׶ ь᨟վM0ʤYMӛަyp5˔ߑʟ ϛ ズOg*EǬ Ǝ؉ ̿˺l` +Շ ˎr{ Ҏɢı q̐ ]˖ϝ劃ȢfJ9,-@mœvj ܑ 讌֞ݗp֖ތ^ׅ  ٍǠ}^ ɇ   ʌ8ִ҇ԉַ~ʇ֖ վM0ȦíߘԋB ҍ ̖ٝ ضeUоʋ%DĽӉSumԧø(ax ɻ̷mc֏ ڈ ޾ӽ닏ʿݼ ތӊλ۾ đ lj`;+.6_ﻖҿs{{' ߖﻭ՗ÖcuЏǦفڎλ۩jҿ ѽ ɼļ¾Ȍ 2ob; mmfnoxA`}]obnokh pw~dX/ pwd\ Zd\ 悆2$!-Ik͈ތos`w bĭ Јz Ɇ݅c( ȵޙ ЅٗƖ־ ꤉̔f cο T׾ Žeaĸᶆ,變Jь \ØXK|J\dPϣT УY W|xƎ%Ьճت/ϫɈsʫɂثջ{Ьճ°ЩվʫԬոմ°ګB2ɹD뷃Hʐ ܓ꿔ӧч.CØ hՈԏ̢ȫ҉ ݋ȗ؋ ڈ fۛŽūڳk;8+/9ZܕФ~w rběΠ ʑ~cӤ~N 񞊔 ʦ 쐢ܐъɍh~ ߧψǓ у 璜2~~Sz9 zl oq}{ΘirFvև|ևg ҉jp:_|ֺRQֺADždOز:ٳJr>:`{ܒKֺA]س9Img1qazܒJޯ&^˭dïߏۀ >p더Ο垝տư~!DбӋť ʻڛćÇ} # ѯ۟ˠ򺣕 ֋ȍǕ ְɱ ai 𺱳걲c9 +Pޙujȱ 渹YX\TҢw ݸܯȋ3ȏ n ໛߆鉰ıߗÍ󶰲 dn ͊ޮ h ԡC_k^^i㍥b܅_t^mĐcɞ`'z/Qmօ{싁p `mpĜ x҉' ȃ؎ܾ{ԉϲؤح&eͨŨ  ﷓ / ߘ ˛r 0C ޻㛾чk踈ϊ 瑚 YVފ  ﯇ޱò| ᠸuތߒ֦dD0(+Erj^ Ȁv k깿Еpy՜a ΎˏΈԇ̏ ܻъ桻ǫz]ӈ撹ȝ כȝ ؞ ɜɝÝ髦  ƨ҈0ָ҇ؕ׵҇֟ԙ&cͫìՠ ÕƳs꼋׸ ü/A 1{޼ڻˬx.濼كⓗ ׺︻빉ފɋļѹŻb]ּ֩¬^< MnݬٺÅR**J`Wpm ɗ Żɠ⏷Gi Ɠьe Ո襋ƻ˦ }o˒ͻϻ Ȕۺ ɪĻ z㑟3.إԊڿԉאы &cͥN3ɤ 䯖Վʍ( .a v9 + Ҭʺϔ/j ݐ–ˌʈƚ 㑡`΍_B+-7O ٦b91/12.Gꚗg܀Õ`i襼ٔȓ┝ό섀؉֋֙ mc ͰȢ2+߼䈞1ָ اצֶ״͈ &c㩋þ +/wļĒ|adz 宆Yj ײ'9 뵲 엔̎⌦ ӯʶ ·kůhB, 5UڻʰVA,,-?YjlWW((MB0 vzjԖ񫉪Ғ\qi暒֛݉kyɪװτߋ۰ʰ河}˰ ם*|ڶ[م":(վҁЈɁË &cyډɿ 1JidHŅ87f Eč&j׈ܬnʍѩ ̋bwD1*,8cӔ 5+5^rj -zh따y՛əӋךȋюۊɚ _ǽ*ﶴښs[ࠞl^n9^}܏-ֽ=ԗ``ݣܲ99{kiޏ9_|ܑJ־=ۀ\ز8Flfׯ#`{ܒJٓ&cǼo뒘Βǡ֧Xo?cDϿ ÿПЉ t/֌ϊ ⇔ǿԾ ƕÖʟ_ei۾#W=#$D·uø=2yݗxѿ»̒ЃsȞ܍يêԐ蠱پÝȸ\>򌏞䩟ҾK,ÈćVÅj*ϡԬտoˢت{ƀɠӟzֱܛСԭսˢոȠѥֱٟԭսԒ(auϓj˕  đ Ȏ wbt⚴p̾)|cDܒ  ؐsbΨ ݴޅ䢽ҍҊŎ҅ ǟѨhnp ڞcI0(1Em 8.:މ[+4뢘 fe흊؉ dpf ۃ ️ ꜉ݦךշ`grdﷷƒ v'ۑ[Aᒩ.ڟָՔڈ֬Փˍr^$:B翥 ڮO ⾹qƩAI^׊fž ޤǍӍ ε  ୃ޾ƄưˡԽһőǾٻkF&&\彿 +y§mi2ĝhQ&¢ ꫗啴g޽ۉtiϓzfռ䬚ŵɝ똦쫒 j~qfʽ ɽZ>ߌ͕ e  Ă2֥ ̈տ׬վʃː^$%݁湍䖯ʽƯ[] `/防 ׉p0 Ҫ(Gؚ&ʼnfh `mɠҦ,琳 ʫߒΰ§ ΄ٗ♱xQÚ}S4#&.RD*4~ ݆ϑӍ& ٲ흮} 䌷֑jh ꬂub ݋˭̛ ֝芡й ŒЈK25}Wn nUfqPS[uS{_b_ {_mTSFdphRz btjPֽՌՌɊֹ҆ː^$%Ծnwr}TfͯtC bAߔ䐲 1c,Ïڙj~ܣ 蚝ņ  ᯈϡڊ ۹ hN@4պXʑ}ٿk?/*;W~ِ!'׉ڸr ʭ ȚڲhސvZ 빏~؊ɘ 锐ʉܦ   o󜘾vyᩡ dq}rzrocְnnr\rv䪠 ^fƗŃV{ Nj ԍ״ً֝֜ː^$Yɝ޳ٞʜϔ #&3ʬ ֌V0x݈ш .y(XΪЕ뭔 ̠؋Ú `6paǡoA2*1Cv,'} چߒ7lh 빾v崗 Ӊ xڲl l^|^K ԖàbeewWRk wWe˱˟g OY᠗iPef٥jimxu]oڊ٩gր٤riؘ~׼foڊ!֔lց٥u^$ Ӱ웏`k\d|䎓߮ޡV,󹡓N8G ¸蝇 ߣגӞ럎9ǿuh{V8+*0PDDޡzi¯ۈݽܬƑI   ȗؠ 䈳Ѯj U f_ hggάgm]XKģׂᆠ؎iPgkք٦zn~rډUtڍָlօ٦wn؛ֽktَ!̈oօ٧z^$^ َe}2/ֽ׶͉֚ʁё˅]2,o oسܑaQădm{zzak}ʤK-~v.xؐɪ7E̞ي і   w ۓ圡Ķ ߎ͌♸_g lj,TBUt|˘Ǎȓӏۅ ،Ϝ  ߒƇㇼ qd蘉z!Еǜ׍՚Ӓė]|Tbr U\yzUS\Szal|hUVZ }_tcj lkVuϾ ឦ"ּ֚֗Ă٭ґվ.82,o׻늋{W Āokknʤَ͒\=qn4׻'ù؈&]  ؉ǷL  Ľѻǩռի߼ⶆý컿Պ췸Ǽ Һ帐yv؟fl/ui ԞœߞҠ _f́姇к瓚 iwÔîʑ ʓɏ lފ܆ǟ  zg|ֆ[hֆ>j^h҅Hf nbx mɉiPPo۞9TʍpjF]{{ڐPpۛ^Tٌm׷O[Ƀ}v$Pqۀ[nTq),q [(ۀ ᫈ʤՌ毙dDoћ&: rͶ‡Ќ ّ줖ĸ䡽.ˉ؈ߩq򸗻 עˁõݝѾȌڊ◼ޤՖp3ǧb[_7%k^֜̒䘴 󌗘#u}܄ݖ冪я ҩ_l܍ė͑춥 ㊹jwТôӋŬ Đ Ɵبwרz^qeznvnjaxyyߍiP|֑ױOֳر|ш؝|֒خפ|Ӌٙ$}֒s}Ao(,d%[⫉ʈvq ̤ʤ4rvf&u,=H82껖榇{玜ʙ ߋΎΖw.ǃ󿼷afՅߺՈ͒ֆۘ 󐚣wj˚*?{ʃmku-B ȜӸ ٙךia剖 ݘ ĉґёՇ umlk}XZ\[hޔ5&bjωe@nv3rUyk Ԝ࣬Pהԋς̒βֵL(20! ⫉Ь̣_pߜ Wm?F#I}ಉ ĭպ ޣŜ>`؉ؘےL.ч(Ҏɨ ͉֚ н {1чk`$.ӽl{}Q񾈜ØŚϞϓ ԑy몳ƋƤԸ ᖌx׾f^"ɵɒ‹ƏtWWYgƳXjrb l_{]z`{]W ŨOkߺuf\dp隕[ uPջ ̅Ȅ ÞՍKo7+kDߤ ԍҏhx+b긱 ϑd.7샻ד򸉝 ǐ ۓΛچ HT4n㡖ԗ춸͍Կ ڊ׊ݏ Ј 3ƍdf02uxzl!ߎ⻕ 羃 Jɉ`ɪ ۏ᮶ӨÛӇ ܓzҌ |cdhļ _=Pخ ֫ئ ׶μ٥)ѵ*-F|qΊĥ¡bֈߊ~D䤨R 됑Љ ư ՍݧϝﮯȖ k7D 𯶝ߍ΄蝗׉ ȠRLjheZ#>b{Wҟ輂 ֈ k{= 5ш鱴׊ٙջe}ڶ ܘ܉Δ ͚gggOӎ؋֑ǁ΂˵і2M*ͽٖӕNx|l4Ǩ zZ ҭ ӡׁʧ“ʄ و ͉ߖ׸٘o0gEpᐟĦ㮖_gǎϋ}Ń̸҅񙎾y /j݈ $Ϯ8sޅhrjrϖɹޚ Թ䤈 ƘӆM"8˶ ꕻ횡>+ƖՉČܭfdË ܉ۥΜ͎ߎx(1;::>" 7Maxv{Ad׏יhʇ̼ةڽćՓژܠ·֘ײɈ×psȋҋנ#χԛڌ1̏-NޕӔԏ2ֆ·ȉ{`ēmi |ТP15Sͤ{ ~ ̧씻ce{ 뗎ȑĖՌ. 9  A ȋ 㲪|ai“d쭇ѫӌ &#Fy|h˕ʅʌх金!DIڊω蒔i ՘ Ėꜿ̫堪ޅ   v ԇ -&gNxjӹbiWyߔYĎa~Noۚ]տUڎpطMZw#KJa+[M1ӟTַڊp tȌ G54:3`\6༡ë ϟqz }? ٫̻w>+칐R,1̸ˊmxٿĸЌΏР$dÿD*MooHΊˇЄĿ˺dܭ꾡ͬ r1م¢瓧gcנ׿եχۢ {M֚ɽː u\f⿾}܂ 9TNMQMb_}Wfhy ܟ "z#„(Xn~_P®˒n@'t 'tƗoOgywQ0^ 69FAh nj䴣 ܟܘ\Ö7﷈瓉ⲍ애Ƥޑnğ ފߗޚ]*0+zsˋ blż Ӂ¿es |a!ӒȔǞВ֓엺▌귨 YyQȫ ߅Ș 䗧؝Γ^]^aP !"  $979774RsrrqorҚ"ɹH-3˄Z̘ ŐWƩ¾ xnj*ߧe4HXcWh! ) >a7G 㚟 에탒欵@'5r/ʔ_rbò ӏԆ䎢ɖ㹘aÿ ߋi`]|ʘk|ﱲpݗȋo` ާК拳ݔ ߉ þ~&ɍx ֖ ]䭪j¾ٜٗŝ ڞъٯ}r>?;889:-+)Eca_zlaټzI'+Ewجxw`éےƧ㷔mfk ˻iذ 7 иԅ Ї • 𗭢 +WҐWƠ 빸 ^h덵 ⾢ ֒ō%~y1văM҉^od˞糕ފ lCia˲~úbjκٖ漿+ nSÚŖώfʍٜ͑ ϕɘޑ iq ʘhkikw mlߑukv \5/EF G>0.,//0+BFEFKSɪx孎Ӭ ɂԿQurWREFH0  AZ?/%=VT?g"]㇤ṽ{ݜ sq`mşOǨ mj ʺs26 Iɢߚ Á6܌܍ ŷ淴ôɒﳌա Ʋ⓯ﴲ َ݊ؗǢ!ݰ›흠洴Z -[14ʱל 񧌢Īˑ ˓rȀcХҚ㧗ܞť`sDZχˡ:g̑,}˲ɇސ ܎戙sp trnujejs[qᶺppahr΁A pȝdk0m9NKJ32'<&?CCE(9GEBYGNnkvpjnkvƳ|eZ]`?!" kbIƛtbnrqrАnj ֽۺᢡΠdͷڧ75 ͅ g̐ ė ߰˂ ޲ҞR տŁj\|Μī  ׸ΞȌΠ [/B u3-CˏᐲԨfq Ȉ˙ ޺ܠ Ɍ̉㲳o z]ѡ׉٦˓Պڋǟ| nj 찔@hrgjyÏ܋wqՌƠ Ɋ ٿ'ܯ9!…д]wnAmjk=qX1434"&ο㥎suyR6;8:. \ dWͼsejȓȡ ꡑԓ ռӈO-} 1y=^ꬩΩ cx2̄ ؎ɋɕ瀸 oͦ׺Ε} d넼 ݸÛʙ㿮p˺ľ{σ뉘忼Ĉaa@ QfxpC_4->ߺŠȹĔ乽ڐԉ ׂҟ ײg ŸĽûӷ Վˮޘilf`Rкɻiюݟɐے֟Ӓ |V @ؕȈ~̈́{єĝۂ|zxi١nב׼!עEk߹ܑ-┮c7 ㆀ͜ڋߟ6Odchږ؏ߋ  һv,O ^1% _{6^i ǹ ȝp| Ԓjt Uv `kɕؘɲra襈rȕzԃr{a5/,2C=:<;."CtiȔҋ澋ޔ ϻ çz ߍUďᣘԈŐޝߘ- ,GC!X iڻ%ћɬ|Y} da Y‹nz꾉 Yhcnuj, ǢʁǧôFЂب&㭉Ejʌ[Μljಉ 5TǛNHWіz ƖŜ v}ʲ،`k 𞷥2O\oʏõڹ׆ |ʐ x 4ɺmy ̞~6øk~ݥқ̾֒j_ ա`؇վχǻϵ`|YÖN;;'&)0Dc򋺸vؒ&ٍŘƷلΒ ȔȕR Զ뺖ʥ~ԉҡJe> ) oA|EcSGk[OypA}o`VRi=`qRrUb'bl1gEb_cۅRs}Ah Eauפ׬ןƁLjӄ)t ̺㣝 ȃ5T屉Ƌ@f udlmmiklgsvfl řY l̙gƖΩP5x3Lʠ)`؍ |ޠޫez⼃ 騈ٻǾȠ ̆瘔 ޽|pZ&nєg4ܲ~ʷӯ͛Țӕ XѼʪ硤!ҙҍN q$ØēėҀĥ܁΍֏:$( ʳ \    ́֏"رՍبֻ2Ȋ ع΁ Ɓ5TȄ ֝uagomp{zyxfԨ}~ ،`Ϥ[ڵ}̘ɱ@2 = وѫӈ쑦ԡㆰܕ!抬ϻ ܊ ͻ߉碐Çÿ˺տak{t|Vjԡ Ț Α ݆㹚{Თ"Ηʓtr͌ڥΓаħ񕊯ꈫďs̚ʰV\°٢׹خۜ}8Ȇ ސ ᙥ6TȄ ڊvrqpqٖ HNwԜ^(n O5 ģ ٥w8e &ȿ蔗¤~ *̋üꑶ ϏžՑv—ؚ ԍ п߻enq_ Z m1򔒎֌ɕ ߈ 5Joב"Ȫ̄Ou3򫕝 «݊ݲŽt~bŔ ԑ,t#WPͣػхҌ ٟ؍"KˌPݘ ⲛ_,*Yڐ Y{k ɾѥ! N ͊2tԾ{_Ζx"7Yޅχܜΰ뤉ֲr噘 Ҝ쿜u δh{\!xՕ w ܐے ҉ z톯#JSԺ ߒŒוґ ߁ȉeȒu@#_ϒ׽ר إ֗ ŀݏڳ ᬜfIR%\LPSOݲ߳ҳƱو޳ܬdE,.)Aq֓Ԇ𺏝ߦaeݹ}ґ̾؇ʹ 챶ƴ /x yqҹ÷ÛȈ ىɓֳ gb^힬ɉ+Ѷճ\к çן ҆ѯͳݛ 𸳴 n߮ Խ ܙٖݍڳƑб! EقfkrY]䌐܂fZh}Zjq _q͂vl~Zgyk Y[xk;vupt~ؤ } 5?ƓšڵN{Ơ ෍&`bҎ﯈ 緿l]2qbd؆7 ʗG=ӚWr L ؅堗 ≞ɨ͌߱ ݷ̓ ͕O2;Fs˾af Т֋Ԉ߉؜yލЋcZۃl Ü՟ х­ ϋҗ͋ `{™ݎ쥼eĩުóé̲̲ ިͲ ó lxipъ ؚ֩מ ߃ӯŬ ⍳ v^$=٦ŌܹͺܹR G3 켸ĤY s`ƣչe^wϤۈgֺȋ⺶ ¨.#"ꎸi;11Јe``˸ ҾƤ 蔍ܺ,˲ѡ˔lҏfZǢƐὼcb)OwƼ⼗ 姎Ŝλݳݑ໓ҭ#ϲȺݺť^ښqkphyā ׌φЃ~權⨍dxʍ嗖ﱆèe)lɋ(]r ΋ 0Zcʔಢ޻  [2 ulD6輯^"! 0GIIL{ ^QLº s ӌ0ckatٳRz˄uH2+,PLUlmksOɪӈ׾߱ ӯʪpwkOّ{@! 䰲 vyx}񆎸 ̜lC.7Xx˰ʱ؏ӉЁܛ֘ 黊ѓ , ېﷲӭɱ"[$ͯunormG~ڲؙ҄ժ۠ԉԃ݅ϭ*`l݈ T ˯80ufr⋳ĺ υӦ熑ƒˣ͙ݷ߫nku὘Gyx ЧVTlb`xu vV>@B@54;4(')0112=7?8QijkWEtȚТ몬wy.#͇Ϩ ƈǬՔ|בŝAaܖ:3* `Ԉqך} ` 葌嶈ԱYB Ȥ>A!ţtfurroʢ†ЋDv)ĊՃǬƢ ,qx$+Ōɩ⽿ݻϼ$̽𲊖Z:SDfaɽƛ룂 곗 ߻Ҍϙˆڗн ľټv~Ͻ使"$Kz汑zV ؾJå<þzX_o|]XZX=3378/(%,250"#(9AMDESwtĘ̼ ѣԝ젣 ʵ)# ݈ۼ ؟ʦaʄV&3}xI+!㼿 ۓ蕯_ŒMߎՐ؊˲Ԍ󖻂a馉ܧ裂J:o 拥ʻָ¾ƺoͺ~krźyqHܠ ښ1M\ۆ݉ٿ6 ͸c+,nnm& %̄ o/½η_뢻ڐLѕ ըƌ뚯ٍ잱ǏˉކȘϓו1/c ˤ؄Š 錼z :iPlzG3Pg]E8(:2-/!0./03 %/PaLEgv}R\n쏽 ̉Ћ2'Ľށἇ@2Du~R6wd 藔9ݧ ֗{餓疛ؕ̌ ײȪwvjt߷uxh֪<ŏ߃ N)+mՏݜǾサ⺻ֹ˵ *~Χ ȝz ɧ ﹞Î۷亻ع¤嗹̠È ЎǪع~Ό ׻ݷݯˊB3]ŗղu鼔 xhÓmCs ¼˲ɔLꭋ۳vwvvxXAC8# %<%,!#4&&#"2Sd7-5]mϹͺ  ص;~xӺڴɜ Ð˦ ȹ ԋþ ĐҦ  ٬MBrֿͳoGב ڼկ¶ ڜ;*У!U Qɢۇߗ ݈.hƻa5֠ 遪ﶛɅ٢é ĚЃӓ ykʹݍȆܿv:jy_ &xhްx W頊8k. Ck_6@a>2',6*)1.0(-//0:<=5N_\^}؁ސޕI  ۈϧzx}XM}܈X0;/:7։ Iל伃ң ޅ݇ 딋͋ Ԉˎgfk VfcxU]qCZa]gqCqRVi \xj _H ii$YϊS(X{wˏxqՇ'xˋՈ词  ۔H?ì̋׌ύ xÏ&Αʦ6Q͑\5zZi䖜轈׌ ɞ ᒜԊݶћߓᒵ!}덚xߋ L8t⹤ J۴ً Ս!ī`Jׁ_sN,[<,/,!)58B:Nqkq؅L޵E٪ѺwտHp:?m95唘͊r׋쏯ȯ쪒 Жū  Ǚ Ǹ͈h孢 tWc؎vet}ZÌw~sv{} j iØמ­+߱ YrrtI?껎ԉ =Ѳ˶ ்%YĨԴd ǨX$˝ ܩ ậua_r̜졖bߒ ǃ털 {軃 +tT[v sq։ߒ ˻p=I̫igoU=?97>%/5*')/00. 88#J:hj9*݇콝%͗q~䩵z2'P:3sa lѐé¾܏͒~Ǖ؏ ϔ䒮 _J u܅Ǎo\u^_x]y gVum Wі(oȷpnٱ\OqpJzy]ˉxӽ¯ $XʓF_/g̕޲ןȦ좛˔t ghс^rۑ۞ vԡeyƸhӗՆ }gÿ 坆͡珝_ K6擜ǙiS Uis אڍfg ҅,»\mf}}^XZT%2( 2Wj.A9$:?>LOMOu Ĉ 𣑠ߋ%tęӉm|؍+)·׌ŎE4t xb бeҢޞ߉x㡘 φϔͻ˂ aT g{따 ܌VF푇cezpzjyXJ`S醢Rٜ-ae~ʬ{bc|V^V ̍&Xm%Jcم ֡Ш+ 𗡪iGeՍḗΟ vp֌֏ˡ ʐ v]Ӑ跠ᗐ XTyT(tƓ Td~dv܉ 'ԑþeӵkqË!2<@7(;H2,-../3$@NKSmsN=퓥2tZʥ{sQĞxkr<0a5=!ʆ͍쩊~Ɣ ښ֏ž Ờ Z澉[oa]҂ AcfRKb&fШgޡ\y~ڔg͗ tȲMǬYĤ߅ ;۟fŏʡ{oy܍ѽƹٝмX དef'ʙʅ> 5Z暗 dzϵт‘{ͦ~oRʝό| ̘ Ϋ ʴŔªƛ럦͎tkg0%ג|ɽ$؝t|䟉ۊ ټȏw}4=Ưktv[xZBDF9783((.,"4081(H1*6-452//.3:*#-8QRQZ@#6w漄Ӽ雲эrԚ~1 ,nt{]5K4؝d;(ӕ͙k~–Պ햢衽Ӿ ➝Ԕؔލޖ;6ݏ|yohRsJ~_Yõƶ~ ݘ `& MvԍwѯY9u ͊  jЙԘ葀ֆȏd<ٖȂ󸈡|~֠W04͍攻9ⷖ۰ؾѱᶟia͋ Ӡ峎Η ͤ',Ћ5̛݀dJfe@BD632 $#(9;;>=;2K?1#oyq~˼})f ߎsf܍Ϫf… h%ѫi뒳~z$ވ废ę,omγ яsCw5ؠo[|ͳ Ԋ6Tʠ؎ /5 ˑQޡǛ3_eAHZؒ۳@ vƾ  ĔūČ݌Ј Ȍ 𴍗 ZaZJ922Of_g~ƒҺtfዶ⪄ͧ^Lwvs֓ɣhzfxwsŮ{/é\sgpǡw[_2й}ENd`Z8+.+$zҽ{WvX;g}+YԸj ɟq⿧yѤ9m}̢[  $␕]ϼ aw׋oۧ ۣǙ՘ȝƏňۇ~٤z ߵADM`eʆ囚ĥɖw-s _hY fgݬƸ Ħ׋ ۉ^y툅1-sڵՈĖSИіƺraަ_rאUyyĻӦɐ݌zNܯ~5 g֐|Һ ٶ.tޕ܍r+ȗ߳ӷێ|o ʪ͍͡쫹 㯇ޯwo_[fQU TwamTv`f xa`bZ Tv]p pbl Tq̼(Մ&lϊƍƍڱĝ ᪗ADq`lp}Ә 䘓خg*|"̌jvԵ쪆ɵ ͌Ƶ  n UФL*Rȏ|бVҍAϒ΃~Ԋa T͙{!ȞvXٵݑ ȿÅ唡 g Fö ȵ ƣf߳ Ϟ೸덺׎Ҵ͕Ķ㵩ˠ щשĻ봀go౅ ucwwuin۰qrUhg ʌ aՒ'Ҟy΋nj풾͌| җՠ ޓjɥbΊ~ɒr^3]Aģё˱ ǖ빑ϐۉbL Ջ roP*;қىΛ)֠ʪĵéos}ݖՇQQ཈~۰ђld  {yX*풤|²Ř㫰Ʊ̚~̪ ߈} Z|ߎ|`b ]ZDm\ؓ§\u>m\sT}Jhғşux {g]&X;tٍ΋Ǎ֌ʖV ߖ企 ΀ fɥb|/G Ы(ډ߶𽋽³ Ͱ 񴧩󞔡óӓηؐҝ ͪ꒙ 61>HΧݏ(يʘpY~x~W^…c{ 㖇 fj놘 {ِ͟ʸ̰]}ٽ~ʉ"%ߑ󠽵ت恵  ̳ ̧ҘųЇ׍ җh݌ܳt` ԺRaِ\ewjwoԏ~“Å~/ޜNEΊƍЋІ ❁̑ ஖t ޘɥ7 62ⶫⴇ܇ ݌ԭ  蔹ӼғLJϞœލg[ؐn<8Гsϋׯɩ"f?}NȪ芬krՇ X!bũʿӮ ڋ˒אzbڒԐb`wӆ젒 Ժꑑכ˂ᠤԒ˖ pnqǝտX\ aiԋzeၰ_x'gԌuҔlEp߮f~n dvݘי4ݕyݗL%Β΋nj؊߽ ߘʳ{ ㍲I? 몚әƻ*苫þ~}з ܟ˸۴җ䵙ŵ ئԂ|yג B6 Ғĕ~Ƀے؊ ψ[2^Țiy P*͓ο Ώ؍ϻ ۛכkbڛȸlcȆØӔx^nle| Ƕahqs\`p]hv \av{k]a bdԗ_k bnt6ߖqȬO4΋Î呴፪Ց ^ߟ x̝{ ὈIEȒ4c-A,yǧʣƔ9DڑƆߗኝ Ⱦأ̈`y̱<7 шr̙馊 峕\-Ҍ݃ 㹂ʋ ޓ쮛“ ݘ°o 鰇\)wڅbג5m礲ЊԇÈ ̓ ϊٗۊߍܶwʀJ?ɽ S|ȖS9Xbn ҁɵ便 Ŕ퇿·⒚n ނߌK1ω`}#؈裵Cӎԏؼj݁{̟Ɍwدÿ  ؎ƗƒؓЃ쓢ݑΖ ˿Ŀ×%(j0ʍڋكԅϊ ȊڵzƟT#'gL̘և X— ODFhnݞٞ_f5‰ ݏ׏ ٝ޺ ĻȺѱ ہ …͠—]-tȽ~݂ԜDꢔ|͂emܦ-(u}ޒ_ѽ  Ȓǥ ԓǯ 宽ԓ®Żǔ៳'J8@،䊳ۚ Ö֒Ὴ 掗Ϲx ̦ N14pŠ0 o  g/_hcIk­ ڤ 搜 B ʌĂ᪊i}r ܘ붜Ԏ 涍͗x+o 󺌖ݒ ކ㙐L 똭 Đ͙ظk L"RȔ_z{^c˓ ĂczbЍ񧞔隷 xO䄘&iʵ׈ɍƎiڢ }ε P/%ZLM(cDȻٷ¦ 󍢨Ƶ޳඲͟ i$ 񬈺͵̄ Їhag ͱ G2Q短 Ժ汭ɸ6߇ߍܸ#Ψ&F܌ؿ}diNuج߽̏֗Ĝw ƢqҨ8݄ˉҧ 􏬝 Ŷ ǙV̓+#MՋΏζ OZzJ G7,6~;zFЙΒ(x䈴cD̗ ׫ մݧ͆ הџ Ŋ3T˟͌ԙ :6ʌ׏ ׉.1ِ迱륑 ߕ䌮ǖӊݐ'Ђ݅JǖbHHڑϬƑ͆˥ d(^{ql S}㍽ â ⻧ȝ {%E輮ևľ␬ы ͓ މӒƆΠ Ւn4LͿb^c񘗊 ϚÜّٓ)&׌ה啚`6Z햢݋o ׄއ٪ޠֱü$ź[(乬ÖXҺҍēމʏۄYa }ǎqhҙN/2r"΋xuUOgz TL9ʕލ_}ˁ²𵁽~Ջjb>0댂ѿ’ۑಈg =9"ǫ봱гE/Iڥ ˚jb וډɎ 菅ڝY ӎ#쮏ANJ~ Ñx{ bj đee bdlqlzlelqenn wtp {|ԙʒۊ }ͣimn+捱ɈN+̋榓̸ṗu`^xY}Zpȧ 㺶rcǑѹфЇ֏ޥ̵徙 q)۫P}@=HKiȳi^”ŴݖK# 䓦海 ܉ұ50AhrsJEõȐۯٱڟ }ֲز╳̲ܚȐʶ"ڍCpƼвu|DŽ cu`[ֻlejv'iq_\`gw千yȅ Sƣ ӹ㴪ʾ쒣Ўȃە 鞂ا^$bz̈́mȌΗ1̌~ɸ⻠¸nfa M*٢/W ȑ错މ j_ܚېfK̄H<71-/-4KkԊӣʈى䎻卯 锹p?<ōȜߗk3%*]rWpnOњ$+5xK7ʛdsdĐ޳ ԋ뿈ΰńB 3n} wAgmq{Ñńg]Yr}Ԏiß x˃8ǜRϜč;ւwi^$učw/Ȍ~0Ηŵ±ȩ࿓ƵTv0rt̜ ͻн˹Ց {sբß٫غɰɦѺvɺ΋݇1el"RuvR:)=呦ӻԠԈ âǡԺԜ~!"ýλމ⸻l+1%&>7#!;Ll#d/Hɀ^ȞȻѺǻںuhȈ⽼ ɏȻ̕ü ׹ 1{ h W ٔá~Y쐎uѓĞŸzl7!ДĢ1߱ 眒«gیGa$F74HLyu^vüʍ 1Z͢֋ب ꜐Ԓ}nޖϵׇ͇ݯӌ T3Eˆ؎⍡f䖫Ň~@<ĒՇV5655%$!Qh+xq%ߋԑ ¬ۉħ揄 d{^ qyl!ckq{lug ʡJ"ݑיҘ Ȩ ٩~;")%%F0/8G}抳i~Jn{qvssL %dOu,#8ͱͭ>ªf_L8ݪe+͢ѱȌ}Ԍًjh |b݉ߍտϪȈޭóЃ}8.Io} `oӐΔ ԒÔ‰Ɩ°}`g]Օ1*Ѯ䰰֢郻Ӈь?2ܖ$˭튧 铕v֮ ш˲wʯ’}Ҧ汱oE{PTIAaoO~oE|ta\TgBaoRx[g Sisa|׉Rw MQUIwۦܦ)f*Ηǂ zٻP%L='gݘ&=(q&+ŭݘ6 ",Vrđ#%5]Uj/-/..%`̸vr?ĘOԠ\xrm-݄Ƅ_-(.9iϡȌI捚ʀ Ht։~\ؖÌ+P/;ܓҢizΔgqه /| axK1TǤӞ{}1M ȅ HЉ ЧU(?ُωۇŔIsЎߕG穕 Ƞ}v7zc%}Ҋ\ـ?&/uvʼ˻U}Ah黔U jT|ȖiJLJ虗7Tu&ɭx7ƸRa濜9`wB0}ۊ ܸžоƑ ½̼ !ƾ²= {ᘞwۣ޿ʌĿn"-D~Yde߭{ýۡn7^葾VۻӞvb(o ݒ푰Ȋ̺һǼޜҿ޼oGBI Њޔٻ |þ ܉z(̌ ۊ߂Óޓύݒ uzCԺ@+柫'Z]|dƽUFЩӭ]ɣ.oqސ_Oz|Y0iiNZѧ'ȾȰq3BU[q~h6LF;7ܓ鴍 Ĵ؎ǁɎ"y `d݊ˌ50S [h~񓶔ׇCϦ〶ҙfҍnև@ȉՎߌˎQ   GҺd̘˜ h_̎(햱ڈ渜ˆ]kbKTԅ |HLğofxr~^4|w'[#Ў=~شЫݿ<]TXYlǺ䐗ߜ4οX_°ݞysnp~wzpso]^}rvA~,8܉ϋФҷ̶쒻Ƈ ͒ϒ̷ ؽ\1J}(mø՝碘񗋶ʌꠓ͸֔xl.5ʷʮ ajԌjl& η͖Ѩ ճ^tﶺɄƍ摱з'ҌӉۊ罗P, )|ݡΒp$r̪z&rlZ@4acsa˴sa]Dн½YIr J/ͧ}¤r6ڌɦ_apUxlRuqkrtp[R*SWۍ 󹍌ڧܧ `ܩ؊ߍlj xCƆ19RA3ќޢꛉ ׮ѤFV,1ɣawމRNa$n슘 ߞӘ ͝ _׎ ճ݆dž*ÔYW֊澖׬D ЩĔ V"Vr,rwwS5Җ&Lc`A~ #Ζ䳙XȻr ӽٹ:nHPuemŵʳ޼Ա0Sf`žR8肱zȢޫԯ=";E9S@$?va!먐ʏݲ񔩫!k௯ՐܴՔ䞕Œ <ܫWeo+?؊Ҕԍټn᚞Ί&پͫ ԉʋ|ΌPO`1'ތ"䗵̔꣐~-ϪЊ.缗ʖ얕ް֘ ڎ:գr.lpq{n)XYwWξv7eȌڿpȍhpǕӵ8ᛸžۓh䑊fy~uP]PikCލ鐠ˈFؒҢɬӚЎԕ'&Puy'>÷Ž^sl frƤY\ єɫ}Äʺ鹕⍼ ʋ Y*92S33aޚլ} ͡ɈᠫꏾpP ΋0\ۗoe۔ ؊ֈ\̏gMT}'ەʜ˚щʻ ̚Ɏ۽ۈ{ đŵ1輏3܃㌨ߏΐ\ȕ]%yՒڛ@pEYGFUlf2ߊܕփ΂ m ~qw ֊>(I^{d ̇ƶՌ~ V%r߄~|Ċ ЊЈ `v҉±  ݳꕓވ ␫шى꒪ى ꖓ)ƄtUߎ҉t:ղݙL馒ֲ Cn@k*Ɵ.fnyKi˜oUiʴڽDRl븙޿FHYۘ nLĬfh#NG֞EC)Z(ܱň'ަKFlt̰抵׫䛘ޱՊƎ ƷߍǕ CB"ֈΛ6? mu#rԕ㟪ω~ >ShM ^"u`ͦÐݓܓَI͢'w!ĉҐ߈ ֆ 徭͹VFW9&01N=?Љ҅ſ jKq bivࠚ}b^xgp^-cҎ eữqes LЉ,Ɣr̎ϢnQ؋¬ :E)XA=qXɷwM饍sc⟜֡閺{ш͉ƚ '5Z6Hõ&+}|s`dXSغϼѾ ו ™ƿՍ螊 L/UϢ蕪眝Vbɷ~|EԔΘߣ̕韐贙f^r5U➑h׊Ԁq鉱/H 휡,הՙϗ؉̨ٔѾԍU46$@IB8:(O ̗c{۬u¡ ^n\q_niԇ i_mM Š s¢.ƈcꔠ㱜:П47m'=ADCķ2ܒީL뗂 auގΪ ɜk/+m>(,˿džh_[Xj~ن߁Ơ粴ɶ{ސߍʲ˿иหߐ 눬ѴʊlH-hx}W2Ș،vκjkp5E´ݪn☏ܳYBݰEڋō̶蹈۵Ͳ>g~[t޻j01/> Ϊ𹴵ś 굵 Rs@ QdquRsi ͉̉Ÿtuf4ْq=n蓴럭󤜴ѕՎW*DVU:,b┏ތчԏڐ.ߊ솨ʋß ܒljμ 瘎ٻ'&5χπ嬔v֨ڕĩkԷK4ͭۈ)ކY~/'Yw%D^KɌQi ßZ ;-5_#޹gx⾖ūȑՙ˝̖ꏤ͖ ꖗ?X yΤҥ됓 򜔘ſ枮֑י <-冎ᵓỤ⹈ᝐҜحԈ뼉ΌC:y΃萄qۼ6“`.`ﻈ#ﺝ’ЊǓeᩩ덾ȋ14Ո픣ɐͅ}ܵˍƍӹ7t*Y  zp-b 74v s/Fmʃ | ALAk[c͜~{xuxq~lyΑⷹȆدնɷ񻸳ĄΩεƒ츷޹˶ޟߪ լҩ߷ ѲδЦz,9`_yδukѩØﲔ ȡʥb"µ܊ ߓք բóԮɓ÷ރd[ߑ/NԼػŸ 혜ܿ6GЩ狮Ͳۇ۵ތ֓ duT萡̶6Ōّ҄{{̜ٔ‹thș#cԓ{#,tŕxae # f ӎV +hȈފГ J=غ Ǔïr9PIzɱ݄ ۋҶ%߫ѕ$艺ވ ׆h=ȍ Ƕz꒓-+(uɼӟČ“ 뵖ڎŻ~ 9+ ԇ㢲ɵwfzڊ̂液o8"_评 ߡ²ޙ4uօ ɳH)jӊ ՐcqؚĎ܉͇ ʹ²Ԍ jˌ`@qۼ~Ԕʦ+Ǎ D j>` "( $[ëyl dw*3}= ܤswyM^l9u˺܆ɖȸ 3&ər{ŴףދԓÔה)D/o^9 7ZtŠαې󙕕☠ ̺) գӘ҄ѵԒ_zˉʤŞh_.&ˉ Ҡ噐 -w'5ڑ zs鼏fԖ葟ֻε缾 ݸȷ η)ᓞrpz}ˋzPhsa ں},z9VĘpa'0 ҆MU (wf ּXHw_d[l b%&㱢ՇߡǨ׉ ҈͉ӝ^.H'K"%7Zx߮ꓓƤڰy/<okmr~7Ǡh ȝט ̝ M=ՙl, I֝x Φ m蠊 bi\fh`[b쑖@Yuovm[sf [fu[g Yr3ȇЬĥ.1uꐦ׾ל­ؙV%ڰF ۫Σ'0ԩãNFwh?i ݹWʚbĒŁ}sŸ \xo%Ʉߑ땝Ꮣ:D*a_Ґkї{e舛s ߸竔^&}_6֤i ьa Pi oۓཾ 9|ɋ≪ ڇȎъ߭ ٟʇǍaH̤ҟd`|}KXbtrXH:K㍥Ԛɼ}~_%>ۑȚփ ﹵ŽHq.ډɦҒG+~kcܷ ꡎ#𬕒nj眰墝ҏω1ՃÙݞ |è e_ n^ߖeƦ Љ`ЊΌڑ¬,[qؓ䟖_ϕ ӎ~%O ޞO(5| ǿƺ~1eTNNu}y~ԌÃѷ.ƹ  ȟ ͋֌ܩ 7JΒ ߗ۱ENLI3 60i촉גSKQf$=쵈 ᠄̽64sʎ Y0 ї5>gzE\پݍŖϖB䷖χ;Т߄ķńǗ A_jgP_iUbBulI|지sz"|}v6q~~{Uad VaiOԶIzrҏҁґlɛߖm? Ŗ6韈Z㘩|١>'߬g.bBˑ"'̐GF]bPИ¿ڶ͌㒼Ԥٟ鳮 ,>ēٛ71P DzԚ֒kL9God"Qyuiiq(A ىيΚ ׏및 ݂qɨxǟ90⤗xًݥܳX1qv?!I岌Â3Kx էoвah*ތ ښ؋װݺѻ  ƽĸֱ ɴŻһ ѻẻ፽ ǽᙧ拪!sԍѧĔr+؊ ٛ3ޫ6𵅩WՓŰ=܍Ԍ'LONӢzT篴*vﭧ ⊴އà—ų ،wЍ t4;wΊ묁گd&54Kp^o 렙֎tlԼL:׌ ْ ّrx+*ʮjmԚY0ѷe|~Jᘜ;M٦y}t$ɐ՛ē‰˥ەє峝󽸹Ɯ ⓬&䚞꒷޺k͖񔕩ݙ h&s+ ؔǨc?݉ݑ𳪹뽟xw풞 : Ö׋4z{oxH͚Ϋܙ܇ ꦐϋǢ絊 ߪ N0?{ԚƼυĖr,)?<3-7Gm ӥҟڊߗ+4?E92169b ыœ wQpe*l듦Ԍl~˿,Ӏz\^i3;j)J u̅#ƋηU򩯲Ѷאݍħڃ֕ĸɐ LA9`!Чئ~^͑j ̆χm"CˤƟά(QyXʤv 힔 kuʝ֌݈󴅶֓ o91]ŽΖ혞w?MmuW;)*.H^Ԋӷʩ!ƥĢe-?(MPgb?.1">`çҋdc܄ Ylclג{z Ȋ+jбuYih~$1o}Ȋfk -ڇߚܑ ԧ֌چџ "؉畴̋癯꒞ɒً ׎I$4TA+ދ_Z rrBq(ր ϥ sј Åͺ,*3ևǻPЛvp؆ڊ Æ ѵ錵؈籫׎Š㖳غY.3fŠƦƏ)ڈ}WӴW<0*1Ab}ɆГ/ȇߥ<0cɪCܳl׶vG=80&&Dwjje`v_slm_bӉ-kjw ꍧƋ ѻŕًژÈ$릟ڊڛ >P̐`wG笵~kي󶓑Ȣܶ*:鞉pYҦݵRٗnȻ͍ɂЌߑهuɗ Ȳ ~M1"#3445,!/'Y ҟ0œkF%0*)6@g>Ɏ=0H|8.Q􋟇)Aݖ ֍⸈{ǩG/a mkΑɦɷ4hUC*))?TLE^㾞z|xꍎy _ ڇۏ ֐דǠڑ줄%ʈЊ듩˕ݾpד­  ̋v Y^  ㌬ɴ ៑}:P Ç, 㷸˕ͨסړե{p܎ȷ / kkځǶ   ŗ G17:421-Mяض˴>ĞʑHGC4;,-Ot㼹70Zw҉ ̶s!R Xؙތ 쑠䌏(˵쮅M!6miA$62O︗aGO>4$*BMmڭлƥ}sȯec`RВ¸ۺ \ڭ ζ& ᳻”Ź  &ߐ҉ф؉héì ˋo'ږTk*ᩆ꩕ ob܌Вc 5;3ŧԞǺ~D͏Ӣ|dulޜ }^-ѸĈ dzݒ̑م񺍟߽듺NJeJŭ*ǩnWmR0,)5@d䠭ɏG/jׂљ-,x ڟ t&tqO#x^)6*-=_Z$" ׶vH))6152Riaݹȷpx|zջΔՍ`㓝 ࠿<ڼeu_i_ ^]rT[]Z][ZvBE[kfQ\_^h_ `qi ц鼧Тìܜh].XЃ| 5Jh+v!~ܭΑՠh_nV҄ߛ 𛙕ʻ,Ń鑸Ԩإzp羖ꌫĎϛr|^Lَ굁ٵѠ~XA,*,*Tl™Љݠc,Q ÖamꞸϏΛid1v쁑گz@=R85]\yɎܯfTC*,2JJ=뷕m]nkt sxwtڗrԝ̉f᧫Ӝ°ŶԸ䔒҂ ӊux ex}Ӏސx}uxv˃vhߐ tdα c)󴈶鋧ˊ㤚Փ濗HHχ p+Ѡ?Ùҋ܄ՑdDp+݋ҙؔUrQ0;g^VϺpொ ًο뛫뿑Œǹh]×{㾅麘7ɩy԰W5.*e䳗3E˘u+.af߇ shz62Tp풭x 吔ʒLiGܕˎۙվˇŵȪژ ~_~ W RA^RAhVE؉|mfdÀ ؇xݹ m2ŒNJǔ~Փ緣Ϡ Ӯ]/Ŋ]<]rɦGʕΑa春͔͑ ʔrM8؜ܒvē ҋ$苸趒 ֆÚ璶 qTӐgaC*,Sr|㰦.plߌƋ'4տ؉Ҏ܇u *lኖХ K6!h1ԗبcT>'"%C\l搲ڻЕÏίps’ʚԋڍЎ毴Ԏ̌mUĘtOJʩPǠh]ʩPݘ`˩Q}&gwy^r׋hlȪbƪ嘵z၎ֈ졍{elIݾ߇ش ݹ N|Ϧ'޵xbﭙ`sэ́);ǜǖ‘𚑦锞 󘕕  !ކ܏ ⊲у>~d͜~Ϣœٯî b̸ЫF+ѭ矏 ȥՄ]l׺t }.鞶GǺБҼu ШЫ {˗՜׈ 䡓㖤ȌɒڵYyˌ˟_'-!2nȖA/ێ b@xzъ$G؎  -1 ~$o ϊタnD6%%=v ̶lܲ{n~HϘ ħَߌȡִ֋SɈcIJqƬ ޿ ʫ b$ ߨu7);XK 뗶ꄲ ɨn #܈mhʡ aiX: ֏ϗՉܰȌ ݍ‰ ͊ģJڱ7~möIJRopiyĕzNܢwΎL8݉ق۶X.oءﴸ 4< ֜֩f<#*--GXn UXԼt͜Z7-E뒭Ͷٞ ﺍ ڶԎ ׌ jͨߗ ϡv(?>谍 2^y 텫覇 ݜ ~갴iBc)7œ ڒ͢#j_ >؆ɲ }Ƀ'Ϡą}Պ ÍԛS몗F+uo_!7BNך\jxҳ{,zΘ  }<(`Awƶʎ.fؕš}d//-4B=<ҍξһj~۶z_4,dݜ э hӠ ʜ'ߛنʊLȍŜ]eeZM°h0,_ﺅٓ.ŪB&o!֕ˑξ ɘyabk?J>hᱚɋ}hV ‹҇Ӎߔ ݋师"bj燽͔ ҉Q✨Оysמ܄}¢諊2~c4z·W^ʒ1G ҋJ??hCʹB#\ޓIBA8,).EQ>Ȑ |ƤkEw էՈ9*`#•ÖE.;뢻堾 ̂ g~م ϛ G:sԍݖ 0TGJD$r H䡓̤̉ܓob޳àCl+` ˋȊЗݼ  س갘~Ր ~ܪ ɵ ޠEJ햜 ޏ ׍ ̑̊̚F옅۷sxbh͎϶°˗rQWyo|פhȄҋ/:ٌӿ ؛ [xca%J Ϻ__G#-'*\䕏ۖ{qzګ%3"6he[" /bߐ ɧ䩃  ԇK `݊Ȍu☼ݙ (Y߈2H#TWwDu*‹ۏ Őy¨b~( ōĴȭ$x}d ,zѨa׏ ʃ  nb ˞Ʊ  }Њă̦vf{rcc%MKrbi\lO7wa}á s?dim䕕 X0–zd:*#4&Yr\ ޮÑtÐ#UG_7(0/+28>]ǰuZ⭡̃ 񑆧J\Nݙ yu3I!Ȓu LsØұŕy7ǔrxb}/n齘Զ$㙐ߵ˵^زč^l 顱ﷶ̶ڹ脪܆Дɳ ϻxiߴ] ʲ ܉· ׊ ȍˍ]fɏGeֽϵ[h؋Ǟʹ; ]υ Y2{ z_ @ΕՅ$z1gV=:+%Sts$ﮕ좍önijتى"AE>c^uέŔߍ焐ٳʶƊ˕œ퓤rHݘȦۊ 픡~ iƐ1+ތ,`۞͐ȕJώ覃y<˫ᕒŲץ1V }z< 쐿؍Z0c1 ҩε—Ѐzѕ ŎԔɎp hgӄ ݺًۙԕ´ Ijb(_҇ԝ­.V܄*٤L#KͣŶ{xyϜ"ޗԸl V/ǑԯÍօߙӕ ʓ X\e_}Ɏa^蝩5ya]gŸsq ubh##/ԋ݋ݹjɦ >I΅O'Kfa~nuܧy<bzg' ʦs`k}ىBƣے­{el{ϵV֯Ѐަʌį֋œÛfsβⰲӮے 񵱰ȿ܋ﵱ筈ތ͉݌ӼƐֆM9 俪̤򵱯կͼ+gѐФ^'a﵂ԩqh\z^Ie` 輤liOѮ۷ xK2O֯배ҭˋд屲dn騏_{ 崰ޒȔƮ ﺥ qgȊˀ݋epáʃp͆$bGzn皒Ԣԧ鶧  v  T|Enˇ}܊odt:׊ ΍zM(rћ་ɮQ|șޖ⪮˕юيՉǛʉ|笐_Ʒ ̙\ ͋ ʞ-V麓ߪΓ †ť೨ҍϏ΋©X*U⾾ʐw|f]ֵԳdJQfa_My{Ģtxkz\ `R3O͈ կ`‘h&~w YhhǻޜrO]lڸjv|lyt'\Κ\egpmkצ jٽW͎ٛؕ2檇Ȼy7ptЪ|~|~tffcd^hb^g\SmǕnا~}xŻ̲A5s䶑չ эκ۶&ڷкɊ˅ƒ͹as`lgκi }gihksynokm_upijlf ikԧe e\r۹ɧ Zʟūޗr|RSםJ4gP lj[ SԑV6͑ńÖ垆ȭ~ ᨋ㖪 }ً萘߲ˆ 䜋 ߔ`e ¦ 型,e𶏈ʒ茹壮_1 汣խ͞·h.Or<ɽ{֪¸ơx~cMպijʜRNǺܽhM3̤֏ ūݾvH،Ȑ íޙ Y㲔yvڪW (zU仰?Nm/ܾ 默țŧ귓r||곶 උy~π Оݒի` ⤾ʟǓ䗌w~ж׵ʵ 򺷵 tbѳ̒ub 񻷵Ѷ钿>2À0bЖzzέ֖ס‹-bIﴗjﷸ󷻻`dy_PZ~ldf͵܎vNE4öǿ ؋ ܻڑΏ̴ȔìޙTѸH7Վ gx>ͣoꑣݍ P*wàȯَ Yl x ׎׈bʧ}΋ȷ0 a˿ތ t,vꞆِ35® ፏ ݔ䩍?:Gⱛ̵}wyT巧_UJȾbǯٷxgjh̅ בOf94؅Ꮊ `ijU⒝𣂗SĘìޙìʇ|}Ѫe  ';֋ M(`όˤ܄Ɖ~.k} Ŋ Ơɏ̹llܮhvM Ѿ-$ Ջ 쫇ܕ݈Їy و yn76Ŵņp`Xދ ܜڟ`0᳑Òye6]ޓѿՕϕ ϵҤ΂ ӟ򅲦01𧌟7m bҒcf싼%ЦH"&斛ܖìޙŪC곆ðvɤ LLՁˑ/dҎ˦ LjH$a4T|bx sЕÿzxяaоp]qѐ; Ҍ ⑾꫒١1Ѕ ؈i]k/PX$- ޻̸ޗ Ҫ+ ՌRExõ挣ۻƣƓ_n30﹃M~Ï d`me※B׎ʙìޙߘ꿒-t`"ډ >؉:ɪj]U1y ˦{fom㴦 늟׍~⏝ ͊ 5܆ی ݐ C0m4/ ʎs b iקּ2RԈkeƝه4 唟 đ?5ΕQ{yhیߣ>錯S{Qìޙߕi_7I  x8Xri:[ ǧꋶɔr+Օѿ_e6؋ 㞟{dhڋΊފ د5 乡緳ܷ45u2o݊ Ɏvjϔƶ eϸG1ԉ LJۚ j 떿6K }b}诏⪇Qބބ$ͺìޙ t ~tz 픶\ ЋHhXte(׌ܺd %>bahフuuڒͼΊۍʔĆ򦈰? ު݊┇֙c$)Bώ wѮ߉e ͩ-K֊ݒu#x֝ 㥉掙1͑ ϓۄ6M  ؘކƈʊ`ԁ\ twՁ_k f`]in _dx i ցК䴛­ޙv}C< ёW зxXȉf ^63^֋䷺󏸑ԋ݂ڷ7]8y︷ ͢Ԩ͎ۖ׷ޛ᥇:˵϶øߵ϶ø׻ʷ`(&QԒ ِ݋ɓ嶻 ЛȖùT.lp ؝?0𽹸 ۷ ύꔜ? dž烩 ˆ6K綹  䈥ö{kwɈ kecd xx}waብÇpvr苧 }d٩ wĩ%"`㧶 RԶڛښޙ@)]ޓ?Nz&ϐD݇YѾZ_ؖar㏂ >Něϭڞ r[܊|ֆ Cî Βޱ8ی쾭C08z  ԍ87ß2-v풒ӫ 렍ʊ,] {妐ӌ Τ•~ 3mu[u?ffՎad[Y Wde |s dķޙxvb& ܤޢ Hӟ D́xͭGPt:tx񏩸SVL?Ԡ¾ˡ ᄑ޺}su½ͼΖ诗$ػ ؜㥔 μżٻμż 򿽼e5,d_* i}Lj%gekXuq|j¬Ο1ٟ먃 W ܩՑމz Ùݥ߳ݭǸ²ɜhW%ϕ^"-y-P Ѭ-Ɨdn 3̐Y͉˝ DĠ (ځ s ɩ͒ ɷ–祸ܫ ɇύɚŜ޻Όà 籋܋ rϛǴɹպm痀̽9ȑĐ ۏ瓒 Շъ (l5bySD Қ`(lҘ4az`W^&(lW^`}HPՊ_| IPՓefƪforp~n­ԖnȎ諒㢄 e%8@䖋Ⲙōpaؙك󸉳 ˣg LSm٩G>a1.dŕdf  իВ\ 1ב g Ç΂ Ϛʋˎ}칌󪬪𞦲ʐ繻昜̉Ɨ ‹ ꛦŦҏԁ܍H?Ĭ ׈ב ~ ᧠      TאЊ֐S"gxלS ԇ縉5 ﮙŒ率߱ɣ[$'*~C+7ܯ&|ڒ.حƭ旓ӷhح ĕѮѮц ׆ӟ ﳰω̯˲ ړ،백ӸwnŋjͨǮcٗծ ׉me#۲ ͈إ ̗ӭڳ ץwuא由řÉ˵ ;M·킥 ׉Ġ}ˌ7Jxj(Ӕ 聽 q֖ ų Ο̣ ɜ޷ܲՍ҆”ږď彿؍؉ ̈u]ƹ⡎vkv˒楼ىƙȚB;h{ æ ӋRƜj룉 ɵzܚl 읅 И™ټ۶Ȕ܊5q5Rp׺}\䣒 蝋ߎ a񐬏훭 ؙܸ׈ ͻچߝѹ Ȋ ҍ˽ۜĤߏ 砈ȼcbׇհíȺÓོΨ㞵ۻk{+Û<ʻ 񏥔Ⱥļȼ¼ В̎°fN꩙̕Ćj*P7݌z) fK*_َb˘ɋȖwpu=G| ed ׎ oȃա㯹 ֕ ꎸz떊ՈĈFK4ފ֪͎ф܋ވ njį⏰Њ*M ·š y1འijٖ ×ے :B(ajꑦ ۭžċΎΟߴ)/Z"{Ӵꟓگz򖢋픱ڲכdäՎ޳Ŵ ː뵸뢴򓓍/·ڏڒɴߏgv+ׂͷĻɓ׉ύ혝Ɖش󓘸Ū܈Ǘܚíݲµܼlht*߷ܐ 0մҍČϖ^ٛώĸn  $۸ } ƕ܎@1X1 4+pΎ鄽c֑ y™*ו҈ˆ̊ ͤc囚ϖ׻Ȫ޲͉ͩ붘˓Ӊăҋ뺩|~+a†㮪荱/ٍ}ۓߔ\{RnZΈܕɐ ﱮҎie(Q Ov1r͍ےxhٗ ԋؓ ̓9зկŠժNJƞƌդȫՋ Βh ʼn ֓  쉬˧Ŀ ԄǍ号˗{vPbnjއѤš]و#疭ɬӪ Ū ɬӪڨԧŮ ߨĶ͘ܕ_WN ӑ뫙—Ù8zQAa ❗ś֪w֒ ڟȗg꺛 ߱(㬓ʅч#G"<ڍ ƴࠒ΅flŏ 뱉$יՑǤsфl(yʗ˞˙j Ԋzh f^{rpqoS͎pSއtgZ( kxgd hyvȗ ֡٢>=ۊV܇ZRɛ \ zk;`wl 4kۻ椊4F Ð鎠 Ә D{O鯛tϏڏ~К v΋շ3] Úੋ⸪ ۼꓹďȥ蠲i^ ŗٷå׎ڜ ړχ ЉǠƺ-  Ͻpd. ֜РΌ(鏭 dèedl֘Oh1kx'Oh0cymfk\ Πҍɐ⼍麙߾f՜ؠ ߠǿ Œ Η ͻ"錨․Ӏv8Ҳ؏ ϲw߄ߖߖØҁ 㮄 @ 8Հhmǯ Ͻ|v1VǎВˤU ҂Ôڐ߇߹  κ܍~a ݛĊ ᦺֿ݋ѕ҅ߎΰ lkIٰ썱k(6憤꾀Ńꑞԙ{ːϖ٭Sx㹎9 2 iŁ䐺 ѝ꨽dK(َ`qڱפ©Ǝiތ 閾݋ɫͿ~|φ ΄ 誐Έ Ν뗵ܸ  ؘŽ ]oҝ zEѝҟƯ̆௓ЊrϮ]8AʪѾעĆ™%gsӑڽY)B;ǭ䴔&"$[ǩ_uﳣݑVJ݇ԓ iyօ粉ɞ ՠ  ߄ޣÛَwᘋ ֔˅˴ǎƐ듾 瑡߲Ͽێрἅ ߗ ׊ΆΤqc u¨ htٸ½ p'ğȌҚĮ܅ƀߐ֫>0swz݉͐؉ìۻ®(S{ظʗ¹ T%ߪ︉Ќ *Βǡɔ ښ ь򣒬"ݸ򖔽ү ڷ Ⓟ|茾銭ϝ󶵹3ضعދדϟ¥yʵَ}ѽ…Y0췹ټ 幸 Њ嗃 •sma وږ ֈtr̈ۊ庸ٜ몌࡭͸̑~sjmLȺ ݼȑݐΈ¨όҗȇ ῥ,܇o*}g)V͌±ĉ֖Kǩّ Ⅷ廭"ۣڱlaÀ⦾  њڎ؅I򴒒˔geו洖 ᙘ抱S0, ݌Ӌؖᵅꠔ褢 Ր ߏ寬ي̘lQ5ğ騭{pk̋쵔ؓ o޸Aq Ltև ͥՒG׌긘ߍəݓخv ~ؼtB}ajȽ  ЫӊЅދқ℧֙NJᅼדݩhp׿ԻfӞ Ӫ ۺԻؕÖȐГΌ܆Ƚ Վ ƮԼ ⌜i|ƿî9/н ˦ӽ߿iԼ̸ êŚيϥܘϥj`2J0όfRϣ8xgÏɓ ݐⷜǓȰ ¼d~ ܔȘ}Վ҅ 􋔭 }ؐؤ̝⑹r0% ۊފ떁 ˌʚțꓟǝ ٬󩒛 ܍ϩҏW0,vm΢ط›'v&XJJQFOc.hAr^PINM[aaSM|QIY$i,0LQIY$ NM>ohgO+s >XvU: v x/q %iHc܇ŠףZƧڱ&v9N׎ Ǟ8̪1#^ ڏfĎǚȗ ݇*쿰魳ܺȯsւC 󶰱ϋӅ럱–ůڏĊžՕ隌ߨΥ֊,ǰ㱳ܳDZǮȰ땯߽𕏗揟հߕ Ξψҭ ՘鐲wͶc/h߳ _q¦߳|دFɊ͓߰ٱöRNT<ԭ]dW";RN"iZ"CnR;u?co:8;n CEo.B9uv֔:΋ńմ 콣{~᭛ǖMV Œ-L{]𾥡1b眛벓0ڐሖ Дpmכּѓⓞ夓 ğDŽ⼓ Ғ؆ԑ下َӌ王e™ƕ   췡 ꕏy֐ ۉٍ٠ Ē86֌𝓇 ɋ-tLJq+W! {l❔؍fx ؝Kw^ˬšڒr.p Н 緱 ]֑ Ga Ĺ˜+v鋰̻th~‰"吩茬銴˝ې˗⥪q~{ Ĭӈ ݶї/Œ̺ ػ܎碹ЅևƦܡ Au枿ݝÂ_jeЍƵ ęNZo ή~x纃ӮяђeR{ݐU.Jh?ܹ  י,MݭNE umYC@; 즈ؼ uۙj╧ݐ҉™܋ MR]Ɇ ȅ ~м҃定縺oeϕؚ ޱ ϫӢ‹ƃ}^ 閠 Ϫrp"X BIڒ臯ۊNs"9J畓޿rĹ ґƅ0`Ŵ 岜̾̕ޘк¢aoř¶ ɻиݸޏ ᬏݏR̗ѵ׾︼ޒޒ׸ĺ 櫔ℑȠ෼дֺۊɗ Ȧ μ𓟭쑜Ոŋ黻ï6 䓍ǼȂ빸ݚ㌢ Ȥ90ߖړôxv K~, 튷勴ǻ4͖5b )ߑ𲖪 :4 ͋簈 pț渲ΐߏǦݠԚзڴ ርNջ Ë vטϼߒ⧵ϮÑ ӏ➘˥䘏ٴ.; 휘Εƍ햴v ؅АעАH5C<@띺ݏ37 ѐ ߬ơּA8 r-_ն̎Ⴛ xЊ [ Ȣ\ژѽޑÕ *͔ʾ´ ý磜 ؼ༿ՊĿ̊ڽϔ ?БȞɽ Nj¿ 膲ٷё铟뽔۹ м铯ǪҞ¹ )ꇛވH<˽񪙖Ϣe “H._&b ì&lr3݋(h ” j3J/ -= erώ˼ SqzՂ%Κ8죞 é̊Гɨَ  Е ЋՌ㓐̈́  ضp[:AǕș|Δ Ü•ώŠ + cztJۋڧïŮh/p 07 ;Pݜî߰eÔ*ƪ֎ޭ都ljѭ͕߻ 𰈥笱 ߇ݥ ȇ쵲ǀ Ȭ ޭĚᔔͯŐ쵳 ۮ ܜǨףɯ۽,NʰųrwʑםU\ ޔבҒ_6҈Z#Fb ZDёfы鐱C?ߋ a){ 叺ͨ j`| Ҟ 꽈| Ƈ؆ֆ ‡ً `t Ǜc3O7握y֋'怫wҙp`ܒM`%N0{Ѹe.ιӐ"Ɉčو颀պôd4I챀߼a 䫓Ĩπ쾼ݸfꕹ!rjỻÇ̑ nyԨrqȕ؆ Օٺؓۺɍƒ鋶ӻѡӼ Ѻڹ dqûѺ v>]*Oƻ{ؽʼ z^ 麢l֓Σ䤛ÊʙɒXE͸Z AJԻd W䤯ۮԂ? β䍜 Ѕ܁z / ӏ Κ 蹛ݫݮf`޻ ҇ ڈև툤 α ꞉ Çɕ̍jșl~ۜ}-6;aL烎`c֔=ތط mv B ̃ڛ# FZߧޱ*Ųխ)H ¥ E? s칲䷴Q͉ ޯщ𵲳ʆ՚ֵ̝ŋu瘭؈ď`MO͗݉͝ ɞ紈Ͱԭڼ ដۈ躭ծ̮ܱ߱昍 Śİ Ɏ酊mqb ٳòajᴴs؊W|%S(Bش K 2ʠwj!c'D- jtΎՐ ~Ì石˨Ϗ 򶆤“䣤鏳馁۝]ߋ  ߈f㬅։ Ƶӎחqbw|`ׇ쫄Ўцƛ Аҵ +W3C?6׷⪉"[ 9ӓ۾ż摒"Ɋƺi¼ߘ z?( iﮉacŇהċ ȳdrRІ䲿攠 󵒓Ԍ 񷈰ਜ Ήԗ 縛΍ Ƌގ țĪ ߄aǍ 揝لư ̋ q~®ȂT]eny&'O e猧Ժ ځϘi s ^|9J䞰TM A!죇/VJ뾝 ko変֊` 䙔lj߈΋ 霢 葔 ԋ튤 ÓǏ aZ 箪癩 ټЋ Ù~Œ!ڻ~-k Ԧ ބ Ԧ  rE.*U! N6 ])  ڑv˺̹3<mA; Ң ۫Ѐ{wʾƾu]y҈ ĊZ ޏ^hx b Ơ ̷ɒͿ ýI߈ Ëŷ܀aü͠ 㶏mŽʘfʁ 8+ƫva ʏ ÃʘƟҏ +4VcsT ×x h\  Y?:@ ڄҊ(d۝꿊󡒊}+j ۗ܌ ⓒ㤂Sşpƈ ҉ ܙx~wI:/5s𑙌Ύ͑ĕ֊ߚ ֛ dv v }>7{̍ ՓΈu9v6W!8 ֦ < ;jv4GЌ߰ޏs࿨H2꼿 uݵ噔 륕Ŋ 밂OǞxՁ  ɏw҉dqI/(?C9o崙хߌw vg !7> ĺŲиƆ ϼϼs}5OǏй ӵ쎴ž|{C龚ECzڎ @+,e쐪 o^e mm~@ yݐ҉ܕ$׺^z$GXp푫܍ɕ]gqi с!ߚݍ}}ǿ轄ʕ͸͎ 効þwwӳ6Lat η귡׏؏  ɲߒz1'&t :Ӎⳮ j#vL5Ԋ^ɈÆ zPwNz~ dx|zӄ҉χюwY(#Gޟ݋産Ć֌촡 ݢ#щŏ׫ep ƪ ﭹ3Po ĩ戲ꏮ ȧҐ $(21^1#TY% 򆅣퇱ґ߉՗nѦºȂ a𾑺 x*gگ⾿Ɓ|ξߊԏ Ak`[ ǂe_}뎪˚ӆ)żײ74*mڄωؼÔwŇȈ᧢ϐxʾ 飴}r¹Ԝiߍ})i ኬ ؟ǾǏ ĘĢ5590,8:-ejieDFXa{v u{9=^TƥVsъ߫^7T۳{>6ю܍݈g\ˤ]QCpﷀncr{^߫~㝭(o;2J⫦Œʒ%܎ːηޑ Ň і]gڹ %lsЍ(mβٗw೒ ¬ Ӎ Ջ+6vilkswU)()"L[t 5/0( n'0/9't ߖ접%*ŗԐ ٞs a Ӵ6:݉ ʜ׮ ֭U ΍ vސԐk]y߸ċa鮝:5J̒䛒ȈҖﳱ4꺯hkoliyș݊叨 ޖÅ%ʯ򶲱㱳ԡ֌׌Ȱ²ԭ|)iכȽ˶ Δ̔uկڈĦ 㺕J] 'M.[%-'rӸϏ pCۍ菦 ⷄȗ򿣧௙ޤ ㈏Әb"Ǘ͏ڊdzً Ic 쪀 `kj̒Ϲ`94D ៉ ̍ڜŢؔ ޢe `&`Q ֐쟊p̤^/ ēԆӓĊᢐdwփڕΈ ջЙҙ8 ҅ @JW͕䪔m,{娫 ළնҏ쒾ʰּ̉贗 xѲ)<箎cûϋ˻` `䲆盀ΫͿ ݢļØö/M巯Ժ{׳Ī܉ԏ޺ĭ½缼!ḽԋ|PҹƻɼѠ Աۺٽ旬Ǽ^ĻX1պɚ뼼޻Ӑǻ 1`|Ѻ뤆  ݌(]&%mq$S U溝cfI E|ֺᯔɡ bψšx 9 UtŠȎ ^t󵌽@ |܆tvvwۏkrռI8Ŗߗ|Ț㾉܋ڪȕ֋؉ه ]mj^`H߉ǐʊᶛߎ [0ߍ渍/iĚ؇ ޠ߈}63u Y}$#ACقՊ%717+^Tӄ_τ䜐\C8'{ܔ ᖓ貴Ճ:瀩}a^aZW{Ų衅 qdlȡⴛ(yϏ2kﶴ(ŮLV~SLdɝԦ׳ 6Я򸴳䳵ֱivzg}. ԱɲųĎѰ ˵gt˴ 倯 ڄϑKٲA5ѲԱ޵ɒٲ ۢŜձ ׅ˲ϔ? KCE T 㰚(<Ǝ:ޘ獧앶檇Ч&q-ƚǗĦ܈̔$0ᛘТߓܦK3߇Ɖċۋ.ī\Zͅ nˍxܕǚ 'ً++1 Ž ꣱dٌ֍|19靱؀̜ߒĢ ΜT #eyvao鴔 nԑ췓៫˓ ꗌ$ǣ7Cѐ嗳ÿò|…`ch{vqޣtۆ׸d񐌸Ň͌ՆS3[ᑻՋ犸I>|룣ڱʼmi|smmxzu~unY^xIrxƺ 䋵Ρ ӏه5 }” ɾҌ ֻj쌚 b˟붜ܖꫭ ;.妍ؐVL p fdh|u Ԍܤ 睫ݪ ؤƠJKϑr+ Ꮶ `׉ҧ⨊u¤욘鋼ؚ΄֡;,鉾'7³]`s{zԫ}fهƵrĆtC՞ıvr͝Ւ _f Ş ґ 붮괐Ѹ ! ic` .8 ڼߋҌ F.ʋԉ\0#&NÚ]0HBa8Yُ{Zۨ뗪ڙ œžn$ʹʹ:7 ľʞ VѼk]c`bixђޅϭ'҇b抙׳˘ίPUs땤'>QyxѢynguɑ9MeyuՑ[s٨H%ɓ`ֹƉ؋྿ÿ¿¼Ս纴ʌ ¿Ӆ퉾¬ȧ •ֽ򸍡 翸ܐɲܑkC  }E7ɌZrr@Ko5t<舿ݱ Ǩ֧̚ (b*k ۍߦe{ S}|Ⱦln ň7Ȁሽᕙ?*ڃӒǖuƞоe$(|۽caypJ΅}xLij߹m ˌ ᐲ 眎œ ꣒ ѭ 翯ue̗ ő&X eّ漴C8ݔ~ 󴈕Tt!g| "h gҊݥl﵄ñն ̣ؓǢ =AَG3Įi ҕty ܐ6؊L=:qӲpʏpDi}зuqz圭ێFЪ^lͰWs׻⬞xcWdXz ҅试 ׏ʚ춛Ɣ— ƑyH¨eԚ 絅 A菻`%,jfݎ؊<߇WßΒڎ-d7T,j ̐ioj ꫊x↳I01?ɷk}c ہb]uʦ~~|sډ”ӔO?Ҿ紀ʈȸ˖W:  ҈럎  떾Ɏޟ 侒ȴՍS㘔Պcf ʜ‘ᑔĞۆkמ ] ڈ 3.=7" Wh \ƒ䝺ЕÏ"╖~ ﵥ+ठ(4ҽۭ纳Ɩ ڻvv N0?ߋ`mygxvo/"x߇̽ˎ͇KٷXe馋pm埊 ۑ ėבޗ͉ᥤ],Վ֔ܳ랏Ô (\ I 6㸓쎓AÇ͜ @R(5eڌ؄!Xٓȹ rejƚ׍袠|/?ߐVֺZTqLM︒⮨⹓ɶ}~nn}͐ѻas ՑΌ힍݋Ψ ÊU^0i⡛㪠ڤ㵕~]Džk Yq[ `%݈ 䤒حl )Tތ8. ۇǤ ڡ߲ːΙ8=Ǫ̂ˍˮ˥|"&Dƃ雯׃ĸҺ} j  ٜηР́ 袇͈֑ Ց^R9Zv,Ӻ򴉟֌❜֒䘐 ؏ Y,I2ZAt{͟ iԳܮ ܎)âݦ[8H̽ʸȞ뒚 gܙf~ҍԉΪO9~c˖㳇Ý$sEѹӆ俙 Ȓ pR  ، 䊻Ǵߋݓ˝ LCCΓ ވސԾȐˈȏь -Ow?;Xq %枖  (蒺bS܋\݉V1 䐯ΡœŠ ꪝ ҄w̍tCݽӏⱈR6lPQ㌶߇t4Ibwх䴒 흚ʸ ŶoŷqR^tߎȟʚ â  »ލ~E=⢃ ƣŊ R 鏝Z'"Qq5*сَ ֟΢Xw)0vE7>亽r`v۾Ҽؖ—ȔΡż ֽehə񡢉⡼ܷܠɍ秅#i4s-=) mQ󐌏aÔ'i40)+.4>Rs楦䡇ӑ棐⺽ ɅϹ 2κa`dz_Q̗κϊٸ缾ۻvɷ֖n ߍІ՝齽֠@=ʾ譳ğ存лfi޻ЫG Arv ҏY/H"*=5C ȏߚ&pޜ(Eao,wjnx̋mrﺌڏ|Է~c絕Ȋʫ-ᲆ6; 'RIčΗ(G'woS;)).BFWJsϚx񩕎"㍋$Sۿ׻jfؽy쁱Ȥ ap`iߑے  ˗ȗ h4MՊݶۮߜۈѓ  )n- څ젝 l$). 鷲Ր ص ߐȼe'75w;9ػҒegsԾË ^fƾpǥsi}iiǏк,Ʌ8:wp\ `\t̊m)!1㮱ԿwNG9#,DZH¸ą⨅߼ψԜӬ LwԒΒWҬފԼ˚ ֣㼿à٠ɊivȾޒČđ݉ ߙX k'P̼ޕѪ؈˾݇械ꊧ t׼e߱  |B2Ѷä状sJb ٻg(lCk}C0 풙֔ᯛﱵT_Iƛy͠xȣ@}蜄֚r,}pi\V{wş%&MГĐHQ5Dk|הߛ֌ݶ铭Ϫ܃b pկ켟fjܔL}𴖰1 ֵ䱊נΌ‹܊Ș 쮩wԧ M݁ӂݱ~ݨ}_zz  ™ׅ覆 F[=RChw۴v.嚶Gy 顖Ģ%ĸi`c<9 ໰ΎNjüv j ى gzfѮٌއԋŎ"<5Ẃ~y{<ۆuozO2D "?BԐ Ð ک ̲Ϯ ƌ?[챓VUᰱ٥qo— ӯӭ Ȫf⽚ ǍƔ ̐ މՎ㖯Ǝ}dxϲʳꚋὢדͭȅギƮ 觇# ] ⮟ u;vmǚ ̏ -yÃ+u y}͐ƟӬҋ~vطLpǏ ⋖żҟ~.LᆽytV ēᶔ+䕃ɧ]UF))8QCm訅ӡԛY|䕗 9H넩츐eԈ•͈Ɍ ܗ ֪biۋŖu)Vu ؤ ֕ ݱɑ橑u'mUM# Wl ʢGs*J[?9q7*+"5;jlѺvɧS  ฟȡԻ ZʻddΛsY` ẾѺ ͏SEt|{9 Ō؍+ߕĿdhDP5#$.59Y}eͦƽȋո|g ɋӺŽ\yˊغg Ϫ frٺӑ扤w3Kόһҗ]m ‘ ȼ뽽 ̜z4dY!>仢 㓺ј&]A 4Վ Ń ̜)j:ٳ5YO-"&#,JNUI(3Urh᫋J ȋڞ c!㍀ʾꕱʇ|Ԍܟgot%& ֍%᭙˦szZN0),-,_t ӑΚ˟窈ׅes ÕՓ Ќ anފì~݊\uܛY1ž𥍛̍ ܾ!Ur鸠⯝ɒ-|9k} nĽ'.Vf,/9=XɦxqL3- DΘd ꊶӖxÂI钩ыݒÙ乆Vf[3eţܓЏ%ֆԍ˫[@-5(+2Lgx†sٟɱy޼ݎΖ …ʕ ݍ ԓÖ̙̈ͺԙۈŪ՗Ԕ\"ԍhҙA/ z~ 30ɝ ȱ&JUZ g8n۰0(ɋĄ`Ȃ՚id9a0-0Z鵂-&&zʜҭ Ҋ Ś{Ȑ h$؈Fs{F0=܉濕Ƙrz[ -,3;+Mc|{廓ɦdbu  Ԓʄևӡ٥v玲ʕ޹̄ЉԠ}*69‘؈ċD.폤Ε}~d]~ ҔOnڒ x]:0ж:A)㖊߈8& ㋶eȢ¢ 7MۺxI$!\}ҳ Ծx麫 g#ρ{Ӛ ⟐y|ҁ:/Gր߫䒽ҵ}`R2'?L_ŗՁேyņ}ų¼ǔ̺ ⸵] Ғk嚗˙j˒̼ 涳 Ԍޛ jv)jևxه復@2豘鏲 𥓡 ϓևo'b jΏ͊| s'ЫR  ϊLҏ׉ǟ 栖۶oM6u}kל"!9n൜3a椖Њ/WpGv."5~߂ߴ Uཊ 啘ҶtPA3*02L[pmױ*p䦊ĨY}̝٬a~͍ɏ܉ӫkzغք缪܏ގ􇛕։ċ%I6IØ▋擑̪  Үvؚb ڍCFWؘh76鐚 쏾' ٠쿽Ґq&t,NI&9חoP mt膹Æ":'+3hIerK+4Zࢷ D׆˺ԹP9''.4%l羔7BɚpZaqҸŖ˟g ΏⓎaž͏ ڈؙ\ўї͓ωJ_g6NÔ ᓘ̌igoЎ ґd ˜ ¿ ~㿇  ҈ \ޏȋGۯ 钠͜v5;6+8Rțφ ^ ʂ݋ XFD-0=OekayTݪݒ⑭UjnMA*));@CjD{ΑꩠbعdW𺛒ǐ 蚦r֨`ݣ[}Ʈ ⪘ ږΊO߄FH8Kэݔߌlꙣʑܧ[pl4ی L&\A  﫧}J  뭝67 m.i(9F܋ ɏa {Y"ي鯏10ŠY;SP ֍ +͔Ö{V@ +EWlDj_ԅxm̺hs^U\װͬ }y{aZ vx5&Ά׶Վçȕ3{ΠΓΈlp~dl})cʧ  䁜ƠՋ׈ǫϠ: z)˚ gWUCrrӅԌf%'-ڥ򴑜ܕ f)c ]qͽƽK Wھ^ kzƽnܻ Ă욗Ľۉǘ'μȇ­,i}M+ڝߋ޽T8:;6.+.3Ae[Yỿ%ζþ׶mnz@A(́ܥljߨۡ@ʴdefdԼsܕ ߺ*;ܼܺ ᗞһa܆ԺiyƎJCs߯ ܎ڴ܇˻ηؼz ¹` q {6M BҊīQny@fn-7ꟓ^߇ }蚎 ׮+PÃҞap젔 ‹ Гߩȼ߬p[E)/0:>Ln ֛sԔϴټ}ԩ޶ĊՔތ݌㑖ӥύȗˏך|.8ӳՎˁףʈԺ}誉썟ѵ x&:`щĽ“HV ̄ÌLlZ ܉ s?ILՃ ܾпɔ`ߝȿȱԎȟ[Tuޱ 򖉤›L+"'38DTo ;i~ڵͳ׺~{VlLÒ·͌Ɍϱվþɔѩߕ㗸;zי ِۆ繭۔ هg3mƄХ߿ڏגדיԿƋ.ᒢ޶𧊕Å̧ʸ |5:}đ﹝̕z֒몄ʿՇ` na/yꅿO(C֒ ߿  s몁ʎߎZ)xy~ν̩jA.-,,/8]r-TҽxׯaffělގҴȗsʉُ Ș@ $/ɜ Ϣ ԙV8r ŌΟ&u˔yּ GF-(l9횟 ̢󲴷 8LЧ*tnχ溌 蒎֭^͙ݙǰ[*]ڄj᪒ ݎ鹬hA- $3?Ur~4Pr`pf_[T׬}Saqnjۮӕ ܮ޷܃% qzIèޏ\+[꨷ ڏ븎䷲ ׋Ȩ߬{~đ tPO ̪ v%ƇĐ벟 9(KA |} ҉ՔȒ%C1ᨛ Ͽވʳ[D71*,-Ndy u|&Ýބm}Ց攑ѡӜ ÆؚsE 㙈Ћ ڍ˄ƫ ԾՑ +/X2s֎ƻ™ꕎ அ!DH aՕ ҈𾼼혲Uͻ ĻẸ _n~ꖞ緍̻DF{f ݁ف以 ތ쓣ȱ}gRAbﰘ{nrف¹Ό¿Ď @ dٴ#ũykwūnZY~{92^鱫֗񧋝YЉt0c ᪹ 住 ڌw$ؖ Р o ݍëw6,$˜5Ѝܲw9 'QCŠѕ 짊ŇΎ'엤t׎ݙŏA+i^ˌ ŖsRG:))(5G_s ᓉ̔타ŔÈΐ  ϔV0:?D򋈀,mXE%{rڷurt)9f܊x֐nT71>ٸٌ絙 ǃ #{{а ݇ݐ&>r)4L}݉y\퉺v֕ ꒻ ۈO" HӉijzqQג ׺ڊ ȿƍп|ڋۮZ8o`쑋 Խ^L=)/Rk ᱉Żɹ]F̕؊ǿо ٍkwI `{! #t ʔ/I%Ŵ]Xr½zma]bgxmUjm Ҍh匾Դ웑 ckǥֶ˿ bbڞ oݿCrǿ 9;zސ11𺄽Ŝu2頯ܙ  ۉ[:i 98!&15:_h ׷ݏʍ؍v{'6왂ݕ 왧 ϦfR8!#!-1:\ywh bٜ Ըۇ̑datһYdҎ)&n{{²z韑lɰؼӨ҉ ӽ~%¡Ɇ `qޙ龢럛 ɇ܅[& \_̇縁ЄԆ  ׂ䚊 ڎ ى^+ C ޫ~ ᛂU:0)$''54-Dw~} Cp̃ ֝$K"|wօȩխ 䖌׿d>6/$!#0Oev핾kVÚgb àٞ F溪ÈNٹHB|~vlعpo{tɉ衜ܘ R]Ǜ٘̎զߨᜌ‡å χݵŒAؗiI@(8/2·؝þۇ qX7Q҈ 䲉ڋM# yqC鸞MUՂ`P?<8$+28>M@ ߳ պĿӌ ͻ 4 ckǾZ{ҽtxk`aiоœګƟ¥˪'P QE*~ϓáÖ Ƭ奂ݙ|k뉻ԔɔhoHJK͌~.z4(5*ƥە̷|eB41-')049Pk | +K銲쉮д荒υ 膢 ̥oP0,)*/2Os ͸Լ ٪ܕ˒z̀0\%OrϖX[l{Нyלׂ}tW>^ۺ⃣RC8ðv܊DZݕ򴎖☖яʒ ލޗ!f*^`IF ΐ8ҙߘ ϟJKߩšlw0"B7cȕ&ڸ÷~sYM5# 2GTW޺괳 ȟoQwͯ iꡘ Ěň ѯ?ˡ𻑊否ƯձȱαҴ±~tYD3 .>Te{Ȕ Ѽzͤċ̰݊۬ɀog&#hܽunAQĨNc}ӲinөXJMP\4Q@$ƪǝ祐($,󽨌ԋȪ͒ ʩ* 젱s Sܞߖʱżǘ5WKK̜ה ؐMU 8GH $–VL:3*..0/6Jþ˅zwepƆI囋P υФ Ŋ˦s£zߠےA2HP-:rs囔J VɚдȌҖ໷𽈓5M2|7ތ؏ڝӝztM`ہŊ Uf? H?2CmC쳳dM:+ 3G_ݯ}NJ¸ϝה״ >Eysxգ㭦ێ ﶳ ̃⾆t⣦DZȰĴӛƠrqXO4' (5Pdwrֳ 怼̇~Ù*Iӎ9((*#,3S|¥͋߄ϗ岲im ﬚}ݢc[i~¾Ľ5,4bE$.A,LoiQϵۡQ }RʇנӣŠi𽈔KGw$ tyr‡ô" !M2.W ضnU:6/-1=?`tι݈׈5˫|ź㌳2Bz}⽈ȵ!؇|۽b=3,*"Cn]{쬈pJ@ᆔ/ ىЭnmuL0+6tƉߨTGd ے|Ŏtpa蹒qs%'sSoGz+1q UАn Fήjٖ ˖垕sefaЃ ߫ ܍g ?}3 ԕ孖_Ǖ~۪ڔᒼ I텼њ鯟y+Lk41i;$µɽp>H3.61.+1?IRvݏׇ6¬񘲏ٺstjgW:*#$'8+D &uULA2+//15M\rڍ:݉܈ӡnm\@ A^P92$(,+?gi(iu펬αی ☝ۆrS6.<-')6AXsrgyھӜ ېĐ%H3DXą懀~|Ќ͂Ư"Աґ҈RlԽz^W2U[۩k56匜ս–Ȉ΍ڤxLJɋߖ@dBƛCny  L ډ ︱ą~hͶ=# )07CR[bfke:0*5h ̽ɬý"烈ϭuf><4/'.43*Utݷ ©;ۇ%2붂‚9'tšsE<? )w֍i»똆ָĂŻƍ㡰 ǽ轾ĻһǾ%ͯ_;*  KZԣ_b~Zθsۚ߳],բ{𭉊^9D꼼ň ոˠ!¾ ꐍԿ\YQQl`I*_𹽼Urz08•ɽ EFȕ󖥳Ljҏ&_W'}֔ LҭĊז ᗑוO<5' #'=^$몓鰒ت&ծu]R* #/2?JTvz絛 du勭>~܍#e:),X}շķӈޛ’ฅ݋ ܳpYC'$!(18Kzńӓdef[8J܉G|ōؤљnKĬw\@8U|e-y{ۍ2\+ ׌:  LJٓ،ߖ `Wތ}혇Ցڶۡު ALݝڛݴ |{phε !: y ꃟV:PA2*/.13N=Rw߭˼)ԟ3syq7|罇ўS("?}w}߱‚ьߖ܈㠥؊ ͯí]?3, "1MXOqlєTIZ/樀.ɺמ}}߆>ɋ ʸ Ґ񗇽϶˝ӖzOvk{bQU:=ո ꡔ ߊ?m ͇羒 ƍ؈wM>TAo 1݋w̬sĈ 5Bݳޞ篔ē᲌ UӉi ~Κbgۋ ԭtkI<66.-27;Ullh)~rd =GԋJ὇$ $܄ȇ׆\ԊHފ֑Տ HǮid0--96bc%{wk6:ǓȌ|9]ަacb^ό ѐ  xD͠ǵWv_ṉ_ˇ Լ9~ו z_ Ϯۣ яu-3P Єń Rߕu]톜Ը ԋ 㶼  \֏*uό 𑐨򭢭(ඝzgRF:8.,,?=).])q~qCtDᵗҊvZ?tˀцҋ jȞɊZ|Q끽穩 v[ҟHfL!'+&-PZj˫$xJ*I۟ÚՙŖ ,DD/Ӿ얛ۘʒ۷ԗ» ɡ~ؕѥTjϼ?!W ^͐ Y롏sY2ƣ̡ Ôʞ Ԉ؏擶5T牨<燼 Z" ʢkߙ빽9kdg^٬|ăFaUH<+,6*.4DQ}i1捴{ppl핃ޕl<竫 υ/AӅ*ەྎщ҃Wᇻ͡ɐ~ ʟҿ ֒٦ꖀ_*-@6'0'+5bt-Aæ.!&0LļՖѐftڇ φż˻ وѨvweڸfO{МljywA/~d|_ d)s 閉Mݣϕ I̅⦆Λ kj܈ ぢX2ʌe̠ۖՓۊֈשg̭|_G4.)' "*/1MdxZ !ꇸE훐 ཌྷ堃~,̈ܜqǐѣ٤*ßvh<91+/4Qknz>0b؊E*=jf|ă 呜̍ɤפO_宽ܚϐJ n-‡b%s՗  Ć 4ӃᐧǾ풟 Ȩ܋ ļiWB-$.5 9Uk󯑿[܎}󎹶Ĝzb5⤝,چČೋkk՞ Ť ١҉GɫmQ7*)/;*AfZى#Y}߆ zU`S0Y쏷َNJϽƮb^raȗ )sǎ֕وBAhS2 羈ԗ򼰮 吱Ÿ ʌ{y h퓚E*x ߝç ֐ÍоwN<3.'H'5*8K_p&DՊ¡^ȀlNi{Q$܌!㑒ّⳓ7⑰ 񫕌=ʜrTK*@_eC;KcuIP~w}u~(>׃CB Éԝ  \NkX ē؇(kַNJ"c!ee ŴՔ΄'n\IЖ𽛐՗籃ʹ X ˊCɆȆܹͰI ܓЖܒ؋ο_tčɤ堫uġ | `FBۨ ﻊē ėܹ é|.2& "*HUTTOLP4$/?C@??DIG>?@9#!"'+'@șϑQYg έ(l } 攢 ʓʥņنě! 廚ɻ䳈痋A[ՎϹڢ?ˎƟ~௬}_یݼЎo鿺褥  O9釁 ۴ˊœ޿*ɋʯuN<,%#E1k6{bQdUxz緒j ᵑkȉʝփ㠜[$̋̾ ՚y˓b6͝nпٯqD귳{zz1;ר֮gc߄\SicpsrWKLMOA567/  >C0'-DHBBA@9*&,=>>EWYXWagpԤʯ؍p\ Յ݌)jg ggՇ듞Ȉ׊ߌrU.j̥ߖŜ'Ǹ鹎֢ֈq]rʛ方 cwcЉωʯz s֓ť렟ϗ䑽 ŝxȤoV<848 3;>ds)КǃΦn:VPHɋ⒒Չ֋h{ɥܮٷ~ޓ4ˊË˹ 膭b"ĉyznqiܶuRi{͋>9ǦnsґWS?Vjkl`^mkma ?#2@6!7A>&%(2"(!(623+'(*,-146>?>Cnnmo%ptvwdRv}j fݒ ޙh0y~7ʏⅦ򶓒ȓÆ), g׊ߊ ᨄYڛoc〘w҉| ѿǖ ՚᠍ަ ƞ߮r| ̿ӢĞ`q.ȼzL?3+$0,ȿŮs8Kj4UЩٖ֌׶ᕹ/™̍Ⱦ۽̐ͤп Ӆ ȼ\y۱gTNJsyHȔT;?@ED1%8@>+$$*+,00/./!!6/./3*45+0221,&#/_7V:<2FXTQm{yzbOQPcusqɓ ϿȶZᏙRǿ 蒖"ͿϾ滿ӟٍώw 7MloA7 ʓ v [ϓoԿȏȋдzِpϛcͺ~YL>.4? zthAWG| ؞ۉՊʆؽ^ ь ݠߏiRx?Jir0;@ABH:!=GEAM7=IZ^XXYT42;FvHcУlux^ł鐹۝ ЉH QDԊ ̕翣x`su  ՋЃ[鳓8{֋ 6_žϽ{a̾¾$ϻ 'Ni]3Yӌɋ팴݋z۔뮽ζ ؋ڽỿ羿ɚ ܂ ߎ ếdP=t?uDl֭ɑې "ڵƽЊȧɧzπ2P `zԿ쾾 Ғg3zX ֑ЕBωyZڅ>T}Ϛ Ơ  ⿺h뺦ڝa2ڍ ׏ &N nXM&{=\Њʍ 댂ԉЕАcz 罡ᙟ ڊՀvaǺQZ!c՟뵍Žֈ"{4 ͖֓ÔY' =ϐҌʚ݊~5Jlٍ꣫ԍǶ Ƨʎ ϳ ͉ۋ |Ոn z˺ņƟ띉Z řȤ v? H^ᜟȅt|!Ŋ ֭ڏ Ȋ 抙֖$⡣Ջ'hJU.;˜a;}ɷޝ۱ؕ3&ԏԸ^P 㾯 "<oЧUDwנɁT poȒ~%fh욥*k߈ 銜ُӄmˢGuyUM{  !ȝ 檏 ǂص煋֋G%1K#^ғٮkg܊ÌVÐ ֎ 4Z䞇 ̐ ̎ل߆v %f$m]ׁ 2ȑ*\qⳭ펢ʱ΍K ˩V8ً͠Э~ǡ5F㤝֏ۡl i #˛ ڗތž։홽Мh܈l{ItkFrۏ fÕ覘Ќ^'s A" 4֛ Ɓ݉ᔑ юӇ{ku m񔔀cڌr 8͇黒=v˙ˢ qjΣ ™˜oڅD˔ȋ#ݍߌМ:̞ftmV Јy`9 ũەۇ ؖk ЌԑSo!2 Ύ՟ ۈʤ䏎ڰvăωB5y A> yE  荰ב𯈿 وۆϏs+L7و ӑ յǖ >`ŃÔ񯂣 | !pa ݼŊ~ˉĩڀ-l҉h]э԰ьϚۍю: vc be߄ή3 ߔ ޖα쑕ڣ g -X } ~דۖˇ҃dܙȃ㲫-F6ۯ(8(B 63zPᏗӌwIT ћ )\⡂Ţq_bYuꪊԔœʛ 迡ًΗ価ʢ q҉萖GKԥݗګ {Z䖦/L ݜse^@ž 䢸gҢ ⴲÏҜΣ݆󠴔ڊ=8 ږ ܉̕ 欔 ǑǻȻ×ˠb#Uo J.ûܹݴh^Ï؇ƕA> [ک Ǩi̘ׯ̧cުɖԉϩۦޅЉt(򺃳t˧،ˊ ͙`+ 謤ێy}A-̥ߩӻw]ˎ އđ丆ΤӍԔΨb6c's 򄇣⎦⟨ۣlHH-ic~ʀ 哙 􋇰ۆ0Y͵Ppŏ޿ 𿟆ԭ w݉ۆ 뫩{׊ ҢnޓǛ𢔣d3NDեҏ鋮Ɲ ʉ 3Cʍčaߤ::ȖԿ¿⻿տʾڿ ٬ػ ǭߋٟ ף鸅Ιيք؉]2J 埙Q ͡˒ ‹Ύ ļ z$ǔoiE3Eدy--g;ڻWH ۺȳӿϥ+Nn>*ʣ¾M ҅ŋ뛀o+  I)͘ꉿщ֋˜ԑȱߎa [\Ա ǎǓ ҏ̞ 瘎Τo xơrhȍ`jK' ѥ߁̖ސтԂoOz缇Ĉޤ9= ꎫ呚 g ꕡ¾ [)P.6^vɺ Z.=AfV竏џ܊ʗĐ H55Rǥ;┘V=Ɣn( ղ-υĹ꒑ސԊŐ ۄۚվ 𖗟ܲʕ̕ ҙ¿ԙɏ̟ᱣؤ3Ǟǜڄ1ᷤk}Mÿÿþÿ۵}ä׀ õ禢?‰Гm65䵘щͳڃ` tݨøDy7!6qݟ+WN,.V=ݿߥŤΣ﯐߉Ԓ CE}{1՛ؑώoS ij5-򼊵ݫ״"ОЎڵڻК浔;*ت ֏{Ɍӫ ɧۜՑ R ͓v.\ߘ 4 Ʀ_] ފᐿˑ݌HL6 Ȋ6;ُ Κ~!K!TᙑّL!14`zqp[7Si@Z b%>Ѱϥ ʈ&VyA<6¦ɗꆴȫՊ 菲᳍ ǎ²Ҵ'q،֞ ґRWݵ33 τ2Ͳܰ˱찵 ʱݵڋچe蠆Л~!  鿪Ɲ~μɣ%@Tyˉ W{︴ދٍ5,B߻PŨхﶲɳBQ/+./14$%8SY8ɱȰg װ" Ӓž߈Ύ !kwoa Γ锶҆ƊId!뭰ڡŐܴÕaxT?Š⬐ ۜWu60 ȚˊݏR˒Ӆ㐱͋՗ ߧçݎS' j鞷ۋa0MȔßƭŎ犞opdS䎝ⶍ*2Ѭ њ~VXhn  "¹z ڟ֋߈ x[T _\ʎ %i4 ꇫⴑď ֺֺcq~ի}꒟׺ ť Vݯ .0n濼txْغͻĻВͻĸ߽ Ō ޏ#zq->'`mк輽֐,O arpf\cgc ٹ鼼֏ ߢ` پۢ`䴗ړ ֶѺꤓ ~w̒ˍ &6!ƺ_𸎲lAdҧᵠ؍僐㒧 Ė&xŌ^Ƒҋ˙ _-uf54wµ隔 dPqa𷱔 Ǝ ˢ啺ւ㼈O͔j-)1LG8b|K<_7kk{XG͒ʌሎ਋󇎔ˌ ߄ے֘Ǩջàϟ ƞГ܉񙙷𺡐пﭕ Ϗӊƾbdݿ u| ꐂЊhu !RsȺ&sЛP\'rҴ¶ԍƴ'Yⴎ "νΜ4{بړiWxъ34Ɣð „iXG ܚ ԋ˚Î ˱⽈Čʋُ2Őҷ ߲葜͊ϑrw ֖ꑣҊ䦅ݧՊۼpyǢq# gz߉হim ƢK Ԥõ ܓ-'֊ؐǻ }ì 5φŗW ܏_;d6؈CPCP˅ȫUD (ݚ~饲܉ÁЧƣ綴ʋ箳 ʌگɆ֎~;} ӟ丝ò֌ذʓɤޱܵcȰ  Я㳵yDzЇֲ ꘒʜ թaln ɲ-ؙă֭Ӎ깴مӶfz ү !'܏xh © ϓô+憎x߮‘断7vɟdm粴 ᫢Ϲ% ٚƿZUy `+$qc @꘲~䮓܇ ɖΉv)gҐ䞙e ǂۈۿ¿ly 馍卵 ͋ּ ֏cbeڀb먐_ 8VԈ G 콿 *2x ;g蓅œ߶ 㞄ЛTFǏ.Şޭ bؔǼ䘑ֺ}o^ݻѬ)SՎϡȕ۽ӘϷչv ؍ Ε隯܈uoϠ͏޸ۺ nj˺ ר ͽƻ דʜ}ϼ j땣 ȬވF݋λк ɴ} ƷkvЏĕ ] Ȓ յӅ1鼽ɉü Oʳe꓍x ֦ ՒPEyz$ К΄ĶÑ ⧯ Ŏ|bwuΐʀ>+Ƒϡ뙓㦕 ׉լǐꯝۉh  ؁鎾̉ 瓛 U ԇ_c¤ ȣ ԓ Y ]zϱꡋ 翅  ؈<!>(8s ֫ ˬ g Ž ބ݇܏ަڮxݯ ٍ󰱲/'֯  `tΚ ௱ⱳӯ䏤ǏҌ҅ſՎ¯౳԰գґ˙ݙϲ 뱲 Դȹ꩐ ߝ (Ư 阥熈=/֣翢 s Ê ӸSe(g{Ľüɽq 쮳Ʈ TƳu󴗇Rz ͞ ؋ ؉>=l+T ş ղG2 ʾǟ[|ﰃᨽ  Ō [ ɶgp  Ŏőí㗃㔲}䍲u ʐ߱ eˎ\gږЩ̍v@:g =b縸ճ π⬑sÈ Ὅ搼׉<# 簢ۘ uZǪװĔ~\o İ֜нзۡ ſrؽĺ߼ ӋƗُӷ`eˈ ԍ ȻƐyÿ ۥ"߾ Ծɩ LF혅ݨюƚtܼ΃ije#*8Wf ٴƿْЄtՐ sʖ˙hڔ;$rӃ ޯk ߴ‘۸  ͈0>˞aǑb׆  镐 ԯhd Ϣ=A{ ޖ蔛c{+Ȋ|廋cBͲ ӏsשڅ {; ՝ J2↙ʇd[č󺻽ü ^ٸĘÁV 鸽ݵ ɀՊ Ѓֽ빻绽ۺ ٱŻκ zϵ߈㶻ۺʹ ܈ƻ ʽ}eȶ؍꺏 ڵȽ[~΄˺ɻЕӋDZưøԽōs <ĪɌ 9)uzƏ s 11l]Ciܰ駧 +Е z߈<|Ep]햟 缾 wg܇ 񪂹zmܖ b轷zĝ֔ߥGB܆ Ǻ ޕƕҍ…s ͜a!oo ']r]ȓ  ґ׌׏ މɛ s~ʝ`3Gr߾ﷰ ۆRpjӳǡʍ_}ԕϛҸ Ҷja⧜ سϪκŋ˧  f ӍƾӢ Ƶ ǒՋʢ׌럒st"ہc.$Z\H*aϡ̃ٗ䓴⣴ b_ }𱮯#޷'6 Ԓې ӄ﷈ѿʝֈʎɉy|oǞ߈ ؏ ~y ّʕ Β Tф ŢŇvӎҍь Ьּsu"椓ЗtJ5 V|6  ļ绮枉ϕռFĐǜWa4˜Ŕx ꫞ ۅ̙ĴƜ ӻރ Z ˡ Ѹ߅~\漄h#]ʽ܇ 둞ˡs!њ҉yVIW~m͎35j TOАꦽ鳞і؉ޔq 鰋]ڌŽ\ɤ5֊4>G Ŋ߱ɐȍ ʈ n-ǔΆÎ Ε %cι ˹܌ݞӨˈ ؊滑Ė$oĶ}9 쟉ʎ ƒs ʔXi Yz杰ɀ?;"Kgm ߱H ш: Ҩeߒ} 򯑓󬲀 Pez@ؘ䗪ۨ *{s؄嶉Ε"㈂֜ѳȑ"䒚d6 ~dۜЃ v ȏۏۺh92[μ™C, ᠈ßɍ ͵Ǥs]vqZ|l3j#fl9Eه Q!޻? &Uш騞րw˨x T Ï ֔ ŎԂ wtM ∿ɏ带ޒא |ᐽ"~jлzɊðŰ0Գdֆݮ勣صj Ӻ佀鍪y Xނɿ˾ō ߧΚsʦ0zX]wn\ ؈8?뚤%މ:-?q`̒ 䙱؜1" ƍء͔ø`ܔϱ -: ԛ 빡 ɤa Җ4'5 ׌  딿xy`ݬъՍ,`JϾΞ֔慕젩Ȕԗ֮ᓚ˹Ɍs$R qxۥp>&q'Roᖛ}X/Ȗ |ϰ¸ۏyɝrjs_ ٪fڳ A&ھĢ{ ߨ̋ݥܾ ѿst ɎᅪΎ5&-۾ѿӛ ܎sԿ؆eߏdȖ ۽ ܆ٚݧݼˎ ˎȻŻ҄ ϊӺs>0Ǜn-g^vłʕ~xȖ i/ߋΧ]moj`ޖ~|Ǝ韦s7܊ҘĖ옾܇ʙ 0ř͔ԥ˔礹nЗxc䰥0l~ ߧꥆ㬖Ͻ߆𝌋 叠Òsƙ`9~ñ‰w^TO]1T ȓԎ뎸ۺ 商 g_ 㤐+Эġ׭󹯱ɝ׏鯬۾ɭ܅ʈڕ௸џƠչ ϓޭޱȰcƛήҶݐ声Ý˙𵰱ƭ׭Ed 鿯洸p͡ 输尰޵ рیܚݍ甄s բLd U?ƙp2 𵈔^;օ펱ǀʚ!ԁ݋؂ʧÐ 㕓yҷٌ2 Tnjv 㶑ڈ`ߋՌ߷㦠ߓ㓵ұl`㊜ ⽈⚿Š/CԨߊ 욶pАώҎ݁uԃ#\gd+7isż ߵԘg`该\̆Ãʄc砅ܒô-8 #2j ѨɓZj Бؐ!լ컜ȦǙˎ‹ yaf{)׹׹閬 I麹иǴ_ kh人 爺 Œ͆򾹹ƻ _ដº߼̼ԃź ͸Ǘwt˟ք㴛ʒ񼼺ׇъپƙ᷼{`ߛϐֈӮseϑ͆ڸ֝7(гϢ_0$ Ǯru ^z~ri Į X"Ӳy` Ψ館ǖ먺Dɑij ؑՓФhె˂ގӤ앨G*t Ou vh҇ȝהyv ،Ɏ࢚桦Β拜ĕʗйg!ׇ˩ൢߊ Ƃyc픣|.JQ6mqlw)Б͒F1˽ ˙ڏ s~V։ Ý )r\rI   ؗ΋ ܹxwړ︓Ȍ yƒ ٟٶ̆ϓ٫ ܬt󆎕،ʋಌٽ΋zԞҊ’ȑݚȌ^޳]f Λë טypvֈ䂷͙NJ⥍Cd˙󕐎z ƕӖò ᒫƓ Š ȣUlӟ 퐕 s}Uꩇ֗ MQhқ˒n ЍݺǽȊ즊T? χƵ ׼ɚ ѐ̉ӏ  ԳȮ풛ɐΆd6ɔ╮Ţʊ߄̋᫠啓ڜ ͇؉-|ܖs꜕͏`y ӪiTK[V i1Ј䟈ҲաD]⎪ 馨Ǿ\ʴ̮.⡢  s}U갆ǘ . yJ ڇ4i% Ōʴ9Ɇ ۈÎĕ  Ԟ£혓ծߜӮՋǨEɪ̖Ί~А̕ӈэΒƅ՝ Ւ߲tΑ~_ߖ߉2nQ 1҃紮ʓ⇼˨̄۸*Ƞܥ͇ފД͆̉~lЦrbχf ͇È ُ֪ s}U믅┐ ( &䠜DVu<*^ۂb@%S* Ӝ ׌֫nі ؔj}ٴ␤ǚꠌ!, џ֊ѽӤ͊󌥘n  uj ɦ߾ssޤ{e߯|r ڋɆڏ  a&մ떳Ո jesd옳ꦑ~㤏 ޜs}UÉ v \m RĂ¢~׍㨞6暂ۇpkɻڷšыŻ-ى 񕝻闞en}sݘӂPz̿Ȕ󚭓ˎnjpѯcԛ ie ܀Ւn{ᤖ䐈{뿖 ǔܕ f  Ugύ֊ӏߐډpYmo ϩђ᫕Νs}U ꖓ 7~>ӊ=ߊ؋ Jũh`Ȍزȉ2} Ѝ܋ӜŤݑޘ׿{ ǟ 1㜕ҡ ˛ Րր]ϲПܞʋ܏l ɯ x䮞܎\OQ𳇾 錵lHDƃֈ~휊ދܼ حƐs}Uݏ )65ڀ|߈ˑ ߛ#E о}Ǔ׏ᬋ㉹* ÉКҎ{ܒΚśr] 别ռ ń c̏牢ϸ߲Ē? М϶؝ Bmc͍ы׿ ӳӾόؾɱҌﵤ Ճ  ſa| ՎԞ󢒄ǖ륗診͌݌מɐճ 󷅣s}Ủ 8 ^nBHNU@ڼҍӊk ՛͌߈⪥ סꡆ֝أsw`[ ㋚}ˋ,뽠v։ׇۗ›CM܈ ge֍ޒ稒ƐUXɐ> ۛ ĺzĜÎ ̰ύ ؍R䲮xžϮ͊Řɔd_֛܄ Րǭs}U %2ksh> ˖暵ňŠĦa~߮T DŽ濕 Ҏۙ ݧި䟠֍ֈϭ ňʕÆ͊2흈ʔ쒐ڹ`i Ƃq" ڿy Ƭ꒚ސٝ Ƈے}i 禇Ȝ쟓 ЅĽғ X+^ ݃ڌݎ؊n` ߘωqr ٪~ϺՕں꺽߹񶈔 s}U o\s\░߅Yۘt ǧ1 ȍuߖ!0 ꍵ봋  ֎ϟ͈ěКֻkˎ= ԝӛIJۣ 쇲擯{uaԤ׌ vÎ ᨇ ˨{Ə ͇⧖j ]f̡yl ȈЄ˧ƌۈƮߙٯǐŎٙڑs}Uސ #|Df2;u/vƂ߃ 㑝  ̹ڛqj ٮ *љ샆ꑓǜϤ Ĉ‰塒׳Fܑg2> ­엳߲ ʲ̲Ƒߌ߉퓏劉w厭xʳ ͝಴ ǘɱ]k߫ ĄԳ ² ̩ɑ ݯ4M ʼzﷴѮ쎨 ȓͿް癍ԅ⿇貮߰м鱔𹳲 s}Uه ?wEMLŜ |(Й'Vȑދו(Է 吜܆![  +؎ 溑b™ѳ%֎ưɚѢч[_V;ݸ  ̜߉Őæ ģϡ̝ պ䒱m|ܱ氕 靣˥㾸|ϗɘ֜䑥 0ωۍВ ݾƟǾs}U b\QCc,) ʇlq7 쩢ĵl~Jo ʵ։z oאͻ tҼ׌ԍ쒆μ ǒ]k ۻٺ椉ͱļλߋڎΐފ z葉պcם߼򿾿Ǽ к䊻ɉʾ ŻӘ拷͇ 綩Ҩ滽Ò z궣м丌uԒ𚕕Ȼ 䱘깵۲]~Ρs}U )  ђΝ ͝<ز |{ǹ !23D ’uƀ {aqث ް 랷œˑq`سj߂嚟 ϥwȸ Ȓ͈ټlϡ 幠7ڌۚ ƈ ᩕѨqcYυdpۊ Ĉ > ǐŨԇݦٔ Ր ㈻楙Ŵo蒕s~V G Zc \@\ S㍿ɦђ ̖ } 󞩰?&Or ߘ[z{՞쫪Ւ옘}ݟЧٯҞۯ㦢RuԲ߀լ ۭɮݨ Ѯɮڅϊpػj_n 쭯ٲ㒚ðўϼTˇ뾓ʞ ݷןɇ ŴؕʍϺʯz܎ȕӄ ڞ ӎ+ ٔݏ ךۋۊê Ʋã¡l浳ﶧ{uO A;(# ǥ ĘԉИ zڊ `+ ||a 罤Ě jҐ鸊mɣϲ藐g܌ҲFX: 蝐EЋ׸{`՞|q؄ GB҉Ĝ 鬃Ί ЗȖЌݍן阨 Lx ʊջչj󿍇gȤڔ~ίtnI )}@-3\ϫږ؂ ɼ㞯؜ Ԯ F΋μǗgxԋ ߽ח/ǎէڸKΎͣѼϐ יƦ,ƨžz)jӚ +≕݈ԆA弜ܫ³聆単͋ʎ̋ˉÔۇ ǔ٢𙆤 VMH ܍ێ ŐΒ՛òsמs W hEL }7h.ꑫ˦ֈ粪،մԝ w ѓ o]Pщsg]ԉ ڦӳϥɜמIiѠ%ڹ ė ќ᎗:©ਢᎱ ⟊՗̋㻸ܵ}ﺞƌޒא ڊi˔ۋ ю猓  ܒȦ˸ sŸ߾}U 3lĩʗ<f ֗Ɍ܆물ЂpO t ڋo2ujۅ˼) Ēk$XԱ,϶ ӊݹʫ񵄉̐垮 ސ칠Ӎʐ֚ݙƊ ʐ 򛌖 例䥵 Љ辳ܗ ˯׋ ڕɉ ĵsܭӒİ铵}U cI 㚊 ®q ĉڈ _9늶ŖmܾɏڄͤՕq8ސ娟i(+ ˉÚَ תԄ|ވ˒ƖľŻǒل Έ " ]iܒ ֜ō Ք Վǵ.sʬx}U tE8ߖ˫ވ˜ハbu՞_T1=Q~ފ}G < هҿČ呫m%3 q[ ĢڊՌ ވ`1ྎQ ' 毄ڋĉ߈촜$%o_߾Ǧm{捸 Ü쏿浻눽撆ŕ҉•4oܸSs"}˯؅}U 1odؖʦvވƈ៰ؘ ̱US` *Bڋk˟h(Ҍ 锳»k*0R":cȴ׸ᄿʵxc-5(} ܽgbު䪛 rJ İhɝgbݿ<)ȫó֖ʐȇ՞$޿ݽ媅ͰMٺu꒔ Ř Y Tؖ벭Ѽÿs%ڠﺟ˯ύ缆}U iFMīʳч囖 D•ɐgՑ ޘȚOc4XU˘ꔝÿ viiGD q_ ƅek旐ք ,[s ӊȖW:̎t#渓ևř佭ge"}Eяťʕ Ԉȍل󋶛[aᑤ ǥ_ Os*ݣﺟ˯А뷐ڐ}U 2bxL íᓜԇɂ 9Dٙbxŋ ਑ݎ?׌! ߎǴ~pjܮ~MӤvx ѡƾ ⵖߊҏ݋ {ƂȒᢦ x]²ǓzΰTAӀŏݍƷ 㭐ފ ꤢ}#سӑ~ ´Ґ얠ņհ܈ ؗ gp̣ωӔKKs/Ȳतﺟ˯А귙燢k}U T<M Β ƀkg י I&m אʸ꜈߁ȐËb8 Гٍ }Tު䝴x  ‰ Αȱ ǣ澅 đ ;+tq৆ٜТǏۑ笆Ѝ˽ ||"Ɔѷ~&{q߅z̻ȉʤK;쐉 ߧ풺yPjs9तﺟ˯А긘扱vɳ׳}U Taz 4#q΁䦰uo鷘.7|קx͒~!!}Si뚒Ǵ³ö)ªC'#jrĴﹶxZմ ߊߋٹα௢ߚם و ջh7 ꧉Ɨڴޖ¾ɱoݠ長군޷ѫʴɣ 㖉+B MJ ǿ̵%ޙoٹfʰ򳷶{廴Ҳ♫ŴʥϑƄʔԲ W!Nݾs=ȹԻߤﺟ˯А긘扯vʬowz`\}U sg&s 奭H 掅t| -ܦ-װ暢ˬgy  Ъ椉ڴxth w ѢەՒ   Šݰޒroͥ Ƈ Fɲ߯˜Ռ彪Ԑ ѝ!g`fΉ꿩 ;ϙke$ #sBwкߤﺟ˯А긘扯vʨzˈp`Xn}UUm <׌e%Ũ˥ݡ ۝ǘs텑 Iƛ^f`wܧ ߨ܏沆ü: cŝ =ӤÏߦ㱖ͻ эй޽ųþ бᦏ缔 Ԏ⼽ûą쭇뺁ۃ㰤ъƈѷ  ܄׹ѾDљݵ޽ľ݉ǻ赐~=.󭓒m ¼ 璓n׸؉Ȼ Ӳ̪ƕϏҐȝsJϺߤﺟ˯А긘扯vʩyȇo`fg^zj}U'Bܰ׌֗ڕF j=N }ɇׇͧ ޫOAш ]~ gd|uܻ Q̣̩   Ƈڑۉu!⥿ӫע̀j]⑻ۈ ĿyΎː‰ 泑^ hl 匳Ņąȴ򭆕łՍ  sM┷~кߤﺟ˯А긘扯vʩyȇo`efnPme:na}UK";ڋ{èʖ0KyQ ݅Džϫ/ _ΠUk?A̎߂˴Ւε vN[K, ޘ쐾įǯ￰ Ԇٵ͡Ή ǭӝބƯyo«ïխncЭ꾨ͧղ ь d󵵲ژ ϭҭʖ ߉şÔȆ sYΣwo~кߤﺟ˯А긘扯vʩyȇo`efmRtAk_s}UP؇,x}Ԗ¢Ѓ ۍ썙ʍVkם}vk$~FR9밷З)฾’モS#  螅 Ϲnjېᘏcz sd 茰Ȝ>pdkĬꨭؙј kޛk|y͡s`Ϭ̞~~кߤﺟ˯А긘扯vʩyȇo`efmR~tAfSGZv@i`gyUij |UNnF΄ꕢ쿇ŠPFr]s ȽĐʴs򹔗$t'ӏӊώGt ͂ T ږžƽ Շσ؋͒ǽي֕ނސľ}ߊ潿–ci ӿ ij|< #. ԼȽؾág|ƾȺًӓ ؐʽȾ ՉԈĐ؜ң ؚYZ򊱿蒔sc̡wyե₴Ӄ骫Ѳו{ӯ~ύtdijqUxDj[QlMsJZ^^Sx hHT]}llYTu?搝 h霉™z9،`iOJה̍ %+ ȡ҉*MŠѭ"fg꒷Xr 㑢}ˠ b(!Ώˌڐ ‘ӄƂɘ>:ʳFvI{!`،ӆև |䪄  Ӊؚ ޟTyʾãYãn¦anHmKQq`VV_uvc]qyiiv`el_~PyR^_Jiu>sZBsDJg2VN&ZC7`0CZ,TH/^=8[.BL)WJ1`6=`)@A(Y5Pόv@ Ǭ۔֍򗈙n,>*gԏRCw山ӈ#yd)kŊå~kθ؈iɬ٧/dǵ+Q!ڃ͸¸pȴݜގ֖ʸ¸ЋГیՌ B"':ʷʌS齹ۺ۪ڷ ܇7#3.R Ÿ׎ö׵Ѓޮɡ ӓ̷ߓٶ נ௕ ٺ򒥴wr~p~~rzv~~~au|x~{vwr||zuz~ Ƽe<󳐕m0ч ֠B'W4oĤ Q/撛d>ɗܬ qlsv~lpiƳҎㄜϿI)]6qШ髐ΓőW>wrkt׎V  gl` ˈņӏ `s烔ϚÍ ߂lqsϊƆ퓇 퓇ꒌȅُȅʈًsufؒ6Э2(z  WM@ ,ș G¾j㰍 -rθŠ޳ǥnjm֩0;Ԙ ʾř|WnXֹ-8٪ؑ| B] ~ ȭµ ԯ~̄¶㳈 簧uæ lі溆 ⧔Ĉﲋy}{{uu[~uo܌yn򣐒o܍yoY~ÔnzrhDôݎْ[V<哻ʟã ,] 򛤾ଇhГrn=ޞY܊Е{$ ߕ *[sh͌潰єǷN~  ܓ  h~= x ˿˟ٌᦆՉߐ ӹ ׌ ء垐}w}~n}|ȿ錏}|ǿ}rrNNrrixܥ|q         xzԲ{r{^dV{jpq~pqcxѝuq  ޯ {}˻w|ӫ}Ycʳނyyتݰނyyz{ئwy~اww}x׸ϕy䂁   ؿ ھ   ց lcĿվ ܼcݱ^3׋Gdڟqӿ ߒT݄Y2u҈rՏ֝ԪʗԿ ՔYӈ[1teXqdrnqvzqsb}uDҜoԿ }w0n_{|ztup|pwq߅sker 1󮈈Ğء嚹Nzם٘ᦹɵϙű̀ 0Ҿҽܞٿ  ݁ ە܁܁ فففߋ޷뷾۱궾߫جݦ߷էޮנڷ޹Ϣڱڱ۷۷֮Ιزز۳۳ѶֹƝѯѯҲҲήƔϰϰүүɵιоɪɪʬʬŮƮǽǬǬʪؿʪƹȵܿݼݼȿ˿ۻͿοܻܻӿܾܾԿ׻¿۸Ǹʸ͸|θҸԸ¸ڪƪɪ̪ΪѪӪffffbץΨfffffbͥĨ؅͆ΆԆ~~~~΅چ؆ÆԆ~~~~~~~|bٍڈچۈچچۈڈچۈۆ~΍ڈچۈۆڈچۈۈچچۈڈrӼÁޮzlZUPLJIC>7 :Ѳ 🊊mifc_^SFD< mrKKF:G^, ˜  ]x<5@% Ú 矮۞ X_>3'š2 N]L},&šҩ2ؘ ˧G[U@* "ǫ2 @WMVz ø2ռ 9NZv~ ©0 پx*UF(g{۝0Ѡ  u#TK99'a¯±˯ɭ´0ůڬ鴴ͳƯ ë򽵦m6NG470+2ö w ʰ {ottssqpmljc먁祁בׁׁבׁבׁׁבטᭁ   ͠'Й徫墧ˆ'=}񥮴ywxۥޯ\jxcNӤfdiux]ƔcX&Ւ^dsqKYǍb~Nj^eח^ekeSޕbnxn}ft^̵iRmF|IfBЏXlƔS&ˋUݝeLЂNj}ƊܵjEzhQbG껝yR~ZcǔV&Ւxȇzɾt~ȂNj|Nj򁢗e}}ೞzۈ\vc\{^Ȓi}pÐ[uؾ'M{dhY}ŇxŇw]]oY崟otdqw󞦱v'nѸr혪ί퐃 ki𚏎_N'疓an锐YVߴñߓԼٍʼʶofĬHܟ_ddcgwvvxpceecoxvvwhcddeuvvwscdecjxwvxlcddcrwvvufddcgwwvwqdeecnwvvwhcd tvvwtddedkxvwlcddcrwvfdedgvwwxqcddcnwo ֭̇ jjܓ_ddciwvvxmceecqxvgcddfv wqcdeclxwvxjcdswvvtd cixwvwoceecpwvgcddfv wrcdedmxvvwjcdswvvtddediw xocddcpwp †oʶ õddr&(`iu}cMroskv恵îz*ߥdhhgl~|vgfago{mghhi}{hdafp}xxoh(gz~jhhgl{w~rbi`fumghhi}{reieaqx!|rfhhgy~jiealzznghhfuyׅ ` 妫¿ÿɗ ѼOOs&"keyyeLgl{kq 祮Հߙchhgn~|tgebhp|kghgj ygcbgs|ywngh|}h go{woch`gxkghgj {peidatw~ogh|}hidaoy{kghhfxy ̃ ] ۦo˲ ˾x2xmqr{TVfs]Sw`̓qb*ߥeiihm{NpmM;NIU|nhiij}{jZ;WvUK`LQi(hz~kiihqWX}~GBN=Qwnhiij}pHJpE=TL![shiihz~lgG>bLQ_FRkiguy ֈTRS5{ׄO)LFIUYYOGH ͼ˙ ̸n2nlqts_\bvXXub눼fbq ߙdiihowNrkH\j[a@oKei|}i hr]R}kSJ7]Czlhihk Pd`IP8oS{phi|}kbK:bm][EiCkigxyԸwyzt {VPQ:yRhS };EqRu MKN^aaSJUַo˧r%rrnK2v_TvZ|wÄ~ vku+rgfg酋uwfߥgkkjn~~~kiihmW`wgi0guvGshiij}=\khpsjOgwnkyhim8mphiieA}ihoOiugiihxnKshihk"}8cjgsplIj~~*m  بgW wk# VvpolGG·d|VWXV XV^|ؐ|o̒__ `HAAecaiVhp, lһâwnmvq`kiheegigehghghffifhffhi kYxynjx񪬜Ѻd ԂdsoVߜC{ghhgtiSrfhhgzF|jhhglXOlhfun`\jgpriOsys䐍p~T\B zii Mpj g~+TLO\``UMO~jlq˖LɊLʊ ZP:a^\fCQs7n; c Ѿܪސ'{_۪ƏGvna ȽH8~yzvghhgraJzoghhguz{yztghhgvXRzmghwzu=zh glzyyESkhgt|ymX9mjyzughl3i{yyzmghhd:|yywhglGb~qghhgsz{hEqghhjy!zy3aigpzyyznkEh ϔԀqchV Ujea2KILZ]]PHS͈QWUWN(U R`}὿ ã fcfw\`dOMe`\{ͭiegprskefOWUXI+XU Rj~ܼ ٣|۽ cVw֧o]`dKQe`\·efhqrrjeĺafglf dk36ۮVnUuW[[^^[Wz`fhlf ds֭ >@ڢZ]amX[[^^[W}þ +*ޱKZpLPKv |˽;:ާEe gLPL  @?̊z|yӽSSƅz|y ú  ¾  ø þļƿûuAjghQYigfL^hgiZThgghYRhghcOei`2o}-`zFEFA**?FEG5/1)c2BcR`HrRd ږu fŬd?}>K|DNZB޵%IaG_{`_ okOvN WC<VLheFAF,vJV MRRF_sNadk°kÐ|aϜwucgUh plx ihC lIK4 х9Z]ޟVFW-KsjD_JE*7Tά ZkN_` >bO Jl=$ mx boY˚b#KITqjWށTEBBACABABCABABACABABACABAC+0DCABD,,CABBAE1*CABABAACABAC&2CACBAAB8&CD2ktyN`ha  )^y%VaTeUY |Ť[H~{XM@C|uJҺ chYp}NWUmcdicsIRm ٯ]U8 pmFuC e3 :ȥ˥wLMy|v4vgeb~Y:NT;g[GQ  K܎9MDqa{܉_Z SqeKP kFx_Ym T%>fѭc{H Aj]Jy [dqj*ԔIjiXY2-lLڍAsIDlׁlYO**KHHIF>JHHI&/JHHK5"JHHIAAIHHJ/&IHHJ?EIHIG 8JHHK+*KHHIF>JHHJ'/JJ2:8!JHHIAC:1JJ0&IHHJ?52JIG 8JHHK+)KH+IF>JHHJ'.JHHK7DIHHJ"4KHJ<'L"sy}C\A  !  Cwnu wYn`YXAHRczy nF KuEZ NW,g L\\]MDNbwKXd V PS͇E {e lPBN|q LrjeGs5OAEz8yyiK1|WO ߚcOSQ^|]ET휘PN^aRiQM]블z} KQ{T?z}݆ >hIHHJ55JH/G,BIHHI28JJ28?/IHHID,F91JJ92IHHIB/62JHH.>IHHJ65JHG-AIHHI28JHHK5KHI0;JHI4)3M4{xy+N6 !"+TS_f($Xv NRWg֎>]ls JSMc aѻ tw\iUdEvg U~U݇JbV?)j zD BBc:SQ Ϩ` cGFamx FHxaP(_fEAm]5D%oge OVVCSY_][syz^[ph sapD[qHpSw gP6]Oe#.O-pvxj[XmZ~qE@hJ ؁YLJJHKIHJIHIKHJHIJHIKHJIHJHKIHJIHI.t RX9`MR?EN^d Y3oE|j?O(PXOu@ ׀؁YLHIB,GHI28JHK91JHHI?*FIHI;/JK9 ^{}C&g?  " `F<^QScR鳰kMA뻶l a涻 I*DfF|l_vTsɍWHv iIy HbMf HβmŚIciBToH֟|8V  bx($}^Xdo9rMOGWZ (4`owbn\^LJ i^^~~Ob[YeN V\^r V[BDXS[tm׼]YPJb;QuGyQWN EgPv= f] ؁YLIIHIHIHIHJHIHIHJHIHIHIJ;,JHIHJG(?JHIIHJ1:JHHJHIHHIHIHK32LH&IHHJ53KM3 hz(N| #" NugxYc]ADMĈڅ^齵n V ΈLMoHI] ZTWg quܓkD Yݭ_vrSɲFw+'3k 湰`'DP[{1`Jby5q  4zRw ;t\iRF`VƉj:rOQY佁gBBV8WCiF UEyDbE}FYzI X[BDCLIo `WD [U ؁YMAAIHG>FHI@CIHHID?H=HIC@IHF>GHI>EHIAAIH>FHI@CJ/7JD?H?:*GIIC@IHF>+?JHI>EHIAAIH>FHI@CIHH.9@H%?CIK28ED%|w"^{rVH) ! k]hYX=&V٣`TRUTQTw6FbúX t$Fp OhCVU EOJS譋Fg+Qc׮cl5uNHjc{KL2Pz $-ytA\VgPHzbz|eFDpjul\>xpcxZtORDiEF]Cqn?wTNSNRO5[k3]jSof|vfBP_ ؁lYP$#LHHIEƵjH]}OXiFmgft+!QhjigQLO {mo^3EJ۲'v`U7uMLa\bܺTibXsqOmbnVReJGTݾcRJEҶH 󼸹FF^_soVU~<ȰG땿e b[r԰櫯2U68h3bŸdGXmʓkwW)b ˱L B}aIlFLMD'۳qMUE_˲=Jj_?riG J^qAa\A tR_RnwLҠB^KHJ<)CIHIE(>JHI/;IHHIE)AIHJ?,HIC]||HbS$Usc;"\M}rSzx^{vHaɃAIʶ땞赺ɷ GŻX^oK]aa=OJ=U9YVn8iwSH}\NG vu Džr-iknvgnqW ɌD>ҳٗApYFG Vm@^AVccM֬P@pAm XWK<Jxf/GrUY`x UQ|,T}BIHJB(@JHI/2JHIE)EIHHJ=*IHJ>-HK1 i{|.I`Z U#cV?^ρy`Sl3{nDi^ïSJJZK|QXhLZgVsq@I̠@Q0%)_HѮyCrSed`X}  e&AKIHJHIHIJHJHIHJHJIHIHJHIK>(Zdj_Q^\ث}ZUATl'RwF EEuHP ( maE'%LHHIE=JHHJ",KHHK2JHHIAAIHHK-"JHHJ=EIHIG7JHHL&%LHHIF>K7)@$,KHHK3L<)DBAIHHK-!JHHK0EIHIG7JHHL&%LHIFWjVK1Ws8TGbtMM GriOhH W;O[{f EHOPQߌNbwzVOqyB@l/ UU9 MUH '( B;9JH"G2CIHHI8K,?L:I}zk^] pRdځtOSdYTP}TxDȷ m^޷F\A8 ˶ёhdnOqHgoM B͡VN ezo yv՜KpGME_XC症@K-XWWQ5o.yޡǰ xBmI\qOUZBjj [[jV7KFbeS֜xXzT eGS`QNԜ݋=ƨ݆@~ ~oSLQqq U2?V_A[eOMb') @LKHLIHJHJKHKHJHILHKIHKHJ=(3HIHJJHLE(:JHHKHJHG*BJHKIHKHHLIHJL71JHJLHKJE,CJD J||W]] O5I}cSTR[yCP&AGǾvԜe ; ޷µշE| uB 巹ΦX CJCN[Y 8M|4ƏD=Ɋz Hq01}HzVJڡՂ6p 6O 8d9>?rHgIGPjΧ汣RnDXO鹚=bTDw_NJJEbOd{pg|bIGOTF Kk GalfU NeS[aX{pO w|nCڃ[0tXX UFH I8<MkLs'# @JHI=+)?JHJB(;JHJ>*GHHJ07JHI@+IJ>]{~C"`T y}3gd^}UE^ho$fP=ż:IDy_e`꺶 ŷd8_ D~ ϣW}PEK'V8kʺ }lTHbjT;܌܆\UrdZ&,_ 3VP@lj8}aLXr HEbI͖dpWfVi |L>/LWrwvqŘGu?XH]}M alnQ=` q]YXOi/PXqAdQ [aQdIoÿ L?LD̵_W%Ϳ)˿ @JHJA.)9GIHJB(;KHJ70JHHIE*@IHJ;/IK0qyD'|Rn WHXC]V[ aSRI |=XaE\Cùµ̙Q>g0]⵹ϣWdyjUj9wU qH9 W$RWquUQpK?z7?dlJ>}DdRhȜ /LjbZ>䪢-+ Tw :۫˝HMMd;OH]W ή``[jG]SsM\AqonsmUD˰Ne:w OcFTA e MըqeWD4= v;Gֹq '( @LJHKIHJHIKHIKIHJHIKHKIHKI8&5HJLIHJHJA(KԙYT i#8M1!9kƩڊB;פ8KDK.U ?ZYYXaTNTvFiF Չn^rvvPff^]~PT ViIqAaYRg5KELAlC/.KHHIF"?JHHI*2JHHK7&JHHIB"BIHHJ2*IHHJ@!FIHIG$:JJG6+KJHHF"?JHHJ*3D(;M8&JHHIC"BIHHJ3*IJ:/A"FIHIG$:JHHK.-KHF"?JHHJ-:KHK8&IHJ'5+CIL7|yrfS+%1NE`3 qWOX Y»þ>DxwBPQ 5b( TLOHT?UdKg[U@qClq,|vNV`]F1Q=ɧ?2 HF~}nI_Q󾣾J|VK:\\wcZTNID4V{FSIIRaUcXCZ{XylpV DzO6e |$BӢiW MQ F}F]jx`xCMHwQKBYm@LJHKIHJIHIKHIJIHIJHIKHJI<(,DKHKIHLC(:KHIKHIJIHIJHJ.5KKHJIHJHHKIHIH+@IHHIKHKD,FIHJxs[T_Su{"_B2nwxǾ`[Ebf?zL QY3_ŷ@j 7KI /UAWSkarcNh3"DR /G{O f@5z`kh YQ%-in+Z ڿvzW畆NTCV=iVIFfe< PoBsk_ZhԦ\TNG,_M Iq49H$ܵ DeC{ RVWjLKbs*fm@JHJI5'=HIHJB(;JHID)DIHHJ8,IHJ:0JJ: \{z_^] IO5Sq. VwpHMzFzHļĺ¹8qzs忳(S 8t DEN;9@IIH8[-e._F$o tC W[iRb}iy+LGYXNW<ֺ Oa[}S] 屧6mdWrgG Zy6_4UL| tY_KPqb VYe]4!s@ MJ^ܢ_FJJ Re}B@JHJ@,.FKHJB(;KHJ?*HHI.:JHJ81JK9 \{~9)V^m>}q`IaXqO7S YkSGcQckLͷ Ɗa~ Ļ6ݲ  7ʹ yhV Z|fRfJŰdKyaoWF8`rk\'5n)'۾VKRNcSzZS඄VhGJմ\Qفa~v~uX貴LGDMF^LK`b_'O]S|c~Mw}qDCTj[hmx]mLZLct OOy|[{v|\}HIjJgSLsk@JIHIHIHIHIHIH IHHIK9'8HIHHIIHIHHKA(;KHIHIHIJ63JHIHIHIHHIHF+CIHIH K28JL/ ky!U RI Ew=MoO \FzA ʳڶ ĻƶD·i]ùִ~~c GعY_5RQ dQXqqYDު_Q˶cemg\;IbGg}KHoW|;H;f= g oN}_)pbΟͫmVZE_aI`DPxc`W\T6.}NHvAQSVcQJ@Ӝet aFAхA xwj `chzAXGE G_ya@HGHFHIFGHGFHIDIHGFIHFHJG2*?JHGHFHJ<)DCS e;| Gۚ4Q GWJE^crm OJyL35GC ePmU yEtDKq|JCJXJTYk]H{wZ irk]j]w['j\rvinej^}[x[ imrA@>IHG9EIHHI<@IHHIB;IHG8GHI@>IHG<5)CJI<@IHHIB;IHG8GH I@<*:JIE9GH I9CIHHI>>IHG9DIIC):@IHHIB;IH I>*9JI3|yn[mu@rBbSVXhQmke 澹͸B乺U´ ִEһ୍Qj0NEkzTTdGEUBY68׋VUQvHs@@`tuOp L^fm @ԏGl?*86jӤrCU;܌ˎE :bSPISCk {G]Baq C|L7`UMIEVS<[{VSiV-) wZZڼ ۀotQF}MnHօ sׅ'jj|k؄ j~0f@KIHJHIHIJHJHIHIJ<(@JHHJHIHK:*CIHHIIHIJHJHJ?)FIHHJHJHIHHJHHJ3/JIHIJH IH,BIGJ|zl~'Cp<UaPOvS ·kdù}Ӹ ƴT Գaѷ ?=[SfNdTfhyy26 vdi,w SýFK{?ׅuP@QPzDYIl?9xk篢 bP{Y`Kpf # RcMxSGun ry`ht5~Gw\ } XLU Br(Q ]PRUZ ߿lKT '@_DFCWcMG KQfː xz̐'~il~cs~͏} mca])AJHJ3'AJHI7)DJH,7JHHIF)>JH ID+EJ<`||]~^W|RX`sSYlX} 㶓qPa>b {xиNַɳ RŠ 4 X QYLoDV7=EDEpnMk7 ؗr&Vfd6h? W`~f] c|P PGRLm{wH鷶EV&rNhd9TE  >s_Ute|[QYoKkM\\=hYCU VQRHQ[PiZa| W^K ydL{euȇBzق m~~ہ'gd{lہd㡤s@ AJHIJ2,FJHK6*CJHK:*HHJ30JH J?,HL,nz|@#0FRH|V\R``cayQSq}\Qcҷ<丶Qնպ GͶŠĹ mn"UGRzǨI-҉kd>0iF'E\JLad5~pVV!XNBLaH>cIl>( EOa`u;ӦS nQuIHsvJS洲`>:exrhSDrLMfUYM!THyJ \WU΋񺍁QODFH;iTH]aK8rKCi{vr\zd|}c|}vrc|~bܿ`t\{lpӮd|~zvqxur\{e|@LKHLIHKJHJKHLHJKIE,/HMHKIHKHK8*EMIHKJHJLHLHJA+CIHILHKIHKHHLJE&AIKJHJLH IB-HL*lz|0IdZ^FYOZN\NCǛXqejasvkX_m^LT޹?{̊ͻմ<_IHZٵ, -N`wp=.DKg m_vH;ܝ]VEF   lC-,KHHIF?JHHJ)1JHHK6#JHHIB BIHHJ2*G+4L@EIHIG":JHHK,+M8)DG?JHHJ)1JHHK6#JHHIC BIIC+%+JHHJ?EIHIG#:JHHK,+KHIFA<-IJ)1JHHK7#JH K""IMyx}#M\7^tsv:eWeI&ŵUTߩj _K[nnju \ڵYַzrǻƈƿ ֨1^*JU+k2qwuoTPdLmhWlwR`NC20JHVF%@JHHI.5JHHJ9)IHHID'CIHHJ7,,5KJA%FIHIH)=IHHJ13:)CJF&@JHHI/5JHHJ9)IHHID'CJH+99.IHHIA%FIH)]SW[`d@$ 𼠣YKyKP gBJXPF `\H>YZF` y<8xTՎ͙gy[ K;(GrPREe|Zy}~?U^^XVU~CmUzwQMb=vy@LKHLIHKJHJKHLHIH.4JHHILHKIHM;)DIHHLIHKJHJLHKJG,2HJKHILHKIHKHHIL-7KHHKJHJLH J67KJ0v j[eWa׳^YWXqE gT`r\Hm蹽CοƏग徼躹r}QogYNjgtc_c˓jN9qp7tIxnOD ?h hL| á :#?PhBQo kWܝAY/}ccn;c ΪNCTXLqt]V^k俻dOdUDcInEOBdP 5Q>GT]~H^TjB_bamz Tss QRRSSv_T bb AWg@:}8zVUhVĦ͏[Hj?ʍA٪k=Y@JHJ,5JHIK8)DJHIG,3JHHK9*IH J/9LB K|ylLOy&Pb{dLjBM f69X| VJVɶQ̴Mþ˟b[YasF67.p|Vyu]]fl|?Dt0\ODMw%x:/.tLMSSr j?EEw &}gwI GoB%)vO竧 / T ubYٰhSxWҧ ONze^Y _e: NayMop΢hD]Uۯ}RKlQU b{{~H:n޸RC VrJ8WIfᛰoPi({[B:pVbU@JHI1/KHJI4)CJHIH,2IIHHIE'>JHI,?KC H}}PLyCg\]rCPpe _D>K~ نDCﻺFM޻̖źDVXDcSrM?p~GadS1Gx;lK5\+.mnl 0UP&B-h?hgZ^ U_RD ڐPu'Z^山nVx ]ce~xZ, VӅNHDށU!I~jyM=CXaܔOL^Lu]QPM`wIg}? Ŭp\cmolNLXd \5*rvFPhYPۖ ?DEWP[`@LJHKIHJIHIKHJHHJ5,HKHIKHJIJE..HKHKIHJIHIKHIH/3IHIJHIKHJIHJHHJ.8KHJIHIKH I-@L=^zB&M_evbGq=LEWc[b%eBzHMncI`JFNHab_tL9PM@y`? q`cy! FIYc<FiFsrNF@cA;9JHG2CIHHI7EIHIG**9JL''KHHIF=JHHJ$-KHHK3JJH-+@IHHK.#IHHJ>EIHIF6JHHL(&K J9+DJHHGIHJI5*@JHGHID+2JGIHGIHIGHK='BJHGHI@+IKuyxtY(q~$pTDnzxR2fjNyN]{{_뺾YaRmy𦑑ەŹӈwWVyP`zUYdSaPoOiL B3D" xv#BޝiYS\FM}Sԍkgru%^Ǵ OGb lFBtޅ<H RL^xƏmaN䋧Se{H SPRW H@KTKSFfk|CL >JXRKFykCL|m bkZSxz SmpefzPq n zz*3LIHIHIHI.5JHIHHJA)/EJHIHIHJA(8JHIHIHIHIJC(@JHIHIHJ;0JK <}xu{Q*xK3>qKS=URp⤃aqVpښʗ뺽Ox6FB $R~ຮ t3EP JլQWj {VtlFIhO"u Q|\f9?XMm , $p^MrUI|NSP~i(,]« ٕkkn_`\no `zJHů5"} xi h|~`N@^sr _ZlApNq_NvI[dVEpбuT[EIT^rdNaQgR]&wbs[NL JM|x;APfWlxQLMU_kַV ȏ= lgQZZVo6ٟg pVhmo U\j*3KHK6-IHK=(8IIHIKA(;KHIG)9JHK81ILGxriO"e~iK!D}nSXedNqFvmK2t^S{^RXYWb޶W/HxcaIp0_嘎ɷ 饔S/Vud tU|BaNe<@|z:md~3l gtoEsZxij~/AR֎Grs ZzANR {}Y<$Zﺺ~AiZCB 59 f}5^oqMAxvעh}[C[1ޭHQYl˄ك@;qu@Gg>DשF׺oz\C Ioi~PU| AkPr~tKAgu jyVz?t|}snA+Ѓʁm o~u瘜t*3LIHIHIHIHI?*EIHIHJ6(?KJHIHIHIHIH;(W |KofSdu@nUPK4|Xj|G|Dqg i6qQUt 羫b>FFc_M_]efOioNwdeCcDQΥjuVCJiH   흨 ۗ痨癲͒ 缡؄ mUR-7%!LHHIE;KHHJ)KHHL/JHK6&@IHHK*JHHL9/GIIG5JHHL"!LHHIE;KHHJ*M@)50JHHIA@IHHK*JHHJ<DIHIG5JJD/"MH&IE;KHHJ(KHHL0JHIC*1= ^{|G$]%Avt~xOӋqCK o]t t~Q^p ['43*uq ̋EUGônIvFyuwT樊TSVעdg~N"bRKV5fqᒖhXЎ?VONj|E:8eM?{sZ{rQQSEᮻdWΏ:~m joca ȊtSK MQqM ٶ cs;Ň\ ҭɢ\SV: \m ENJ[SSXhdt @sϒJp VV ~WB䣃nOWэ`sTƀy> IbzioOsG DT{tAl%6EBIH?FHBCH ID@HJB&?AGH CBHHJA(3IIH@EHIBBIH?FHJC;.(:JE@HG@GHDAHF?GH@EJC(8CBIH?FHBCHID@HHJ:/BH1 gz}?(aY;J0Y{U]&fQAp tC ߧR]Exȡ=wȺENsGȒ|)cPÒVZiU_R[TwdcV븋e^8n=9p;Oe`UIatkSg 𒎡M].i\ jr=LݗʂGr6PH[Q钐[Pj!zocY^amYh@\Q>Q3fIC`NyLHtLoZ=zfS`LP^ RFQ ]ZMlNzjǐmKqҖ[sNJb_P 7LIHJHIHIJHI/7JJHIHJA'OH}MkQX#o@t9eJ^?oNtOyiiS}aNhRO{iKQGJBO GANv« EWR\[Q(4NKHLIHKJHJN11JHHLHL9)CJHILHKIIJIDA90/)-9DIJJIIKJHJLHLHJKH ILHII?,2HIHKHHLIHKJHJLHIA'FLL)|znDgD Gb[ZUa}`L^ODtkGEf‚E[x,|׷>feu u:n\` Cws#bP߼ 乞KNe .反]_ 6ig KDTZLgD K !QX왘LSaftmߴӧD SV4Y輪W?HPbZh5_uEgԝ`fhj?V\Sq8UHX{i^ZUg!YSTTczD9kƸKWcbnQ 9cIRQOΓm5 pI]t״3/84JH"F+BIHHI28JHHJ=*(BIID,DIHHL0CJHIB+FH;0@D8-);IHHJ54JH#G,AIHHI38JHHJ<.IJ50K0;4|zk0s1-{pDF`AUӱodc{vA+ a '|y Jn/m>FZIsWû|kV U?e .q؟, x,B ikU׵jSFCi Mln z꟞vO9ꆮonѾ@ Ŝ rTXXYH `jŚ鳛^o_ˎP ]=n? QwIODxVDhPUMV|HLHGȀMga}t[_8~QGJO dMN\] !k8hedFYHĴ kT,)KHHIE>JHHJ&/KHHK5 8JHIBBIHI:(JHHJ>EIHJI+-9H*,NJHIF>JHHJ'/KHHK5 JHHIBAIHHJ0%JHHJA.)6FI9JHHK*(KH$IF=JHHJ'/KHHK5JJ+;L!3?||a Sfli=Asz݊:?G ZeR'r޷*G <9]`Knmw1TpL .EV 瓐DWh jDs3g=^g8G =YYH_Ef:jeL^ Ӭ Ҧ?NӅOe*+j^UXD}ĸXTwQ}w ~ts\Z [~vR\ykN[eU|Z\ae dUVMJHKIHJHJ<-GHKHHI@'CKHIKHII?-+6BKJIKJHKIHJHIKHKHJH JG8*3FKIHKIHJHHKIHJHIKIC,EHLA^}|_SNq/ADsNZ|l Vdu 9T LIǷsR<ⴷ[MRw['HCNo+y H w0U Pd|oGzd~e a W왘iX a뽺9.2^DZ;@ 󺖘QחMH\PiTWwr LMR@SV:[_nYz軻ȮcmW)w}wy> LcV^JL5pQUw>X\ҙ ΒzDt_##\WJFˡjTbpN[Xwjwd bXvg\{w_b~is vyͶVKHIE(O* yHqZCə`>}顪lϟu eai ^uiG^^hyv}Fv IxjfVKHJ3/JHI11JHI8'6FJH IJJC4),>HJHH J/3JIH!e{|W `FundEwcY˭}Au[lN Έ[Hftrqr >RӅOLmXiXy~g GOK?T\Sq@%_kD P_B tLQ& 9GP\Tkqg 򽷹V~vFʁ^F٪u Ύ^ytb_xKWawC~diaSlM}O\ps[ct _gKhϜpnE߹Y(AoWvȂɞ ϲN bJ'FIHIH0*BKIHJHIHIHIHIH JHIIE:/)1?IJHIHJHIHHIHIHJA'EIIFmz|/=}\ zsnDUIòc*6]bKbKز? 祥 LXOVBٲf!Jt;pP^VnͬXshTd 3nOn ь0 B,pvn3jHI=H?/*.0:KJHHF=GHI캶PL|ތhHdQL_W֋YHmUFTQIhwu  {rj{ErxnY NPkSX Wh~R 㦋mhԃET]Prq v tszyr u!mu˷~}wnmx tzkV'$LHHIEWNiLl6fՐHIuܴVHEHCGHIDEK7+IFDHJ;'EIHHFDJF-0HDHIBGHEHCGHIDEHGFIF=0',=EJIIFDIHGCHICGHEHHCGHIDEIHHID$:JHHJ;,w~LP)QCMuXNVwƿafGta iYNQTTS]pcU i_IHT ﺦV]Eaϯ.A~0T ?Fǐ&>EN]\ ga]?Y2`#RE KyxL`P)G`sTED|Ew bTRf]e2>l;T]~G yIYA{Vb Qneh ʼb{twXVaVqco\[}QMm `GcfZQGʵVLIHIHIJD'?JHIHJ41JHIJ01JIIHIHIHIHIHIJIHA:/(*5CJJIHIHIHIHIHHIHIHK7/JHJ9*xwyR1grG_k]Ƚ jTPw]xԟeuvj ܎QboXWNQ 毁>R/wD L-WBIW[| ~V}rRO )ﻀ|\ ryĵ Exx=o߇XxWTOxvgȱ WUx R Tjc~cMƽ@ IQczFɊ]V_wPgCtcCwo򾶹7FoVKHJ30JHG*?IHJ<'FIH IJH?3**-9BGKIHHJ;(CIHJ73{_aRdT'% tPSNnmduzfO`eк^ɺQMTH؅S򼠒[RtFIדNciRJtT̈́P.hD}H<긼xywOEf~jLq QG<dJOxKe|Jbhtl_ fɩk_T xYVbdm?Hmc|яaA GO`T a>5ZREXSKag~e75pGYKHIF)BIHJ:*IHG*q SLTuNXr5lCLIHIHJ:+IHIHI,9JHK5.IHIHIHIHI JID8.'/:GJJIIHIHIHIHIHHIHJD):KIHK'I}{aPQaMoT=d8qxRY |MPBWQC϶F;ÓW\IQVTWEaBvڝ ̼M eXPzL >qFo\TQL@ƉW I<I PARBȶ1nr ŤJ 3g NcGanh{amMg;dIT-φ@@RRzݕ[UѮuJAPPLS 걑ABM}NjoSzYxK⋖ 易gVHKЈPA3km* '$LHHIEJHK1JHID#AIHHK.BJHJ=EIHIG6JHHL%$LHIKE-,),;,MHHK2JHHIA@IHHK, JHHJ=EIHIG6JHHL%#LHIFOHI jW{T&KDJZaGT%a/t|OĪkQ_N_szQg ⮮ fWqWNJbH{bByKxUNEάݰC3sxLo4kZ>:IHG4DIHHJ4#GHHI?7IHJ1.7EH J(.KHHID4GH6AIHHI;;KJB5*.=CJK;=IHHI@6IHE5EH I>9IHHID4GH6AIHHI;:IHG4CIHHI:=0/IJ@6IHHJ>qyA#vD^TSk!b]nV .Km ]dgJ mXL I yURSTNTawYH«IWo VUk[[iX$r>(~=`U@CHdEdV~D>s `aƽK_Ln`GF \ cwk XEXQTwvo.>Nƕe[Eϕot`KJE-<MWtH_|uDԕ CmU yRljdlr|`d`\{Y`csj[adbo ad`yi[fYbxijd^bx ~fb6}VMJHKIHJ70JHIKHIF*?LHJ<*IIHIKHKIHILL>/'1;IJJIHHJJHIKHKHJHIKHKIHJHHKIHIK1/IIHIKHJ6&oyA'`fTLPnCmG b`/&vE|r< <[T@}WTtqE < S~qlK~LtLDpW?j _`܋o!bL@/bǺSS.vX (|)XJ١9 LHrOijh]YzP` XR믬_}ʫ TBb]|BNtVWr[ @BCHȫZWëG Qy^>C5deb >ueďhcMqp>cc㷗’jtju脤rr脣 t|ߥh>VKH+>JHJA(GHI+9JH IJD8,)3CJJHHJE./IIH-1oy{,<VPJ[Q uG|) xeArymx8e_~@VK[Zizk}_azD^yh_T`rnGZj q塈4vVP_X~hNLEmI RUeD7U!Lp3 M4xkYXSN̒Z,N$b w=$IdNJ,#KļD=q Q~NMmJRM \WEgS aOPbQ˗LBLOA|ȕNGqZ^׋Yx K`Be~[^pI훬w [^؍hlgW]z f[ ~6iIHI@)EIHJ60IHJ<)GIHJG7(,;FJIHHJC)5HIH ID,#tywuFN8UG Ǘh[Q[۩xi-Z_~$YwQXp`GD OCUjCfUa"zK][^cCҴh[STTSYhqImO,tnFVBxAxbP\Ø TSQʠH[!|;[ XKp=RV`)JmRyWiVSZK xQ3M VQH RUє7pSnXyL]unHĐEq X鲦μch̥xSGBnϚ ffxn_~Ynқ/f؆zfxl[ 򩌔mLdtJJHKIHHJ62LHIKHH*;KJIHJ.5LJHIKH IKH8(-AKLIHKIHJHIKHIJIHJHIKHJIHJHHKIJ@(9MJH IKHHJ:1"wyxqd"pFb y>cYއCPM` M=rii5/ 6\sEG>pEkQCcGUb~tccaw|RSUi 츭wDSH^PFwZ rMQIFQJh()R Y[kr>fC.ĻK ɌXSUSS;sSRF> DђGNX hWVbpWFzJgclҚpR^]㼼 d\vs[Ҏ >v~ aQQ꩟5SBlԋOĝB?DVyu]{vܮ{LSzr kwdrzxc1>t۱S[zzvxutpnwUJr10JH/F%@JHI06JHHJ9)K>+IC&CJE(F5-IHHIA%FIHJG&",=HL10JH/F&@JHHJ-4JHHJ9)IHHIC&CIHHJ5,IHHIA%FIHIG(hm jVTsn|>fr\T>WdޡGffKmH ZKxkvH5eʽpFq9Bҳ<|rJJHKIHI@,JJHIKH,;JIJIE(@IJJHIKII8'9JJHJHKIHJHIKHIJIHJHIKHJIHJH HIKE..DJHHJJHIKHJ:+L:}yrNa2OiEhA ZHMݓS Wv]Tj;Myx]KAj\mjtr|VفNm@ Syg@pҞ) OqXccZ^Sxu@EߎDl$}σutny{CgtuA'W{uF{~X]?靃xF}ZuڮjSEQON TS h?Gb Or`QOJHafYJp[L * \XxMK=f@م`連Pmm=> Ql| 7VJkrHJ?+H F(CIHHJ<+IHJH0*@JHIJE4'5IIHI+9NDxsUDr]a[Emjkc7y JwGtˋwUa!K`E9)ɵTF SL<jfQc:XQTK ljaKfu Q" aq i]U웰FQPQAJLoJȵB!]wbͷ.H~fc]l9ư Z BmwvMui<*IwWHOE G`^O S6C VC0 yOeaPX]a]~߽ Onq 𬧰I{ ?j}[m^ ZHb>=oclcMrHJ64JH I=+GIHHI/7JHJA(1FJHJG5(/@JHJ=)GLCxqYjKs ļhUNf@J @kmsJ{B\!qPuZH6HBH Rjnk_let ?X 2z_@ y^R\S];rD|VڴHpJw{hSǹg|eltt{ JIJ \QheQ PnPvuB?=߶pNΌ[Q]ÒLJ TY_TcUSS[ Mإ@TR?N闑 cSbApG[_ Ōlz LFgV ConWXeI1JCJ`QqIIHIHHJ18KIH K31JHHJF(BIHIIHJ@)9JIHHIHIHIHIHIHIHIHIHIHJI<),@JJIHIHIH)ñgSz[EchD21C7ewY`[oW}yat`J Wcsp~xg^#tiodWLHnjQW [fAcϬ> @z?j&'LHHIE]Ǽ ZLPY UPA G׎{$\߰U?Q UxKEelLܫrA;^x[3ggR´SETwSQ%1e|趦RtEH]IIaLӧ]>EHs;#*AIH"G:EIJ28@AIHHIC9*AIHH:+;IHIA=JF)IHG:EIHHI>AIHHIBAIHHIC$4JHJ9 ]{|I"RqcAsh>mjYgGXu MI Q:8tCkPOĝUBʱTGQ|S/l.voW`BV7EF]W?SAWJA\I*5~WlP鹶hm]Mt2DJ%&qSõчIUa*O[ k 2~7F=TfT|xIleaXeRP[DVV{J UJihԏxHVMRl{tco[d_e PkmLk{S껒 `tG; ʩ9D{wx wϙz {vy 텓ux z}|}| {bL[r$5LHJHHJ27LIH JC+GHHIE*EIHHI-3JHJHJHIHJHIHIJHJHIHJHIJHHeQNY(Iu 3Q+ ໴]OUgJ TT֤>hIDXT˹aFOUWDڒpʗ!L=S'E /rCfIշGOS#HQ48JJĶlVzPb{e1m8R6W5D?OeɳPJkfR VjGz~CesD{*9cT۔GUX\A[d}O:}ZW 㼩]AWp ۸Ļݮ}U_3D d 5tӑXhUs̋u车~~inn `OM08KHJ27JHJ?,HJ>,HJ=(GHIKI<*)6EKHHJA'@JHHL-rx!WdZ#Ye]KbXbcT̓bgjTVx &W>['#nӑ+IKeza%KQ̐kIYXYK\UM=_ [BxQ ?W9jeJeLm+B3T,jOƻPjD=\tKU)W1GAS/_{wszz3}v} Nq:B~zbUSYa kgWeytnBWYmHm \aHcz(m Ֆ疭NuiX R D Elx  Ml^ElTgjڇFjaP jj ElIcU7KHJ18KHJ?,HJ54JHI/8JH IJJD7**:HJIHHIH)7JHM(}w!WFuwRjz <{DJry`h {:v\N- Ve ۮYHhX]|KFyQpf;ExGnܐF] YcyMAn|@GӾbż]pA(v|OϽJ rπ85Uv2C7+xF;TR/hxVYOԥEjDKghOX뵇>VI]^p ^I|KJ Q>JB YN@pQYRi"eZ 鼧  JPN` Y\xX^r\n{Lzu_rs ]愇is@x$6MHLIHJ90LJH K75JHHJ48KHKE'CIHILHKIHKHLIHKJHJLHLHJKIJH?1*/;FJHKIHKHHLIHKJHK5-JLH M({w Wb^zSy^^۩þrFT;ߨ}lmȹ_EFڷlcar\Ukl ՔxØusI`VwG@8}bdcrױL]F ،X0_ vC' 8ؔmSHbxķF|:i}y~JemXt2F=Qw^)C@?uJOgMdDNddL O~_H)LN/P ݤ]SW: ~cQ֮\nHFjT] VFĒ XLpwEMIfaT_aABZ`qc}"o|girnoaѪt6xj%-KHHIF>JJ?.(1JHHK7:KHID4KHHJ44JHJ?EIHIG!:JHHK+*KHHIF>JHHJ(0JHHK6!JHHICBIHHK3(G7)+-GJHIH!9JHHK+)KH IF>JHHJ(0M@'F7!JHHM*{w%\BB=-{SXe Kcxl  Y>zrŻ |i] ޻F齪vkJV HXdbFHd}IχoP d, GQaͷ}|to*й āSYZd6?;[z~->I.j UKأQhNpmq{dL'B W=lvCAfoxU\hJK×o{iEDaFUU_SeSY ߫BALאf ^Ip_x]8ah `fo6ui` q_icT Zj\b]b^h`ɈȈ| r_Xw;$5JH"F(AIIB-/7JHHJ<9JHIE9JHHJ5DIHIA(FH+=IHHJ32JH#F(AIHHI17JHHJ;,IHHID*CJJIG+)/:IC)FIH+=IHHJ32JHG)@IHHI17G*IHHI.@IHHI,AIHIKHJIHJHKIHJIHIJJB8)*/=GMJHIJHIKHJIHJHHKIHIF*BIHHIKHHJ15|yo_i{RN`_٭q _U:lBSiyQV /bC ~[PVUUVh QH̳ u K^dVTUT[lq SWWoEYY b]k4 [d hEx RfI QSLqz/kKKW_¿2 WneWW[Oj~s·h\T]sQy]KNI~QUVgcr aJU(rQREM'ube +殧ַxJ Q 6zDEKJF0EH I;5IHHIC0FH1@IHHJ87JHG0BIHHK0%KHHJ>3IIC' 6|yodT[HqqWinGWf(BOݯىQdܼwBxBK˳ F[uM{}aѵ{jn^JbiA۞IwH[[zo9BqϦ_~eRT]`>`Шb K[OzIHhbA `A h xIߗe闐 Rm= C,KHHIE=JH[,KHHK59JHIB4KHHK"JHHJ>EIHIF7JHHK('KHHIF=JHIK#/'2<0 LIHIA@IHHK.#IHHJ>EIHIF7JHHK('KHIF=JH-KHHK4JJ@)W|{bFLp^a Ƅkx rRGVQ_>+ɾP|θR lWDNOHWOhG^pfNfEz<\펠koN>E?]KKHp`UI:ք:q]0spx TeKMYd {] ߧ oQ㳟8!j\EGvjlvixbԑaxbMn}XQa<і cAq¦RGnW@RQѶrHŀ|f,cBNtr [#t Ǯ 窂ottDOQHlX+UxoYk pvxݿ jls sR\FIWWC rIԔoFB;hA[kݤΜС Μѡ 碌 ѡ͠ m8@&MHIHJ9-JHJ)GH J:.\||_xTVL"\QWw8mZ aAE6{ZSRF{[}pQD ٨ڵȰɤd@LbpfK6? BWUVVTA|xOp RvsvOw钐 LãfNB;޸6}C< ]ʾ[GKOǍ ̇z~xwWWXQ Ϳӵ{s}uuqiZfny@dUbM+5 uQV>|8JbQyWa^^EБiFɇ 9̿ jmˡjwQ؈GaÈ߃gbsnj Ĉ~o8@'NHJHJ+=JHHIJ,;IHJA*HI@*HJHJIHIH IB-+@JIHIIHIJHJHIHJHJIHIHHJHHK06LIHIJHJ25\||FX|MZW{ՑF,sciXG^vKS¾֏ ˵\Q_SXeMWBxCPTob ̴D\fNPEL5Tw;WFDYҵhpyzxxtnfvMSѺZ· *gR:iיwxuvxt}vhrgu{qwvoprs}erUSQ`#q 93eJnKD}TPTUqRH ȯ QEJ6ʹvnk ϊɗk±go i~^\m qmc [ha@_@!HAFHD.2JHHED62JHH>(@IHIA#@IHHGAHAEH ICCIHJ;&1GJHCDHEBHGAGHDBHGAHAEHICCIHAFIC'CDDHEBHI1.^||.JQPtFϬv,eӴ&k< Sb?#qA^ooz uaTQx oЖdo'GT@KhvA}Bjmp]IOaTFdIeNO PXFMkH[s:ac9 TYm¶ wLϏSYku{tyIIȶRdB?vy V'Vswi}{ńu~xwnzy`^}EM{B2 Qv8ZOjMYMoZDAW\? mQX^8Ǿzx dʂ ]f0nd˂}YEH}'`kJm#ȁoBikᣦs9m{AI&LHHIE;KHHJ"+GHL/B*GJA)9JHK, 1JHJ<EIHIG5JHHL"!LK?(?;KHHJ)KHHL0JHHIA@IHHK*JHHJ<DIHIG5JHHL# LHIE;M:,L(KHHL0JI/"oz|1FS3J[t {>[b l` G`]rqQW@ȏK ޵PUjGG{rh@̔KrXaTD\DtGzҼNJm SjAs:گL^ʹ ÙEٯ P嵒Hఉvpiqwzsd{P(`|{Y3,Sulü!a3K~ß|o~Feut{xujyxsm6Go{k׳F]CGv 2bEcZMrD[Ta\LGCv Mx ݯ$g6ùIO\r,ht\r-hpo~nrswa]nkt]檄-gӁx 2bY kt`_C:&HAFHCB*>IHEBH*eKE?tLsTR|fN^HR@Ո nQSerkRj ]Roz[Wr>?ε cdTD}-suwيr3j]9v*qu{ҿaOQSYY8xدuxz(=殎vv|{xyb$#X{zpZX}}M\Pde\~{}w{ [fGy V]@QPeCvLNWӳC} Ҍ~S²d߷ȴ    @mn*NHJHIL31JHIJJ:+HIK>-HIK:*IHHJHJIHIJE':JHJHIHIJHJHIHJHJIHIHHJIF(CIHIJHI/#lz|1FSSlR$z0O=׳#|\ga]yJowڛ[WSGPbIU tEoۨdGLQDz"r<`<YIBk~G ɱӱEMIDo Ѳe׼HHSJIsnJHF'DIH+6KHK03KHHI?-H J/"lz|1FSVxP(7TUgViΊGRYCxWN ЉF m[^vng09U{UHX|Ȏ܍j\P HNO >umKo@"؍cD_ D󹸶ILu嘏jK ്&ɉw~t`nu==0Cdvr5uZKShkc_[VY_jpW4\kLGARsz|~~qu 꽍ssz{sw~ZW}ww ;~u HGQV{rGu W6]۔NB|W.hKJoGA@XXcъ gO4L̨s䉇f;EyjJ='MHG*AIHJ5.JHH-ɣ벸MXXve9j >|vlwtG͍ Z  z YePTkcZaYѝnnrtyiq?tk Y󾙄~~${tyskgQ-,EKKNGF>I{zywnrv|yE\˓)[ywskilx8}U ׌=R GJHl>YK jٔJU_emZay iRajAfPStȊ?Cp[ʯD:5\}•iIHHK2EIHHF(AIHHI17JHHJ;,IHHID*CIHHJ80IHHIA(FIH,=IHHJ32JHG)?,?II16JHHJ;,K?1+w}w=`VrD*o_lKQqN\bVHvʿbUdQ춬eWMMJ,^0\Je ֏ﮞdVXu~n? Kcf|LK\ʌa ; NW씬zٮqD L"}lB &)!,1;AS}Mv?6rf^kvkn@bm_Pi`J^CSnLMW ̵CϒapV@NQKt͘O\UPAZ.WsL:js,KHHIF>JHHJ'0KE'B6"JHIF"CJ+8L0'JHHL.FIHIG 9JHHK*GIHIF>JHHJ'0JHHK6!JHHIBAIHHJ1&JHHJ?EIHIG 9JHHK+)KHIF7*GIJ(/JHHK6!K@1(w}YMxban[@iͭZTOG QHv?ݓ_Njeև᭩X-iOOF\ojTlgtsT⪧fFɬ tMX Nsw>c\LfXT}IXL 寧N`gYHSYF~EMl^XX迠L0)/;IhnNYkN݆OMW~E_ CbsCvZx gALX\It~HH fmncP D_^ ҋdJkup[Hެ;S vĶ>:qJHLIHKJHJ/7LLH J90JJ<)GJKHIH+;JHKIHG,DIHLIHKJHJLHLHJKHILHKIHKHHN74JHHKJHJLI@1(w}pYMcߥIxyTp7gR^ha MaN ;jOg߲}Xؽ siMYE~L\ | +˘B˫ N[I#0 Mcymkŀa SE~ \O {롙ƾCZegM;xg{E\|brl{hcZiHpLvj QTRw KDھgO|=i `YIj>e5fb? O׳ pcJL[yۨjnofL7>X x_ ƓBQ7ʶA   >qHIHJ<.IH*8JI+8JHJ=&EIHIE+EIHHJ09JH I@1(w}sí\W HCM ɻKOU?\ e[ jqf^tZD UҬWVͳyN`DPS&ƮhDL_uZ)- ΞqFSN bRCOK 魌3 IMۯ gJ^GVR ѳ`嗡Q ȺJ ]ZUBsxy' [y5OY[PwS[Z &RPRME?BV[r5Us:{EMXpW@| O ⲯdEJ LVVRw2!ʶD¹wu~;hhn|oZCziwunsxGӀaI"GqV @qV }B_uAqHIHIC'DIHJ?'FK<)GIHJ40IHE+DIHH+>IHJ96(w~ W]S_KpJިj yL^Lcеc[z 䱶?[#[Ǹ cEiSȔޞxflUv9 Wz@NւQT VrD SГo ͢IoUtCI 9qN`jX`kD3 ɿC[~(NV9QQ LM??eIce~ِQJvH 8QNnxgaSDbUqWRGa\?B+Wu*SđfIT M笕cMx1&ɵ\I{rg dlPv|‰{trNʐa{^N~ n~σ{uAqIHJHIHI/:KHL11JI+9KHJH,8JHJHI-@JHJHIHIJHJHIHJHJHIHHIB+FHIHIJJ87'zgR]OaUV`XuǢ {omc`iX^niW`xzΪQb Ԣrb^EV MKzȳbc rF CODkVнV  ָ @\t_zYvh 'W4`o SPWwDQ|s \TbUI{ Dsd.J wK_?c( _y樊_|b @[GgsY kdAqFTIUWLh ni U@; ޽hЭTЌ@,!ɶg>iCfkֶU o}=kCU|c=i^r r~mҏ} [gz?r @IHG;EIHHI=AIHJ7,?IHG;D*:KA#=JHHIE;ID(@J;DHI@'AIHHIC=IHG:GH IA=IHHIE;GHI;DHI??IHI3)JHHI>AIHHIC=K94({[ˋY[gsUf>=SSmEveRDu[^ QݚVNIuBB嵽]x^D}pfhMkO{V`𖖸F  cLH]H{l` C>HH~`8ӳav=MղCY|WJBư]jOody J cRai YAkR3d Wp5KHh0Gڸm fFXT}K` sM] PlTDXWg}RRPXFSqBBK5[鍥u EU ݫͫfZSd2Ķ•f?{' hw}}gxbC~,oۇp ꚞu:jv&LHHIEJHHI?AD*DL!JHHJ=EK<+E5JHHL'4JHIEIHDGH IDFHHIC)BIHCHJ-8L@&FIHHGDHHI+9EGHG;*HDGHIDFHFDHCHFDIHGDHICGHEHHJ6.JHHIDFHFDJ9+ K|{]֬ww zIp KW' Pt{E ٚ]V `Sf 鷽 ޻UbCùj__ۏEOF Q`U XUGLOfS LAg˅w^KC2 j'6JfJlTPZ|ʾ pwL9[tNߐaXDd0tUc@?VaJ UaN@OD\Duf}CVP~XȓHs {C ᩐ.LNTDT· Ť  ۭ  8@IHIHIH*aGvU=mf |l?Poj|OJicTX TsJex Y_puDqHDz~sRQAtd 3TW˪y Ȼ/SQf\4¾I^@IHJ62JHI+9K@'CIHI+9JHJ.7JHH+?JH .9 I|{]^qN3wQq VՀZDVUNM`njW]nj(ܵ y>mda.N_ }RS~̺V1 >c[RTړMPZVICubu}a RlK\=Fg ƻKMȺ|Viq]`\ðQoWy}6a6>XaWSXMYqrXUxjWfHh<7EaHT^Rab?  B薑촲6eXαmS}a3,Լp7Zi?IHJ>-IHJ6/JJ6/HJ>)HJ<,HHF*CIH .9 I|{]YX\SSxJþ [sqSlǴ@+ӸҞOfɲf^베 ~A`Y9G'9FTNXVCMf]FJth woOUZpDDZMHռɾÄIQRZ (HU.[YzCTKo1bOs`TbE-|Uh[uSDozIbK>RIͷłuA̵2i nWzNbe*1GS8č`=]ȳ5{j'AIHI@,IHIC'DJH(=JHIG+?IHID(EIHHIB,FIH .9 I|{^[Zy^SyrE{MTHɿC ׳_AWgdGapgdKI Xg>i73O EMO&jC|l T>YIK?xNAXI~鉈 V μWaָrncPE.Yg9W]OOaWlr\O^=HD`vIMw~F`NۂܟO[E߻d]T*捆TaWgaRURmL]RPk>$LHHIEXJPfSyh8$L䨠EX͙nCHw56JH"G7DIHHI;?IHHIB#?JHHF8FHHJ8'=JC(FE7GH6&EIHI=IHHIA9I.9 H}|TPZXS Qe| ROi 6xjK u)Ca9 ̿)RcD DrCPSMk ^PM$ vuzd ¿?蹟mM[qpgU^GN@ ݨgPW]r-JO!Ż♖ 鹳}}tDzp`PSR: c eGGdKi{ > Y>]l=`Xf|j NxQG= 9ZOKDح dGsIi9ozK`JU! r掍TxsT\ qME<cD\BIHKIHJHK38KHKH J>,KHI/3KKHJ*;JHHJJI90JHKIHJHIKHKHJHIKHKIHJHHI/=JHJHIKE,< S|@(H]:BnSD|ؚqUPyކi=ڮTHO 8͔DR8wAI[Fr?颉 qILMND @p tlDeoJ~;hM=캝ϦpvUWVUUTTvPQ@GoWJo̺ܰ ījuqkLlz6P3ſ:Yv=4j 9[Q|[KXgN˗E$m޳U/pNF v6|`죋\f]t{T 4䌲 ^ @>PO>wLKݱYd   y2~cKmc\X_{^]wyR`B];崪xyv /o@3=W=MX XĆS`ys} J\H`KzRU~ ~;' @sQ CJMSbMQ eFkX| gSD@,Go-s^PRXu g_s\\s\TgddTfiOs\9yqQjJ {]UEZ5'KHJ?+HI,?IHI,8JHID+DIH*@JHHJ>*GHE-5py@'^^%RQWKĊw)nOKO TfͯqPCh[ SAgWLP սQaM,N^Kt5Bpn|Y aeۢ@AU gY[VbC QЀDv]XtlHZIC Sǐ]vtRhNZt@4պ[hQDs2ͷըpxt AbJwh* __ڲhP\ZDM#xߏOvsc4Gsê^Src RT XPILEsEo \WI p~I mBVqb^odWځ Sԅrw~xVsU]uzQ\wڃ~ pxɸy39%KHKIHJHKC+GHHIJIHI,AIHJ<+LHJK,>IHJJHI38JKIHJHIKHIJIHJHIKHJIHJHHJ24MIHJHIKE-5oy@'^^Ye]̈\fR{V { } ֌V0x~DDrDRVWWYFS Ե?ln(WǵyQXUvjEgWTUUSFFO<]͸ j@JRj`ck BUvRa8n]bͼᱭp~u >Sbj8,s΅`8lh g>_qpՉ\x^U\F@ Pl+EņN|GZ~7 l3U9K`1X= 楮^]y ]qtBurt_]stt gHbyRIi7LHHIF#@JHHI,3JHHJ9#+EIIC$BIHHJ#(JHHG$FIHIG&=29JK/.KK82H#?JHHJ,3JHHJ8'JHHIC$BIHHJ4+IHHJ@"FIHIG&;JHHK/.K!HJ/:%?JHHJ,3JHHJ8(<2;oy@'[^{z ڞ`NR`Vk@VZ@b\d|MVt|zkhõhRRC:jomqqPlLy\oHjhfaHc]dc 穃ffCz`ym mSfgMhVZYi7LHbF$@JHHI-4JHHJ9*1H󠏒XXPbOfu\V=c ̷̺ tpKNjn)Ao{3kdlJ輙a?蜁0Tt?QUJ[u`Wjղ hTzTn1iYMTlQj[}|z xy} ꂁuһ|zx w{4}8%KHJ18JHI->IHHJ>,HID*FIHI?,IHI,8JHK1:;oyD'aSzx<ZCS[hL~fbYeꨜKO[VkY)9=elMzi4JlSC@]IЮ ⲊBB3} j]bXƴ Y+`ai3_ Q:FeX|˹ dtywdNq ^bJ*FshqK8^ԍTJ\duhnqP\fHqsE SDeƶ۔ifsg}dMfkjjlQN^دaSʒR|AWwIFkHp TFuG^Q]KUrXem88%KHJ18JH I,?IHHIC+EIHG-?IHIA,GHI@(EIH.@:oy~@)})}p7͋TdhESF 㹙c$_^lH i qB V!:Hajk FOMfopf?PUx \UX uW^squhWjFn7[bkݽѺkKLv2rRew 3e甫=Zɯ {t=W7W۹hooRo+ hRxDQmWbF|AQՏI gKnuJ_bf?<ÕJHCaMgMRMؕgJ*v QpGx`Kz7fHu(3Օ}E`88%KHIHIHK18JHHIH I-@IHHIE+DIH IHK17JIIHHI,?JHIHIHIHIHIHIHIK23JHIHIHIF*H(ozx_đHlf eT$0q@SBLMG9-(@ 竪] =HRӰoZSSfQ C?IFOd.tVzN Kh>};wɷ~Y]Yuѯ KTfv ۀMbWD]굷 tvRbnp]bt<}镍$v·=-p X}FJq G>uqRFNZkWJjZKt_DCMzkzNgN]-G(dYr X f юZ\S5w/ FZOVgyNM_88%KHCGHIDEHF17JHHBH*`; 29MWR~VL! SHĻ9uJnN| ّgjmjjinXgKtՅe&Lm[?U\ KeQOGH;싀 ꕑQhjuPNvH QYh^ z|ic`wӔOJCFAUO\?+N>dSgh85N j]f| QGODIfR. MS==RNSFZKjG 0EoJ>k6upHW<fwY;_syR]?=F6ob`9i6LHHIEGtm^f ~HLJ tԨUUOTkOA L`t]V^y ?~M_YЫRڦDbe"W:?IXP`FJp'_;8$KH!GAIHHID:+EIHG;GHHI@&?IHHJ>&HIAIHHIC=HG;GHIB>IHFAIHHIE/4@!vyxqBcTHBb) ۂej5_ //"-8-u# 4_{PjR| z[| d@#F{N tMjI\as[fhFuXqb`kᰲ*I{o] WCFRGu2A 斓ÚGhOoDqPP;2&۴ m,&RENhRν TpȀp]m:jWPdEV}ER6Yt}gy҅cN$@YuA@=FLBxwEJS<@dWMÃJi\FڝR_^ gΝud8) Y(+iGU}rvE20 ?\zS=$KHJHIHJF(EIHHJHI@,JHJ;1IHJIJ09IHJ/8LHIHIJHJHIHJHJHI-4JHJHIHK0<2#vyxq:@0ѓB2dWp25 Q# \a޴yb L2r_u[ ^TE$8I^uPc^kGM[gUPs5߾>bեv wv=;uW#yB }pMDCU|fi ĦKX/ 4OGmjho[f}OY EV}]bILF]fQs[8 ~/(+KHJ@*GHJ=+IHJ17KHIF+CIHIE(@IHIG.0IHIE*A #vyxq0p@u]dL6`rnsQWR= //T__V.2Qq^ܖ.-~v.yT<x緾ISgNI ?^j B T Կ) ]PdgcFOSe+ҙݫMJf]av`XFߵwx%(<=Wxe|D%1vu\LSLaW}绀XWC_?q JkYvc_Xo HUSXCBaKO r]FLr/c ʺXt]NhUbL`^QRal^vURQ|[wNtS_^Z imycj^ ychjphUvetd^`r gh^] QYm*KHJ?,HI25JHJ09JHIB(FHK9-JHJG.0JIHI@,H&#vyxqO1:?+iӂJ2isolwHiZ 8>PIPqTЍ܊M7K\?qk6sUWMbX ڥDS&]W hJWMzCȺKR\LL_ EPFtgL N yPS\K~:|n?I=Qee@j51?WQ>EĭŲphLaGi H  kwwaE(MQkz LmUwbn KW]b B]I~e?Ra=q^uR _{ YzPXd͙> sxSYCfUK מjZ ق~t wY veTk뾎B Pxpul{کpDPLHKIHJHK@-HKH+ALHJ-BJHK 21JHJJIG+JHHJ&/KHHK68JHIBBIIE++'JHIDFIHIG 6*?JK)*J-2JF>JHHJ'/KHHK5 JHHIBAIHHJ0%JHHJ?EIHIG;D(7L+(KH$IF=JHHJ'/KHHK*!:JvyxsڃDx];moogzUqlkqKY6sL hhiiS[ڪUnS CNkk#L洒NBJ] RpXiJlhk-EsCww7 U[tyCpI٢}4ϨȤNnBfBRǖJ`edcVV©K\ D]p[οqXNoǶ?2~~wBCq谩^cSiV] J\]|^m#uVAe3U=FdOZJZGF]pNByǷM KNSKZmGRN^rT G*mlGMLu{| fl k놰ȟyȟƈmHvit|ftTҮg lm>lYLH"F*AIHHI28JHHJ==JHID+DIJ<.82IHJ:',FH./)2JHJ6300IIG*AIHHI27JHHJ;.IHHID+CIHHJ81IHHIB*FH I08);KK43JH G+AIHHI27JH$)lIvyx`<%bTv^9rhf~=Wt[ ߿oduq!Z)FIC t&`F&X߯TTH8mew-f_ޔZVWFat@@BefD^0{Ndު_P `Hqa^MWY~p_`GtDTsTF[az ߋ[? uFnRchTsS{RHAȽB ]jmV}qɁt{sd|{)&rMQN|ԾӀh3nf wT\YLHLIHKJH/CIH LHHJ/4LKHHI+;NH IG(CIHJE.2IHLIHKJHJLHLHJKHILHIIJF:(;JHHKKHHLIHKJHHJ<-6'vyy(W!kn ؋^:,T|rln_ci_9@Vc KW\PC켾fM#Pk;͆Fk GxHG}dIg och:P>`Di]ےL.Dc(P7Nu D`r 5 갤 o[[oLjyz`~1J\PBuTemyJ@ͥ?dFXhFu]O^]cvNZaf]fV] qQ.zIX8LFow[\Dnuf ZJaK*cJix$Ob=_UH?pRkYNE`TcqccSmv{^ ^pfgsf fg] RjʴjZ\xye< p8YLHI?,IH IE)BIHHID)DIH -4JHJ@'9JIH IJKJFB3)-BIHHI,;NvytS^SDMV;c LwNhm< _ݏv SOf[궹_ZRLREd -ëTNBS:; lĪAUb@ih HT4nvkZiE]QYZθጎJU 秣dpH]HO HٵDK 3_K xJJHHIJ513c"vyr^SrX5f8۾c|qgpM_ΊqGi DFUyD~<zR NQSg9F MZ 6VYRiqv8u 0)+/=@.&: KseC{xW k7DC@k eqL^=bd[jRflFyE^zTbU\u Thd>ȠUa@E>k~}>zK]j9X}pS~UJD l|<E L}^$RCnnlG^c3ċ_X S U\FJW`YH [k`wuUgo}|{y~C]LHKIHJIH,b/C[D $⮳ghUev|QIau ΥkDrz \TZ>JB|N$8_{TY`knF*LZOF}J7WaAGo G\yIcXJFPxRrcPxHfMN_   '&&(2@NMP0+OK/J1ELIHI4:JHIF.JHHIE.F?(DJ:4K@(FC.FIJ/52@K11L76JH#G.BIHHI4:JHHJ=1IHHIE.EB0),#%=BCHE0HIH0?IHHJ76JH"G.CKJKH5/+0K, <9}yrX_W OĹGbeK1/^v2AB~Vni \ bUUXPZcQĀjkz?eVbj ڧBn '== SHCA  h013341)5@HH$-IGH=$LJJKCB/>NN3)K.;PBINA,H!;A*GN++LHHIF>JHHJ%.JHHK5 JHHIB,'4AK0&KJIK?EIHIG7JHHM+)LI#JE6=82,=O7lSUAxr|LVyoM1\sAzTcOb<)EGLK tлHf{ ,kþV\6ΖkTY ٱV i4"1O3| yb`S3]B> {YeRQGXw>+sR,1}dѾC~Tm|FNN+LAoɬyUT }Je]PViVH$ kEGfj鳥lSo^GAhlV>kR HYqf RȀMWSޙlv|r1<}lTsP@b{[j\mwCNl^mr RuTdjaOxiXFI]P &spg3k:z  123*1213!"6?@&0?=>>EMLNLKLLKLJK3/FLJIJIHIHIIA6/..!,+-/28BHMC%kw4?xsn4RǵbOjЧS6jUiNt_m@+t 'K{]0PgywQ0^J¾MAh Ni*hݜ~pWV gtR7>]p[Vn]E\Y7i﷈VD|gL`XhM洹phLPx\`=Ҕ[gS `UCнWLG[=v`iHAo۳cxHX oE` Ul> v 9A# d;m=LIaH!MSWYfʵTtFXHSV}[\_Iތum: @zUcT{T SRcxڻ >c]{ ^Q\uDeLtJwW}mlqs`=?4 '& %2>==>7#AEIOLE>0%s4mAxum\5hh_KWx`DjIdo xRTXPc~bMlt+Qnj*T[C Rh! ) >aUcz赪 gBigQ&[A lcaN)uvnfZ]t|b@'5DLra/VZfQLqc_[_p{h?a!IL깭 ApClLOAYNkrYcJӑ]?o\IIĦY^l\Uw1愆|[HaO nuZ`IW TE N(43go`LYF,SщRVjU㍧ZQmsSZZpm He}{r`VQv9PcTg\_^FhOW\xRbW̤dl[ khiigv:rovaVWSVF)&%%&$"! *"1554?KA3)/R{]1jw X|{V z`x^&ktlu}tJ+dےuҎW9kB?8'S H}ﮔltzkU_kɁ ;@긻`z`B jﶔ. jphȻDfD ORXh [~nl u_+XbP\` vDSTTSZ|AmTXS}JCL ҙnUN w||TSK\OKLEzv5,Nm^oע<Dds SVg賲وYHGlCV|TS5XNhJh|XiL زF[5EO|Lڌѫwf_jdJdHYCXPo\w [RdM@NLR}Qgc XZ<<Yȑ || up tjslʐ~{jrБ ʏw@!  .21259efehijg5vxw]Bd9 8f~Y(arWA,./+;" :7) _{|I]+C%Noolpuwwqjn\%{}dr{ur wT$ UhՙRcsuO¨wgicbU omKNη A]Sγ_ru6YX@6ϲt mb{f 蔡9w^6JLkءaFҙQƲOKk ezU G[M^SqGumvJbdg NWWa`&FE_NqCc VXuIm`]^zS UrQ7 ZrrU`DCuVofUr#Bj;amg<]xNST^OlV l2pS=BELPZWIZN ~sNMٞITUhC_nЅiZb ǭ~цhΏu·ncts~nɟY¡laykH Y8>JKLFA#=>6!/0, %+*,.+);!,NKNMKN;5}|tMb|}}vkqC*jlkmU;=?)_{|LVEr:;nqnmmkiju.Kc% ! !#dwRQKtu ƒlrjj|ѵtW]`b㹸 ?d eQ ĖŜeUQkN EFQOʆOlK6Tjc\^tU ɖkY]j:1VczFY^ i횑I ~yJjQXfCmvOKC_ރiJ wj\Q NϷǛcaPl˳O~LaJ[SVJPhuWbaoCA! F^_ hz˒>Dj ZJEPp O.P`lEYfrTRTT^UFIhFeQcy2WdoabIe^ 䗦EgeSْ~v^{k ^MKJH JA 7MJJL:4MLO-IKJFG@(F< 79.0&3//1!%!"$  āo<UHqnno^MNQ4"(%& ]{}@Rpyf9U V꺰 b Aàbm_SYXӛTXTUW>A~Dgj0<E]q{nPO͹Fj͔daAUQEG F;hDomd@q YQt}u[ c>sfcZVxJqMZS MW]g|h=kWilg_7HNVhZZfP@?SGh^USe^ yƀy eGt˵u|d^vzxW ^鍈nqHK7%KHJ.8KHJA 9KHJ5/L$KJM>,HLKKL-=OP:FM.9GFI! A7ዏ ǐN5<|M6i a{!SUSh5;rêO HZSNH{qT ۉ [Ap_ 9˿%J Nj⦅~jC|7Xl ǹj l}jlYdp|T 6D0AQn& SeqųX[^i"K~imrEhH!bYhN[[]>/}PK=!P5쯴HYPw~ǷBkEy=IUYPH~>ؙHWŰ|N 찓Lsҩ suN`-Kc?UaPBo]CIQdSkVN^NzJ]<zszq e%,GES CKT`ŒjSgRa^rhaNC%]ɭ[8 h_ooyg|~Ȃ|| ||l`bj́ws\g` ͬuHIKHIE(@IHID9IHF'B>EIIG(=JHHJ7*GII -N9+ILMYQRtL3O{9e8oX yw!WEgbӐ? #aWi. [YWwcgFz Bwrr3c \CKHP̱e\ogƬ׸@ C1^Q bj, kTF4UnI~mmE/v* ڰfWi9 ׷5sJniaaȨFSZ|`Vrp=_ ikRB2i޴@ kx|zfܾSKHSvTfiTcSYz!LXԢk\঍UNFu`j=rQWT WxD8gwREߒZGFZSrdvԸdt@jjbeFidl}M)a>  X9l:pBH\aXY9f`>af2jtZX'g]vp4jn:nV^ж~ZYQczz n:mXHJ5.JHIKHJ8,IHJIHJ4/IHHJC'AIID.FH)R?tZOI\s[\YHK4.IHJ>'FIHHJA'@JHHJ9+HIE'AK5:O$8@ SݚObꔏAW KXZ {w"WI= Gi_<:)"  ]nZ wHN*d@F .2ФntnXXgcuNdcao >ܥw8e &]RE|}uT]'v *JﯚPу_mBn^LL|}N󶠤S(UzNJy\\`MnU l=Mp֣q}l [WܨXTMJYo̾S D  JJQ"sx.7 Nl`uRa|O ՟z_Qx`QFʆ@zQLPX%4fT dV R_,wQ#@N]zPV߰oHJ>(AIHG)9JH ,7KHHID&>JH K4/JJ0 <~JCOiIJ fM> |x{]FQUV6MlWFw ?[xk BBʾβr!|[ KΊ2t rRV[D^M/RZ}}SWDɿñZU7Y@@<>AmpeȱHbS񲞡nFmʽ CYg|^]dsfL JKGcXfec>qd#= |CR΢tt«Y@ Li\w PMS@POJME  =A#W5Jm.;ZnMd^eMS{dakS=JGFXQ ~9uE[FSx:Yu@q#JHJ7-IHK5*HJ02JH IC'@IHL1 B쒐g6K _N'4|zn }]nFi +XNjPx \@\> nBv>Vt*.ET yVVٟ`R8'a @xMG੦hXpSd t/`LWQIХb jl[SPH [bLf<MfS7 Iimlӣm~jĭI x]uhܮT>]{ NCWw=[F (ȕxUrmQLݒd6U2F I\UhVZIHlDqBŦ |K@{ 6F<hVU\\gg o/!orF> ZYHJ?'>KHIE&AIHHIB(BIHHJ:(GIHJ.4JHN/}{ {[9=l Al)1|zntE~V Hm7hVYVj~cU^xscPJYu#]o r VoWMLNi6idU~WTWYWVSfTs=lvUKaES[XךG CeVNEcYwJN{qDD(NXXʚw{q evJWlG KT BH|fF5_QI&` {LjXd|vbbaZP@yn |LSDeEk B]hCCHG @l{oι tq]HR&PvHJ?'>KHI10JH I-2KHHIE(?JHJ>)FIHJ uS_㐐 n]Q5:To x4*1|znGVaQ9H{"eq,DPPËMGQڄ7Fw#\DBkWkw[a.U:agY?ܭQcfg{OoYVZYPhm`;維E ~/EaTSjuIJKcEFecUsJz0ńZM SDJ P?|\4{B^(O)'Paԩ_}^"x}{ KtkFm —Dja AT㝞ixClB}džo=Kx:cR`HK?(>JHJ@&EIHHJ;*FIHHJ/2JHG)9JHJ?G f6=R]wNN0|yn]H:QHPn>\avpwSRJKIhƍHIyRn~-'MQJ[!)G{isE}> \nj[mHXA` {RO^P_xoVb>Lta[IMjz@bfbQmwWFُ_a\Q]hdHtR{K WpcMberPV0SƉ(剄cVгaShfhᣃ S O>S J8aJH]ewc0_#6?8lEUL NML~Q} |mr* ;ܗ͖  ܗΕ̖ߗݗ HIJ>'>KHI,8JHHID&>JHHJ?(EIHJ5,IHK,{ߑR7?p{4Q|{gqe`}WJmbSFqYLSl Ab^ h?sߟ$Nqn=^b\ M| 3ZvjyBNc4D2_KHJ7*H J/3JHHIG(9JHJD(AJHL jbm d5F?fk]}|^OChu5nTjufN?SC sr=iG\ơ{/K;eUN ߱{%@{#zFDbWek fBXЬfVV _ DtiTj.?T\@\D izŋHKWOWMusOg\TZXԶoIˑ뀂}s;Zp[RTTUYVd DVT}Fɔ 6Zauop+3bW?K"s8}AK#0\CSJ ?;iWQNrTf߃ |Łv ßeKxwpm |~HIKE--DJHIC'@JHHJ:(FIHHK4/IHI/2JHJAQHf6>nSLY\||^jyF@fl'[n =^P[Џؚ/wcQT`ŷNbٱΖ[#&NTRSR^ jLTQapjPXȸ浔dޚ~G@Ye3S7xy}SX@`δ iYRcp HݘpuU£`2h;GS^B`BSUjdTRajӴxwzg mPHmvxYLMg6 5m0`xaf(x6VSXo_Fi ם/N~M{p {9gU XޡIY{tc domӗoep |m5ljl;j _^o }m5d_Xl g@mn maHJIA0)6IIHI,4JH G)=JHHJ>&DIHJ<(GIHL(OG_r>=rc tȯ JnccQpyںҀ[OnKm8_Uz|qMR L5; \kwp᰼J _6sEo$>m:Ϲc˅iA C\GuXT },_Qc沘I` VfSO=~6KUtTyv HUM@7H d-vINy ["|y[oqfnkpMMy\`ڮglfnfe.e|ߞa 2`RLy؉ ]*)4EJIHIC&@IHHIF)=JHHI6,HI5+IHIB@RR]Ny3s'nz|8,yCJ[Q`cVȪ\OP;hdx֭s. = Ae ,h|~Ya:d GfHeNHK Pڒ HYTStq'DֵGJIH.5KH K4/JHHIC&BIHIC&BIHL*jVE ؚrUIx3s oz|0IzMf6VFQEtkR'DzAJiz_IYʗSXb[VXtQQeQ/ ^4d}E >B|A?CAGfb\c/ Wڷ@gTk ]鸸GN\sfξ\ 9T R㾴evvf̽A~ʾऌR}CTh }K cGO&/RvAJNW`IK㓆vSyC 8'upUp2lHbaO MQAR`PACwdo\?fetL bϡI oFCB>WHIF)=JH J4/JHHIB(CIHI='FIH KJK9QN?{ބVsώk4s Z#kz|3CbHa X|R E~T` `HaRbw i_z%iHdr`HtQ S|UsNNMsg~q嚎qFB荅Dy V6򵧽ݳіpBBR͡f˵ک; ]M`s|WB6|ewgXܟvxDLCaHsN^s>:p {G5$w}ShzUgA {XzG=Q$MpZTHkԂ=h>k*~esVShponr nZd|эiWbj| aߜiH֔ VN LQSLfQbWSɵ⛕]yota\'Hlr]g u\Gi@p.uCvzFaelnD[ahOm fPirruvLe_B{a략RL/Wh鄏y`f^jM%@ Yw~IkKV_ƕ5<|xHJ4.IH J-4JHHJ>'FIH*8JH M+ZjJ2d jU;"w~NGgzzTl gfD< X>AZ #|qP_ qPQGDisPPfQ{v\zs,aZOAЩ+MaX ˥Zg[UkẤ 5O`[ iyC8eRNEH VKW}7a\YIA||Omva;;`9܎P<`Ww@SU \mI HBi~s ?SNaDi KjcL [X{зR aC GR˨NL  п HIB'DIH J?(FIHHG*:JHJ5,H IH 8ZBN0Q PX'/xvOU[y(mij]O9"zMI_ydYՊAyE_GI ~ 븗UMUgZA1.-5V]?:Zq`?vQS QJќ NHiy[˷UilRdpU@OsZM_f~SOw;V_SfNj`SoD~>?8/efЙͷsSpݜhtY rh9@ JNDN]gSzDX5[RUl҃emV] rXP_ EgYTț m\ZR|lcl|h 6w{ !lBEBd'hb܇CbqByW x|yW odJIHJ03JH I.5JHHJ9+IHIC(AJH L2iqG҉O2P 7nL|{^\wN e{JhރbwfmYS!}ӂ}j Hf 缧JUDTcVGPaRrgbY%GbBk }THݗ g<괴]F n]]iѶ,FULLxhU F[aYORW|MCbf]mWRSSVUQlrz?ט6#&m{hn\S]=JsGZtPWV uMS `{RnayEaSWXIWNY><Ǘ J̏f>hȁq i aɀmLmuu~̆m }9DJJHIB(DIHID(EIH)=JHJ/2JH JDSeHٌN3P mAJ|{]d}Jg5Ki}ޝ=!||tR AɞNEF屪K'yP %[Ṋjpjq4SATT`mɈcL}Ak sGũ A\oˢG ᢀswrtzhUT J_v<f@ vlWGVTNـNrQ:O8NܖRPw }y {I HIBrXcGKIH{QTgP~cM^^}F`WWCUKxSy_RfJ_K̫X@eU\ҳ ΏUlyl?x?~[~r mҏ~Ԑ}]d$.*GIHJ<(EIH M$Dg왏 _B3Q OYG|{^xb#z<̢rb"+4)Ya [}rrbqTX˃wƵnbD̐I ݓ摇׶#TKVp~KUjye;RxBraeȵYdTXM}\( qe lpv^NIy Vo7mpnunm ~|{ro܅ yڅĆ 蛠t &#!"$2=FJJIIHIE'@IH I.9JHHI.6JHJ-9KH K;dL? bB2Gc 3~G||ZV>Q?~""!,EԕP"ofIS\LPDb@zO DлAFBȰqYγTAsi?YpUPWwK| vdxHا 絥ݸR]pdRenH>˱ ߫^ql}wnFbD5S AFGUrʰ XIOS0?5JfJkf}Fbs*DٶSV zuEuAik @\ JzYEC\ ]Rfgk̀RE YO付f ][KSL辳!FdUC 8ńw⇁1ufƄ>z>~ml dclڮ`>zss 1sts史 rw &$&$#! ',7AGKJHK6.IH IC'DIHIB&EIHIA)DIHI VkŌ"G順yzzR>9Al j?E}~D |~NjCx Z 緿mYqbdRdl@7V aX7p 𹔍NĐf?j[ Dpᏸb|UwH[spOVy_;McU Ɏϱ=m㓒 X vX}w|y|~7Dw klR~U^HCyXaC♒DdG>,y:gK`\<F ёPf c±g @q~{ׅAHKIh\JB Q1P^BLўJMLIqݐWcx j ]r箷Ψ ֨ Ĩךּ 𼱴 $%&$$ !'1;EIJJIH+Pm >f|T{@'[MNm=;yPGndIJrz UG5E WԲϰ sB 8LSz` s`n:ZfX0=W/pVGgAOnkRQY~I`hkK֮ QU᫬"Fc#҉yuz{q +/,Z O}l< YVJVPɩOK,̭kIVHJiKclMQʭNTe }eܴBuS[j ymSuMRWwWcH8MAɄRTiDt\ΕT޴[Sv뼰z6Mm`>1&"#&%$&%!" "+5?HJJKB'FH J,9JHHG)@IHG(@IHJD_EO|GV䍠[=toyH le+zlK[ZAuwef"lI B~h_b}~|ҎH`QISc JcL@M=eU XۜrWVWυleeȔ ֫S Ǹ>n_"鿰|mH@D:)` >; nTUa xM Jfq_GdKJ0ʋi| TUtLdMnUN>JײӶDS'Qۿ_nzY qa]kOުsFk^OFoS|MqIHm^ٰg}=bnpS12 ,mx_IKF=0%! !%%$%%$#! '.:E43KH IB*DIHJ7,IHI;+HJHHL0v}OdL\ڎU ̽EI{dNOF8bYe] XRh۔Gp_TM SWczcC/ pZQ迵w4/]wH IJJG=3)%!$$%&$ $+@GJKJK;+JH)=JHJ14JHHI:FK5 E;?҄`5Iwozxb`O H^CTR jTqST[Z]urX{Q"Ha@|lՏ {A6[>_otAx@TStٳnBwhH_]G{jZɏDw9鋓З^O#Nx p.-E>%4d`5k źöy;_ nPBrXLsݔlGcx}gzv ͶZ_ZmGQz<XS| ~wuԲbN;SKaKOVfOYFAFVbv^Uέj4iXRC ޮpUUzpz q? غO¸s    HLGB3*' !!%&#"8HJJIHJ.8JH K=AytnA쑋bEI{䠈viQ>;FVq J vysnu~a!UU QPmBZ DƻOa5iZ 9z{jb@u ?smB phwOXm>S[ `=yVVOM^r -LRK;\ct5jKT^ ۶ˣt-5OKKT $w\ndjEyw7ESTA}úu6ɏ3ÏfplDcQIHKz{VgRm c[J~DqYf.rXLI]?$YDŶ}|OŊFGhY [bKaDϖ=n_moT ?gpX\raqTT^CWHI CieH\fF˫MtlJL s]drt[SuoA[qna}uoAj^t]r^u}HF MVH$JDzQRv%&%&  '4@HKI*?IHHJBfIDu~ Ɋ؂K[⦊}yz `RUM@>?Hb{ EV0.zyr|HJK xÏ&S?sSk\5zIZZiZc8UzۘDoJBk`gNV[Bh FTcuGeaʌaQDSN!軩fxL`W!]w iJ8>!F ?X?IH LiJWU(E@FjOɷja^rsRenzq4^DzKuRs}traJABGJIn}Y]Y}ҿPBV]ѰH皉HqOHIrC?|]9xS PL Zji{ eeX Gȧ` Ѿý⹦ejV |{xɏbt~_p tvh}mk` WxƺHKCs+ڐ!"%'#!!(37*IKJJFERQWE 3}XTPm{|~gC=>:8:? R^\fs b>AxswMZd >AnjiwUœ٠ ܩV 벬ɍ~'M~d{HGB!c jk[Y XjVSue h뷦I:CsGҥbͶ:@ldi``xAB}eNYYX%2gHCC@AILKJLLWU#S~vr}w1JbYG<xl#p aZiх=jw\`;TOTs4YyROݨXOSN VSW؟Re㨰Y? ^vopH[Ybul ]N_mh 䦳_tHG*(@SC#wgol7lJP꺗mpoշ ;l?ymҭVLYF_/gxR޲d tmbcpVu rQEnrPK8|u"Ng ۆ'hl8 -E\TUDTD:xA 2iPRnɷ|oEeBlK|V8 ĹU_pM0G :7|q5S:K JPLcp ?~&RTɲ6qMzU]WJĝ9Ļ YB hLgI%GJJEKNLJMLKGBCCFC#n}ktܜ:߱@KNO Sr, Y kq\P@R=KLEJX+LIKml^V OA}MVxw볧 ©S izre\ υŅ `ptZ>}qﻋ~~e ߃ȀnI3}phYܔqHECEGHI@/c-_7BD!! "$&%%#!"K/Ux`v|[qtxB5ŏ㴎 >?|MKv%rJc@T l ZŶvrۺ\PhAv \kyJ6@fMА\IAih c(ѿJPYkVnA P;} '`xLP״Iڌi\Q *Ka2k-}yϒf )1y>2_DGu~l> SJ HecPv:`bw5LsGƹC~ؚF[~Y1k%$>EO{i dX`\ :}R{s4HU\FfJ1A}l UAh]` r{brnS WyT˟bhsMb&$&V\I̭=TҌ6|sztn$dAenYaZTM?;R1A=\hFUF PĔDP|.i6[żĚ9@iAU؍tiuuwoJ&"'+Q|h=vx}}{{tpy]\Voة\ EVwPCɟ] nsH9?NCj~AEitEEvXpYx!YJmmCjD5Y^LJ>e ~Wlf܄ } Ȉ􍋑 ܌ ށ z H ETtaN\;}9-JJIE:- ""&sd"gxd^~K,(S~~u}wy撐 dLt Z{|I$pn˃addfUR g- kOGݮ gZ=K_?tQmh 㭣;3q{|ijHwL^ROb^ede]Yn RyGtdbXKedrȷauTBmxz|TseFHtnytv#ͣɳudy}5AumzyPA LdJ WSg^` IOBtQjNsjKyлF>¸Y@x0%0#cy|~xϲpE?Ydv}B֐qoqx{eSav{{Mn3fSvmGd H+(@KpVeE/tI\Ec~G[YsxCH_쟜ufIYfϽjP geӻUQH EZWZ;~1JHHIJL.*4*!Qz~*Knx!w=,vyt{onX?DS~yrwcQax Jlg cz}B'XKD BMvBMW~CduXxy{hW[^pZXwKEo G xB WWjb_c^HR7K_@[_PL_cV]SNqǯaKrK|轎:ѽpd_Ī~rԅ _j}@#߬ rm-DA?[JsNg?wz^?thFFWQeLAlsPWqŶd?C7ɻsqyqpwpxsS0/&(+5DBKcx$o~b.No~~GM*JDXGIvŪv>&t!@KMCYu @wV~w!WN~IaM`NDAwz~lQ宎TNOޮ]MmiVaqqrlVioH^CF_Hfp LOrYucgxgcM\{<SQS ~hPCsr@tS[LwFghwQRo=-Cګqi&/O]}txX>C: H`\ut{ow ='7|znWxj9Y?[ľDuEw3eq_zPGRPȻǷ62jlC K_PCôNLG WQ:phTD~IQ@S_bfDԁTM {RF mpSB@x PqZxV~JM]]DTcOتigQ%L?8=qg`,kx}eyw%3$IXO}ypw|ZD}|f8BHTR!X-A~vm |)Œur|}j#vvuogsr{ e۲O[gnrs|PBu _ҥ ImTY JXR#< | teio``CL%Yh;MMtWѴfvM׎V1=gjh6XXw:a)d{R6IJ8,"f՜nFwHu\^Z[t}pOP(FϞX#62*dA1u@KG 0 YBv慀s #fKsr uqyspvoqv07PfFԭur}zQ横ѦmR]j}ϜzykXYYZ^W:u zSF ΜSUrW} tZZ?ߪ ӷIG v69XWfpΑ ϧʵ[ c_ˇ؃o}fln ln/ws]TR5XCFKMHwVσ7w uvo aG[||S H?wf?j]Pqxq7 }a`r͑ҋ|uɳCP [p\IisqD~RT]iZVSS@w ̛ VйWJTSRTV[Bf<̣VOwL`s`\AMM}~diVQSWsHY7DөxA^aHO4 v"ߦzt F{!q{ l9GʮĽ]\PݯuX xsrSЪTq䢛 MQ@nOE*͸@ЈiTG GZSS]bmZpܨ;ꠙ]oLYƼX߯ZYV Yi߈sq buToyo'awȡ䷗VS~ϴnrl aiOw3Y-_[OʱSPGJta{FGCΒp< ll >f[||2A x``=|ADxYƻӴHzDhjKFuOfCj @PgPT ڬ歨\ԋ_I֤ tut;XS2-asyuT {| lOq}O S@Y4U9QaH >ǻt~ǽsFFTQX\Wn |{dõgUl NMtxpd 荑OgPZafmb]E>aEoޫhMfqDA^WpSf\ixc klzjk{at^wc`} ab͹o¥b_ ^hhg ]qwj6^@S ~Z}ToDeHNQLyNTTgT _FQM ustz p9gh{|0GVS4cy\hw-AM[ܵtnɄD[Q At[YXGeEޮҩSÞL\_wn_⫞AD- ܯvYYRw~q T CL!7Y^U\TsF^U@ trƸf{Dp`J< wdUnqLTm ⢡ {sUbTMX][Urϋ]8| zjV詠ZۂCTtokc8)O@ ~Pm7cKpmFqPBD P;c Gl9n~}s/uXmz|1AQj{cP{ GS|EZC^ Ls{QO >wu֭:vCXu beǤWVNܧCvT`| :`\jOLW_q᭪t~uFD5M"D_?R~wRjMO]@xny[tQX쵧>tR ހ{iBhI(_A| uvnUx NQ\qUHUo;UlICNb[ ehYsnc'nfp3MJIҰhXGrrtg>s}w5:=[ctAqsSmW1y:\UnuSTec^ ᯮw|<S5մvI樦r rSߔr ^U꧁w@ w׀UBR=K~Ptn jGd'@َ4AKFBBInrHaGJe ZiJ uo양 X>4O 3'w|6iij=d0\Q pg `J \ʶwrcLJKeѠ ZpIΤf Pc혜jG\aoA ЮIr;w~ywxGVo3"Ad\YmcYZpM ؋LVq{еQYT[gA_QbBp]~UT P_yGRÏBpl󾫼WegTx{NOx:Ji bUCv< /䖎WOJbOK|^rfWUN_kٙ 9t}Q0MsxPT^Z&nk[||~{DjKMSLwKHnBb uqےh g]O?2Mm5#v tZcBL\TMjbZֳꚟbcDwTZ~A KmwVR[_鵦ެa;͵Oip]l! ѳ }C= BQBbs۱RoN "9tkh~ ܻkRlׅ~u簥?AB^LǐjFQhW#ۨJRSrb7+g}l[Urv|N[̗cU) ]kj!pw8 MsFEqt uqs^[un@dBWԮƷi{uV x<=shxITfN_ v`t 鶵pRsJLLNDbڴWDeۛGe rSk mbq򰋃JZqSE\Qoծ'Ђw+_?-F@UbOYx_KM|wR\WX}}vpQBpmqU ~[cibRcnzC}{` pk l SD}L E\mB Гt_Z]c[Qe {cyR켮B Xڥֺ\mQ|I oRVUiZ CFVF}Ep[Q^kSRAj~} |0To Q]\H h`^qIcVJ|UpܪJvkTXPukZWX`e_│FZlswT |Xd>AQmyHپUSSiPv8H[Ѵ%N,e:^[O(zZiE_KjUGNO=Z(J |jM I|{]ӘN/R2rDy"\OHicx1,NkRy T\XCKMТ䪒䗛Dj3{I9?>PUP:p4H>U_OoTZ^VQKd%볡I;TQUφDfs`Ws 븷txtmOzBJ߉=힛YBݾj q}p$ GX_^[EpEXWJ N>^ISb@\eh ʲN#ÅToKBWREl mu ei mci{slioenm dpk~ rsup ]OAV ^sHKJEPBOrcSL]T Sn{){4#%Lپ}^p bDSWZP>WץaUsRp?QZ EḶŚgMyyl[NLkTK]xL{{㬚iPǁcI[` 2WRWPSsWP`̧Lű۽"FMN)ыigҋimupce'a~k䏌nbt\h `~ yNLJTbPpwXN<TA xvPBYFux@'bz=mK[Zq1JyrxuwywyuzsE/lg1; VtvqX |LΈCo{٢/WQE njn9MV_E vaYSWQJ`IWQfKO[Qa^jSEoCPAD]NFLYDL U kKSd銽:naZE˾UѢA^?0^xbb\lnaJdN VLA }fQQcXɈcUsQ IiW\CSc涒 Cts?eBf ֎Dfzek}גxyKjklim 7iaaiA֧cDVcDLX؈UKI'oy@'uLw/KV~RN0Uv~vukxt|{yOTTbu|yntsq6_oVܿ횚tVc GYIRpTK 0#[}mIi|NyDJsvH[|jsW{9@iZvJfSaMh]'7mʵTuNVIR ?{WjEceL}EߢueM䦎yKF f`tjx f^㕍ux!pϏ_x~vkn ɮuw/"LQN_FvyTc[D FujHvMJ ]HGVoVLPMMZwb #vyz%Ib}~G5yJnyCqvsm/  |(9ϵ}}oto{s{h2>xwpwj=RQ3[M-ݪh2\mJBJK PUWI @[d^FHzDu<>fѹùp| tPV TޢUmOE[kNX\p7Jcv{sxhKܘg1^JZRI UXkҙ' E˲M*`SLk3k[sLX>y]EJ 8irWY>Z\Ebd8irY~Z r߲Zu[\Yɓ AWFJ҂Zi)7'PqcPGXsa\RBk}kvZy3 fNMIWt^N]u}pWOgF/yyws\L&+UXP̳l|~6xc#8[jđ#%5]Uj/-/..%`мwK5?{{|{8I|rƢRפ\}igIѺ-y>cY\ckQlININL`MSReiL]\Pf7= Be!?OFf5t֭MZI+¶~g)D-aW@;Yo YUXmC{VMm3*HSYE}\=FqY^BgJTFqr&N FUTR@ ȷyVvuHEjѻkrT FǴuE򮌒 J(KC`NDfPNl@TKQMaaxY.\E zfKJEALMKnfNn7Ixr7?W&/$)°wux~y~~yzyzuxvtr*n{wrxAhLNyxKp`0 ks~|wwȖiJLJ虗7TJv1~so}~OAyyu}V'v{y~z|b#nCnadNqdሥZR ȏZOgCĠfR fD SC]T!mL; v]d*6n컯Iƨk])h ~0:L<jkCB$EpWe`r*-1-855B-~q{O2zstquv{ $V幝A_yoi}{ Lݾwryuusuy:DmpRyII|0mH70Btzyz=Myvs}xMy_Vg4zZvžfcmR`W7L?nPhJyRصhI$>U~aJDvw{WS?vPNDLdɅeWw|{}cXSMZ΁cTRțEsW^reX^aQFJ ?Mo=yPXIs}زuG?L8Ė^Gמ~A.}zGE-yEÙdߥX Ec]I62SW^[G ve.깯VU`MpJ|p?E"\WmwFUmQqLVykG5Oٟ.yE^G2cZTٖ[NWzWk\ƠYOx MYl٩dLGKPB>5929MQ.9=>tCH|uu[0>͎wv^DSPXoػ{n~zuCV{8q3Pzltkjk rztz`n~noP';~#LkGWLrNkDFSQjzaMY'ԥTfhsuyP+o}zyeF\vzsEpckLKumzoO^fAD Xd}]QRL7YA<P׋SJL fG 7j.9MئX}=,⫸_|3M l5L}]nvZkgnHOӰ`LPO' GİZWPF bc xujxFRGhCWPڡt-=;ʤӶvTYnXdO^u`lETIJ\ ZyqEƗ]El0ۅQ䲩1ەOPwD4s}41eFG DLGsMD H:C]IFVOVpz ߫ Ⱦגȍ홓 Όꙓƍ؎ƍ ٓrBm)=xRNCME1T6Zuӟ_P_2sSP{Ͽ ~b\]^FGV_^@n{sx|gRxm 778(uy{wqwuw!pcPURZpf*u}P^ߏ^F~Ĵ{ls~{^YgKT O"L}RO#NwOt]G|mwE|MWex)|X޳vxpeJmKES?@%Do}uswt~PF{FgNhb\fAbɴUiGH;krgMI crm; b鿪LY C-"@a TY^NʭXKFӌvxtN|FRi[5 폇Q(K( dPIsslOTYC[VMnBYK':zܩ"lF][APrD|N u@] ֙~x[\njXKGe`ˑHD =rHet|sLsSU{ز wg師QW XwѯXQ੒PcR%WĘtotX 帬P,W]-}LxGUJjcuevjVĕHRM}[^\h erŖyPa*3ldT \"̺zdca^_bj|og^u@~zfeHZ+Ë~?nF] '}itS)IyqWEA8|ǸH/..ǸWWz|utu`eO2rpB%6T{~zxnvrٿ{dLI JVhdTQMU `駱G`VJ@nfGMꞎGj L2XlORUu@cfSzUҽxzΦXC\xԌj\)-c~<",8=T`u@:ohidRSU TAKR\LzP uXD}_{FYV`jfW:Fxsy|~yq~ķyX\Qa5aCI(NGUF:zhyTakSv^QLhTQy{]NktwTW[FawGHPLU]F[ۑEUb2L{kQjL LygbIѳes pp8 iodli·ooöjp tsc{4Tas9d[eӝEVgkygekw^~?vobт_sn]c'4||^OǼnp| ^yF8BO|- c~YScSTFCNZoOI[iIFR|uĹϥ2`wk`̺^"@yzu86nvPs;UOaSmT[KtN=_zs>DS\fO&3?5+xqϰ KO `GK@G<p UInGwtͽU`1KH]< [JNL[?urͿVN V~~P{viS`{NFjwZ\[PTXV qHkzG^c`7|gsI5dCEӘk~vu vojn!ofd.cvzev| ڦs5@CjCb[Hfii{_d؍OTvlw{I T||_PY+-5BQWa~*C< [_S@ YGs|TI]FVF:t tk*"8~`~ldc>y22}`^{ 7oJ[FGD`[LULMn{vkθW. *lb/s NͷTeS GGisZGwxyy |nv`Q9K =yF|DnpÝKpa^Ea ]WVWqٻTSgKjԐIZEd{\Xͦ[MwnN­_.=G gmY %vgmbi3^|hy `gm[qۮ0cuRLr 0ct>FڈZ@u$Og&KN]BMBloQI\CuPƅϟ;}έ\||eNm[伝ƶ&E/:'H;QoRWMS}C VGp$~h_pX\^stqu} 4oizO[C fQƌyvRrF WKRzqnPe'oDMEG>%s~Ы|ӷ bDsg\GߎX\/`DcCqʵ]EY;9e ]աtG[aϐZ npGșw |_M;tO nꝂUI >vZ_JI S콴}~.H%EHco͒`GipUܭLbTQњ     0 kSoLOEo|xNi}`uH(5yfhz|Z SUzPRH^/M'h$gd:ɨMR[vU7 lMŷNU|wqd}yqwKeM^]U!TNf7b!8 %xF}K= @m]cF] FW u| byBFL##ؼHGi{tޣOi>?k WLM~tsBP7dn ~F[kwxn|x9|[]ɇLDQ vJ\RHC?YR| NӶIES `I> TžޝTurxw3SĢH_Gʶ1UuߍA@Gsa]Pf\ݹEStuJwnzXmz|371 D: a_S O4%!hORPfW N? TtNϴ]Δ_s}~tsJn~{}בSBdQKPGXHʲJN.~BDHr}K ps^XgLVOsKDCuv}Q𝎋ODs:j5@Fo{qr9P7\SɑYyvHRLW5|KfBt Vd8[WerjZj7K̒@[fݶGbS oNKR~]QZ hmHqH^8?B`ϔ3n \ϮQuW`dE>N[=>E@Uk `hI8yx|"U4 Dļ|E׵Kkc  =RqXvm P -sسߺvox~rF M?H ˭Hz}S ^LDOUc{wbzBx!m`JrtQJ} po\htucM P܈3}UZPLn?SKPװiMjwwm⦡DЛPv2k8SˌubDz|=coqPhDr@-H gy oKETUGaD&7+NF?^bMAe4CgSi껵GAv¬Hk;tM;HTX ~vTQЬFfq ]MFմ'5XUByAH>[}W(G^wbZrRYĨiGw1&w~ D*նOAY~/'Yf\ G^K?JRi ޡi;eZ ;-R#޹+Ěpx{zSZea YJ^spRZiC> i\MQZ[[>XFE mwyh]{u PUY"cV^Pg@Lm7eWДpVN?ґCeQ?WnzPNٹdG}TAфpHśL=P>!wGiƼM #UP{sǵCd`kM?@6}Wae_Gn uywLH뷕14CXDwVnMN>3VĹKѥKS[׭΢0Ku@}xt~Azp-⻶gZb 74J Ms/F{|Mm<N iQ Ak[ yРyz{}xuxqN~H},RR 渲\ArZw[^^=w <dx: }Bhcq uӧZV]t{frwA[czo]Wy jDtx F濱PZr|pyटF CU3 mMCe~^YcQפֱgz{iQůEFwP[I` ]cmaHLK5JIU I 'TUQkH忱6JcsSa>Rhq/.muHWR\庵{cMgF}{^U`{#,tʴf^pXxae # f MV +hCD`GV qS غ Ǔs{s6.8}iLzJ> I~ҶrNXzYzEWMCf @h2J~ nF.i筞tR`mrw{uth>nJPT ߋZK<fMazx Y 8Ee`)H`1Ֆy}Jej\lBG akKWZY/v>J ꪈSX߀hSN=orFrYHQ>zWI `ZMEBI ~eϐdhnԷJ OKX^\λ];QfzYzwgz|XzWMs+غBE D j>` & { d$[x{S{V>,l ghSϴ4= ߨqwyOA9(+yM˺P]AYx NKkw5 f=fLBmDfH^CYUpZ݊V|jַȖ]MQ[cmps 뭁^Q\SJ_XX]j@իZat 竤F ϋT?]c=C\.vr,QbS #jUj7KEX\ N]_i_QT +DHnEXUYP sE݂ X.$ݗNWXkL߭^[rQg˭ֵݵ溻ܷѵҼ黼 Ÿ )NBWVfuifjKbkUTy~Hua]־ټyEjMK}qyB" ȓVL},NuĶwz9VO@a\zQab'0 b LUS ۳[Ys ѶT0$86tsmjsO—D =Lqqc&jybALTkmڧvZRgEy aDE?a̵㻕dPRWU`kjfl{^?gUTXpϘSăFw}n峷 OaEQ`Yv>ԑ!(1]xVvM[C|Ykja e^K[ Ce@ G=^CXaμڠs  mMc*s isI INjFtpR^ mdzwIhzuDmc׏EMu_KXvpDRDJ Lj3YL~dBo|j2y.TPpcH}_]ܿŴܰԼ`˘ty~<(㠵ּG%1^F <zEmn@AMHkxɦ` 9VrqI Z= ޏnXfEdNNGEtj \nQR_ǐjTPQQU\cgmsuqiDgKpNʨMj|wѦJ HxاD8 [g#14t^OHTMLlg `NP ?ps_  SDz .[_tBgC  tn4QK {>fX6^=Iأ hDŽglgɍ[ `eKWpmvn `~2M{grNsr_L`LY.ODS_d]Ӷtvyx'VknZQs7yම\A| qԌLWN k|QIB SS KS `zSv4N`6?, |WX?\יִI+BrtI pJf QWzImGinLbDEQ?aEnDjm\ɄeZ_]`_bfhjvvsRDuGTX ֫~w٭MUMcSO떎蘨ѝPe1[^#|W=V ̕yx}#z RWXfPYzL]Щ Vor+8gt|bc]\\ZjxU JZxjZ[5!_ZGsDzCZR|>'MRT0IʻyoFenHkle |]_^kh0i ѬiÇumm ^_b%>sqRyXe9*iSVO^Ye 3JElIDz A}?saG{USMP N[CLZi9uXckW7oƢ~edfcb8):cheT@nKrD`ĝ/Lzl0Nw5VD`p&EFoYMp@ OŶ ;jzJS弘]qsqlK}YZОP}ZrҍZkyB;m=Œ<]P y4eiJX]9rz4g|2m!Հdت}{ܮ:qk :qLV茬 2ky}jNZrN8MiPR&zbZʵ K}yp9#@?\ ƵKZX6gE^]w1hkKp>'Z>6|{M}YBQ"]|q'OL`M4yvZ嬚kފmK]Shդӈi݆s ur,BQU`JV`ZQ㿜QNhpW U`TyY7'--%9b:{? wSsX(0ۭFFhOa MO߂NwGcP ϾO{ilOVFĦGL~i`SPC.)zKj^MbvJ߽uJOTC RiESetqPD.QNMMnC@q沪 BīCYqZaXŶއjx}HV]XЭf]jr.3Lz)F:HUEVHTpr|Zm}OWևcapdG >V}~>&_geSDQpWZwoO`_J[그ʑiz|H&s.M m~UuckCCSjv}zDߘhKeyrN#AOg*Tg dYHIŒ'/Gvv7SexLm`Oz^BΟݡk ׳m|PtQCδHmևCsuWOQ ȿsXYaZI{S`YDT֚w_#B¿0kICrphւ||1+UzRjIPU i^KXPOI;8ɴUtI5Zڮ׵ہqwgfj3<Fr `A'1:d}R\VS`FyFkbyemBMadFQm w m]ZE3olcOM?#tEоx\Sm~~vny{zyfynzr xFaTܵbB+b wLsڶ{;S8pE ف@xCSJkn]kbtsDn$@aYigHsgFX`qwbԶ Gv=6|znO`_MVSSwAN}[~DFMVS]YzW٨mCȋNj*:gEjl#yQgFҦFƥ5|ylMDMqȻUK;JJ]RPa%_@[dTd מ|f^`T`M 4Xs^wDHNNLIz hJ{b0,0itՆLdEG^>M\P`QejsHkn9件{kuMԷGhB)CWTT hLPi8Rz~cPy¢D P„?SOEs[zwVV4oýŰith\wv}zLLzYֱJ=J COc ǘAKGdwPbjwHvcSspZBߒLiXGRW L6OR|sywsu{try{]CǶxc}BiO￶q{|Zܲhu=`k] hr@z Щ>%&zQSi]{`п`4Ghk ݡMtKc Uw˽2őEt|vyynXPtM^sUe` =׏Q<``~>zŖqiodhq^jj m]Pkjv_kjdXyt@-OoXt|akgela CzW oCAHIrKlwf^nE|㷞RTjz|IQ]z~.UUU\TT[f|XevTX=F1 n?fyY5Ju*̮XG[Q9i2D_QHjbIeWo PDa^Zb&ȴ sxM\ť9NTfNcc 6P\Qt T/tfqQº<9_ro5LýѐI܃Xͮuo|{{}}xJyElZwvԈ\᷾}s]IbʰhyrcB IU$FmQOԶLzVoPQoTɹRVsW̦ECtm?V|URĺּ_`] bK1#Bv oI,WlO^hn?BKaZ>'ĔOEHSIZ@zfa eUu9qs [^sW|ې^lNjc=u x]p,ʃBpH}=MdT[߼WdWQJoͱ][Q^sXzw1CfS -3IEUUUWTT{IJBr^J]h ?ufSOZdNLc_jyuvK@I@L(izvK{x~WI<;GTpxq󔏑AݜFSIcm?oA{Oi="XqhpFw@Gz|{|uZ^9[BP孄q Qf_hj^SC,nQ_U zqNN*tzWq̈́L@^i?WD Jͧ CGd`:XOPc=ZQ. rj8xb`X;X%X_9ҝMJ^@ln=V}>㯪wxPb\yI \~53 jj xUy:‡aUz:ڈWzAoZFza vs▚s2USwAyOJFZL؏oRue\xT jT\\]R غ_[Zq~鷸Ywz G]?:rUUUWTT{GYRFP^qRWV W\WtrmC@cc]a;ߵysverP= ^ey Vcv1cZNqQT_̸LakO2ՙ|xt~NtUxJ{sA?t#QTcaIRtkQ\`?:JMׁLfI|m@V2 sw辦G˱\@`os\`^TXrɖ^LWʿ ErhZntwyuwPYPJz~_rI$FLUWe\˧;9Kx)ڦbZo\Rގ卧 䘔 󕗚 ڌ!Ȋ{ sF:E:_Ao;gf]yJm{YxqӤTbÁTTx~\Tb dzZ{~C̰][OixzDF+ѭUUUWTT_i?KWߩ]\s O`s>|urt ˼JgK;VǺYRDv{N;NwgFvu{FYײ_ix 0[̌dJXCj ZMkVZoHIʩQLOa_]e[zI1q>IGnN$i[s> x|ivP=H𢟠 %AUWD@kjPsXWmlb\ e-EE:N\`CkphvUtpϜiI K LgAWF pFbGˢmNĄ?to]hE/jc_e-4j_,8~zs|e$HÙyA,sv}>Qzt_Zѵ^T7vwy}Y~k[ h}n?J r`kCmfRSQbtN׽ٚ^]LrMhĆq?*5F>3pd]f]WnwGt]z[)JbZǸPM]}?d Q>e oWlE[uNroMj[ ^ cd_AXX*_m@IBI^eeZM[QJkxywY@ɴV.ŪB&UUUWTT\i|!^XIS ]Rr,LTTj@ǿN\@Ji[10hIfB݁LXw 9gj5S"bjBGDڛ{]QSOmV`U OFQEas_0lq`ru{|M&Eku5-$i,R7EoTL綾SIb\tdEEQY ΨTIq|_]A7NNEwxvЫzk:WeNh~CG۪ Hx }txrL2g tPJDaE)(]p#Jöljѝ~wxw}M Q̐2 p75> Mby yGZF+JjWNZ]et 39~xt&a\[[XkmJD$UUU~Vr ^ TVNHˆ[kTbpEi[Z_rU~mHTr Y뼪iuEV̵kc H jx{tzʕ ‡jZW\bjZX~MQ 汋,Y5uYU킁EIZcS PXr LW _QGFt}~J$KDAU~~C/xvr{r-1hplY$sm02rLɸIﶺJz:^ PUahfP xq_l}aCQxE` M5?U`LEYO]dQZi/Lnujs{x~rxxE^%WWgCWmU;TOoEi vJX\4SP`P][ j~sP CNs[bheFIu_\wG +<xt?2H#UUUGRTq_ T)WDu'IOFCǣPwxIzyRuNr}#w5ֳpk Gʆӌ}urt .rzwQc|atO ՞ p0|8 eS y@ecV gTZq履S u5 wG=f1QFɄza(#RP*K;~rt}^vLJ%N*9pLCxv{/FdSwqfSɸm* 2nT^Wlex TddcYY``aXYs:лȶ{DACՇg ˁ@{]wgYw~~k{P#K]bXd?dAa\DbQ}]T3tIH}h RAu_?b_HFTKZ8sQ_sg FT}xqHq3I!UUU XU T䃓u L_\\{GmwYy7WX["'gKQz ЍRHV$n~n~LN^l g}ɜzUE]cJ=zDպr3/HW #]ȶ ۬lXtyeh E >F ]KRKjyOA~Y4$]|%xҹ8GmLERbչrz$-n@H O\p0|z m/DQ dX|}{?$aHemmĻoekh$YDmM[nQ^>RIGXIwIMSdxcdZUpWG^tG Wbhoy|MD1+UUUH]TT~,`ۡONXWyJo{Ls ߢx|{YOSZv2Q賆FcMgI? pOL ޘNH PPn]^_OMۑJU_@ M˔{y{1{JY f3VXސb0zo4nIpMR ՘~zp?W m:gտ[K_VϐtyT3gwk Zm\PAqVXO3o}~awyVZ|tg ŗ[{ I|u ݫjoY~vCzڶh| ho rzҲAB>Kh>F ٓDeyu? dL,|yttXh¹S*>UUZITTTA{1VxO n_NY] d2z<o OLT[)Qmȷ uyuU}Eߏw@wsKYRh y?BNNfCMEORzz6>c|k ʒ`Ev;I^FXe ENh "dשэFAhiZXUeE~]rt*p?x]Imܩyw|xwsquy[Jktc^Xzsy~mжlq xykvKY?c=K6_WΊPxNYt kPeeUcŋǔ_E׫ǵFoqOemmiZ inI@)s{0A)K}zwT?sܖqEzjTs^ t@1|zm ƍ8O'KfUU.KcTTTxg~nuI~Nty< ut}dtO$׳ s' 7y9I2?oSz| pn?i\\[[Tᕄ1SfIUHvQv?HCWPb`$CPTTs^T jթH~D`IdEJKu|Mm15>qĎ\DiiX]]V_FN ԚzigmqQL״%nspL[ZS˯AԷttyu!vxrnO,7kaʷ>ze~v~:kO~S Y{nv|S:g:3[\f iwPU. P|PWBU ql {qڇʅgŽǁ}mwא`i\mmnqٲĐn$QC|qaWeQTcA4m܌t vRW[ V S|zi ʼ< T|En]UU?ATTTq}gG] t:\FkmIg K{Ib~WbZsn<|^RRSߓryrsP铓GWXpEWcQNO59bFؤ2}P[S̬>nA^IiwuuwgEU7ntv ~>H 0~L/liݓVUws~zH˱Ts~` ArDh·vLsPOmUIxFdhI|ĴUuLJyzt3*nxnrxg?u~{z~|~T/8D=r>Gxwuy{&o{qIM}s*~W9P] ,DaPJtONjdA iU=eL _b `Zꪧ[Ƕg`CLDbKV8ڴ=ҦTV qtC~>>pSBu<]iQtIVӖ~lKM˴pw#.}}|xl7a {xovzqmulnqy@9`mi y|}}d,|mj{qox+RoH]=pDR I3Le\_ޚ&CG^Fq>e:TP>aeqmff e kftg~o gurtmioketɭhlfe hnޘdw rpq0Xf@FhU)dcbD:H Zm{\`Tr_|=Dd`kz|26]6gP KUUGUTTT}[P BSQPwhĸRŭx6oYR]^RyUt]zq||~~sry PY>ܛ}Yy ЖbhHs[R^폊cM@LNNrA o~bHF KWF rWE eHӴNDwSuFiQǷw o؃mjrbB~LȯgYyjIoEKRmL[ =^EPٴOUBI^xdQR>k}jN{fѳ{wmyp jUlV ͐y Mof_ˌ89tAtG2_GOG橎]Ex0 9uPK<WJεe2z\qldx{LOWwMpr ˘N9VyK~YKnj{xdrSGπ`bѹ{qvt&k-񦐕䳥9%`þ¨0~+@O RTmhJn?z虷 w]uOJ]tjSVo>=N'6WjׁS޶[}_|ɺ:R\ȷyt[YjG|yoF '&zKUOr^UTTT bzM(_Jp[k=F`upW~2ПFfɬnzRjtsLOէlt~}~vz &WK]FUUTTTsV샓 :ze\a_MT 1mqAPĶu, ۜ|\K|tt{9srjxss܇t^ GhN_Lʗئ5EQd`Tc FfGCW ZaܙK5ugKB~KdG P~r o]Z歳K OLGn;d fK XJzOO\~AZEO d՚PUBp헪o}* AVi }ݹXZ^/Y,~q[L6KEvU/dӡA_v̼Qf}_Y^~·A|ozy%KԲ<  gKKUUTTTsbV-Xi";\` wsIqɔε]hXu ^cHW6J fiklz]/Ob HgHGG` f҈\S^5@jYN[ ]_VQoJՑkڎɏ:eI漾SqݹH ߫NV(ѴW䶨f> AE B`ԫ ELSW~^XtUlXH twC \4ہNfOMzBVTfRNtM1hfpk)Yͺl}_ \uſ ˁutyu{¹HqUmKDBUUTTTv-jHDNY^Q% DGlٳUJNǓxO 6 abhZzIsVD\J&&yvKFLw X}6V/MrC?>H yZF}QVB`}^IevvHq>HU*M఑EI @x\ڵHWSOQeϱd ҕ qEG_ϯԭcb^JVJ3 OQ uy[ gc_Fs<\dAEDHm}qy\ hu dg qszhau fauf ih[w]Վ9qje\f~_YV_E'zys ɼJgTNQX^UUTTT`8_ j,XFBwP9o׈ Y*7PHMNRHT:f7V z dmvoŰQiu뢾qZUMUq] N-L/qB'fyJDup=wK묎sSV^][R]na|TG ڮIU [cYPYNrõ eX 㹲  KWcJ@n? @;wlp q}U ߽Q[乹gH TSM{w dM6BP[y~ֵFo3rQbYIu oZNbX^lٜy eBdl^kWBesxαwLRn ߙ~W~mgs ^F|s {Vܛbonf d9a^Z_CcR|}C& iZ; bG~#UUUTTTh D9S+^ձzGPT{t +OxEWVjIGFkr}^}dfaaӶmxYۂ[%xE _IVGET= ɷV\JkW٩+{ Aɥ]bTR ε@>K 䴰Wj_F ֱƵovҳSSz|QabUu'^ZXO Bd^v^ edl ^MȃO ɍmZ ^xode*cuzfd wrX]\_~f`iy%E c2aº5knIFUUUTTTvFf>|^^|)CJ{zؓ~!δw aaVEzKEcNSqF^ŋ PȢGQ{RyyҳH϶lFFS7^zE`QVo]]⮘pn\- c{bk ]qpgyw~ulv] ůvr[۾|!sec ACH\\ _ﰨ6N~xwg e¶'JUUUTTT]UՍFqYmfV[V*nڴHa hQSC kzxedOwcXtB uQQBL\sTX^ Nc@Y4  FMʓp nHתL C跖k[ ~M k[TYi꺷 hEFH@念`͉9S J[V xs˵h?~Ӆ[?' < 5\q^?CyVQEL @gkFpJM r^ߑZD]GYlFrvZaW` WxXhdgYm\~[ G[ܐSw mFm\Q\sw'Y{i T[ZV _=P^|zl VzfʹXUUUTTT1_G+ٓbaepuxbStp0s PBժNOtaDbQ]^IhL_} xq\d ?jc:ŝTCMۣQn MfѹE\m_LeނceDM }_bUXLIQkRs 뢢]C{Q?POkdڷpXIV^[ڐ 񯏏 e7W[= |vĶG]`bO_lwf够G8{QF_tKśSrJ[t`[ Gd\| [̳pP09||`tg_!^aUUUTTTKXN? oyAjમ{;u(N\?LyGuwjJhe[kgLvE|A&AxooNPIӽdYdT =t\Pzljč[~ HUyhqgJv[Bu nK9F pHKSKh|zVè]Wf?XJɓLٻ ޺sLʯ aˡ `^@\ wƶf Yy٘-.Drܦ {@;F䔢lYNK EţطZ~TG8P W||IݹwPq UUUTTTgxAB b|BuT͸mܲ@kiپ DcLS&LmxU}ewq SaL_AB>[J_MlKTcWX `K֥oN >IhQa:QRDhG 5ޖO<YE$BU M[PFrY\ʶIfVVǒ ^g#Y_tSJROɲsqywøW= JqpnNي<_ ZPW W]euf}rTQlWf{|,JrU[W%AY UUUTTTPmL6FUM7I N5Z@bl1̾ S+CO{`S%isoqm{SJlr<}bYUxdҰGq MUo=GknnVKQ [aO @٢gPN ;ktҞVWpIY V^_?Yx'_ ķmǫZط F#kgVOhRNu+">?ﵸXEWNPalq KGXYI X eO]]yWsn[c~y!OVDz^nHm`XޙlO[z[dWfQQ wmP;SXYJK[Vtj~\`S4v VWq J>V^zGa *.w QSW > b[ŞK<J"E}ynC-v UUUTT?N``wBC>8blVR;^zE̙@S ķ°R5L}]p@E dL\}P_ғ3NkQH [GddaH |xyO\]sKcOor^[AUbu#e\IadddgD?Z(Kl]LZs̝H¬ͭ ҪCBw㾖b%R4Je芖P=\ B` ]WV]] Vf.v Fq$slh aۂK}=fz|ZKH{UUUTT WdNBgTCSmçNV 4Ķ݊iVhwJ#v쳳a'i~lvW:c]N؜w BHDOXB`@EY?l {gsKtRJrDeMx8 QGWWzJtnrHBdda[mS_kL2¬bccaf螘֗cW9 r醴Wۋ^eldZVCf=e{mĨtEsQgyQ HY NBºK~>ûvxEF{^9&UUUTT1[Jv IddpbZ^TZW Dʸ կ^ OWbx [Ji QLYa6l"R~d\W𘏎nN1KQ WiKSY~ii~b\AذQ}LI{MY]Fyd0(N ?9SzTrIԛ̊>Y`bjuYrNV@Kbᰬ߬Izx~jťܪf搕e0v]߷_Vl@HeL*BLnjs » ߆葊߆ ؆  ZzO_Oy]\EL?sMlvy{.8E{R:fUUUTXOzX ]^Vԝ`RdFX|MNJ墝KUǵ# ߼PEG US`[d|BHp3|M[=,H|3^PXyaR#ccf˔ \U`RxvIXD=C_EGGIT{I?LPS ֈ ~y]ZTE}p] N՘Fd=OZP[Z[^e{bV{ljL`Ry|RTSOUIR™ǚvnҮM |OYnLBV]Rّ|JtLDY$YkBvMbލNUUUT9_JTMП aWyWaQ<Y7` ݫm}pJBRVW|#Nlb'`ed{x^EUTz,goCQeUUUTm2TWӟqQ_||}wWQc ﭢRv[MxJz} ? ɬPvCUSU[BriIj:Gb~Y)Uw;$^pPQD 3_S|Y~gDU RIV CbJHOIC[չ@vҀ40,nH ddJLHUOsVMNW o Wm8K ]Z}y ָ^eJU -KDQJ@ :]Qdq~wyiɏCIQǐ^O[ SSozs@^Hac@ rNKjW]Mۗ;Z?_OMY@؏`d {`Q]o MNՆlxUfW_ JxdKz=KL , 1K1 FRFh|ƕw}PXq}w|>Jf]QB E@ Ss ~vd`+{]AAt{\ANVU' z}&o|`ygnoea֨s@S}P@Џ c`UB°b5hzw~>hZS^w y;SD .[ Y`UUZ}IUT`qJf~?󵦐dNW%`Ol_"2{߹ޫ\p  3i]sk\Me,Eݭd CqAy_n (:K >Bw ȣwM߰U^ YRqE{M yfUz z8=mDO]Plfo]G |W )q{&o~V^x cߩ(rkdZp௅5\}e 6Z}bbⅯ XgXCS}YZ3y[E^ayHZ8w g~w&9ZIц^GJ na\UUE]qTT=E leՋoPힴb!LSn׋*@Ͻݶ?MU=  ~S|e GuW> b}A1S^ h\YUhSﴡCVlwn]d: D`T boTHD {}KXWڢ딓GPxVvwy೿Q Cki.i ^@wnjSZZ %[lL\lobeje:ÝHCWXVcxv zQVyoUQ]b<+wd[VFSsJHzU8JTTT\SdweK @ʳM{b)JAN"{韓Ɓ:-@ZmIWchtDptGN^aBC PNEѳfnqh_TVM]/wdL3I_4v9?OSSRWI(O+;kҫ_QtRFSMu\aKZcvFvlU\zEliw;eFC[w|Oa~ѳ|f~kviɝZOMWZMRARJCvIZOS{olIbq=X[ďCHt^`_elM|xr %Ƒ@KK}U TTTY<HGQ jYNJ@߶1 4+pcjKM >lkTXRqy@JSO\RJSSy㝒\\}NoN`}FXœ:Jl=6>.r CqU] R]FGb`߳YTyQQṗOTE~tox{Pߌ]U[K;oHűbkZkVLf? {wѳFҀIdv@KjapYe<cQr?`VO<{bώ_JrŻ\ny|V{RjރRL}KKUaUTTTJ0RYufP| Q᫮KYNie߳ Ov1rQtNPKRf[.\ HYTS|QIa۹Hx<Sr,FfYXsE1]66eyD gJpGH T˲Sk E VGkQMǾJu=QV6bNurND}ubhګ U/DCKbKN ky}h뻣cGam`ekukB@C#f<B` ֩ ۬ʲ³ϪЯ ΰҺVtf\qVAlKjhH;ֹuxA",NNKK4 UtO^TTTSPՄ_ٯPSSI}pn[Й_Xty8QAar| tRe\v\,bO~AS _[ik\QޔbR^nNP e`EZXpB,ݐ\W:~-gCYScrtM?|pBI~^)G"<[Kox m[hT?NPs@rb TޅE^vQ۹_A[zpSQp_a{zyʰWS[Xrf^gR½=@OaДpxL ipєpxu}TdUd ̏i|s$u{Zj uquݳXm q]b^пjgB>ȶSoTmչA)zxz*DŒ<oKKZO=UlWTTT@R}c k=rpIShI'|1IkL}XiXvBNREaT jJcHFZ ]yqZ3TX8VvM4J]J~>g׊Hq"Bqg8W|WRh𼐼b%d/Cܦ P?oBHokLg  hxi\^yUaPjCҬHb_ ﹫S@SAYQ>Q k{zk깣 hD``tDžNvjXIƒƆmZƑǑxbx{ Ԁكdz҇ n~ 7yTi c-]_e]oL?ʶ><ֹAFxv XHHO TPKKdUOUTTTUV qQCRZm֮_xQQhXzSLHl[0rCcTO/ic^JUWD~CF`?D؎ UZ~Wr fcU>RYalZVZbfXj}]PqXHLIGAyVUtKqQVktMHWsutDe6Ӛ iCU[bK kbvO u~y˩ s.ujuzMjM tbZYfg`RtX sfatXph1v\{q~^qLo Wϐ}l `i6baU Tʷ=? R4ku`M~kU0ضHMs׹^{zdVjpH5NKKWHgSUTTTT' Klb_@AJ] D{OrN݁`%>VJEOFp&\NO5a &pJiSCڵ:\etv~uF`] aXHώtdRl]dr ǖUPبrfXm [ÎpRNscQΪ TC`pw FbYjnwOSⓢƢ|jZ_ \smPsz{p>i _\GTTcHK9A'?HK}p mimuI].y'I]*΂_Fp${yu䠤sC bú?j ]~`YOA`}_iù<عzw|I! ? FKKKU8@UTTTH O>J>vpnN Cn/gmYfgvfK ~^Eh's[GZ=bom=IɖDsTQj<DWNYhI2H EnMW ȮdM UL= MvLhPUndPjub򯰈Th EQVA!phZI$ma ªpz~w. H~HUxQbZŌ'fK{vOZk~U t|ES\}k{~ t}gepx'e`٭xv`kXઆuyxrMNފaf{L WpƹbeѥGUwb`W`f{~PdPعm_$|w,=~тFhuE ltKKKUUTTTJ Y g~sIMyjKbYqqz&pX`A?'V l;ʹC|4_Yex  Q=IWco~cvuZFrkʋo>O÷ųJXDb\gXp؛C^i@ }[IVnRQYHlDUޢ"Nlu-Ruчck|w就Zi9 yT~vF'lF|fȲoJʿ  ʿ  ʽ пƿ~q {2EPl\R[zYq[dq@Eٹ A|xvn솮ů]? yQEKKKU~UTTTFY wN0(͡tKqWQQNrgl}Nzx]~Fin@w\xRyu2ds hwKQv~LLQjjIaƑlGXlږ<^ARWibpEeTix Kjz tSRT KsG\tj볦"Ku1U2B}s|jpVWUL(etIv}EKB=ZYS[0lDH4۹]|{hĶ긴Ӏ>f =KKKKUUTTT.o`FTo]䧂|xS 洗fYXZM2TbdW5b1V]stFKQUmlpYxe5f L}Q<WQTQLӞB\le4OBߤi<>cN U럝F LR/d bw_Hgm GsGrJHW?Mߑq A kIMdxeꠜ"ut7FKc6hFi}kDHSUnޕSCP?QfE_}XS;QnrHfl[UR\8jlFgķPrGܹP lz|V õw̶ӒMP}9;KKKKUWy UTTTT)i 5:IQS eRk{WwTbDI(LHvl gSJăKלvp\wRrV1Kkք[XH9DAJ [ML=ig |LDBYpnrZL丒qE ThܸiU~YmH Bc\;HyWdzȏ VABE[ ic}S^MýY c kFehRPG^6jcXk}qt~Os {Oa9H_r@J=Z%dkR_u[2[qVY?jnUhֵrgNqݹ[}w|,=zӉWGy&LKKKKUo;#$UTTTMU}zy&oZH]QRZ~^ۂU'C`bS[eHW 9Ll-FTt`?چFfIU ( @_TiI{f=EնD<oLw]kKXkQP৸y_7޹*9~w~ }껴յÐVDTKKKKVUǒh(cVTTTNc%PߪbcJFlIl=O @`7-QykߪWNG @XC` KߥoS| ^ZW:YVx_  T?1`KH}A_c㺴3m[IqUGIhEq9.yrMMEGM3]ns:Y0 H[jޚUJpp^Tj AⱮ oMb fUqXEJcvu|l㷮mcA1v|N^_z{  qxǩPzT;{Fn]qE\f͸J=úXb!xx|23Ȏ??[vNKKKK UfRTTTU<X=oq8S{eiHDFFr}Jo+N]VgVX PЍcLT|5LtmL 5L3Yghޔ}S hbW^ ҌK4[[N@ GW~{RGyؓ 2sPpJ>fQRr0%FGZ8CmWc? KL_abUgpieRRWhAaX~ ӫ}E` wTbgʼn LZfZwWYdBlvp÷- bokaCo`OWzd ŽőAm&bj:4<{OUOT<{qSL_TuZ;HIjEJĖ/}{cJ=?~xvԴ¾`KDk:&zUKKKK<U9NTTTN. RNf.ëy2#^ ZOYi]X{MM`ԩ[ ZJӾCpr[# H>gw[N۹OHJp8PgôWVZYPR_J`wMeݒ9S`bq_y[FHb,Yzfo̗fXO\KDpOgrYiP{W fLqfx:nsߴE>໵ ]@OR{hMitqvޫ"czk|SS8? _nToEE߮T_Ɂ8VR YߜR|? WAx#V\9?;pxBJ:-X\RS}Ux-X[[Mf<;;zzL,k IBPC@VqjPP`GD|GRV :SKi_9qJ7O nZG Z|ylܶgRCIXyL;IZ¼MVMKKKK/]XLTTTe\]jsmuR1Q cda߇UNEGRvO\i|CZe AV|[wxp= eTgpUSnvu fM>Қe _k^`_ ScF@D]䓐GRՐIMJMI\e Ua^KgK~cQX `Rhts KlAwLflFoݑ XOWW,P ELvVjUuy Kt︸Wahln8KbPIyEOS;FarreK[$KU}654;)?;rQZMssX\06@twnY M~x"tvn[pQZRQZ{YɼXFL dxA{Dj \pQXMhrpwzN WF̀WuAVO I꼯_JFkQVUZKXOŮ 題 MQJ uXRSCW엗ggOJՋeo9]|ln2_XD{MjPQS NO DTGRBx jGHMJFMwDQSRNDcĭ˱M斜f ObiPh@ Hnwmآ}PMQl?BEˢKȀfA ̟-I̒6(7<@v"?;wF$lSBMu37CS7k%RlNTPdbA þ fFiz|W齖wOS Pa`KdKKKKMEUW^TTjȟNvqnevM 9m"XTuZQ<ȼS9}l|xJ&NNn{1IxT@Ъ_kj/k beVTSGsOQ=aER\;Br>K`N #NGࣞLs4MNW.ZWVHp~[F8~jiWx秜줡_1 Oqw[a9ki?{0,,'ͫ %'_\|'=SYrjsSOFι@{&~w}33˼纷KKKK7UVe "TTq(|aX\p B ]Ƹh8eIgY&j y]VX5gcF S uC_ ՌSNlfXQZFf_D[ePhpgGPv<WKsI NL⦢SR[HOh_] {HXHYihsbcFGyt TĢI9⠟륢 K9[JeXOdG,MawzxrM٪X r iYZH~Qq;LCZ\SYSWv۹/;}w|" e@7㼷JoKKKKNVUXXmTTX/~D|} U9_mPy QZaA~թ2˽CѴhexYQRb~C-⬧rJyP\Tq^g^Sf Ab 浣 O]) =8UY la?ֽcc Տ==p\ވELR}m|zkIneɣ ~{ȵPOGG:Te0w7[ |NbQLGJcK}fgi¥誧'spЦ}TY{ԭRRHnppMgSGvhYM~ vC!tkJn RZSuFB5NGqLS}qξrRܹk[{zi w ϴ KKKK_}R[ݳU:^zTTa!ԄK*_YYPZ^[lpSd`fͶѵ<лS^tIZ րXPrH; p䟜᳢n~pEtp DQY ~yIQ`H ׳SMBmqVXeDLy[=jPP ;QV}瑍vZX E!S^M`Mpefd `=aDN6-vGKv VJ^{_qihAk Ah@"kx[u>G Tx糯 ̀7+U`Ii W@f٤ZMRXGky+SށduBfA]f[j^wcsRkTCܹsx~OԸ.p=KKKKZMUUD] ^Xg~x@\HX ֍ E=\vQ dcJc ˹}IcGӴ þGEWSPt|S;aYF]"Qw<K|KGٮdD[e?PMOyrY\򽕈^| =6/ga }L_ IŹCJɍxGp\3Q xRm`?ePXP2|5pl^CUg}dPGe;D TӵLݬçqYiZxk I;,%6LMYvn^U[eX晊M +W]_YA ?WP=FJʗ f;TNS}.l_jJ.g`TogWa QʅIW zXGmH`m`qxG\fԔ۔<g}sfz@ c> ViMXRn؁Ox;:9DlvmkSjJݹvs&<xuB\\Oŷ^MNKKKMEKUUUT6ncNs"M;M XTa!ǽ ZSĦ@Է ՅcRTRgbJ֮Y]JOîlr|_M^\gb^bXPz[ D桋[Pw:O钍ǓmM|[XypTySCS`tz~϶ ^R^ErYbJ0@HJlۊT[~hNZ ?t>` ⲕyUY\HaUv_{Vg~@PeDC䳱Ѯi[ƣI?d{wjYj7 [V9nc]cJl^STX؁IGqIg`Pry\:2YbV_d޹S|{T K|k@~,LKKK7KUUUT =O[ǻ4['RU Nv'ؽTSbpZzø GلC੦gP ⚑r}{ՐŲPVuttumV5Lbs=^VWS̗\nL]`䋏=eڴFuH CNI]g HPA E𦕕UeF&ZRLӁ>_SkZIvR hMWNzYVevvdRgZYcWٔr_b`_\OY|yÃeZ z`WLYYٳ(FK ؁e`QN9FB>pkuGE߹ qx18CB8<KKKK[KUUUTAhn`zZX37 iN }[g UKJưc߳ öL: mA*aaFS ߾pxvΪSS +VO negYPecs CX}WEϕLƌG?>:PuCGV BvR gBbh I㶭 >akCVkˏV gUzhcNgIcݞHؾ 'CbSޱǮrpƾEWM6y_Zco \{ ؁ TJ9MG]TYWGe=C0A~xyd |]C_}&lKKKKozSKUUUTUHY(Ih GӞVC >o.Ѷ鷹S ˹.<otB[_F q!L˼ S[zw~p%aft$:|mNmdqHUTUYW_þp QbaġxBwUPEQoI[G?{W5e|}N KQ γXzVIKKV<:iT` BYAfg>@Q UOCz~q[Ъ唓 t|캼mz¦Yu]2YZW ؁[SdhoKUpNzalPj`n^|zj /E>ǯ cKKKKmOKURUTZ{}V~g[|M Iu?jN* S߸PO\ ĺȺ吀;XlcQىqy*~}mqgKJqswDTX͓k_XYb`HvQ;cw|CrZdeiߒx :\LCbGd7 zq V`XVIZNdz :2 cc\IvCinVWXc ξɴ{q5ﻴkyE &7rKɿ_Y}| ؁XGtKKº;HE^4|Iؐ;…O jz|Z#K9Yfb Z8KKKKRKJU{rSTeA^l\<`g P_Xvø緛Aص>Z_H| Ͻ9){fn Owp|qux횱|0vtdY[ldUf ܘEcUu2:dbbc;>i|d AmH䐉Q LtAATgnD {@q\CvHId͐ ^sboI%Mɒ 䐎 ypbmeF@]3kyOj-c[Sq[H'=7zB;؁)_K[j@iq`yTMҰC~Fb{x~42|se.TKKKRAKdUYaZ>G%R,<]YYVsLLSCx2ûԧPMڃ7۴ŻIh@ zVqvP7sPlxP\c!"CZWfqT}Xj@KKU ,=WHxSI]iԱ U}թ !BӮƯԻ DR}~GG,Q.qC{flVDRnbpa؁H_}GWu¹VE͹vEr־]_D C1xvwd WvKKKR^KP۶UTkǕR? WٱN}Lc Rɶ7s՘2 뻹C Uu# xT񼷺ړOc aC}Fc ےcqsFDB{NOYWUi}kwGMO[Ee ug \[k]̧fوCkǒzf@fGDTг^LjfVQ aTuAʪLĴ[;5L<| oUWl ?}NN=v؁ZI{ڸBª|EHXY@ ¦B}vx}8+qBtuKKKARJUUUVBGR밸YK 2dYOjw)еcHTc,黺hmފb %=x䄢M PqaU rt{MJhvBU edOk @qUFUVnpOw7DyJWj^ZHGQT Pe6CjL >pWz?z6DM}?Ee ֥JMOg[h[‘qrGNK@X>TTUC`M]A؁åbV PP辷Eͺ̷GvUytY .;xy#Eܶs@6uKKK6KNUr)MWUT"R Y9UޠqżST_㸓>Z¼I] 濵.\V [ؿFe AWKʢH ځh|U1A ԆVkeSM STJxX ]rs_ ?_VcCiC E\pT \ڏaL :M byR9SL Pe >N  GxCڶL@{~u謥步~|}vJǫN KkpaZKMM؁¾hjfQ95yzϵiTҸg{{c|t{NguuKK Kh\OSUUPTEUTCYYFݑph~ tTɷöbcV9\pnxϻ?CܾuQeٵQzEU UA =cIt^P g!e~ -8QqpYEXDX$GR+-DKH:i@R{QKTQRXxc ?4!_Kbf=XNKaCS^z~k~faF![ⳮANUlMݍjkqwT؁s_VV\dcbevJa_[jOOٵ=¿ǻ ߓqy|W1'#tmuuKKKc[KDA qno,x f+1.o=c>EBfeM!w(˄1`sFI|cZ cm@O6IKJpS j`SSm#F]S WHwP?h 鞖Ƿ{s`rZSw` [EM~{IgiZo؁tA;E UL뺸}E$)岧#4awyTZ%uuuKKKUKw"[U\TTT~ILmTW~YY@pwDZzyBֶªuKa}츸 ?QFqPāHQDΜ91uwFO^lr "bJAym ;Ea3RM{axAWfa)Z˹mF1EmDSWWf)]^zvCCTudXbl8pmeOga*G k:~!pPծ綯 ϶dQdnilnwuLqOѳ F| Aa miFqȡGNJV؁|PTkD]m:(668!z$BFECY0I=}{a b{v u{9=^TuuuKKKeTKdkDOVWTTT !Q&~YY7Du߫v.7>̜b<Ӷ9U]Ƈ^Pk|wAôbMLDfGG񲳭q@,6htx "1tka`H9F{PV>x4md}c 羷IHZxVUQ\SbMTAPròayeS{B VP5zl iaZ{\HYfŒF 嘒%aNԯM$v~鳻ҳR@\oM RA)͈T w;Bӟ|a؁KW ?QKD̶kW6`=FFKM82? my}S 5/0) o'0/9't uuuKKKNOFrVSkMAPJ_ZTTTj2*䄓}*YY P7BMj#˷® rj𶹹e }纈taZWW\ŋxQFbYUU KaAtJ W~ztpQx6mY~-jіh-I]ClA܀d\Aẹr5X~OObTߩDY`4뿌y[VW{^banxbIfnMwgEGOv6 N[cQtflJLEKn }QݶS@2ѴIaHOVcW'\D؎Cbs؁ӒYF{|칸Bvcooݳ:J] *Oxx@(-'ruuuKK&KDRfNPAYB`yTTTLgsYY ⟌j4Zntρ_ Ւ̻Xfnp ~Xͷ]hz[>NG}5 .Hr If < ihR]r zus cELSlr\BaglN깸 k=IV@JV LXSH sy|n bleW ڰRVmeVx cJ< A[NH Pʲ hGpZ1Byƶ VP?VFmO *oypESBVG=G>T}LNe\Isۉ\N|Pj DijG\zus 6jm fm6IF v_V]jHڎaUWVh~t ƶJL;{UwMgaS^4jM`\PBF؁iJ캸;CwmA63u sx~>¶}$#A1uuuKKKZND*/YMITTTT%78@81JYY[Z똇4}GsLKq滸Lù[4^NCܽ`DYZVVh|YeWͳ ZUnoʂ=rxy|rg|k@LҊ ?k95Jp~{RSe<lcuzbstOojN轫 yHMHFǠ'A/gV!M fkND" E6 6pݴPnW'QvXGEUTHţ UZ֥dK\ bcaST?؁SD޶~QvLVDuA M,~w1 򶹹湸T VuuuKKKFK:LC"Sd_,+TTTVW@j^i?wsYYYJ\^KtOS¸V[| cCUW5nt_GϺĤ_RSG\ܑSzpl~trD㍒~Z$0ZEb\@P=SvDJXL^ŷCFHJsLTLh)Ȯw|~rDIx|oKEQYA] TaōT~H+*#M \cmeg P ߒLq|Ayqw[@Ff8e``TOPV؁lUTδDDUqΜTR%G|zq {v ҸaoxuuuKKKdK@EOY{W TTT_QlTߑX0aYYYڕQZ TaVPf¸ș]JkP˷է$n빽QNQn[븬2fʼnrzyszx|uAغi2aiWQJZ\x7{;=MB7}>QI`Fi\>LpOkǥpowyad|}qdVYMPsx}{}nx;>j&bqU?w?ʾFel N~B7t 3WmXVRV eJV~c ˹jjK`BXoU7xgۤdypY\UXw~Sw P؁ ;.tK_ָEk`TTGF LIjz|O g컷 dh|uuuuKKQIKFVpӥ^TTT Gk>EYY YLZݬJsҽ LoSWSeJKROδú᜗Os _`ъtuy}tuH`@SutUp`]FnICE4SV?7hreyDg{'NXz+B}vusv佚~on`A=8x|o{<ȵs(W7|aPxyRFwtrrAbhV]lN  {f RVu RdyߌXމP^jfe[SQi !Y W Dz2 ⳶gsĕEBcZBGt J؁ F/He1x=D*$'SyMb`w}0Dc 8YtuuuKKLAK@fVe*STTT.Zu1_[yYYYK[|L]·ǽ^Uͼn$ӁI뺸 g`A \Wuoiw}zvs֬bTf6w'kPJj7TFG^WQRZ^α..bLa'\;>BK!5zsynlqhfns{zG`+ %pRogrxxzk"bp!s%6Ѕ@ݿs{zyysEUZMzגK ?^FG{p}XsH{ Si 翘hVXVNqKl ֙Ub>QUlrHSƢ cɠGBu~=MHv؁E:ZJl;¹ˆErUo7FjB1~w{q 5t<tuuuKK6K8ZfST:WUTTTƴ{RoUwm~ZYYYMX vN`Jl ˘Krʘ Tƺ+LU^Wfٴ 좛LGxMߦ 0 _SȈoymKDn70n4}GNLFD|@7i_LQ]UTTTl'FH^HdYYYoD n¼STowH^㼸@2DMtiù[tzs{Km}~vr V@Pְ6FSm;dtCBpcjLL_jG{ux-5B$jvs|{}8)NHG>^qmv|{xumkRvHwMvFͻ٪>fzz~vsw|(CUsz|`5zih|<8t@ Et A@ہY `v< WwlOpn]JiGaBvWRgt[Qp\ e\!cӧtivD_\PR ؁!ي?qvAb1úhlEǴKfzB(-jftuuuKKQRKNF{e7FUUTTT<8md}!YYYWb^xжFPL{ⶹ,g<|T^\wўxnR;ģ Q mo{~zg_ yG,O_Cf?^6g07੎Yzh72$b }>"Mfw[GߵtnssV6WWOEDxzaRc-}w~z}~}kazvt"p~s  ChO[Sd OQD_ TNjhQXXWX}ӚTIrEdPXlP=tl\VʼGŨ pc^MivϟRRWWqMe@=t؁|mkgLv QGy 9oǵoq5yx|*:׵" Wh btuuuKL=LKRP÷KSVP[UTTT"%`hYYYYaB Ŭmua]OͲ*^TpddS}Gړ}Y N֯~ku~{|jH nIꕔO붻HB#aã.UJ5CzgMWcB4::6HK앝{qytzy~}}[+&4ct|6G|{~V몊p?Yu _CNaTlVRf `QWM^{֣[RVVOlR\^CEyqooԋgNg6Y?ƵLMWȈLnh娺 d}m|gOar ؁AVI P׸ D?Ƶtm ,?zd I 6`tuuuKP}XKKNK?)WVUTTTAC}YYYR}b =L\^dd`f(6cJ=s]tKYUHȹ yj{}}snaz~rrLljpt}|궻Q%ir\l.,rvuyA]w?iVͻ}p{uzsvlmrwnrsH9CZTΓpy{|wuji zlS_yDBDd]JhMLHvgWI ١Ht\7ƾ@llYnlayiippQ[MpNԊX ؁}~]?lNŷ mWiTte \{}K Yq[ `%xtuuuKBLKKNKk9JUUTTTs pW3Z}cqYYYl]~wW 鹻CO|n~o_(Tt|EGE 8 JTBp nx}toTOPЙRŌs=iSaI8:JqAcR;[m?s}_\FݲmJx<3Xh]2ʼʧV nwwS \ cT벏ja:Th nCRUUTClE{mwQ6 _tr$sveE)q,ZTYvu_QFDh\IwecSVl ؁v^QP C7N [|w}04ԵZAt~tuuuK!KKNKiQ^UUTTT vwVbYYYܮlrM ˥ذLbo_)cmoX宥g@T_i rm~x}|nniKMrOI:}[`~\7& Jv&g8E5vI$̣Y9:u:gA3`I ΕsrrutwxY&7+ASrSu`RdOUsr{j8owBawQga8[{JUm>|:p؁wG A[QvG DbkG \w~1$*=5Cttuu vˤ.IpKKKLLIW[UTTT"e$&YYYpWoײ]Gdoko`(TEa{{Զ*e,zytC{oI"JXttF@^{bz yKMdG};7\zs{-a6i޿&w.R)ČubOuv=KUUUTTTlE MwYYYZ PAɼQiopo`&R75euT #aBItrd JkdˏV!H%Qm{aL={/lmeWA,z5H±.#==Q{zaTlE:oBi)[,`q4]L^n3X?_H_tv?Dq{cNGs]Ut~r3"Zi);wG` [vn_cOwbS|iGB})TZIKJSTRF _y~E8k JiqU𩎑\GECmGvay} ̬i%o؁wye]̶߱ aiùUk: wx}XB2tguĽ\yM;ZWT_>XMKKLl‰H?"ε١#=9:c5R-uuAHnT73/؁qTz `ڶP9rBH=}x{,TC \cŠs@=XVV[8Gheej;EpGvKKKT9c UUUTTToBkaGHYYYq qjYrBZUuϣlTbmoo`g%ȈTŸ FyxFLI(n  V T}{@7s{w2AJ=d<8LSL-"ﺸ괜6LƠgH|ziQZ3`OK4B6=}tBS:P <Op x Fo?TWi=ecn^rvb}roN\Ni yNifgh_N K\fV Q\ EMȾxzYԝj+qLBM+`G͝nTqW@?:I؁tR H涸=FuDhyxsඵ ] Ӏi`UcsiUpvuuKKKMLWc>UUUTTToBX!mYYY` BAl OZ~h{on`h /kfnܴ Y,ѣNl}t3ZPgFIS}SQ}j%UahRO KEzp]z>4iDxضŖ5o{rm>I5 xqEgW+LIk`ASbv?lurujr@}Oalu[>fwhX\RK FfإLvK?wFbTO?޵yHݵFYDJŽw Jal\ Eey aaY͌X2pY֓@$V pK]O dYLT^؁MSaݱٵBGwR\w}w}MUM# ❍cTSV{MutuuuKKKKZ[JUUUTTTlCG؇yψ؅Y YѢYHNP@s2UMo`*M\R֮B\(O XWAD ΐhƩl?e irQDSsZRE5R[9I 2TFuľOD¾?y|7P"P r=E+n_>ټjBQ־EHMQ\sPI޻tyz`}wYg\ I~tQROr:dnb|h_-pG ׬yMB 랃ylID En|"PPgPBPxqѻgaIU\X RT̰ e؁WFR]϶ tb@ dY]!U|x{"dY!>Ԕm]PlBttuuuKKK LTLLߺXUUTTTe|&]J~Y [;YL spS;~k ^6Tpoѳ`c)j:~²ĉ3DI^zN`N IlJ_UfRbb {!aj{QmYCkpMb=OIYUGLP?ktK} ڢ}GK%]`r^VM@ RBw[Xyb\Itx|>Cz=$ ucdqp^XAxm;retZFGI͕RF<q;G}OM4hx;Wd']ŸޅburMbrqiVWdhm]TJ hOl@[؁XeTR̶x`b^ǙfTR[t׬lz{^!Uuݐj]JqvttuuuKKKC[MJTʬZUUTTTSE -YZƃ9YgykXk4 ]iBmooc`ZH'/'@\ZcOǹN[XR| @sGYNTL+x{pyy՝;}rBElTxHS_k6Y&\~̿TDB%8itza^2^X~IÞjWyr[?WiXUo z]LbJ ?Du]Jhz~cgv]^lDj]学_GtDzaym[W\f"[6@u0dr7YhRm QӶDCxSO.4؁U j|20oRU: ᨅa6~w~9^ g;vWTTonttuuuKKQSURW0,QSTUTTTYYYg.k;`=X ;foo``_2UՕxB\ICٱW~PY;sET Ho mʝv}yxfVP|ld hhk$p?EFPAe\Wz羶3A8V]AƙJWHvP}~~tAqEYͫBd & ?GP ?;>AL[k}fn{cաfPxj'[Kr}әX˒BH?xGSKi _9e1;(@Ru.kQfNpY2L5c o5{؁W UjKUn̵GOy U{xv=sֿ@1u-qvttuuuKK9EcQZxkUTTTQ8&YY YBFIGFjmuлo_`nl=i hXRfljo¾ tttuuuKK:0H]v]UTTT: GYYYYLNSEho +_\R\_|d`CcźVw(aۻΨ<>΋c3ylu~tuSGw |JFIP7д2f U|Yo8U X\OmeYsƪo"_{uqtz|~~ zw{upvc|<5KME@ܺ{E`&qz^|ghmۿ= xOdNxCcX_RmƾFYNHMy! "\z_UvV帿\YIDTRɯzI m r޸DT%TU؁>_dý LǷdk9 -{x|/Y^76tttuuuKKRdYNHkeSUTTTC ' YYYY`EnTnDHJT`l_ &δQ⿵FYfPVF  xpjAHu"ui촭JLJBp^Q D3|iBHgESwghzaX7Lj!3\WC, (+5@V(ZmoqmpsU|{w~MG: nFNWUBTUNQI{\^{>s7_]ShdgqO |D]CeR[`HӜ_QIVFx#}M>fEVu V^>hK[mR؁N Lvd W |j¿ⴹAtug{ypƶ~tttuuuKSFMOKGSUU TTT{ hP{ \ōYYYYOHD׳_op>~ ox`bk(ٷ]]VWPZlcAô  {}F jfQS ww¦ӾM%NN"7{<=C[m]ZJlAvcHԲaD/?TufM'?Gdsw;-D:J}~yruŵK5v~zxM(P7% LMFC LJG+=EƮ4 :Dr}^A{}ty{^ 8u||{Rms*,;sp#]?&q{vEs KOIL!(ZrM**:!R|eq2]%GmAsۿAMtY'pH0RjPVKE{[xN2howġt |LUOg 9dgXi~kHDDN|oh؁<;j5 wN z)R[ H|yuYUCrrtttuuuK;-HPKKUUQTTTKC %+-YYYY_hppDnERJdtoUo p}gd` tɳ ]r뵩^ce z@.KM nvFD]p'ԲZOC㬠r(AL&]~]PzU[v*eEFXW+Q%޳|yn'KV}>t%xU%vvCйxJK|Sqr֤Cf m~rxKG g^UVTRײqG!8$riVi Io]_^ UxTޤƾ;_ZKI$oxusw{w./7Qo~wDQ`"MBBNLLAx:lUBUI:s{Q,mm]GV}J̔IRYqBKqIۨXTXO`@Q϶HՒJt~עôeeNX߻jRRмM9n~vHw Cϒ؁YO]BLhҴqi[TV^RdjF\A W|w}<KtttuuuKFL^KKKUUU }rƽTTNaQTVkYYYYU>IfKMo@V\oo F x}CWVUoh< lzL:8 fv{o=`hצmw2Bɥ{]h ZGpcSֻ:J>S[ls`/~Ilwrrvj<]53EIKN)#PͪMqc//eK0.HKQjwi¼WwijXRdjY!!W[xuuSD_ P]>ȲW^ SqtHs>npBHVvOUdzTKO_h؁J7RitDq=e˭w_Wxŋsa`|sy{c5:4tttuuuNQKHKKKUUUXTTe`~шYYYYSy=˿QCG`oBnooUa2}9 <)vf賽8dST]͛ux J{z\_ ѫr~vLRMóyzq߸*HAPb ywŐdI` npJqn{c[BsI uzg@g؁>c&E=O\e\ Ŀv{x0{x|0׶-utttuuuBEMOKKKUUUUZT|l[a(u9YYYY_`i N o߯mIBzoolkoNc⓿+tx|YSfCؓK^ IASMe][״mpyxpj|EsJ_龜irwwg6XTu ONíP3.Tv6-064Ye0zo{osuqw/ӿJ@D G{o{_ga۷~1_IWB5ImcLeXh LNʲ \<_"sW7kxrNӳHuPXNzyєBfw OߐNMF ̫7ZHt_ovdTp؁xHebA[NepTùy `|yquôPO }tttuuu)t/RKKKUUW PjT\CTPlFv-hYYYYD|fCk.GcqoojSp V (MOKAV SE NSSYgڒw{}j FWQS!xthYUc DWDM@`\hƾQ @Rn7&\[ǧU;>/HuqRcXH@+]e'0U+kFHlΛYcRDءBz񪐓`K{|"Y[o7I QRFj=PT[n]_DnTeICE sp;؁@Kj뭧Bƫ ʗW@Ey -}w=ź2s{tttuuuX(Kt=}s@PKKKUUS'^gT\oAE{YYYYv{f ́?pbooodQ(`N }WM L CPVUU\DoeYo]UCjaRmgڳzgry{jZfٍM綠lyyj 1/PՔq Jm}UnuĸMj|D!REfҴv$GhwrMֱ)ګqGOZT@ _^YȴZMpA(d ^ﴱ XJDtlw[{Gݶw]lr9Y\gEnMn 2y8ހTFg朠BBNay npG~ ؁xRIh3 uK;wdzyvZVޮttttuuuutsMNeC3KKKUV^dTVnTh+eo@E4,YYYY?~mJpeʭmTuooo`Ǫ^ eF [K$a_qCannUdQwr ňvn oOfULOuߵt}<8c DpE`ha @}FR HsKoOPGPUKc 鲙\XnN}aVOȼB}jNA+/12eпW a]Mvj_] E2r_hp\H`cb^Ne ؁CCSU:HMN~9.w|ROettttuuu^ij2iKKKUFC# XbYQTDS^SxYYYYsI͗_qPnOoooo#`Gi>vLbfUOYE@ExI@5~ Um^N>xQMrƳ ezuti PVabפkqwyd39u xf\3EPο|Cpd6[_^t||۽yPwSE nNxcĵv@AUH22c?y㷵UcϲK]MKaw︸pKxTaՀ]Qk5nV-j jgghJGb? ؁dZO L_m`uU|w~ [25mttttuuvX OoLKKKU84%TATL*[? YYYYEkh9~oWoooo`J 5GNοFsSB QKXDQlM׎[?z⏓mxtd}cJʲ}~oVj qdi[ǹKkSRppkEZ{WUNΧlגkc`vE]H ؁DKz P6ٰ齮@EtQsx}U mttttuu{E\h-aKGKKKUW\F_ThUuVWnWGYYYYutpZDpoooo`gz>E0rӴeFs\\ְzEF ٍ>彨u{}vnاgr?YfТlx|j͵=C6XD ThCh BT^NQvN}{ qRg8aмKv h؜UFM QqD ̱#˓pejomjlvw}~xw}}zqJ#*?qI1)WbOM[Tܽ|uIcgA[M.bE ~z9 ՘PR{J KZq)]y~$YQ i ؁g rD]roa yH@{U|w|#.$mttttuui7`2PNQKKURVTI[S{9YYYYCFp *Npaoooo`=#EXvDItctXeAX \nStFgBbg L'\oۭzy_MQ}Q^Opw,>:xtdnPcKF ˿ UEpgT-,;cyoJDb}P\ihcT xLZuvt VNd19CHFG󍉀,l)F"Նqx}~|uw~o[B0Jp|-9g”G+un]pƻ.F_0FcUQEÐJNKى_Cx| ;qdPl B畱?#cX3/ILU ؁CPc[&6渹I|ytw{c4L}mttttuutZE\nI^TKKUn[ze~b]N`MnQofsw\`:f~dJzFq ؁cXByݵTA紹Wl_SJ~w}1@(mttttuubsg8/2,oKeFKKUUXC8T> 'gb 7YYYYE`CTp p^tDoonF_npE]2 KܐhTVVXD~PU8cƻ^ZŰ; ẗN 8Im Ol 9Vr abk¡czyyc(>:GWViE Up&Y J QfPƸZ>]w|uwwv{ AezMitKօTWEe i, .t~e*(X(q!kjh@RR^Bćky{vt۩hy~sxLa`}ԮfEjVKpB p5t=tarjJ<VEYAcI9 XL ؁E[uIHR )费=`Rzux{e-PZemttttu%u30$WOWf ˥ ZEQjDoYUu qiqOac淵jn=~uK8J7y@<3M!R]Vyy[l{}ym^A UI cKVU\t Jax^vv&q'~wwBdj=|yj$cѐsyno|f CR2C]~ xX3ACLJHbVaSljoErDuL ؁htBJqFg׵XV&I}xx"H\mttttuuIǃ(V4eIPOoseKKUKJTT|.={;WYYYYHWQppOt!uo o~ye``"piX  Z!rV)¼ͩ JTQ`mDBBnߎRV2A}y ӳ#氢pyxiB}?BgE_pZˁMJ7OV  RGOIfZjcN[VCi<˘qwwutK 񨋍 >Z\R|gޝ3.W֎{&759Rw0oRqk%Guis~x|tfsuiC<^{s}תJnW'O u%\RsbTFmGTKY{HCs:mK=ჸ ؁}r;r;FL ˷R^wx}ZkmttttuucfJVMTXNKUYOVT&MW|HWYYYYjQpppoooJ`Ŕ|ʩշ9sFTʽK|>xO<\<(g ӳznE]dTL8FOA:}@l 6hM@mgJ ~·`{O Q ݮvppytqrzqYMouURdTfqvw}y@G\%0du=Zh$DpOz3C|~svޒڠ{tquz|p`[_rv(ZU2`y{qpdc󿹕h`XyPð;(JHnw㦄؁XNY]ZOTеGS[$G}xz``IFrmttttu ~lYj*3a"K?J^HKU] VTWSjWYYYYe=QppEүod~Dpoo[ PQM|"MffWJX&rǷ˴[c zK] hT\%r ֡ppOW vF@E xE@ooSGtG[i PraǶPnNW |}yHpgICϽGzNeH}txF~pNRjZTb1P]_#KUTW]ľTa^5_WYYYYLKcQpuHorWY]vo oPޖ7gwELݶg{=~dbEQ| ZCHU3ȴlz WEx7 ?ad9J䴱cd̿ȠZLmLoxosSG?3OQt|`NOpxB>%AnyfdhueW"dDK|}u0ʊo+O|r|협 MwX[rӴuvQMMPLGEU^iz1ȞQajpNZEjXZ@ޛ>~lAvoWUVc "e} TWgfmNt Q؁|ֆ=^emaj kM}]|w~&(TQynmttttuwم#[NX8DXbZ4RKWS`L UT[Z,|WYYYYumQpcNooO1ol sǼ~7fǻ#!PKHS#Ż~l Z*]`a (]A{ Ơju{v6`w: Dm8ZrUȽ}RZbޡwsO\AځEQ!1ʱLq-OV[VW[߂zzIlP(i DlOu oA Ӯ1ۓ=]OUV[^]\WWPOWfqܵux|gqN}O;_QZ~bG~<ӄ>Ezщ/mUMrK]?F I؁~E_ykttBTI-~w|d nmttttur8S&/:R:zKX!|TRxcPBR^TTU_~߀O jYYYYEHNQpoo?Z\oƻd~h{SSnKͷ龿M1|h_wvþjINMRTVb tPQ1\C oP7L xnX5]{_8/es@ Lr\=vK NІG쵺hGO{suSD SYq7@(` ȣ`ۼ΅~u]eաM'Nz"Rnu ?]Mp wU]OHWЄmcbKALLJJOOIFCBYiUbỷ73qtb⁸\UBsJ V`Ql޵uaJ ZU؁%y͔w9E{inzjRolzw}#P2|7nmttttur5렪pߑ`)Vz:^LRLLcnYlYTTo ,e*QMYYYSdVPQp*ootHksz YYdQaE|ChX-vǺ漷o HfdN֧}wvE J2|Gv%fӺT 尛byxdtOH>bՀTB 2n=tzOjrT{CRUX] {u>_x`t.IӎT]޹t }`T\r2󾷻vPSYYX``]]`{|uyK84/jRakQ }Rzr]JMS^rB~BiQ[nXՉ؁jm?\ZG乺y==Aofqc2Ko hҴ UNU}n FήjVQ_XUOZS\gX" ` |w}L"pmmttttu mh~$bICPSf{_LKKUV]^VTTJۅ +0YYYZIQQp"}oo jbI@ ɿyuv˻ kMGLlS:EOqP4}fpr0˱}zo4a1E< ]er;Jj4Lh{fSHEcXK5~]5ywfedv PMMm 㿸xqsQSyvuoKk'RWrO"aڹRC\HҐ1T~yzf<$;}ſk(u9>۸zuHIc{Tb]rSCsKp^ +T؁:FuD]HSZ xyxx@dBnmttttuoV4 K.aLKKRUSZ[TTT e0YYY bp`ѷDVQQpM~voo X>3dzxr˼ xW"Aj[ɻM=īɎ <ȟw];E4z5OR!'TиGϺhy{jX8.mPrCxv8yEg=mèL\QN SXӉ%꿹Ƶzk3st_vu=c4@WdȮy˅Mp{𭈆? D gej[j!vR鸯 QL_nЮXƝ1+)3BQulA #dϵh}6uѶagt`T KmRBjxpeWYs\؁;DyOeW[)C~w~<)mttttut&TqK[lyKKKߏIW\aZTTT_{ ~0YYYLcefUsO/FOQQpdroo ߛT \M޻}tytvzu&xT݂] wm%hN?wXEMTԅ^J9Jr=K`uY3hdTGtRJJĵlu ۥk3vf>Q8Vii_HmHeqG Sώ? iI WeRw6BLhi~A;<(QWF_BSX__v~Z؝KOV<~}J>B q_TaUNZQ迃\!7lY7IY*t0jʵ/L8dTmLWd1&J~N: gI}{؁೹…;JXTBKJZvxxr `Wmttttur4PGHKKKY&s߽WPςkTTTUC )1YYYhvE-G*PeQQQpNpoo䯦v dhKnľ< ,C G~-VvYMb}nbL{ɽȔmaܮDhg_3Mrrv'xlJN­qz}xx:naAD= ;;BHf᪨Q\@ eZn4~F^8P(ym-ݻIy^ NP c[$kOa GA:c BޟڙS ؁ж AKYVD[T}w6@TAo 1mttttur6YB?KKKKIqN$Uqq{TTT U0YYYWIbxppgN݁WkF@6IQQQpYpqo젛BTΆGpҴQϿF~LM{[ZjNULa U堤I~i}i hO˿l)5H" 8m-cy/M)Yl?MӔmMsvm\RBy6lH7~8=W}^ NA[UjefC|1<\`{L {ÿg1K|@g1@9Bro|t[XQzf aN9+8Z=X0*ݾX^Q<7xυW ?kfVl_O3 h Oh{*F=TZl*usNѲNIs]MM.,qy߹𼠣bP$Y@WiM BTշҟ EwLhZD=tNlztL*kdFHWq_glzA1 ʸL؁BmVabY\fxx}Pttttu {ttPTKKKKKKU*ITTTY O(YYYhh9hgIWQQQQ/u=gzAob gDöb9ma>X4mhJ :kSJXY]UGDgnx\yneH U!툃is~r7ky{gM{bQa dCmHm31,Cſ?19Lztu|G3\xFAbGkjBg9p Cq jNM`^EYGb¹SWb"j֯dyOQIl@OespJRYRahdk?GFܜ詧︥>_SYjEa>O=CQlQfwX~Q ҳ:WxGmM؁ǶJ<[F{D.v~IS2ktttuTtnKKKKKUTۚIL`TTTZ RYu} OJUYYYb,c>Cx~L&2OKSRR SQU{v ss)'~nwWh|+Cr :TanMdE*xeumx nENL ePBLH:^ CGܟfytg{1Z.zzB;!JT@AUeJ>wbS6cSf``PܙD U{YKP=lCc>'cleemƗrivzNhUjnnH"AexYv IeqY>eV 曾 󦓜ɖ^ⷹ e:+V||MA] a,GCUҳ G#e$sQ_ J؁ ǣoRIg_SI=pzxzp\Itttu|nbKKKKKUcG-SY}UTTTZL`V{[QY B=U>YYY{`6.[C@elm2ě:I;НI IUHVJYapb[n^XOyg\iL]h{5ݤ{ ޳18cܺ `FBt GOIiBSEOR \8PK } X|%ˬ\CRuLk0-hwBrbK@fؠuMkJf6gfHVeH7>PNzxM Q@ĜW PVQhEW+ |`F9-#Sec^RNZuzWGo=G~G9ȴRLpJ#nWʽahg:xiC-h9K >TfP ᴬĭ tS  TXw9!<'3dtTmҳ LUTW_*jD`HY؁ NV{vGЀC\yWGˢ]W_f/;}w~Nwtttu x[qCKKKKKWj\MWTTTV%,U|Oo?zTesfYYYW|5ckss95BXSglY79 <oi1v0wG/cp|}s9˸ w(qeVIgi¸>H-p eEm{iTW~FCT JKNO@=}]xRAnlXv3wƴWb91]LAzGhJ@GVeI=`TRwJhet=\d2UPA {URZF$I7Tgiogd^YWV_o{im`G1s|p仟?UEoT<(oxja}jkPRaYԿiore^_VĿ7dƾ\dz~}l$L ɠuZMҳ] `] upXWmrSiUU؁TXrBƸFȚ9ib;{tyyqkttu urjuKKKKKK]bV$9GTTT}e]ջ~CwoN-|A{MYYK[\i~OcDb_uP`SUf:>Mp{i#|3^~KNzWUܚop ]帺Z O9AB97\O~[DFG=WU?sĶSעuD/7@"'TJJߋS BueU?GM4RSNFVdIRL$jPI eP]?e \m;ri-8S¿JDkUf J6ɞhmunloy|x}\#v`"IawztMoU&vsYыhSZj[qHid%[CVebsnhif̸Y~ \`dt{w,ϺI|xq?3N wiUwCDYg|ԖGzrJ=8Ai>DFn]]1_K QQ n`TGM F@`T п6j@~oB1}z!`qAb(Yy!Rdƒ;ehGCiZƷ5œb\y1UqEŻ˯M] ٮ\yrs~wuguP_ŒZZ TX#|tuE gSr؁ ʸSxƚBOcxCkMxj{w%PA7tu usjEKV[U#ҤYT Te nJx_IH}bYYOO_QhYqQQPOpRQpqfl|OڧIpMWSIfⶸtwgzOɝIR[ENXvjgDcZ q¼ .ReZ-,V"9J Ym fYrmgg{wF6}7{r_}uU^F05^NffU PMNRbT JxC gL=/j'We'hL͗*»Dƻidݺ7MGvO^VN M?dE ElsXU_LL›LOMy +EMGGy؁L9_cğ[Nٚo_U~w~C#>& qu u\}\yK_KWXT TSQm`QZRe4fYYhm<}xQRQމQQprS/`^OARj[JQ̿GlUT[Jz Y9`_P][FrORA2%֦&Y^0NJHJdndPdB`F=_s_SAEE?G]SPas"ە߀ JOs`> u1 WM TD_IVbts><oBcEPjR]ujP`H nPHzGvǭ̪A.kfu7ĭ^ btDjwD؁ HзG7WOi$}w{i{YX ooVoIUiB&ITTnDg^fcXOFڨy_hYY#^mx7Oq%7TQIQQpy`mk]c] Xøs ӛaQYhNЯڭdQa2FfGM[NaBjN kް b))(|b=\GK I7_Ft`Xd?AC@AWN:;?HLPJQz .w^Nz IٙN_gf ^|nYWMNWQfG8J[DКyUcGݴ_GډJMd~UiP?X?4 ̔fWږ쮗q`^ULpVa[XٝbL <꛵PJu؁ c嶹^d}QImZ}w|%LlQJU;dZTTkyv =NShm×3YYu;Fsbys\VJMQ QUQl HLI 1dBDOM xUqZZUYamlΤA]bcFX|T _o_ ˤ vj 95\V\`^aXh9PFKUwxÿ|&3!UG lN VO|92 nF^zhY$ln\O̻H]W:HVݱl[VmI]\SVP?v;3򷣥ᮩDeDŽԙfd_؁ j󴹼BGiD$*ww|`~oUn[ܘcmhsTT~K$dž(YYoa%b`|4U\ pRJIDKQh^T;u~m%fZQ_q)kDE{G FbXnNy_~yu>]r}hfS]m?dۭusSNxFi{u Ԡ۰  [^L6eY TX\? T:MËy?ICJI[V*g2K<ӭUÀTGxO izJPQ PUrNS`leC PR؁ S봹B6Dmwn{x{h$mt]Sgq\Ye*(TT 2heg݄GwYYR: AX #yb WK=sgF^d[Dt0ptI%OǿõܹS R^XP@p][_V]JƳ E`aNtQ4b 9JFWS؁ M崹E~TnlCY~v~L kqTT=qUXY2WTTYxz7E{c: 8ЅXYYbޭBRY\Q>vRո_H'OzHmQRrT !Yón G^lecUar9@DWHYo&nH@xbbLKJRP<pqYaEDӶVf$jR E|.J9?;W yKFfAۨhX Y[ IHHSQܪKgaF CݬpEk^QYSPMyFłJY'i笢CcL=ijFy A1\L ?J [ uKRC؁ Yߴ;9үOEuzxzpL7tuD AU˿YTT ^Wm׭Y >| ؁KιN~TmJMT|w~1WrtsrT ͰȜUYTTT {i{)m'YNn3<Q_AH=kOmq,RbVyGijX9ib ۙjJ\xMԙkm zG UAEQ[KLqLj]L[|vIAei0Y^Xs cTL{լ#O @Nq`RXgsܝgh9dnng Kҋ~{?YIN9QpAiW]G S[q UKFWJ l|WD RϦsOM͠دڜ[pkjY Qo ᡓ΍b V>wccNf ؁oMhYę;ԏnWC+{w{_  [ttttiکyZut\{`UTTT~zUASn[aY\AVZ|wsa?@|k NyHe6<۫NWULmlxj{s~EZ?OoFCt(CnVSzNMsSQJivIo>ښcKNWD῵`69Bf T_~?{ ؁HCqE=ºBCqzw [tttrFø\SWMVTTT }`Ë ZiC0z|qVY ZeASz#yFͭ#e0 Qyy/?GlUutGxbH[lWk<7MoNH~dy cŬF{xX\ 帽gKwL^o:W&k }]”yc ~HhPY PnY\~x;TiHC}l5EG>FǼ b^]b `ƾkRS ֎EϞIOdϲNM 򛂅ׯZ"Wo|¾е<JPSmWH? Vu ցrErDoO[l{-6~w~O>*ttro¾M }vlPMQTTPdbl[=Lo \Pdnhu]Y Y/<Q)ld_SGV`kkH;>=DuJ|yOkHR]OTX>njRާgjjjaʭOaC [\KoV^ MMU fPfQRZ ^MKqj]ͬkXWX"KdhK'QLfOOw{ r8GYQ,:"6?to7w9pg`:SM{ dhM{uQ\S_RSy M|YL XkkV_қ_I,E[L ŵ@ݾUfV@zPThNS߿oEĞ>\P~c_ J lyzo 55Rttzq;l_n]X[wrTTV ?tm]wnu ZYYYIYbS7UDPERJpSXXPG[QXwX =[n_ Z\gEsׯ~mYBLE _> c_NQhynτnsFLJgVd>CώpdLf2L4pmf skn[spVTF}9 +Dt9`XMUYM|K^Fw8vU=XAWW $uJ˹|,hrqD4q=DrChooGX ڲiECCDjsƺSei|w|-H4/1tt`Qztnq|⠮gTT*1 ľ{v\o'.YYYYQHQ|R/{6KS["rSpaLMČwAطŔUy`UTr;*y iP:0WNѯGV{ xtudR VVPcε]AoW RXahTtCOF~[ kGGDOERDu?4lhF={{KUWTY DHz ykVtN]}Io|mrHZ!O #U`RSzPӴI׵UGsB%>X궄?qAc ć<_]aqEpy{s(>v}UW9A<6ttCsp[[pOnTT%tv} YYYYYQFQHxjq|8ՙi|plF NJ]DvE|ЇLh}MQxLh[dTw'qJ\If e]RT]RWʋPWܸ k迚bj>ej[M  eCAyjBn]m HUMm غܚzg)fOnі^,'+?NDר hD5vKP?[IKLd¥KPq;-䛓vEP(wjfOW@[׸ir˶,iј9_ O UTPS ʐF>|HeDM Dxyxzm*att SViKXTT,Nj=[#!YYYYYQ?OM[T4OpujNncTQZ~IlKU`ɉwUHHkx,T?H{NCL \abV^WAθ_GKmOi"`SS#?Bv\QIRo[nhX xX]PttNJkR8ec!t`UUGBJdhLjo>MHKGgp^ tdGNMb{xyhV~䶍*2}̏MglTWh;fhY> ƘU=}~=ʶJCU tS|v~?u6T _\ttMQ{TD aSTT%:OZh{;}4YYYYYQZd\oӏ ӏNJprHGBzgщRKxdPuIOrh Tv ~{~2eTh Eork b4H ӵ䆀HloI%dh+jUrTwG JiP{^ agXwYOmMPĘUmH/ -X3>zJJOZC㲸PMf,Q՛ ZᲲB"b|;~Hi‹ͧo@C}ûGXFEFmzx|#lѭ 4vSxtny\UU8rqXj%!%YYYYUᝊd,XlқԝvqhZppoFSUsº/nW`cPxafԘSᖚ;ĴKCW`D=nURan Ǯb\EʍuF XѹMԽ5) 8hQ6n @N}h|b0mKbHVVo,. CzDn%r@LSv^FHga+oҴQ=ƀYHJ_ v/W zO ĴutRMƴEjN?Íw 9 IQ wHzS$2f,WNWd0s^ddb~軕|ȸ^3OҎ6d|Ec`}wz<.e#tWZVN pȓ".G^GN7{YYY [헁Z-IWPWVWKZppo _Ixl msҮqZTFX͈WheKkŐo#SrRG߅ݥ BےWX+?S~HUG B¶ rVMtfyQߎ #ap^M"y[W`PD >'MlS%غtDXOP,7ˌ] fY<: ``cv%n &H eYI 民wTXT_W 1 ўWը mHڞZcagk 쉀H0gǿ¬mOb任ĥ쾐}zBBc~QJQOG}w|cpf.z{tZTS[ FiJᆘ`yYYY YmMgTRSވӌՋ}%ąqpoۄjkn4bS~XreSծ^~DJ(YM hAg>96KorKi2XPU\zWcDWct}ݼ߇IeE8g~W  Yޕ YϳV`Qߜ^IhNcʔvYsNmlG&`dfey"jONUEU Evsvމi7S ЬPEP aVgϩsVx uzg āl^STUg).؝lfRX^JЍpi? , QH NyȚ^q?ɂ;%G PW p3ꪛάo}tֲ|f:UĽ~EzDt\Q&}xx}"b /&jtYT`~ܳٗq5PxrgBYYYIJYQP^ cc9=% Ospo EʗNRwJyHlT\tRV]HH NWj v9&LvQernNPXrrngPż7_aBޛp f* f@wΏMGcdaY]zEhaHG@ YXyaTlp[{GCp ǒJLv }{Rp\hNeeZYwNI&k8PkKhdҟںVPMOwukPKC^+ݹ.%^s[ݙ|.8='ӻy`e|:^ ՇBylZexe{xx|0 R1D yo.sUdTSW\VGYYY%YQQNM HYFrpoMObtY9NuxQT ۧnC~dRXqf#c]5s DQT ``GNv/bb`՛~߽B\"̠O]fCNKhldfgr F 0iSFJkaH^x?\Z|u) Q5]93[gHNCTr_juN 򹠣XHW+ \fG}\fSEWEXHZeQCNmİIexthʀDT 퇛pNhuiE&>^J~T326 "!_hI.iᩦvqiq ԋDs[eOiz S|w{O\_VZÀ$h TT{ռ~w~XGYYY]UYQQRR ىqVppooC5ڙk_PdsA~详izAe{=W? IIShTl_hYJXiMNC_>eKaERVL_3lMq$ T9$.=ZڑXqXEM˓dEvJ\^F\~ O}w|jrua%ysH|/TWug??w]^ܸXGYYY>`YQQ|6dr@٤g^ppok DݙȠyINYtٶjOTϔ岃JUs /s҅TTcgiQSmDjTi DU/|w#Ko^R|M\ eCq hM 1M–n Ze bb¶KR?QL k#NyR Ę__Bz<؛mHp]IN=!zZTۜ &[`TFq(XvI̓ kjMhX @ķDϾRUkS\jrYHr= }(ӗAC +}xyy+M@ޖohOESAqDfsk6[Y3T 2=XGYYYh[YQR@\v:}2SZ{EFvppoo pWO -`ਐmUSTUpHuI VqATwT}N?LكShUZ ,iVr;ygs蟤 ^́Sk"Z}aYnTyTp EfLJgX pj!ݿHRhe;|bCfGv}^Cj}ЩJ8 ig}[@{xX\yZمD{S(TPwHK~x\S]Wo࿺§vdVl?kg[ ggTF__~HkQ~eLO~YorPQMMwJ  {&K蔒1u IyboZNqTQ;:Iad꿭pGӽ' I^[Thr I7Wd Q#e_YoLW( !w}eٹISthtuK'XNy҉NYD ~@E_x{OeOhځѠ!>TrKоw@~VSYm|wUG34Vx<5?  tXGY YYYYQEQX&sQQppoSNiN`јDsͻdXJIOy mQo_eWjLmpP?osTNW️Px̅ZNc QcқF ӤR[p$) ByriЎdZtQnpGfs@u=c_Fǖ,Mct(eh aqFsGŸp lSV][p}2_qG DU-tBzt'P?HQ L2}DasAs}y ؁ rbZjԸ7]ľSMBdplYZ{w}_ Nc;d6ZoJ]G-G-/pUDY Y(^`[YQp?Q U]RQppouxOm9uoCpHm @RIALAB5; hHԎc?Kv]h|EKUpdHe UqdlJװ^> ;,6>3rrP;{ ZTqdqc UNwS mfhQE^;󳯺|Iյ=?/W liX !L6MNSLT* ss VkU+xF\*IRXV7vgiE D|sܿО؁kTbܻP9O;Wm혦}^Zw}_Wc<`+$GGRTSYqcY YGWX\YQ|uQ[/cf\Qtpou\3pՀUjhOV\TBrI kJgYGXwg{(1cPQDf^sG[ƻqvAS =xQd{;YYIDyn [, VsLpc^~ 5l-\ ǽGLEy OZ H 8Fq}bOejjNjlaYivPNrNyp兠T ?FEK G ؎Ec >=*һQRoS~^2Gd+uLOޥ7`׉{؁͌\Gp U8qQ5qP]S]v}aHM.ihXQ}f޵Y Y^R]YQh{QQY`k\R רPI{~ -P<+[UMfVt@pTD_MNEq UaB> YWFeBoG {poYzjf}~[ Ua QĩqR\PVôq{ٕ ͻ}9X X9hO E.]v{r@H(8s ֫U[tZ lhZxY ZŽYyf YYAwQQ>\[u.Oo~*z, diNM_p$zLUa lSaW q%`iDRhwdQOoPbJ?bMgJ iMlJja^[󼀟JiLvQW_SW |e o(ľ {\q@D~⾬2.oٚmM #:]\ FX} ֹ: f(g{چƵ[[;IMl᧌|Q|} 㿹U5Q ™?[L E/^v|t=lE+TBhO I2VVY PXL@ YоYn=QQ3ڱ:BNwoswz  IJLb Yx0Hf߼ kjuo Mz[SSn~j\<{=kXAKOH>VDU[27Kz Pu[Fq4FN]nQZgʞuHyD?i >]ɻLkwxגwװѠλryÈ zAGpj9~PpF/[~v{s  قmJN]XjV |Z}YN[wY^YSSmQkQrtaDw{fyBQq @ONRAnCNC YPtwfchR @EmJBk VM {Btg C L0XaC ےHY_uQi; /I,GhU_uyyxacgDj廋cBƷĸbeL eOZzfMEܸryv4Jp8ڝkAf //[v|s ՝x;>T=^O sJ2!]Xrh@hL-YVK`LZcQ=poSOpopo XlyzH]8krieb[]}/I<~ سMӟ ӽ8vGL"< M: DPndS@/Q^ٓCX\<oL DyʛM ?h03 dKIĬsUQCv #Zd= eMb_ԺkUU߾ STcbNo]HHͬlHWKYvShS\uܸry>÷"f^Ľ8Sa< "p{w}wjYGL\HJ*a^rRPYapGQR Qm]CQp9os?I vJXkӲSms꯰2cv RUs}7 ӳG^zE]Wr:Hh=v=PCXY MxIIhu v Ma/lp"N>TՌFE8OMSF:3dLRu"TaZF|a[ 5f a ; ;KfG @ON}3Fh Wcǭez_C, jC١iSQbLow o]RNܸry˵saUwx|PA,?Il3MB#VLDklC}F{YNZY Y>5]OQQwSPtQq!?Z'N¬&PQJDjKEq`cmgUWmqc8*Mwlog\yw OڟrOXL pgxsw|=Z.NcL=)KNcyuWK[兑<YHYYYY TarYQQ;FN\QNC1\pÝqgKHO+nGJeHfVO!#} zhlMF7ʼnG AhbtrFVQ SvHqT #%cKN_ALMo9'1DYR^CloAc[ K#A<CsHOgA ~CZ9@@ FI =`yff!jɗeV@Mi>vDN|ͭ=R FRl^ܸryŶ[Ǻ+w{v|v[|h_-Kg^v?}ueUe)NckK<8_YWAZjy_xYHXYYY QIe1QQRQXĬhJphfoߗITB~t^mRq?~Y3O~16NQehnTo8G̸]dRPNwDbDLZIUoO]UhB^ 1YK:B]r[QW ApeeJH Y\Ni^PkTܸryZB{yw}d <5F*^dTO]1slTUTR KttYHTYYYQoQQQQSȯqLucoǓy TQg {}~C cIoQ+Ouuvh o|ngfNOiL?VCXρEO5gNxM2p`@j=N[LYU>xA VeR?ٖ9P]FmbA܄f_yCnDd"ܚ:dEp^]gLPlzuO ڙVFP{ 7I?Da`Z΂֊{ݠү߸ry »fGFExwo>|x.(iÃC1x&zAQXTTڕ[~YM(YYYQvoRQQQXwp,@UUIoso Th\ SէHiԛxrj}0{=N ?uSudg^h fEŖn^h_oJ:E>=CSAEZ VmXDC>]=k6mMBK<#u3SXSyzvRVfaNWrQW)R[:e@`CdЖu쌊/6[oLiSWg@oz ~l?ݷlB^@vvUvޙ.ԇݸry |PDSWVVH=⾎Gie&U}wy{RDd>HL P Xf"[UYUXV|xYMYYYQ{nIwUQQQ!tRBo y18?hKeGЉD}Icz4 ) Tbn☛HERL.! U}~GepLLL^>p蹏T [4fCd^NKjGA^TWyӊ˭R#odVcJ LBJvS`E =wcK @hCY hLaHAi"QL@|rXO[Rmi[QOQ #GNX_+~_Xc cFbRazOp}UqEPeVzzޖ~w۹ryJ ^µ<¾cWd!n}wyz+U?_p2 OGAXUUUDT{}V;YKYYYQMJ@QQQ sNtuoaX^`s~?8:DTJH:tlPtQt XVW[`{}.Gۉ2 ]? MbUNJc<(Bq ecVePJkG|tja>RVkOM\UsWlJO q:SFG` !-wYoFU~ `\gޞhRVXIoGRMM9'g|J#\hg1c 1csɬŽ ͊kPM]aTݓہqU|zٻ{|c{ŸF¿mT@x}wzy%D#2j v'VcYŭZT:Sx?d&?jY\/YZYQQ*QQQMWgiQDoE!˽|Lt~mhdCs^MNS`GN [sa?d,/e+Y~ ԟd[\Ak7 ` K TBkDӑ 96MJp 9։IWOY_RF3E3`P?G L~jAdZbE;)&iDy=4gdSJAUE^@06a@oRPD}X# ZQA\Z`\WU'&ђ@⎠PZ"'S[ Wp~ݗuqj~]d hA?V =yyw~n $蹆cf[OQiposPo` w$GdrJXVVZzuTYYiJZ~RL_YQQBEQQQtH[N-\xoDU|֛QSA` RTEo΃A;MKرqk`XtJ*t RJg< R_GOUu (MuOkCfL5gC4h8IfW,' EuJ=TLTYUFgJcXJZzU^~صbYg7j!VMUARwϊnbR_eFC@R@{yW8]Zgby x[^rKDJC=CXRK6dDKkbNֿHCt>Q8JNMLR9@U Ϗ @~t]rHXZOiDsQChLQJe "JhHiEJЫQVV_pT5 =zo?n_ZU]罰lOMQp tGKyA~[ FMϋELk 'qws$)pR\EfΓG1ƺ ^ROQ ܸr~W—=N TBH` ,g~xwR^[p"F[]I VLgKUoiXUQc mVz}-smJY ^bZn+YQQRfQQHpqxooh QȐL+*>TJV?J u-PSp ^DKÌARaDZ6^ }DtWAMYJufHL@;bJƛ{<`;.fo|{ EbןTD;KI{@OrEJˈu^ [tU [W. )K9z 9{zwy~9hbSn `PANhK\XUUg—QwLw_%?Y [WYͺCXYQQQHQOӃpqooo a QEWO ĬOh{@ rwGNBEiXMSbk`QKRGm=>@^MAOi]h8dWXlGu>BHA\9ZiRZAB[xdBn Br\RTE0@{FcYCIžOrx.Ik 4)7*` ~xyTz1:FjhDDIDGcRӼkCY=D]KxMxC6Vl]RHF Ʈ?ruq𦚗疖|bbPjR[t.lu<*^躶wUK&LVcQADnS[*'O)}`ÊPp`R\Y@riJLaҳ"y tDo}hkGȯfFe\<RnF@ܪFJr^W{tMS  a'b tE!D۶6/ RNLW[ F@LTY@ZYSn?GP  ae&DImuZ:cCG8 B?G}! u]lX]ZZsR{oOxpt dvN[[ܸr}V=Uy6pĻ x ?{zvz~NT:}Cl~[@SK2Y4UZtf]xW6 ݥ8zefNb$zYYQQQ1H ~pAzJSzooŎc`H-CBD XdKTUfv/#fS\oK:ZWZK=FOPWzۜk?pW`}VL]H{D]_qjt@ aa _PC \u 6S+hV\\QC?gPZ )w ZIZ NW<|ERE> gLW VtVi^fKLFyOn~QE[@ AóyFnնT~{X\fSܸr}V BLI» 9Y|xw|m,|[GL=I@&KN\]UFF@Yrڋ:s1 9W OYNYk>YGQQ2 KqEzd?:{onKÇ`Oxod|F5} ]LHddnT \tlH鉐o^JNFT,] `__YX^fTgaOP 3aWZUERjs?|Hip Q7_Rhg]u۬I\UP PрI-S G9c:U Jj pnd(W]kNXx{OQBL EvSiGE=CC5BcHLISXI ǵ|XcR]Sɜs{`i~SPkHܸr}VDh *"m~wwh78qL|ٻKrKCU0Pqp\Y S^6vW _:rY Z̵=H^T[K$2bGSQ$iNqPuѲqooUrN|HBEXKAh* bDDYS]`dOn:NrLN俟0Tv_czR%N-D|ͽ~@ >MCNJF czOIrAzeK̅S/DDg fdUdh Jcm[pdLG~V fXDu?zb|OJm ye0f A|k/1H oGMmS=vEZAsMp[wIJ ԳygʬPP; @nhܸr}V= :@{zw{zRCHNoU@ ؘyAACBNrKOJU^_ YkuT| Q:oWYYYc.5KIuVQQzrb QpvqooRkys^k@dJnDj#%2ӯ ZI`eCc\2H Ws q5zNntC]][~`0K KtTՆg)fARetaGx]X b> θPul5\~]9r Doxܸr}VnAú kww}g!Iksh> Q9WbtK)E:U ]tF^atc~ٳY⹆gS;SYYY O*\W/>QRN` QpMpooHm ݧިBijMQ^DYۭ CYXbZXNABG(eDO\`lPDFCődgpcfnYMVo 6/ev, +җijv }GS`QZXPTbdx ܠyw}ESR2i\jc sChdgT ?OZԹTs Pok46o]\+gT_ :Hms~P=oGw~PJkNfWGg ]ZFRIK "Psy ۾vhy},j5QH8xĻ÷DWiܸr}VUQ r>{{vzR^] ZQSuKS,JHi^Xd]^DϳY v熓~UTR$YYY ]fRi~?QSCPQrhpoo\"0 LE߉IA }x^ Nhπh:jCrbNɶaUDagD۬PJOrѝ dY\WR[cU|cnDUL{QPBJUVE/HJ'7pJ Y']BעM} svCOY ILU[XrRP\p7x:OV QCsZDXRTFDljA[3 LCC=vzID۟^fzFjcqHb@I8xնMz^S ܸr}V Dg Wwxo.h2{;u/vƂFҽºJuK$B[ޝW[X V]"S%kI=qzYM[YY YVQeUK@Q Ӎ[hj QÃ,poo T&se_Nx_=Ai[FfZfIQUN6ħdqQ EFxlR\ FTqct*/Z۽ơ}s\ nQJEDUOuBaTRLf(|M}i* ldZk ˦]hy {E pz3eHzH OD ߤxyQ FnnSN G.Hs{JwWeMv RkNjV㰛^H_Lc?|@o7eBP:y̸Ŷ܅VDnjۗ  ܸr}V; *{|wy{TGMLe |(К^ڢ(PQuKcXLW_+؏Zm^p_ TNfY`(aNYY YLWǡMQX)XMKupoo QKbPuRV_bOǗ%yutQ\`_XfۥejaRnR\KD[7Oy{~[8ˎɐ GE R`VdaEQޢt>onZUprbeS Tmj\uMq_1ȅ؃TYɎMKUW9ƕndrxˑI>eU:zM?vkW[J]OUc]ywSqzB 0CEKWrTvY]SشTzoK q8b@_Aִ ަhH_``V[ Ը̾ݸr}Vo5ú eAyyw{}:ECc,ޓ)gu K@KcnALqY+ɔ`oiY5{YZJfY\Y>TSQ ҒKBFppooeq7vx QDoa]MԺʺ qhiʦ%hSjG_EVSz~LJPMSAnc Y[ovǬVFjw CMpGf\O` pEyXI>N@QFwXl-y`Tir eU }ZE@U_FO[D ۵]铁kXKAXB۷ ޢfׇ~޸r~W J?w|wxE \@|\ dSKhoJKoWwVW UYa V]q Pdy fxJ9RY]F&>T;J({Y4QQN S` OppootqZXtY.K0\f[:HylƶrkBT_l]^3pgoNյtQ\pĀ{ɹbn|fljWO`_%g6|W euH WE@fGI>[Vn“rsPNU SS^fMTNCvߖU Ҷf ̒eAKLCA ȑtwd7]UQ@b^DON/WڡZ<mPS[fZuT L~WPpoY\ m|TaHvE4@\H]JǶǹ ܴ{޳zмl碗}{uP iyv}u*;G(#] ΰm4:tuKKKSvLZZ^R <]TTւ8 .wGY`0[+!{+JY/IQQQ ]p>ppooso Hی9PܐGoRnpjn oG˳OM}~]Rs|tKݧ׷VRjOvdee"W"EϤMd }AeQnDVoEdIR0>h`KI1 gQU>NL GKTJXBEWAСeҋF \2yF 0:.l摏c?^al hXYtHp8iCSR_\v\cSW ZX&2XbGRbL U9JSuA`Bd8V5ߺݩŬbⱃ}f]gGJcJv{Jg\tnJ s{wxYCW-3=\u|G}LKK]P]N: ѕQeU3tBkR[KQN֋row l*~YD YF]aYXIQQQUCQlpootm[GV*`7x~W\vŭH渌 kurjˊ[.<᭜yqqMռuV[srJ^ĎM9berYn xJqo=i@rQg [_sHU,v\hf󃚿/C)hRyaVTp +FXDU]E ՕdDG{թqO_H2}ﴌ}F{zGXQMfTPj\ ڣLQ_GFx7Q HlpX `K[]RJ١jorK}qlTH Cۗm||qbn\dfKihwɶ NڮIK~zHYVvZKEd ۸rp[M[aKrzJ~kag`}V h}wzEKE[u u{>LKKKKGU\H̞kaUv vXP/vEDۈYWY Y_9ZQ@=QQQ`\[@popqܾwϲM=`vpXdӻpjfqf^mg`|ztq8 讚Joigr,+ HEaCM Rhm|wGѨj~DrTS?ENPZPL9bĢNI= .<5I unof %36 nFqsRT :Q]>; _@rYdSHQ\L Wv@ }=u}^暼ٳeL -ܸrgO[aKrzJ~fN~PerC}s}Vv0u|w|q(wZu|DKKKKPP1_HWT RsGT WU[g YYY\Ʃ*Q!QQQl\Hwqoyih(}O>tJK WZnv_ӟ]0%0[->xgpmqeCAAIeus?z}}{~k<A xm6489:Ziu 8.R_3 Qo=5nwNwZd X\vqB9yo^Wd rHM zejbgbGjzcSd<)XᰬSR۪KzNЩC ONHfhn^9$HMw>C[Ľ!YdZ3a|pGzdp}Vi}wxLHMN{_uu<=KKK%N׆?%Dk_TT֙Y^[j^aSYYYYDQ#YQQQ3Ql]bzfpowR ba^BeרҪa>7hJ Hh4\aAJȊNXeaCAbkJ Z{5ph2bGKa N<0SuZqc3 Ϛ"\xs F;cZmsyW{pLfPzW}V "{{wyJyL mruuKKKCKVd>Ima]OTYh3@aJYYY Y:0Q!wQQQ*>_= (pno@J{ ;wR;y"MjZYYZu|dMKPW[@{w}~pnjiprwO @_t NI| n`gimÂB,oe5 ciH9mQOSIv+@/j3?Qv {gbVa.GWRHvXR>7N\K« {OYdNHPF km[J_ t"QrlˆS`􏑒C;Ac}-hi}N=> mX5PDZjB@E cNH}R\ g5epaPja־ϝUSnyxunZdFӔKKܸr/a_\NhHfO[aKrzJ~fSShz>{pLfXLZsCwk}V ;zzw|v+M To uwu7KKK?-KBew?e]m`TT _CPN JYYYYS,RQQQ>`gIbp{}QVV\cD8QY\}ŠHib/tomooolpsr xsIMA>XުXhvne6 x rs:~yp{ RHEDf_ ?3`C+P/w >yuO ;+}gKAw@\TkzcDYMuGХPJQs?}@͓Khy pC{E"QVUmxOaAwjQ7<5x}\YoQ0 @.ɪ귔؁T]ꙕO^GQPqyK=q[i\Gr PFdccbc ^uSoPjܸr9kcI_\NhHfO[aKrzJ~fSShz>{pLfXNiG~lر}V VD}xvV6G#^quvv@-KKKQaK݃ɟUf]' TT ܏?:VSTR)YYYYZ> [QQQgY`ojtlx,FTKd[]Qǝ`io: !yk_fnqlhiikoh ?vҳ\_Tz Xs?qnoI; t}e I<]hJ^΁mm`yey鹏3il<*tk 6:uGh y8ޭ >uEbr\ vSYYW| ʝX|r@ooiNX{^[[YRӳuOJml XEGpmj ġSMYPB<= Lfyqr_^Ñ/jm\`zpjoQ>mV Yz~OQ|WL6!Nܸr=ŭp|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHnNyYYqDerJup}V [}xxTi&sntvsS`KKKPFKQUVZ誒TOWRYYXY YHYQQQGTA'%;f -uLtG-ROx`mŪ|e\{ȸQ庯ğԳzghkno ^kp}? ޘWTn kmЪpEЯy:cn ~ FTF:TwJ joU 4gqOHr2Rf>KMro|qWD^ B}jy ܛR[xcBɲWShQY7RӑtHБrPC ̹hB\ns!xVbDqoXޚxjI@ {pLfXNgHlMZ`No|H}eHt^}Vb~w|{@n <Je%u~pdpiPCKKKKpKUUcWRTzV텚YYY^Y Y B~RQQQREg\_tܧ ߨ[OVׇ@Sĺٮ ֠[`ȦognoovE°~g Bնq?cNqNP`zPtrnӄZSY_z ر K{T 9cX;XǞMJ=>|\,fvI*5^rG炍D|  gu=bQlQ\\ ;_RwdR?<رBQP]5=.WUEob TUK<j:E`|`~YQb ӲfԶzXMWxPdwNȝܸrJn}J|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fTVTod}V|w|fB\ܰJ{svK`KKKK\KUULUTTTUO svYYY?>Y Y+תDQQQcQXIut ޫOA魠CI Ͽ_ hGF7 1'ܵ͟nknppYڃpnL Qol@f[xJ Aղ ;zC;r9Sёj&T]u!r{;fV4c{?~05}ozG{Sb~QD Eb{MyPYHqEِ_J ׈R}[  kJ>ε@Թ_P}AXa<IøKLg ~uPHx ܸrMrpm|I|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fSVbJja9na}Vw}\M";I{ZètuuKHLKKLsKUUZUTTT.KYYY$YYwUjVKu|QQQ\QvOjml ?}Lg@Ѽ̩4 @@iӞX^?Սpim~DwLzVzwML OY d,ǵ ]Q˴ :Qi<7;~WkFz lb/hecKQ#thz{,|TGJcfܘt̵ ḌYH! j Nn^ gfG[[\\]^n{MeEQwi`W@ĝ Ž˾ݸrY{~eLxEh}I|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fSVaK{p@k_s}V~[RV<xuuKLPKKLEKU_MUTTT1YYY[YY(%3[QQQsRpošooЃ LxL^Lò\ZeϏ( [kii֣RyIgKv:Ѣ}u}IK_A߶KHY^fy đܺsqًu߸r`̠`eSJf}I|pL_\NhHfO[aKrzJ~fSShz>{pLfXNgHlM[aNn{J~fSVaKzo@fSGZv@i`gyUij |V^P_nF={uuKY"KK(NKV2GUTTTY^YYYUYY^Kby[QQQHYp&Uoo]s Ƚ~sQQaֽĸaǻW[&&C'pk 1N]TEDM\G)^wZ AO5HwBSFcr:cFcʏxI{!E9FJzDjaUC`^B 0Iy>m yC Ó=UvP`D xpyݵ|ϿYĤnèNQ3AR)NS.\C5`.FW-WM.Z><^0E[+[D1_:@Z.MT-XE6`4FT%VL/]D8_1E[+[I0^;?\1KU-WD5_8A[-TK&[D8a1E[-UI0_?:\/DN*XK2a7>a+BB)Z7RJv@@r veUuKMHKOOMKG_\܈TTT45YYYYYYQ@-5QQQH8p붻PxoqYBK~Z7gC#+ E)CLcF~uz2?|o #|*zx٠K鷶ݹTM yzeijܷ}ꛂxۈ~ ﱓxۈ~ه|zʄ|z~Ɂk؇lfT6Ӷ{fS`^i"=stJJMJAJ JaSS}}~ ~WUM@~~WXXXXXO )QOO2jVpnq΄ ޾üų øjCۺS\ܸ-<hԃLS} Jո䇄ohRGrJMQ,C$ Xs ͸m[vYnX덉-2NhPudk]; adobe:docid:photoshop:fdd395e5-db41-11dc-9519-e92523cd9272 uuid:31B7B3D58B34DD11B3BADDAA85DDE585 1 960000/10000 960000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;49BD1EE08959E3D2296BC56B98747690 2008-06-07T14:26:06+02:00 Adobe Photoshop CS3 Windows 2008-04-25T15:06:40+02:00 2008-06-07T14:26:06+02:00 -1 64 64 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;0229477653ECECB28E598A473B5C4787 application/vnd.adobe.photoshop 3 8BIM``8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM0 8BIM-8BIM@@8BIM8BIMS@@QuickRoute icon@@nullboundsObjcRct1Top longLeftlongBtomlong@Rghtlong@slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong@Rghtlong@urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM 8BIM @@0JFIFHH Adobe_CMAdobed            @@"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?UF&=d>npd?V? \t/O/'䕠RSE^zouh|>%[qyooP=' nx&IUyVSUG ?EeXlsTc06=\ m@?~Z߭=w&+h?eٷYt@Utq[[ Vw}sUhdyB\qqok d9pqEiݐ?Us\N[~sGĶ̠#9gk|csܻ[ﱵ3CG%b˱rQ&{1 RMi!6mբ>/o> K)Ƀcnӗ2{J){laG.`^6|jg8X˙H#i;30îwcF 罌Pa0?䣇Aa8)1\jkh源G eeIʵkUWUc M<:ꃲ{k]c9 ʷ ek-h}}I r.T!]{[ Ǿ,\Hp?Ӿ?Zi=hYu]}n}o斒kWYo> qqoed3(L8קAb1,s% gC'tad[-Ŋ.cQY 0uk8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i''Adobe Photoshop CS3 Windows2008:06:07 14:26:06@@&(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongH:AFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongH:ALCntlong8BIMRoll8BIMmfri8BIMnff333YvffD#3333|ffffᙙh333ffxL@@8BIMnorm+( Background8BIMluni Background8BIMlnsrbgnd8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp @7T{8BIMnorm(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp @7y8BIMnorm(Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp908BIMnorm(D(Q for document icon8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluni,Q for document icon8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@&=p @0\(<7Y8BIMnorm*+(Q copy 38BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@YGradObjc GradientGrdnNm TEXTBlue, Red, YellowGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub@F) Grn doub@L2 Bl doub@b- TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@m3@Grn doub@?y`Bl doub@B-TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@m"`Bl doub@= TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@P@Sz UntF#Pxl?Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H?yL?yL@>{)@Gb~2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ copy 38BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@,0d@<7Y8BIMnorm*+t(Q8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H?yL?yL@>{)@Gb~2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@,0d@@@ 8BIMnorm*H(Q copy 28BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@YGradObjc GradientGrdnNm TEXTBlue, Red, YellowGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub@F) Grn doub@L2 Bl doub@b- TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@m3@Grn doub@?y`Bl doub@B-TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@m"`Bl doub@= TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@P@Sz UntF#Pxl?Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluniQ copy 28BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@(0d@@@ 8BIMnorm*@(Q copy8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@YGradObjc GradientGrdnNm TEXTBlue, Red, YellowGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub@F) Grn doub@L2 Bl doub@b- TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@m3@Grn doub@?y`Bl doub@B-TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@m"`Bl doub@= TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl?Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluniQ copy8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@(0d@6?N8BIMnorm:d(Shape 18BIMSoCopnullClr ObjcRGBCRd doubGrn doubBl doub8BIMvmskff33љ3333lfflffI^ff&ff#33<&fft)L33nffffff33~ffff^ff8BIMluniShape 18BIMlnsrshap8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpxoi`ZTNH?<60-'$+-.*-*'&$(#&%"#(/)+%/)(%+)#,'%('&&!)"%## %#                      *(,#$&'!%$!#$)(),.*($&&#%!'(($ #("%#$                 * ' ' $ !!   ,LYxlUH'Iȅ= <俙'{JZUV rd/W@M=frk %8i4U NpppuostuZ.'? "NQ ԬUW/ , ( n47F U "y`G B0yA`B 2DFFG5A#6n (%QvS2 G|l/"%"    @@``@@00РP p   `00pP`0 `00P0p``` 0`pp`0@@@@ @p@ @` `pp@p0```00p P  P@p00`@@pp0``p@``0@` 0@ ppP0@`@`00` p `0`0P` "%"    @@``@@00РP p   `00pP`0 `00P0p``` 0`pp`0@@@@ @p@ @` `pp@p0```00p P  P@p00`@@pp0``p@``0@` 0@ ppP0@`@`00` p `0`0P` 657679?@AAAAAA:852.***)((*******-9>==@AAAAAAAAA??=94489666.-)%!0 &1:HYfox|uj\OE8( %1:HZhq{wl]PE8(  !/;ETdr{wh[PB1$ 0"/@NYhx}pdUB3(1 #-=O^hu~scP@4' 3 &2>Oapx~{vrpnoqtw{s`PD5# 7 (:HVfyzqkhc_][\^adiqzwg[K6&<(:N_m|{rh]WSNKIGILNPV_hr~~p_I7( =*9Lbsxk`UIB>:75358:OcxxfWK@4-)&#!!"$%(-6ALZlztaO<( ?  .BVh|vfSB7,!$-7EXft{iT?0&?"-M`y{dRD7%  (4>NdyzfXC884?Ufy³{eM:/$   (8NcuǻpYLLDQi|ɿ|iR:(  'VlŬaA+  ,GawɴlK3$  3PlзͺuU;+  %)*(% "9XuȮpq̾~_F5! #+38:961*" *Ba~ƻZ=gƾmWE0   )21$?+8EScow|obVF6+!=#-;KXcq˿~thVF:.  ;)9FQcwövgVA1& ; -9DVl~~{zɹn]I2" 7  *4G]o}wsrxϾgS=%#$4I[hywoihkx ¥aK2 .$7GTdxzphb^am{¤^F+. +8DQcqyxpia[WZcp}ҿ^E+. )2=KY`gnstroid^XRNPWam}ͽcK1 &2=CJQWZ$WSOID@BFNXfzɼlV>&  2 &+18>BEFFDA=8447=DPcuƽzfP:)2 %*.367652-*)+.2AAAAA@>==94**.*))))))**-/;>>>AAAAAAA?AAA?=936:9667-)*$ '/Pd}|pe]VSPPMLLMOPSYclwu]H7'  =#0DXkyi[PH@<::87679:-  4Ifɹ׾oN3%-@[ħϲbB+&7Qtϲ ťpR3 ,Dg ڼ}dG)  %<]}̾ Ӵu\@$  #8Ww ͮnV;!  !6Tq ʪhQ7 3Pn ȨgP5  2Ok ȨhQ6 3Ok ʪlU9    5Qm ͮqY=#  !5Tp ҳu]A$  !6Uq ַzaD'  "8Vs ۾iK-   %<[yȺǨuW8#   +Bd׼дdC- $('%"!1Jm̯սnM5% $+27973-& '8Ru¥)ĭzYA1)3;DJMLGA90%  /A\ó?ȶjRC0 ,;FPZbffb[RG;- *=OiϽsq?jkyȻycTB/$ !(1=MXdnw}}zsj^QA2&&8K]un__V=c{ƽrdSC8446;CO^it~tgWG:2-,-7HYiñv\OOA=Laqug[RNMPTZdpzrcWOIGHO\jws`I>>+=4ETez}tomlmos{{rliimtkYI5,,?$2?Ocv~kVE7'%0>Qcr xjXD5) " +GSbmtz}wrmifdiu˹xXA(/ #,3@@?=94027>HVjȿjU>/&2 $),021/-($$(,4@RexĸmXI>6//1/-,- !##!"*:K]qƿtdYOGEGA=<   #2BXqtg]ZZRNL  "2Hcztpmc\Z(>Ypķ{nfd1J`t{mec *BWkŽ{mfd *AViÿ|wib`  3Bf3 i~6iZ$? '0o$c``]0?0-fE ~ *ol~!uf  $K~< *QxH-~Z-38BIMPatt8BIMTxt2 /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (PoorRichard-Regular) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 0 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 1 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 1 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2 %#((&'&+'++)+(!!/3332332/31/1/--*0/10232302/*).-'.(((%&  # #'#''%(#+&&"-1122230/1.0-2032.+)01222/,--0.*&.(''(!+,""  !%&))&%$$$$#"""""")/.--+*)'%# "          ӥ}|{%}|qgZUHOZ`nt{{&ْ||Y; #*=Tjzz#{{`% "4DE;537$!Cms یsp[IENcrs srsŮ רtiYSDJU[luߖ[:=aa" 30 ,lB,Z}wR  U= T{FM =h T_YaLpwF-.Jz mc~K1/ ep U o="}pX'4<G,& G2" GE$HF$E9'.718E%}T hwܯ t m!`{ntZ +|W0z?+V5W|'hx)2yj "~k #{I/fd9 -}. _ U.y)o @G{B C P]- t ~* , 8{_@hsrrG B|s@  )btR, bۨ vh`_``hbAĦ9ph>̮:Ro Epw_?P ]  "Fk8Hy {cNKUm        quickroute-linux-upstream-2.5/Graphics/QuickRoute logotype.psd000066400000000000000000006227451446222606700247650ustar00rootroot000000000000008BPSX8BIM8BIM%\/{gdպ8BIM$: uuid:F5AF5F8B6A4CDD119DC9A1CB18091114 uuid:F9AF5F8B6A4CDD119DC9A1CB18091114 uuid:31B7B3D58B34DD11B3BADDAA85DDE585 adobe:docid:photoshop:fdd395e5-db41-11dc-9519-e92523cd9272 1 960000/10000 960000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;A81685A2490FD332C7312B08C41B82AB 2008-07-07T23:22:34+02:00 Adobe Photoshop CS3 Windows 2008-07-07T23:22:10+02:00 2008-07-07T23:22:34+02:00 -1 256 256 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;67EF2361DC8F0384E2E75CD8A3161865 application/vnd.adobe.photoshop 3 8BIM``8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIM[QuickRoute logotypenullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM 8BIM ,JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TI%)$IJI%C>g%cgoJo]NF+Y_g&oXy9'rԒ\ޱCo-ˬrFmbW>ȩ4@q}7} =C8 ۪I$$I)I$JTI%)$֮F+2.xYѫIHh#݅ӈvKt764}/_\e9se2w|\\`mo,s$uJ0s9|q:%}2L6tu2kt7G _u>__g$ kR_֔o'3'7BD4rNݸ֍}7iYW%^~M|E cSldП 5e0 #' -2e{C+Sҝk ZsPg/zA/ށ8e?D#نHT5GzuVrAaaͰ-ZǜeG\9G`2ɷ}j~`70r+nWfz6ٰ{?|.r:fS8?'Ѝ'/ɿ ۸zdIY\I%?TI%!ɫܫWKKp?Y7fdەsfcWW;f5 :RWZig6U9cH59#u&9xMJ~~Djxpd{?,e|7͘BGK"aoXTfA?ʷ;Ǚ,Gs OHQm=N^̴{ͳJ-Ϡ߁#dA!Zr9r\2%+'4,2!EKՖk"~}+snc{[_n5/RI$TI%> 74obo9\yֹt!0 g@CY":F?P>~}Fn,,}O7T7|?ѥ.~,ܤ8qKQI%)$IJX\ _[Kn[^]sY>-i{5%gӛnaUoXWVŦj'ΜZas?1r>FXެqװ;se.wX߼1i| \\rN?etˌTiI$$I)I$JR?̿?*}a⾓QoCSZ1U^/v-G=q ?#7ܿFN?lkt!5p}uEfϵz im WG#>I鯛.I%yTI%9wKa/I5o筞ۍՈv.6ggs1u?ޏJ2v@ɇd9Gs&XW?=B ;`JFG?#4lhSS*0G!ddzU9p߉qnr%Cӏk c1ŧ n_L0g ?wޟ5kMAT|ۋ]nөq*#~ڣisvd@o-!js?śp@#qˆ|8"$2EǿEV~=Z`:Zx~܊4nQ5-YFz|_`|~ipexz]LGx>c=Y$vOC9?3DgFn%}bCA M&L3^ d8c5uGNi/6N-N~c豟zV?R=;>OӲ;?'13A@~ F9~g?Uks2-Z>--Bk k'[*I$I%?TI%)$IJI$RI$I%)p_Zwh3fY[CuLHmEloџ!"u A '/4l[dRK,#QYR,ACp=obcUÖz?տcpsG/ ŮѨ~eNoa[?ծrz-@3]-=t^37w'/yΡ&%-@)ñs;,'otԱFN+a;\s\>v7X7(nsVw&<`֭ns+(Br(?GgI$گTI%)$IJI$RI$I%)$IN?\h\o\/U-ϥXK?HI3 \Bb$(+9 㑄D|lǝYkH Nku I.vUZݓ"tC*Ç zKt_1w!tYِ186ƻmEӱc5.::ǟrMSe)je##I$V8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i''Adobe Photoshop CS3 Windows2008:07:07 23:22:34&(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongH:AFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongH:ALCntlong8BIMRoll8BIMmfri8BIMnff333YvffD#3333|ffffᙙh333ffNd!5***8BIMnorm(+t(Q8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@ Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H@yL@yL@^{)@gb~2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@L0d@9  !"# !+&&(&$&&'%'#$%# $    @0@p@0@p`0 `PPАP``@P  0@@ 0 pp@@ @P0@ P0P` 0` `` PP` P`@p` Pp0 0p0P 0`P`0@Я p000PP` 0p0P `Шp0` 0@ `Х @ @ `@`У ``@@@ p p `0`P`0p` p00PP `@``0 `@`p@P0@P@Pp@0@@@@@@@@@@@@@@ @@PP@@@p@@P @p@@`P ` @@ppp0PО0``@` pp` 0`p0Р 0```p @p@@p@@ `@0PP`@P  0@``@ @@ @ p0p0@` ` p` 0``@p0  ````p` p0@ @pppp`0`0 ` 0`p@pP00`00`0P0@@p0`p@`P `0 PP`0`0 ```p@ 0`` 0  `@00 `@0@Pp0 P@p@0`@`0 PP0`@@pp@@p@ @Pp@@`  `p` p @ @P@p@@0 P0`@` @  @0АP @@00p`0@ 0```@P`P@p@8BIMPatt8BIMTxt2 /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (PoorRichard-Regular) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 0 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 23>GNUY^cgink`ZXURRQc]YTRTURRQQRPRRPOPONOOONMNMNMPLNLONLNONNMMNMMNNNMKMNMMJIFDC@?=;:886665555555777799887998868988857888CEEDBA@@NNMIIHIEHE>EKC><8124:6935644+$$ )$-,$$%&(""$"!% +.337:<@CBFLD??>;=:LGD?@@B>?<<@>>?=><:7743000001301243332110/1101123/3210002789::=A@A?@@?=B???AA@?>?<998886888888756878DEEDBA@@PV^]dclhosuz}wttpkjovqtqtutwpigdc_aitpmifb_]ZWROA'&''().=*%&&'%&'21235/*)2789=;742-*($" '!,&$%%"$$62.*+++''&'*()''&'%%'&&%$%$%%'$%$%%$%&%$$#$$$$$$$ $$$" ""$&&$$$&&&$$""""""$$&&&&(($&&&&$&&&&&(($&)*)46863233@BCAC@C?DC>FRMIJC@@AGCD?AB??;4/,-(,51,),+*((($$-1"0$!!##"$##%  &*$"## ""40,())*''&'*()''&'%%'&&%$%$%%'$%$%%$%&%$$#$$$$$$$ $$$" ""$$$"""$""  """"$$ ""$$"$"$$$$$ "$$%0221/..-<<;78694884<E?=<8124:6935644+$$ )$-, !" ! ݾƶεɩ᱑ѩ鹉ΙrelcG4-. 188KQWhn cM?*  !"#$$%&'()3?U_oqT?#  !"#$%&&'())*+,,-./CRgz[>"  !""#$%&'(())*+,-./0012334CVh֖xS6  !"#$$%&'()*+,-./012233456789=Pf{ΰb6    !"#$%%&'())*++,-./012334566789:;<<=>VkΉxD   !!"#$%&&'()*+,--./01233456789::;<<=>?@ABJawγp6   !""#$%&'(())#*+,-./001233456789:;<<=>?@ABCDEEFG\uԉb/ ! !"#$$%&'()*+,-./0123456789:;<<=>?@ABCDEEFGHIJKXrԶp/    !"#$%%&'())*++,-'./012334566789:;<<=>?@ABCDEEFGHIJKLMNN[vķx6   !!"#$%&&'())*+,-../ 01233456789:;<=>?@ABCDEEGGHIJLMNNOPQRSdzԀL # !"##/;RXiitl*lgYPG6789:;<<=>?@ABCDEEFGHIJKLMNNOPQRSTUVYki"  !"9Qh&viYH<=>?@ABCDEEFGHIJKLMNNOPQRSTUWWXYZbxԻF    ,Kb#{fSDBCDEEFGHIJKLMNNOPRSTUVWWXYZ[\]^nԼq#  &Cn!iVEGHIJJLMNNOPQRSTUVWWXYZ[\]_`aag{Խ U ,\y xdMKLMNNOPQRSTUVWWXY[\]^_`aabcdfwľ x8  8blTNOPQRSTUWWXYZ[\]^_`aabcdfghit̿ q#  ,bmTSTUVWWXYZ[\]^_`abcdefghijjks~ c !&V|jVWWXYZ[\]_`aabcdefghijjlmnos~U !"@y־zbY[\]^_`aabcdefghjjklmnopqru~G  !"(bѩo_^_`aabcdfghijjklmnopqsstuw~:  !"#@yީ{eabcdefghijjklmnpqrsstuvwxy~: !!"#$Wɖodefghijjlmnopqrsstuvwyz{||; !"##$*nޞwhhjjklmnopqrsstvwxyz{||}~;  !"#$$%6tޖ{lklmnopqsstuvwxyz{||~<  !"#$%&&7zΏ~qnpqrsstuvwxy{||}~< !""#$%&''H~srsstuvxyz{||}~W !"##$%&'()Iԉ~vuvwxyz{||}~ ^ !"#$$%&'())I~xxyz{||~ k !"#$%&&'())*J~{||}~y+ !""#$%&''())*+;̀}~9 !"#$$%&'()*+,;zԀS !"#$$%&'())*++,-3zԀl !"#$%&&'())*+,,-./pԀ0 !""#$%&'(())*+,-./00bԀ O !"#$$%&'() *+,-./011NԀm !"#$$%&'())*++,-./0123Az8!"#$%&&'())*+,,-./012334q\"#$%&'(())*+,-./00123345Zy)$%&'()*+,-./0123456DR%&'())*++,-./01233456678rt&'())*+,-../01233456789:\H())*+,-./001233456789:;D{ t)**+,-./0123 456789:;<?oP./001233456789:;<<=>?@AQz40123456789:;<<=>?@ABCpa12334566789:;<<=>?@ABCDO;33456789:;<<=>??@ABCDEEj÷l3456789:;<<=>?@ABCDEEFGNƑP56789:;<<=>?@ABCDEEFGHId ǰz7899:;<<=>?@ABCDEEFGHIJKyɈ`9:;<<=>?@ABBCDEEGHIJKLM]˥F;<<=>?@ABCDEEFGHIJKLMNNmr<<=>?@ABCDEEFGHIJKLMNNOR|ϘY=>?@ABCDEEFGHIJKLMNOPQRcвG@ABCDEGHIJKLMNNOPQRSTo ҄sABCDEEFGHIJKLMNNOPQRSTUV|ԟ]CDEEFGHIJKLMNNOPQRSUVWWb ջJEEFGHIJKLMNOPQRSTUVWWXYo tFGHIJKLMNNOPQRSTUVWWXYZ[y _HIJKLMNNOPQRSTUVWWYZ[\]`ڲSJKLMNNOPQRSUVWWXYZ[\]^_i yLMMNOPQRSTUVWWXYZ[\]^_aap ݋lNNOPQRSTUVWWXYZ[]^_`aabcx ޣ`OPQRSTUVWWYZ[\]^_`aabcde} ߻VRRSUVWWXYZ[\]^_`aabdefgjySTUVWWXYZ[\]^_aabcdefghio oUVWWXYZ[]^_`aabcdefghijku hWWYZ[\]^_`aabcdefhijjklmxbYZ[\]^_`aabdefghijjklmno{ Z[\]__aabcdefghijjklnopqr~ x]^_`aabcdefghijklmnopqrss u_`aabcdfghijjklmnopqsstuwoabcdefghijjklmnpqrsstuvwyocdefghijjlmnopqrsstuvwyz|kefghjjklmnopqrsstvwxyz{|}khijjklmnopqsstuvwxyz{||}ijjklmnpqrsstuvwxyz{|}~jlmnopqrsstuvwyz{||}~mnopqrsstvwxyz{||}~|opqsstuvwxyz{||}{rsstuvwxyz{|}~|stuvwyz{||}~|vwxyz{||}~}xyz{||}}z{|}~|}~~ Ğ ƫǻ˒͡϶ ҏ˭ өѩ 汁 ׊ؠ پܑ ۋ ܨ Ͳ Ɵ ಌ  ޅٙ ӌ ܀ƌӅޞم֑مƅƌ٥٬ӌمӌԀܑ͌ͲĽ͙Լԉ͙ƀܸ΍ֵ֖ΖўͿީƲαƑ᱉Ѳ᱉޳ٹݾִƶ־εܷĹԺޅԻӵ鹑ΙܒЅ鹉ЅυۑۤڣË۰ڶζԅԀڗԀȋԀڣԉگԯ̀Իƍޞޞ鶁ѩٹƶݾƶεɩ᱑ѩ鹉Ι¹֖ðΰΉγԉκԶķԀ˨ÏԻԩԼŊԽКľ̿ȅ־Ʌѩʑީ֑ɖхޞ̅ޖͅΏ΅©ԉö̀݌ԀԀԀřԀԀǍɼʷ˒̜ΉʄНфңӏԺժٖݴ߯     ϻ κ ̹˪ ɣ Ǟ Ƒ ň µ       ˭ѩ 汁ܑʶ ɥ ʭ ⯠¤    ;܀  ΅Μ ߺ̹͡ˍ Ԑ ʷҐ ȞҐ ǍޞА֑ Ιų~ Ҩ ò~}~϶  ~}|~ʗ ~}|}˴ ,~}||{z} ȣ0~}||{zy| ¢/~}||{zyx|ĺ-~}||{zzyxw{ ,~}||{zyxwvu}&*~}||{zyxwvuv~ )~}||{zyxwvutw~ &~}||{zyxwwvutszԀ!&~}||{zyxwvutssu}ܑ+)~}||{zyxwvutssry+,~}||{zyxwvutssrv}Ľ ,~}||{zyxwwvutssrt{Լԉ *~}||{zyxwvutssrqt{0(~}||{zyxwvutssrqu|ƀ'&~}||{zyxwvutssrqp{ܸ+%~}||{zyxwwvutssrqpp|΍$~}||{zyxwvutssrqqpontֵ&$~}||{zyxwvutssrqponmlko#%~}||{zyxwvutssrqponmlkjji}֖ %~}||{zyxwwvutssrqponmlkjjihgvΖ%~}||{zyxwvutssrqqponmlkjjihgfeiў ~}||{zy{||zsrqponmlkjjihhgfedcbwީ ~}~}tponmlkjjihgfeddcbaakαƑynmlkjjihgfedcba`_^{᱉mkjjihgfedcbaa`_^]]\hѲ᱉qihhgfedcbaa`_^]\[ZZ[||gfeddcbaa`_^]\[ZYXWWk޳ٹkdcbaa``_^]\[ZYXWWVUW|ݾtbaa`_^]]\[ZYXWWVUTTSkִƶb`_^]\[ZYYXWWVUTSRQQV־n^]\[ZYXW VUTSRQPOONmε{\[ZYXWWVUUTSRQPONMRgYXWWVUTSSRQPONNMLLKJgzWWVUTSRQQPONNMLKKJIHJ{ܷ`UTSRQPON MLKJIIHGFEbtSRQPON MLKJIHGGFEEDDw\PONNMLLKJIHGFFEEDCBBPĹ sNNMLKJJIHGFEDCBAA@?jԺYLKJIIHGFEEDDCBA@@?>=?{ԻrJIHGGFEEDCCBA@??>=<LӵUGFFEEDCBBA@?>>=<<;;:9`鹑qEDCBAA@?>==<<;;:9877mΙ VDCBA@@?>=< ;::9876658qwBA@??>=< ;:9987665433Az鹉_?>>=<<;;:98876554321?z{@=<<;;:9877654432110/=zi<;::987665443322100/..-1oO9987665432 10//.--,,+/_gG/!Y{<765543 2110//.--,++*)CtyM(Mm5443 2100//.--,++*)(',RysA'Y3322100/..-,,+**)('&%%)KtgAl N210//.--,++**)( '&&%%$$##"3JbsgG(f z>//.--,++*) (''&&%%$$#""!! 076)lz<--,++*)('&%$$##""!!  z;+**)(' &%%$$##""!! Mz:)( '&&%%$$##""!! 'yI(''&&%%$$#""!! l X&&%$$##""!! YԀn/$##""!!  fԀyK"! 3rԀm7  Yԉ[* MyZ('Myf:@`̀yY:'@`yfSF33' 3FMfyƍޞޞ鶁ѩٹƶݾƶεɩ᱑ѩ鹉Ιo_g_@( 7?G_g_H8 ?OgoP87WwW87W֖wP0'Owΰ_0/WΉw@?oγo0/gԉ_(_Զo(gķw0/oԀH?G__o__W?/?g?_oW7gԻ@7WwO'?Լo/gO'oԽPOwo?Wľw0WO?̿oWO/w_Gw?wP'w־ow@WѩGg0'wީog0Gɖ7w0gޞWw0oޖgw0wΏww//w/O/ԉw/W/wOg/w_ẁwo'wԀwGwԀg/ggԀWWOԀ?o?/ԀgwwGgWoO?'wwG?gOwo?//wg_oO//o_o_/7oOw_/OoOO'___/?'woGoG'o?O'gwOW7/w/O'wgwGO7o'Ggg7W7W7'wo?oO_/O/wO/goO?_7O'G_?/wWg_Ww?_7W7@?7@?? ?? G_ g______________o__W?????"77"?"W:_`Aw`I``Xp/_AG_A_O1*?"A'Y7pOpow`+_IJ7G:hW/#,'hRO_QpwG:''KOxpg˭Q/?ѩ3 Kg汁  poh &OO; R'ܑ  Goa <wGw``@H``w3 p?wP1 "A`x 6wgX) *XR  b?/X Ap 'wwo!2xi bO?P  A5 'w8`p b_?1:5  ('w1px bo/H h5 (Gg`Qp qwQ܀. >oH91PphQ2 Rb  xGgp*pQR Tw1PI RD )w0pHx#ib q_HH":xx MGPhQ ' *0 hp#Q <6 qw hPI; bL \w h9hޞ,  xS ?g h"֑x <T #g X#i b> x`A#K 6 iP*w#& Lx6 cP X#x xq! Uh *p#Z 6[ Uh Ax#. ( Uh A#p Uw"Q D U9I`px jP RD #qhxp 9x:p UԀ`4ii *qܑxA&DRbixb[E/ Nh# '' 9qĽX +cԼԉJ  +cxB  9jƀxR cܸR$ j΍p< 9ֵZ4 ,Z5 x֖iD' UΖbD. %ўxbL=' *9MccMcީqb[EF>)**0FFMcc+:αƑUq᱉;Ѳ᱉:xqI޳ٹ,xݾVPִƶ!־HWεq";Pqyܷ.Jdr.1Ĺd^Ժ/yԻd1ӵ/Q鹑eeΙ6kr+y鹉J+yy+y^l7YfF- Yy8ryM'MeLyr@'JFrf@l>,F_rfF'fy+,33'ly+ y+My+'y>lRYԀl& fԀyF3rԀl2 YԉY& MyY''Myf:@`̀yY:'@`yfSF33' 3FMfyƍޞޞ鶁ѩٹƶ!!"AAYaayiaaIA9!!9IayqaB11JibI* 6VtnN.Nn܀nN.Vvـ~V.FvրvN1f݀ހf6AvvA I~QI~ȨQ AvȨvA)iذj1 YШY 1vv1 YИY +vv+A;bАN+b;+BȨ+NИ+^;^3^Ј+^߀+^؈qaB9!!!!)AQb+^nN&.V~^؈vA!V~bBa.6i^;Q!aB+a!i;i)1p+fIQvIi+v^+I YA v;;#Y+3n1v++Q r^+)Q^+p!^+Qiv+)1++ip+;AA;;zvBQQAbnv#a91I!nYia.v !!a1QYb vF!AIvYv~.A6^QvfA>Y~Nn!Ivf.>6aVn~6~V~&>.VNnv.nV~6.^6V6Vv^vAn6"Q2V 2Qtqia1Bi!I1Y9b!AQ )b!)q Aa!Iab)aIaAiAIBAAaAAa9"a!!y!!!!!!!!!!!!!!)AAiAaAaAbIIaAaa)aI!a!A y!9!!b)Q!A9!Ai!1QYAaAiYi)Ja1yr !Yt!9:V9I6Qb~i^n>N!1&>V~~fvVV !"A9!! 6.64RqyaB$>~V.VvfFn^V~N~~N6!6ai6Fv^QvAv^A#ni1.6 A>aYVv V~9V!1^Y A!ai^بv+vn.1^;A9iiFЈBvv1A3BAFiv Bv1YbBIQi+9B~!p>aQYbA;3~Fv+#QI>6аv nj;^ؐY^Q);9FpQ;6B9n;Vbi)Nt!QiQnin#Q!a); )nQFb VnbaB#؈aV;+a fY;ؐaЀv ;a1!3+;qaa3B;BBBB;ЈB;B+ИB#nB VА;>++vb YИA9n#bQ1rj) QzAaQ)iv1iA.aиv!V19nրiNvـ.Nv܀a>f߀!&Ffa"AYq) !9Iaqyai!)AAIaqbaYAA9!!1Vp!Qi#6nvQA;+Q++,JiyZ<Q;Fni!I1f>Qj1AvNn9FvNQiaaq1~ـfIـp>1ؐ\izȐIȨ!iz;\N>bi+1+b++v3^BFШB3Ш;bn#9rӀQ Qրi!!aڀi1!aހf1I~vN.V~vN.&FdqR4!9IaaqyaIA" quickroute-linux-upstream-2.5/Graphics/QuickRoute.ico000066400000000000000000000764461446222606700231270ustar00rootroot00000000000000@@ (BF00 %nB  h hx(@ )AAA0"ZbBS jz2kc Z{kG&'%"  zbc [..+)'%#! 2BH7631.,&{22{ G{9><963& GcR )}HEB?<-R:bc{MOLIE?2 B 3}YVSOM\S "AIaaaaaaQcVa^ZWHkJi#Ikiea^$\B2b>\fl } { x u r o ` Q fspli\k*b(3i ~{xtq BkBS*3 |xq.\[cnljgu |y e3s{BI#3 }v8m{{v}]mg}aBAA ~C}{ky}Q\N\!cj ^0I E}c[[\S\zZJs:I  *IJB33:y\m7IS$3 }"{:Z:Ic[Y} _ZR}w}}S"=Ic{ "{{2cR_} gZR}pR2X\v}DIJ{ {q׺30"ZqR"Z[}:*I<Ϻi "AA02[mbJJ iϝv9yJ\" \K!aA!\>3(aQ9ZBaA]AaAWAqAQ~߂AyALuy}ށ߅IaAFmqtx|ހaaAAdilpswbƿY"T#\`cgkoW.!A  TW[_bgf2*3/mk)iDOSWZ^FJ2}o J{)GKNRVPiZϿi- ?CFJNQ.*{߸~Jb-;>BEI8ZB}b:]36:=AC" sƔZ s)/359<+cSmL߯2R[(+.258@S2ՎtZ s$'*-1/:lϑ": #')-'J2{N߅ݒ3"JZ< #&)"ZJw?x|߄Z9[c; "%${RBkPkosw{~zGkc;!#iqaBAAYiT#R`cgjosw@{c) !u+ p'AOSWZ_bcV*{[p  ###",3<@DGKNRVD kB{  "%)+/259<?CF9.ZZW !$(*.11+m!b2"Rs;KK ~~[MMb2 *JiqR2!"AAA)!!?? ?????????????(0` 2QaY:R{b*kz2S{ Z#" *k {/+)&#!IR \:630*{ 2 ZQ{AC>;12R .}OKGB3S*RqR2)AAQaIAsWYUP /["Rq3mhc_T2b#3Imda l u _ U K jrmi CRZ(3u |xs3{Bs } q?}S{bmb}  jS{v}l}f  sSk{}U\S\ck9I b2I x*S\\FIAIN\ fk"cbSC\ :\BZ*Sk cR2GIt}JBWm 3I2Rx2cb" yZqׯ϶i"AAA0Zy3'QA;I0}X{A)dmw9AemS)!W\AYs\B!!Y\Yao[=!![\aad{߅Z9!!\[aa[osy}Y4!!\ZQIEcimsh8)9A9~2X]agGAJ}{0.MQW[OZiϵ31q>FKPRy qR%<@EJb%BR}byR", 26;?:k{מߴb,149PSZ|SuZ2*"'*/0BSڊז"[g!%)'SSp߃H0S{ $c2 2k bsw|ށzHc2 = baabT#Tagkqw@{2p M` 7MQW[^u7{2:  "&*49=BFKE.{cI #'*/36.Q[Bk:X| } }~[> kB2ZyyZ2)AAAAAA)??????????????~?( @ H`X8K G,K {+(# `< m<70 Z{2pJID&H 0X$(@@84 7}^WBX @p2IGm_ [ N1\ gmg3$Dz |r3DPp}sOmb { IPPM\@DF\ cPKp|xvQm AmD314@h}K4'3 P}y< KGIt}KP b<3*PX0(\mp8jϮh)3XX^m(`{m@`@`kc@`@`]s|W@x@`NbjXP}|0H6QXWhI?IF?AHO <q׾pp/8?.Dpן@<i)04,DZߤ `!('`$DF'lHD, <PDgry\K4 ip`@:QXaKK4hz"-3;A>S K DxW{w?`,(@````P8? 88???(  $<8&$"|8D2Ƹp|"<VpNpFpiY0& x1L&op 1Lwp&HTXDTX,,ϣ1+L $<,0&1L@@$up@sy0 p4M_<(Ȳp$*?v,p8ެ< (L +4&iy"Xd]d@JXAaa("Wd$.,((8@<0Dquickroute-linux-upstream-2.5/Graphics/QuickRouteDocument.ico000066400000000000000000000764461446222606700246260ustar00rootroot00000000000000@@ (BF00 %nB  h hx(@ žɵsnsnsnsnrnsnºsn{prc[NIKEUNmcrnsn}xsnke8>$!HCymusnso]_ 7/+( *"( FAsnʷsool D;74EMpiwmw_[?@PMsnðso:[IE@R[sososnsnsnsnsn˸tohoXTO>Zsoso̹ðijtptptptptptptptp9md_]pospλtptptpvwyh{`|_{`z`xhvbvtpjAltptqtqtz{R, |vbstpžuqs}|@  ){butptpyuuq_@hs{}r{}rz~G Bz|tstp~zurP]- t||uruqur~us* , 8{uvtpurU.y{xvr)oururur@G{wvB Ctqurk #{zvvrvrI/fd9-}wturuq. _}tqvr|yt'ùhvsvsx|z)2yzxurvrj "~uruqvrW0vswszzx?+Vvsvsvr5Wuqvs!ɮ`vtwtwt{{xnt}wtvs|̿vsZ +|vtuqvshػw~zwtwtwtwtǺvst~} murķwtE%Ŧ}yuwuvsTvrwt.7wuws18vrwuˉExuĹwt9'vrwuHxvǼŸwtF$vsxu sz߅GyvƻĹwuE$vsxv ilrxGzyvƼxu2"wtxv^`ejGtywƽxu,&wtyv'ZRW^4kywxvxvϼ<wtyw=[FLP"`}|wzxyvpڽXwtywej<?ELpszxywU oxuzx~{w=39=Kczyyw1/xvxuzxJU)-2Dz~w{yzxm|cxvzyws,"'+FY{z{yzx-.yv{yY[!*ag{zzyLzހՎp{yw½{z=C,hk|{{z{yTsmsy~_{yx{z|z=A #T\|{|{|{|z|z{~xFi\afkMvzx|z|{BC,;Z`}~z|{|{|{|{wwRe RINS \Upzx|z}{|{a`"%   " 43D0E; 537<E,Yls{y}|}|[Y:; #*==Taj{z{z}}}|tqigYZSUDHJOUZ[`lnut|{|{~}}}}}}}}}}}}|}|}||{ ??(0` ߾߼߼߼߼~rlclWQOHWOqfqu͸߼Ѿrk^\.7!(']Uw߼~s\`9.1CGII,/;9xt߼qkt(P@A]_vj{lwmunfu߼ļ̷ɵʶDztLg VQP`vhκʶ˸߼ѽxxmjppsnpvnpvrosssz$o f*dwpr߼}qo_y?,$} wKqtj߼ʷupa+'+! Ww}qn߼ɶ}nkN p}vpskc @}vnm߼roK2zxt;rnojyxw*ZEA~pkϼ߼~{_'}ytpkW 9S$Ismup/ Xzx߼ǵtrm#ǹ`{rnH Q|oka %uom߼U*vtĿtpiU\t|zzuƷĽ{ws, X{t߼wt0GrpɷytE8tq߼ʷrwњXS vzyѼ߼gv ې ݝ`{[ k߼cr܀ ؍cwc i߼_opx cu] i߼cl_f nbrV i߼kmRS]ZowvLu|ϼ߼{|u%OAJFfw|zw41xu߼yHW18&R{{wʿqyӦSut߼i}g0(5Ze|~K͠wyu߼z~BK!;Uejz|߼oyl_]TUIMLQUY`~cqxo߼߼߼\"߼Y߼X߼U߼U߼S߼P߼P߼M߼K߾MZ?????????x?)?2?w????????x?????????????????y,'?Y( @ ɸvk|^WkaQS-" <9Ķce?"?idrjXS{.bUilѻƷǭW7),5|x/muP=DKw}@2>:i_q89yεY"|wo/ h}u*Vyζį_ÿïe2@vʵż^!hձʳlֻK}ÓQپγ?q!JԸε@fg!nJպSdK\ `wu9@jp\յ}~/@ 0K%>vr!MW@o|he4@stmq.WUcqv}y69 '-/>S K DxW{w?`,(@````P80?x c #47470B0B0808", ", c #5A5A10100A0A", "< c #6D6D1F1F0A0A", "1 c #7B7B14140E0E", "2 c #7B7B1B1B0D0D", "3 c #494932320303", "4 c #5C5C31310606", "5 c #7D7D37370909", "6 c #161640400000", "7 c #1F1F44440000", "8 c #040457570000", "9 c #272746460000", "0 c #3F3F49490000", "q c #202053530000", "w c #131369690000", "e c #06067A7A0101", "r c #08087B7B0101", "t c #1A1A77770000", "y c #494947470000", "u c #464649490000", "i c #5C5C46460303", "p c #5C5C4D4D0202", "a c #6D6D44440586", "s c #6D6D4F4F0404", "d c #6D6D51510404", "f c #6D6D5D5D0202", "g c #48486C6C0000", "h c #7D7D68680303", "j c #7D7D72720202", "k c #7AFA7D7D0000", "l c #888810101010", "z c #A2A216161313", "x c #B7B716161616", "c c #B8B81B1B1515", "v c #8B8B26260E0E", "b c #A2A220201111", "n c #C0C017171717", "m c #C0C018181717", "M c #E0E01D1D1B1B", "N c #DBDB30301717", "B c #E16121A21A1A", "V c #E1E129AA1919", "C c #E3E337371717", "Z c #E4E43C3C1717", "A c #8C8C4BCC0909", "S c #99995D5D0889", "D c #BCBC42421010", "F c #8C8C62620586", "G c #8C8C76760303", "H c #8C8C7C7C0202", "J c #999973730505", "K c #99997A7A0404", "L c #B1B163630B0B", "P c #D7D74A4A1313", "I c #E6E644441616", "U c #E6E649491515", "Y c #E6E657571313", "T c #E6E65E5E1212", "R c #CFCF67670D0D", "E c #DFDF72720F0F", "W c #DFDF7B7B0E0E", "Q c #E6E67C7C0E0E", "! c #E6E667671111", "~ c #E6E66D6D1010", "^ c #1C1C94940000", "/ c #1E1E9D9D0000", "( c #2E2E88880000", ") c #363694940000", "_ c #3A3A9E9E0000", "` c #0D8EA3A30101", "' c #1414A2220101", "] c #199AA3230081", "[ c #1313A8A80101", "{ c #0E0EB3B30101", "} c #1D9EB2320081", "| c #1414BBBB0101", " . c #1A1ABDBD0101", ".. c #24A5A7270000", "X. c #3E3EAFAF0000", "o. c #20A1BF3F0000", "O. c #2F2FB8B80000", "+. c #5A5A8A8A0000", "@. c #4B4B9B9B0000", "#. c #575795950000", "$. c #6A6A8C8C0000", "%. c #71718C8C0000", "&. c #636397970000", "*. c #6D6D99990000", "=. c #7F7F99990000", "-. c #5A5AA4230000", ";. c #4E4EB4B40000", ":. c #5757BEBE0000", ">. c #5D5DBABA0000", ",. c #6B6BBEBE0000", "<. c #2A2AC2C20000", "1. c #3288C4190000", "2. c #39BAC7C70000", "3. c #3F3FC9C90000", "4. c #4141CACA0000", "5. c #4BCCCE4E0000", "6. c #5151CFCF0000", "7. c #5858D2D20000", "8. c #7B7BC1C10000", "9. c #63B9D4290000", "0. c #6A6AD8D80000", "q. c #72F3DA5A0000", "w. c #7C7CDB850000", "e. c #8C8C8B8B0000", "r. c #999987870303", "t. c #99998B8B0202", "y. c #999993930101", "u. c #B1B18A8A0505", "i. c #8383BCBC0000", "p. c #9292BCBC0000", "a. c #B1B1A9A90202", "s. c #A0A0B1B10000", "d. c #BCBCB0B00202", "f. c #CFCF8E8E0909", "g. c #D7D78C8C0A0A", "h. c #C6C69A9A0606", "j. c #D7D790900A0A", "k. c #DFDF96960A8B", "l. c #E6E685050E0E", "z. c #E6E68C0C0CCD", "x. c #E6E6923C0C0C", "c. c #E6E69A9A0AB5", "v. c #D7D7A5A50707", "b. c #C6C6BEBE0202", "n. c #CFCFBABA0404", "m. c #DFDFB7B70606", "M. c #E6E6A4230949", "N. c #E6E6AB6B0889", "B. c #E6E6B5B5065C", "V. c #E6E6BD3D0586", "C. c #9F9FD7D70000", "Z. c #AEAECFCF0000", "A. c #A4A4DFDF0000", "S. c #BEBED7D70000", "D. c #8585E0E00000", "F. c #8C0CE1E10000", "G. c #9413E3630000", "H. c #9C9CE5E50000", "J. c #A4A4E6E60000", "K. c #ADADE6E60000", "L. c #B4B4E6E60000", "P. c #BABAE6E60000", "I. c #C6C6C4C40000", "U. c #CFCFC6C60202", "Y. c #D7D7C3C30303", "T. c #DFDFC3C30505", "R. c #DFDFCBCB0303", "E. c #D7D7D7D70000", "W. c #DADADFDF0000", "Q. c #E6E6C5450505", "!. c #E6E6CC65046B", "~. c #E6E6D5D50303", "^. c #E6E6DB3001AC", "/. c #C419E6E60000", "(. c #CD77E6E60000", "). c #D5D5E6E60000", "_. c #DB30E6E60000", "`. c #E504E4E40060", "'. c None", /* pixels */ "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.8 r ` ' ' ] ^ t * '.'.'.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.e { | . .} ..1.1.2.4.X.q '.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.X ` | .} w o '.'. 6 _ 6.7.9.@.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.X [ o.o./ o '.'.'.'.'.'.'.7 9.q.w.-.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.' o.o...'.'.'.'.'.'.'.'.'.'.9 w.F.G.g '.'.'.'.'.'.'.", "'.'.'.'.'.w <.1.1.o '.'.'.'.'.'.'.'.'.'.'.+.H.J.A.@ '.'.'.'.'.'.", "'.'.'.'.'.O.2.4.( '.'.'.'.'.'.'.'.'.'.'.'.'.C.L.P.=.'.'.'.'.'.'.", "'.'.'.'.* 4.5.5.O '.'.'.'.'.'.'.'.'.'.'.'.'.%.P./.S.'.'.'.'.'.'.", "'.'.'.'.) 6.7.6.'.'.'.'.'.'.'.'.'.'.'.'.'.'.u (.).).u '.'.'.'.'.", "'.'.'.'.;.9.0.-.'.'.'.'.'.'.'.'.'.'.'.'.'.'. _._.`.k '.'.'.'.'.", "'.'.'.'.>.q.w.#.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.W.`.`.y.'.'.'.'.'.", "'.'.'.'.,.D.F.&.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.I.`.`.y.'.'.'.'.'.", "'.'.'.'.8.H.H.*.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.b.^.~.t.'.'.'.'.'.", "'.'.'.'.i.J.K.p.'.'.'.'.'.'.'.'.'.'.'.'.'.'. ~.!.!.f '.'.'.'.'.", "'.'.'.'.$.L.P.Z.'.'.'.'.'.'.'.'.'.'.'.'.'.'.# !.Q.V.- '.'.'.'.'.", "'.'.'.'.; /.(.(.# '.'.'.'.'.'.'.'.'.'.'.'.'.f V.B.v.'.'.'.'.'.'.", "'.'.'.'.'.s.)._.k '.'.'.'.y a.d.j # '.'.'.'.u.N.N.F '.'.'.'.'.'.", "'.'.'.'.'.: `.`.E.# '.'.y.~.R.!.!.Q.h '.'.= N.M.k.+ '.'.'.'.'.'.", "'.'.'.'.'.'.e.`.`.U.# '.Y.H '.G B.B.B.s + f.c.z.a '.'.'.'.'.'.'.", "'.'.'.'.'.'.'.a.~.~.n.r.Q.p '.'.i N.M.k.j.z.z.L '.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.j Q.Q.V.V.h.J d F j.x.z.l.W A '.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.# K v.N.M.M.c.x.z.l.Q E % '.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.3 a S S A 4 R ~ ! % '.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.5 T Y D '.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.P U I v '.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.< Z C N b , 1 c $ '.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.2 V V B B M n '.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.> z m x l . '.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.", "'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'." }; quickroute-linux-upstream-2.5/Graphics/QuickRoute_48x48.ico000066400000000000000000000226761446222606700240020ustar00rootroot0000000000000000 %(0` 2QaY:R{b*kz2S{ Z#" *k {/+)&#!IR \:630*{ 2 ZQ{AC>;12R .}OKGB3S*RqR2)AAQaIAsWYUP /["Rq3mhc_T2b#3Imda l u _ U K jrmi CRZ(3u |xs3{Bs } q?}S{bmb}  jS{v}l}f  sSk{}U\S\ck9I b2I x*S\\FIAIN\ fk"cbSC\ :\BZ*Sk cR2GIt}JBWm 3I2Rx2cb" yZqׯ϶i"AAA0Zy3'QA;I0}X{A)dmw9AemS)!W\AYs\B!!Y\Yao[=!![\aad{߅Z9!!\[aa[osy}Y4!!\ZQIEcimsh8)9A9~2X]agGAJ}{0.MQW[OZiϵ31q>FKPRy qR%<@EJb%BR}byR", 26;?:k{מߴb,149PSZ|SuZ2*"'*/0BSڊז"[g!%)'SSp߃H0S{ $c2 2k bsw|ށzHc2 = baabT#Tagkqw@{2p M` 7MQW[^u7{2:  "&*49=BFKE.{cI #'*/36.Q[Bk:X| } }~[> kB2ZyyZ2)AAAAAA)?????????quickroute-linux-upstream-2.5/Graphics/QuickRoute_64x64.ico000066400000000000000000000410761446222606700237710ustar00rootroot00000000000000@@ (B(@  )AAA0"ZbBS jz2kc Z{kG&'%"  zbc [..+)'%#! 2BH7631.,&{22{ G{9><963& GcR )}HEB?<-R:bc{MOLIE?2 B 3}YVSOM\S "AIaaaaaaQcVa^ZWHkJi#Ikiea^$\B2b>\fl } { x u r o ` Q fspli\k*b(3i ~{xtq BkBS*3 |xq.\[cnljgu |y e3s{BI#3 }v8m{{v}]mg}aBAA ~C}{ky}Q\N\!cj ^0I E}c[[\S\zZJs:I  *IJB33:y\m7IS$3 }"{:Z:Ic[Y} _ZR}w}}S"=Ic{ "{{2cR_} gZR}pR2X\v}DIJ{ {q׺30"ZqR"Z[}:*I<Ϻi "AA02[mbJJ iϝv9yJ\" \K!aA!\>3(aQ9ZBaA]AaAWAqAQ~߂AyALuy}ށ߅IaAFmqtx|ހaaAAdilpswbƿY"T#\`cgkoW.!A  TW[_bgf2*3/mk)iDOSWZ^FJ2}o J{)GKNRVPiZϿi- ?CFJNQ.*{߸~Jb-;>BEI8ZB}b:]36:=AC" sƔZ s)/359<+cSmL߯2R[(+.258@S2ՎtZ s$'*-1/:lϑ": #')-'J2{N߅ݒ3"JZ< #&)"ZJw?x|߄Z9[c; "%${RBkPkosw{~zGkc;!#iqaBAAYiT#R`cgjosw@{c) !u+ p'AOSWZ_bcV*{[p  ###",3<@DGKNRVD kB{  "%)+/259<?CF9.ZZW !$(*.11+m!b2"Rs;KK ~~[MMb2 *JiqR2!"AAA)!!????????quickroute-linux-upstream-2.5/Graphics/QuickRoute_64x64.xpm000066400000000000000000000266221446222606700240230ustar00rootroot00000000000000/* XPM */ static char *QuickRoute_64x64[] = { /* columns rows colors chars-per-pixel */ "64 64 194 2 ", " c black", ". c #1A0503", "X c #041600", "o c #091800", "O c #071800", "+ c #1B1401", "@ c #141B00", "# c #1A1A00", "$ c #320706", "% c #331A03", "& c #082B00", "* c #122E00", "= c #063B00", "- c #332602", "; c #283300", ": c #323300", "> c #470B08", ", c #5C1809", "< c #510F09", "1 c #7A0F0F", "2 c #7B140E", "3 c #6A0D0D", "4 c #492705", "5 c #5C2907", "6 c #493B02", "7 c #493403", "8 c #5C3E04", "9 c #783109", "0 c #0A4C00", "q c #124700", "w c #0B5900", "e c #145C00", "r c #285500", "t c #3C5B00", "y c #3C4900", "u c #097601", "i c #127E01", "p c #187500", "a c #166900", "s c #216D00", "d c #287600", "f c #396F00", "g c #494301", "h c #5C4C02", "j c #5C5601", "k c #4B5C00", "l c #7D4408", "z c #6D5C02", "x c #7D5C05", "c c #447900", "v c #4C6D00", "b c #697D00", "n c #7A7A01", "m c #746A02", "M c #951312", "N c #B71A15", "B c #AF2A12", "V c #CD1B18", "C c #E01C1B", "Z c #D52917", "A c #DA3B16", "S c #C63913", "D c #E1231A", "F c #E12C19", "G c #E33517", "H c #E43C17", "J c #E33218", "K c #995809", "L c #8C5009", "P c #8C6A05", "I c #996707", "U c #996C06", "Y c #937D03", "T c #AD6B09", "R c #CB590F", "E c #CF4A12", "W c #E64416", "Q c #E64C15", "! c #E65513", "~ c #E65C13", "^ c #C6690D", "/ c #C67B0A", "( c #C9770C", ") c #DF740F", "_ c #E67C0E", "` c #E6740F", "' c #E66212", "] c #E66A10", "[ c #E67110", "{ c #1E8300", "} c #139101", "| c #278400", " . c #279700", ".. c #399A00", "X. c #0EA701", "o. c #15BB01", "O. c #1CBD01", "+. c #16B601", "@. c #0FB401", "#. c #25A300", "$. c #2AA600", "%. c #21BE00", "&. c #27B400", "*. c #32B600", "=. c #478C00", "-. c #499500", ";. c #579500", ":. c #5A8A00", ">. c #7A8C00", ",. c #749900", "<. c #50A500", "1. c #42B500", "2. c #51BD00", "3. c #44A100", "4. c #6CAD00", "5. c #25C000", "6. c #2BC300", "7. c #33C600", "8. c #39C700", "9. c #3DC800", "0. c #44CB00", "q. c #4DCE00", "w. c #43C500", "e. c #52CF00", "r. c #56D100", "t. c #5CD300", "y. c #63CF00", "u. c #64D500", "i. c #6DD800", "p. c #69D700", "a. c #74DA00", "s. c #7CDD00", "d. c #998603", "f. c #999301", "g. c #989900", "h. c #868C00", "j. c #B78E06", "k. c #B49705", "l. c #A69204", "z. c #95B100", "x. c #8AA600", "c. c #B5A802", "v. c #BCB801", "b. c #A6A600", "n. c #CC890A", "m. c #DC880C", "M. c #CC9508", "N. c #DD990A", "B. c #E6840E", "V. c #E68C0D", "C. c #E6940C", "Z. c #E69B0B", "A. c #CBAF04", "S. c #DFAE07", "D. c #DFA808", "F. c #C6B403", "G. c #CBBA03", "H. c #DFB506", "J. c #E6A309", "K. c #E6AB08", "L. c #E6B407", "P. c #E6BC06", "I. c #96CC00", "U. c #83DF00", "Y. c #8ED500", "T. c #92DD00", "R. c #BDCF00", "E. c #BFC600", "W. c #AFDF00", "Q. c #B9DB00", "!. c #86E000", "~. c #8CE100", "^. c #93E300", "/. c #9BE500", "(. c #A3E600", "). c #ABE600", "_. c #B3E600", "`. c #BBE600", "'. c #C3C400", "]. c #D7C104", "[. c #DFCC03", "{. c #DCC504", "}. c #C4DB00", "|. c #DBD601", " X c #E6C405", ".X c #E6CC04", "XX c #E6D403", "oX c #E6DB02", "OX c #C4E600", "+X c #CCE600", "@X c #D3E600", "#X c #DBE600", "$X c #E5E400", "%X c None", /* pixels */ "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X = 0 0 i { i e 0 0 %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X w } X.o.o.O.O.O.%.5.6.6.6.7.*. .s o %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X X u @.o.o.o.O.O.O.5.5.5.6.6.7.8.8.9.9.0.0...* %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X u @.o.o.O.O.O.%.%.&.#.{ { | $.*.8.0.0.0.q.e.r.r.3.o %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X & X.o.o.o.O.O.%.&.p & o d 1.q.e.e.t.u.u.y.r %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X = +.o.o.O.O.%.%.a %X%X%X%X%X%X%X r 2.u.u.u.p.i.a.c %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X = +.O.O.O.5.5.&.X %X%X%X%X%X%X%X%X%X%X%X%X%X <.p.i.a.a.s.U.c %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X = +.O.O.5.5.6. . %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X f s.s.U.U.!.~.t %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X O O.%.%.%.6.6. . %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X :.!.!.!.^.^.^.; %X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X .%.5.6.6.7.*.O %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X 4.^.^.^././.Y. %X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X e 6.6.6.7.8.8.q %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X @ Y./.(.(.).).,. %X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X &.6.7.7.8.9.| %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X v (.).).)._.W.@ %X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X a 7.7.9.9.9.w.o %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X I._._.`.`.`.z. %X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X $.9.9.w.0.q... %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X b _.`.`.`.OXOX# %X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X * 9.0.0.q.q.q.* %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X Q.OXOXOX+X+X>. %X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X d 0.e.q.e.t.2. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X z.OX+X+X+X@X'. %X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X 1.e.r.r.t.t.-. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X b @X@X@X#X@X#X* %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X O r.r.r.t.u.u.f %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X : @X@X@X#X#X$Xm %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X r r.u.u.p.i.i.r %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X #X#X#X$X#X$Xg. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X =.u.u.i.i.a.s. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X E.$X$X$X$X$Xv. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X -.i.a.a.s.s.s. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X '.$X$X$X$X$X'. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X -.a.s.s.U.!.!. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X b.$X$X$XoX$XG. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X ;.s.U.U.!.~.^. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X g.$X$X$XoXoX|. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X ;.!.!.T.^.^./. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X g.oXoXoXoXoX{. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X ;.^.^.^././.(. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X f.oXoXXXXXXXF. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X :.^./.(.(.).). %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X f.XXXXXX.X.XA. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X t (.(.(.).)._.; %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X G.XX.XXX.X Xk. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X @ ).).)._._._.k %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X A.XX X X X Xd. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X I._._.`.`.`.>. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X {. X XP.P.P.h %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X x.`.`.OXOXOXx. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X # X XP.P.P.L. %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X y OXOXOX+X+XR. %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X z P.P.L.L.L.j. %X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X Q.+X+X+X+X#X: %X%X%X%X%X%X%X%X%X %X%X%X%X%X%X%X%X%X%X%X j.L.L.L.K.K.x %X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X >.+X@X@X#X#Xh. %X%X%X%X%X%X%X # j f.f.n g %X%X%X%X%X%X%X%X K.L.K.K.J.N. %X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X }.#X#X#X#X|. %X%X%X%X%X%X f.XXoXXXXXXXXX].d. %X%X%X%X%X%X x K.K.J.J.Z.I %X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X n #X$X$X$X$Xn %X%X%X%X c.oXXXXXXXXX.X X X XA.6 %X%X%X%X%X N.K.J.Z.Z.C.+ %X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X '.$X$X$X$X|.# %X%X%X f.XXXX[.c.l.A. X X X XP.H.6 %X%X%X x J.Z.C.C.C.K %X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X : oX$X$X$X$Xv. %X%X .X.X].# z P.P.P.L.L.D.6 %X - C.Z.C.C.V.( %X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X j $X$XoXoXoXc. j XX.XY %X%X%X 6 S.L.L.K.K.M. + n.C.C.V.V.m.7 %X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X n oXoXXXoXXXc.+ j X Xh %X%X%X%X P K.J.J.J.Z.P 4 n.C.V.V.B.B.l %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X n XXXXXX.X.X{.d.z XP.m %X%X%X%X n.J.Z.C.C.C.m.V.V.B.B._ l %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X g ]..X.X X X XP.P.P.j.+ - Z.C.C.V.V.V.B._ _ ) 9 %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X # l. X XP.P.P.L.L.L.D.M.U U I U T m.C.V.V.V.B.B._ _ ^ - %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X - j.P.L.L.L.K.K.J.J.Z.Z.Z.Z.V.V.V.B.B._ _ _ ] 5 %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X - I M.J.J.J.Z.Z.C.C.V.V.V.B.B._ _ _ [ ] L %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X + 8 I T / / / ( ( ^ T K ^ [ [ ] ] R %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X 4 ] ] ] ' ~ 5 %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X R ' ~ ! ! E %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X 9 ~ ~ ! ! Q 5 %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X E ! Q W W A . %X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X M ! W W W H B %X%X%X%X%X %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X S H H G G J B . > %X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X > A G G J J F Z 2 $ $ 2 N C C > %X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X , Z J F F D D D C C C C C C $ %X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X > Z D D D C C C C C C C 1 %X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X . M Z C C C C C C V 3 %X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X . 3 M M M 1 $ %X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X %X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X", "%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X" }; quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_16x16.ico000066400000000000000000000021761446222606700256570ustar00rootroot00000000000000 h(  RPPnhekeckeckeckeckecmgdoidoieohfRPPXVUYVUXVU`g)6OIտ[XWXVUvh`YVUXVUQ:(QXVUYVVsŽGA"qYVUZXW&RR*ZXW[YXmc\[XWZXX/UBe66ZXWYWW{YWVXWWqq%MRIWN}XWVXWWslntqpsonTSSXWWqpqcdd󽽽4XWWpppggg󽽽1XXWpppfff򼼼0RQQnllkjikjjkjjkjjmlk]]]ス0quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_16x16.png000066400000000000000000000065261446222606700256740ustar00rootroot00000000000000PNG  IHDRa pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxlKHTawGGX= ZkQ)Q[,eaI"= IP˴5w滷h,wΏ|۶(/?%;;'_Y,R'TUUi? iw5 rjk/zF.TQP ,+h۠TLakkRjg|\m @ 00MMIJ]=beC5mG>}BCx*!p'zZZ= +R,7z8K?k'-B݄X X5kn3\o7cYJ@4͛kɲRx҈5>Z,wIENDB`quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_32x32.ico000066400000000000000000000102761446222606700256530ustar00rootroot00000000000000  ( @ ɸvk|^WkaQS-" <9Ķce?"?idrjXS{.bUilѻƷǭW7),5|x/muP=DKw}@2>:i_q89yεY"|wo/ h}u*Vyζį_ÿïe2@vʵż^!hձʳlֻK}ÓQپγ?q!JԸε@fg!nJպSdK\ `wu9@jp\յ}~/@ 0K%>vr!MW@o|he4@stmq.WUcqv}y69 '-/> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڬsSޫ[dXFYC]&,&1hZ MRt/s/e:閄aI14MKmEX{9 6 Rgvy#RK.ia!#/֎l%emgrXvP-ںr%- Ċ֮]7dlt׀Mc @4& 2*Dzb(BJq0_B[@dUXgaL0|ղ?096͇ߧv]D7ޅ*_LEQݽrת/j"|.IʋT|r jgOtN 4Y$nɆ=,CH-AJ'ub =,,Z|sB 6FԸ7S@*PV$$SFFq{ ,[?\KJfY߷З9**m MPo4s55 '.Z+2Jmj1\^ X ۍGz1 궉'X2~u=omd*KZ. # 0TeC @2 ~k#I^_r=J=45SO,fN1"5Tv( Xvl2m=ƙ~p?XGtw8enO:Z#~(.h+{:{v=pO]]߮=d.^]lۻut,;"2)!eC6FG_s"_#05_fSp_ƦݾÇ:1+L3'@Gql?T_`q~=ǷE*"uħ8?.^:)H@AjKi؉c\4۟uRΗT;#s/Zb0Fa~z /mTյ(̴@t|6Ga6aݽѼ8= \-) {۷׳c{=ݼKl%sq~Hk5DNB}sC#w;gIJW?L*8Mz\2+͋A#|./WIŃIJ譻8t3'X> fxgΉ$-t?;;))%T@D$mS^ˌeT/CImmhә CM-Ώ]Jr; fIENDB`quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_48x48.ico000066400000000000000000000226761446222606700257000ustar00rootroot0000000000000000 %(0` ߾߼߼߼߼~rlclWQOHWOqfqu͸߼Ѿrk^\.7!(']Uw߼~s\`9.1CGII,/;9xt߼qkt(P@A]_vj{lwmunfu߼ļ̷ɵʶDztLg VQP`vhκʶ˸߼ѽxxmjppsnpvnpvrosssz$o f*dwpr߼}qo_y?,$} wKqtj߼ʷupa+'+! Ww}qn߼ɶ}nkN p}vpskc @}vnm߼roK2zxt;rnojyxw*ZEA~pkϼ߼~{_'}ytpkW 9S$Ismup/ Xzx߼ǵtrm#ǹ`{rnH Q|oka %uom߼U*vtĿtpiU\t|zzuƷĽ{ws, X{t߼wt0GrpɷytE8tq߼ʷrwњXS vzyѼ߼gv ې ݝ`{[ k߼cr܀ ؍cwc i߼_opx cu] i߼cl_f nbrV i߼kmRS]ZowvLu|ϼ߼{|u%OAJFfw|zw41xu߼yHW18&R{{wʿqyӦSut߼i}g0(5Ze|~K͠wyu߼z~BK!;Uejz|߼oyl_]TUIMLQUY`~cqxo߼߼߼\"߼Y߼X߼U߼U߼S߼P߼P߼M߼K߾MZ??????????????????????????????????????quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_48x48.png000066400000000000000000000133331446222606700257000ustar00rootroot00000000000000PNG  IHDR00W pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATxڴsWvHSE-f-4c=*{T@yrjXy/DUתJ ٶmh4'?Yj Jq*U>Wh +|>K|k` U:HUghhX,r]woQ?rA,/zi H$+ &ʜuvz]*MO>-[h4R[#^V2UPib6a!uKFBӄ.Jm`TcAUO0S߾M.e)M >H](,OZsFX`a6- +k*ׯq((? <:;H#Cf`gY(X,Mb6\3. xghLXZ*p\zo-oJB'@;ZIMqoC84uj &hZ<(*u<s6J!dIsPM‹,% >\4+8y*B_}kt]_& 1aLj.F=78wdY fUG\R,8pf<4J IMg؛xwiV&`AsKc#d\Jȅ=9߿H*5FݯB|Aq[4Fr}(ɮf+T+o ::(BN@wI6f0}9fIZGXBbbB *Ϭ{/4D”,?cb*0d-_wϵFb >DWM'd>*=eukiEVVl~h$CWYUPQe3 Sr?dmU~  uj$@&%Ēq&!+[ܿ;m^+KO\Wia:XR$rIU+-;ކ["m:g0caYECH r*3iB;!&8g7w13+liuGO57PS9=p_EOz l_x;g07;H0O'{N}[C %h9N|6j\j?yD ۮ_ս'#+<^%iΣrFs7EHx?!zs.} 14RiX# Tů؏ 1Jpxya:NO_L 2O`F ikg\/m3|}t]ЪJZh<'NN <`ˆt 8d2clr4e}#VNK43)8c\{zq4 躆prwuuɉ8*Ķslbv4KK9\"u\_-|˞f3g#t161=$ɧ8/B_*y(+UWkudlYx)I^+M1HfjWg\@{6wD"ẂA}P+kWS[]pνȓz$ Ox/3¦fқP_[XX# #FBVO' @Қ䭟O82~ g l&= / u{k.mށ|?B,?v.8ʆ ZYq*sOPYYCU^+Ip ildMfxdYw08$])jH<{6,kc=]r%l3 | յY/M+WxN+}ųXMPf?*.徚^i5mx+BȳG%B+,e}!c]^6߉MIENDB`quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_64x64.ico000066400000000000000000000410761446222606700256670ustar00rootroot00000000000000@@ (B(@ žɵsnsnsnsnrnsnºsn{prc[NIKEUNmcrnsn}xsnke8>$!HCymusnso]_ 7/+( *"( FAsnʷsool D;74EMpiwmw_[?@PMsnðso:[IE@R[sososnsnsnsnsn˸tohoXTO>Zsoso̹ðijtptptptptptptptp9md_]pospλtptptpvwyh{`|_{`z`xhvbvtpjAltptqtqtz{R, |vbstpžuqs}|@  ){butptpyuuq_@hs{}r{}rz~G Bz|tstp~zurP]- t||uruqur~us* , 8{uvtpurU.y{xvr)oururur@G{wvB Ctqurk #{zvvrvrI/fd9-}wturuq. _}tqvr|yt'ùhvsvsx|z)2yzxurvrj "~uruqvrW0vswszzx?+Vvsvsvr5Wuqvs!ɮ`vtwtwt{{xnt}wtvs|̿vsZ +|vtuqvshػw~zwtwtwtwtǺvst~} murķwtE%Ŧ}yuwuvsTvrwt.7wuws18vrwuˉExuĹwt9'vrwuHxvǼŸwtF$vsxu sz߅GyvƻĹwuE$vsxv ilrxGzyvƼxu2"wtxv^`ejGtywƽxu,&wtyv'ZRW^4kywxvxvϼ<wtyw=[FLP"`}|wzxyvpڽXwtywej<?ELpszxywU oxuzx~{w=39=Kczyyw1/xvxuzxJU)-2Dz~w{yzxm|cxvzyws,"'+FY{z{yzx-.yv{yY[!*ag{zzyLzހՎp{yw½{z=C,hk|{{z{yTsmsy~_{yx{z|z=A #T\|{|{|{|z|z{~xFi\afkMvzx|z|{BC,;Z`}~z|{|{|{|{wwRe RINS \Upzx|z}{|{a`"%   " 43D0E; 537<E,Yls{y}|}|[Y:; #*==Taj{z{z}}}|tqigYZSUDHJOUZ[`lnut|{|{~}}}}}}}}}}}}|}|}||{ ??quickroute-linux-upstream-2.5/Graphics/QuickRoute_document_64x64.png000066400000000000000000000151771446222606700257040ustar00rootroot00000000000000PNG  IHDR@@iq pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxsg?ow||ۀ91G’`$LBTseIm&ES̲„@ L2`clOlɺԒ[-9S]-u}9WBJm?|S~67?x_+/6rA 8I! r \H~:N> +:›{3@`7@pM``Rm$2ru@bB>@Pr_d c,!2 n B;aCcj2>)XҾ %  8g ; i5e{@ B6fb!' ҢYݕH\.CG  82(.Y3=7oNV3e p(To2=K 2+? dBN !,~ 2Qp~t:u0e (Lפ7&&H2#F Akkbp$& r. v&(drsaCHi_f$YŢykHMcAhiiQ Z  K v-1Qg̵6\ dHXi`6Sȵm&j0@*Eh`qqH$6ǃ+ϑHQn覿/+ϥ4mHD\l-yH#OX!idzZ+$|"8jVK8t;{NA{E߭ݺIY&r ?!sy#GWc|f.D(wGX̢ ЄD`3>;Ji [t9}z>^=:/g5e4T M_9!NoAT_upp\|Q%R5Ϊwg blo)AUqF75oӻ^Ke*sV M /5Zw ^gQ`BO1[MCo$i !le]?ANR $߫ TT% Z"0<2\iHgeTlBz92ts())%ǙgzzfJfi_Ywf=oC0GwfSa+mBA>cmHOeBbP*lrs8-Ktt)<;\@Z c;zi8{C'TpR… x 7\¥H*`hk.oc;˜!'_~˅} 4js(},oۃ\~mM2Tz㵀^"Z_V%.Q^_6^/y@HWVUP`iƧOE6?} \vu1K;]MhѠ2PAA$Sh-=ꖸҒr^:2׎mx ~ _$wsɔ'zzE:]]WB2Sׅ۠G;Pb6RYY6Y%L = HkA],!2/|j wu]E7> V#H +wEx(ݎ>V*KCxZVڞfxcP[7`%#̨.S011DU?nG -Z⒲\вyҚoE+(ncV㧴t)a~~.#=λL 4??\"vjhͦ)t,s̭NI$V% lJH҈;J򶸤$,bKڌ. X|FKv{@7Idk*xUB ǖdZ1"񌸀p4=,l̀TRí&za5bxxL YVVV , a ().)M\HWĔ׻ Ъ.ryI(DN-|H`y8LAQf9͉@*[+*\EFw'X< J2gs7UVR]S$R\;D^P\6d=C}4k ϟfoBpMqco3022@E4Մ3Wb |Eg>n wfK`מLsm|G`S>5 5:N?n>1ruzo\GC!ݽĥ90aua\`jt;s;ٺm عO3=ΟV{ϝn= ^R} pl_vD_ 4Ucrr2<}}P 3+ ,!kt{܆S A7vkq@b$4g{7Ճ7?oyp¶WMe=}EDJxfeUPtY4H 24:BS[ e|+6 F8qcH\Ljm\ XV*J@$qdˑ#LZNۡJ`b019xu^ <0PX\[|s`?nsAh"m ǖRD"NdDCb_Ǐ0!j)))uuR>D(pAʫ~mzq{ޙfzgqA e"0!; X-MeYvf]_dfc. hawPUS~&''(--ڵ1unвP1s8n,6F'wgO! etV4sUWTVf*#_DziƤdhs,5zS~ |+.ኄ>3Ɖk_qh'Hs t{瘱#+γbpSwFY^迄3BĠm!⺂+11_YI3 !&eÚ^&or{(ʇ^aȰ6hD\][d=mGO$ryy~DM bq.7S;پ)gXO.25_7;,l|?=CU0VQʪZ:ʶ]9/ N l!znbˋ/sϿScq/UuWdfYz3?v4Rq}ɇw:&|H Ȥt>Y vmS¾~rIENDB`quickroute-linux-upstream-2.5/Graphics/RightPanelVisible.png000066400000000000000000000061371446222606700244070ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڤ=K#a1Cď]u(nDE (n%;VvfaJ$h¢(ADԨ(53$ͻ'S{U+B5T*\^-?{*Np(DF=_:[+|QV4 Д:qdB`S(u Ԗ*2hmx;c\m@X2})/yOQ"7b6Ul۾+׉doN)A:= P\Ƒ"K<lIs7/IoZz=3"G\s8A:i_׾vYH$fu]R;*IENDB`quickroute-linux-upstream-2.5/Graphics/RotateClockwise.png000066400000000000000000000012751446222606700241340ustar00rootroot00000000000000PNG  IHDRa pHYs  9iCCPPhotoshop ICC profilexڭJPEšVp'QPlI[ XCIC$ܪ}G.>!HpopbםQAUH3L@'R:8'>_ϛvi7Ti`lw,Q: ƀS 0I(rJAo@I0{1A+K PKґ:jY,K$( q4Qu?vӑkU[q=_~cCu݅\/-LOl n6`VPނ³O ' cHRMz%RX:oZIDATxڬ-,QߋIFT"jT歒j&(BEP6Ql!D|\ݽc8 !HpopbםQAUH3L@'R:8'>_ϛvi7Ti`lw,Q: ƀS 0I(rJAo@I0{1A+K PKґ:jY,K$( q4Qu?vӑkU[q=_~cCu݅\/-LOl n6`VPނ³O ' cHRMz%RX:oZIDATxڴ/,QC$ٌ@5H{J( A!lF$gKAܷv͜~sv+EQE gxD u`78nPdk9 Wjp>yL>aZa)6q+Rňws,å}x Tp_?1F.\jh :2.F.0t!&LE5NfINc9*?Kj-PlIENDB`quickroute-linux-upstream-2.5/Graphics/RouteLineMask.png000066400000000000000000000061471446222606700235570ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڜQdam1k(1]-LTn֎CtFFeYұXIJĢ."tEt$s3y}yi 0Bԅ{]N/V tr͇skI@ynb[nk/|n$|oܯYX)3>w#٠v>F Mw>#Ohݨb`0SI_t c1@Ggr;g0SG9z-iEqzIN!7xɋd'WXL}X:'<;TQdx|)N'+ !3Yk(6?G`u4*ה5οctQMB824`oP|dh=kjF|IENDB`quickroute-linux-upstream-2.5/Graphics/SecondaryColorCodingAttribute.png000066400000000000000000000063561446222606700267750ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx|AHTQ3}DQbP(4p!dR(( [I 8qjZI"'"(l)""䴘yιsPUgtm-L,GTJj&2T kқ&š:§=`c ݹj9Kp.}w =Ϳ0h)qqMDD=un5p3Ė-ESҘZՀoBDXKd- ybkr"@}Ǒ.ޠ(o¹Zm,] ,;DDp>}Pl OL̝_}!UA!{VIli~ -\*]'σ_7w>1EqLl5@c9aph kM.# e$ޓ8Ǐzgjb7uЮ}kq+TUzh[ܢi yU2Pjhg׿"ރIENDB`quickroute-linux-upstream-2.5/Graphics/SecondaryColorCodingAttribute2.png000066400000000000000000000063401446222606700270500ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F IDATx|AHUA㛙+A-Z<("6 "((\ - *VVtkJWVADm ` qf).gsPUPt(O] PUD(!"z}cK>YNqҳ3'agq&ޖZb"|q`S|J_*z<963>O~~foywz}~_icggpyϣΜΦ˱ݺܱݲҫ߳ѺݺʽŵеҬ٥ߡݠդױڶҿ߮sw|WkHEB?<=Q}pv|Ŗqv|wz}ߴڱ֦ڢͰ礵ש̩˥ݲ֩׵պ老!WNLIE'Lxuq|zw۽ܤߩڞ̪̫ɪͣʤ˩ҰVrYVSOMTfosq춲հ¬ɣܢשúǬ޳ݢݣӿٲȨ̶֩։%ia]ZW5_ipqȝî˶߫ߪժí٨囤qlzhy^p{pu{~|z~{x~}j|khea^aouuqݺƵ˩ĤǦˠ̫߬ո鵤æ¦ܣӪȼõ֮޾˿ŝrz~mz]wE~43(())))~8}F|$xspli,l}xsش־ۿ۵ɾ׸ܣѣ͜opq]\\Zpw? ~{wtqNw~zvݭӸ߳ϻغڵӰǬګުܦ٢ٜ󬬬~~epzKx |xvczmszdnyۭٷĤ֜ڷԪÞںݤߩ޼逸͓ŝѽ؁l|&&9799. |y%ufvgpyhr|߭ߡ۳ߡϷ⨲魻صїƶbo{ou{[,vgpyqv||||oqrsw{b }zKuhqy׿ƷӶ׾Ш觩w|`lxE =TFfoy||{}}|&  ~T}ߥƷշѱڷ߬ןְ֧񓜦O g{^U}~ӻ𗗗K Li! T}~x겱Ǫ߸ֵͷ˺ܤ櫧骪ȵ¶ңW(uy}x{}MBhqyh krz~x jou{ݺ߼ٿۣӣo&{~vkuou{ \sz|~z|~Y  ^xhpyp "ms{ܣĺ訧턄uxz{ksz2 2: \dnxK 8lsz˦ҿسЬOKgpzwz}gpy0Vhqz}wr|vq xڢ߳áݜ禥ޢ}ytuzgpy`mz{}~x{}64gpzty~䪢}wrQ E빾ڭ㨷ݦܦޝο᩠|vqF7ux}dnxsw|s`@@I]fpzuy~~}|vquzw fp{pv{׽ߨثҤݼɷҤæ߱ǣҰዅ~|vpٽNwsw|ӥ~}~{x~{x|y㡚|vp3L{u·Ļߥ㵸ãکٜƽ|vq^dnxһ¸ȿ|vqP-~wp䝢ֺߤߵ۪ܣ窣}wr72alx}xsmptsjrsڟϵŢ޿￯۶勄~|z٩;wz}}wr}wrPjqrϣܞʹڞ֨ٳ߿İ}xswX䚓}wr"8kqrȾ諬׺ﴱѢ߭쭬}yu_ovy}⚓}vq!+jpqʡڽŧǧä㺱}xt?x{}㫣|wq-lqqҵ۱ť߫ިä۹޶绾ܧި朿⺲|vq>~x{}foy㱯lqq6|vqڮݧޟ渰|vq>zgpyx{~⠩jpq6!}vqèި۟}wqx~߂~~~~䟨jqr4 ~xrǦ稨޳؛ڪ𦦦}xt&ruy}ށ߅~{x}wrニlqq tqoߙӵ}xs>mmqtx|ހ}wr}wr䍏xvrfoyÙϯ߿޼|vq>hdhlpsw|vq|vq㕌}wqgpzͨ裻ܺ|wq^o\`cgko^r|wq|wq|wq6vz}缝۰ި|wqutTW[_bfMnsui}wqe_˷㽝߳ۼײ׼ܼݱ۠ΦxsSOSWZ^2epvi䥲yvrFvqv|ʮƸܰлܨֱѭҺڲȫ˯Ԧ٥վ̷ٵ緽헯ݢ甗߲rv{6bGJNRV[quh~t₌stq'īɾ[mpgサײۧѨʱѽضҸѵʷӱٻ뿼˵פۤܥݶܵ׾ݶ­߳ߥٟþ챻ߥ߶ԘWfvWyr?CEJNQ\dquhĮiqrizw9WnmƵҼѱҬϪѭоͬѯƱ۶ǰӳ巿ι׭װ뵺ңޢߠݥգ̡Ƥԯ߹Կдô¿»¿尸~G;>BEI1Yqth㑙jpqEq|wzwq⽾¼ѻ־ؿڽذҪܻè˥ݧݤإƨȤ૦Ӥ޽ʿ챕罯ʹ֘󜨵B^36:=AGjzfpugųouujqq إ<xqݬثϠ׺­Ƹǰӥڪٻڪܼߺֱΰѡmt{ 4/359<1Qtuj㊒kqqC߱v~u|vq߾̥۟ƨϺγűر̨ ̣굺ڨ˥ͷ߯뻟󦨫`lwD^(+.248ef}wr㥯ipqdxsݖ@nrqڠơܤDZꬹ˴کߧܥ۠۟ž䷞ӥȲdz߭ڵӝu}iqz'>$'*-1Llh|vq|vq|vq|vq|vq|vq|vpmkNgTOSWZ_bgeo|vqzuܣֵȗ⢞~{x~{xGI #*;.F>P6NE@<@DGKNRV3ivv|vpޥ߸vt?@"%(+.259<?CI%[`ukr{ܢǞܵ¥壠|vp}wr}wrf_7: )!$(*.1A'QWjcwvpu{iqz̤Ӻѫܰ||uo|vp|vq|vqme]Y]ZMO>FMQ_aSfXjgpyy{~pu{iqzݠ٫ۿ흠ѵ}wr}wr}wr}wr}wr}wq}xs{|}eoy~~}~zÿ讪ڵﯽƺׯԯݩӻ睊ߣֺ;о»䲲Ø߾γ̾ݿ좟¹Ы;巪ﹴŰIJĿѾε԰ư֪quickroute-linux-upstream-2.5/Graphics/Setup banner bitmap.png000066400000000000000000002623241446222606700246210ustar00rootroot00000000000000PNG  IHDRF:f@ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FYIDATxڤwlq vޝsLO'$"0b%ʒ,˖^G ^[>[DY@R 39wO P3=gwUkժ+n}:=ՙsnΏ_K5m׾ƥWٱe٪_-~X-^K|; ݱof-k_a>5|#wzK$ ٪C`p?\+eS`AA\pu@ z h?/?荣4SBlGȞ5DFl]Ae^2@H*.Q_ꄆo.Qi:'fϡ?QȾ~koA@t C_|?!ׁ+rMԮ=VFf߳`2"W5H蜟a*2uq@AX9]C\uv!0ҩpeѥe;:;5WZ6{175Be4 袅o4 rst~f H8 +RdnW٢FtM:Z$>ϐǰE?U/9(^ZEB#XÙ EEtƄ+8I#z >~8uOqDm]:}m!"J0X=mn#WK*{3OP_ 8| ޝ,K3;IګcBDjW-/zc7ߍ⏽þ9juAx;F 짹2SZBK:@uM _n1W'ȟ{8! ;827B딮N#?V#Tf΀mE҈>~[UF\Qvn\+7ު(!{BH(HF$ *k/Dw= t`zE:PmڬV,-㺔m*a #86G&i:H.B+ժIEdH7-8k񧷠Cm(?.4Wn{oNZ'NJ``1@u'2}-2sY<&{QBQ2-S628cc!p]ϴ\\%PD .G߳QnVU!~WMXm: co۵Q7S׵ԽP|_|z>4ڒ[GgB=fu].">w'թS߃Ȅ2 7h@\ehXuMNG{}pt4׫!Vqeq]Uipi6N}=/uᨩ'vqYgC[1])"z,~6"c"{XNb5+$o Mhv۹ orAVooKSL``ѝ "@# *Og A &T/{G!y}QIQb;X&N?I׶qm-n`IVOb&jӡ7iGu06COmץrhlq/GSL'8t6 QRJ Ah Tz/8J N!\,'< a%:Y÷Pj@'arn8:cIe51F`X.@Ϝq{9sZ4;0X Q&ӌX5֣vX-2^qrg~U+ܿU<{7%*M,ߞCv7L*M؇n}{Q߿ڴ8`h)[ҿID ':?+_|=MFl.;T۶!o{«bLh/MeQR7FTgQ Kf%G˔ߠr9*vIN@xߺxb=D"Q,D$TYpQ:n֕S8FmŧiE L\K(*"2?o9mLAzژFp̶F"U?X~w^:E``/={w"c/^qTBcwP9䣿C}yۿ@lϠW^rq1z=Ag-^_~_cV:0w):nyYi|AY9f%s&4rh-B"GyxRÈ, 4 s]R۩ >O:n{Jע0+"cnS>Q j>;-/^#Z-)׵G*=hנ8.HA\KF>t7Ī8c!J sO;]?ݪ*,Sn g$"T*1|C|{/s i(^}ܹ:(#zy|͂*S<]jswo4q _z4k}ϠG?զIWTCLP=ك帬,[vm%п%ZIM ۥrz4 ifw}f#H(ih&(_CiMe}umZym>O<dQشy+]u~nKcI 00d.Cj1kRlH^Hd@5߻ 5҅'ޏ UX7=%8t>%idO_9d㗪(j(ٓ׵}(t EjO@tP$Uj+,Ti6mOu7JδYtAq5#UiN?odoP"ҲrL5N8k3ϊy- "^|[ 6wIX4Vn'13ޝû{{pnas^6mIuj._\8 I-hBQIdV9ė'oxd:/"NG/9$v {BBpa$Bph~]"[HT|g𦷬wk_hK嚌O(MHxhNjRk J'HP15\Au5u] -&@8ͫc&&f;UӻOr=ۨif'i%+W#Dދ CR-LaΟ߻.j^:'9L;]\@5 \Gn%ugJ^CvBHba6&'&pmq\x@%3Y~+!@V~ǓM_*}CUzbvub=@qQ<Ms@*)Z6~XN! ӡqGzqf-܉Q\xU:mR"zt;F_3tݵ]E~}uGT&S2ZoȻI= ̘hv t-,/#"ew:YyD~B=[@dZ3')x1 _B$ɨ " I5ʘi뾐( T[ $s<܏YZ1'O=(7wsOuu`ޝr٠Z[oE$ G;2{ o&Milן>"_EQ[%Қ1r裌p]w#uad2_4&4Z&8.(ӆ !"h.hQZO"jnpmJo0Lh= ),-&Vzq`JVOJ -x@v\-v,P7l79}f g4ɐJJˈJ B>6up A%LGaCs ,*!\O ǾJAۋǣP(޶DI-\"ؿggj UBaQ:FB*2|q'}/) D=Sy٧AqP>yJ;);"I'@ku9|][uׯI}2Mec.EDK &SI"~|0Kkn剓;1**FkQeDA`ТP3E "cVpN\:Pxd*UE|hd/[( }-SS|/;:oCX6kAR4Wn"AK(ݞԭ]j-zw|.gez(DRk_ "I3(Srn8nXDm"^"[LmBm8JxTV4ErY,芀, .1v-NtQ_cw r N_'?s5rU׹2ȩS8|0W^e~~FA(BQA3Z(5 ǥ+$ tEJMU=^F:5XĤۤ#peLGD\^ ]h.,"O!(Phe˓R:YG1ru QH,( ʉО>R{&wG?HVD)O߷kC-cN|kf/NSJbG6m$SCE(!RdR H`Ih`^x!]? H@Q]Mn/9ʂ\7 <Љ*CI&#gHIlؕ噣̦Ys}@}G(oȭ g;M %Q#TVmUbbpxYR~@n"[n³KWL%y}WY-[8ҏHZ?AU&:sOWl%RHDu婞Ɂ D yus7E9#io)[y^p՗u ܁/h;h2(ӪQqϯ] E.| Zpӳ7F|, ?YqbbՊTfR8Am*$k{FdoȭD6ߍQMm ]r9|][NGfVOOr?,tю?~HM!""GR43gq-RLxӝH곧_1@RQ.zOu4Zb@AzSqLJ\eoCcxU|nwYQ x$ I܄ݬ9m{?1y $ץT3hyzCa[An;U{zmxCA_z#;7./R]'څG(34EzΞt_VdOEեq^p 9|P>ݪNWed! ;Te\J˥oyR~Ahfoa {qzɞ~ O[3W4Ih!/"6XO[y'sj Kk#ye7w/:8N۸@b23Ϳ[s5!T7ͷTOr >,gΜaaab.C+@μ)闘 !hbMOku%ߵE#J 8C(.E^zLydd4V𦆉|j& jcüfO='1H|Ǒt?XV^WlfrjH%c[8wqNZnbh25pwcFW,;QWaZ9 ,7p-WGp%Z F> )Zy\l޿۫-5Ncj5juNކNX/Mox07Le:6 AZqd!bE'}!*jYS;gūPjc;xbݨ4Z\mRX&8.-Ű\:BmOhTY9]x;F"QI崣 .Q&m"0t-^O5s,e@CD,O~%qÁ8@ &X9 DG'2]Xr 8At8RLC;d0Yh7fi׵7DWj N`6Qi1+Tg<@+{#\3m1;\26]4[/B{wR8~Jp`IF =b.D`mt;㒩 _1Jv, 5xݠ7Lb'AǨ/SzX]' ͫϑ9}q9$EQM-LZT sJz ?z9,Q'q44^ǹ>6-S̑Ȱwyf{OscU2khBי3D Lh24`᥿|U9\3Hʠi4Oѿ uxxedUJ؎@R'Suڥ^XޯMV  x{v !8~*r+5TE\cpE4y4|Rέ26HJV%;'L@R=\`î$Fprk9(JhoOVcw( \ *߁6^Q'3&Ob/یkr@Azz"/}tW$/k..]UQCi̝Adu0M찍_~{|S|uH7oy;*U""Z c!i^HX("EqUkT淐="[|ff)doV~FJj{N[FmuO 'i`e4pwT2ꏲzFncie ٦n;вDǤuTo_u*^]dԎ9kwh2bj|bӹ E$ >I Qq=M(~胄q ,/ -֋ mZT//LMqaض(\^"XVwdži5܉'NF_FǰeJQD ކ$k(Hf߶Sm=sYiFh\~5҃Q8Nbǩ/\F hf ގşӻulo6S50K$&տochdOF) IDY(7Vj,M':bNh]g9|UD[92MDi΀KwGi#%CN\2Y)-V b;zW T"ˠ<N=(1-H9DY׵VZES& eZPl3Hv IRIdIt75m+Qi:\_iX2iZ1R/D}-'AC Pi((ۢT@$&::}՗ۨ׵|jXƍLNNjxKK#aT_AFFy>A'W[&aI:si`c7!_&0ۨz7Ecu4(܍Mj训/5NT_9gٓQ9Km 2UWَ?w'~>%N2uNQl%C9K$C f8($+HH#HiE. $@!\h,W ["wzEuFJK#5,c7tK4WnMo! 1꬞~=1QY2uVn`urgDҼ{{ m̄ (kal]] 9I;9F6%Au]0Fi ZW) %5B^Ej{wz(J I ]wHϚCtP|֢Oю5Q˘U|0sTNQqmR ""K X|67p.JqlOCHq_]V r;>@xM}p!%r۱Iwz۵OI \FhJ1ob46ԛB !.mi/\yĮh)];X;bjt)ʫiǩJH&3gienIoƲlfgwю>BP77WV-LHXk'kyXNgq5 YtFjtTIɎz\ E6HFFē咽]e)BσceQF㍫,JF 6Z+WT&bV> {"(F)jh9vݦiӥѲ5-MpҲ^i0dP' TbDv[cI=ԗoۉs f5oE &)]z0E(-c Gpd Gh1 Ix-b! }|[K~$D2e ׅNOD3 OJ!Ar1괾qѻ}W5 ÅAyZz;_~#O>AqyY'@ƉSɁ4ͺFn$NNt) 1|#{MfoH롵r5Oez:DxCHz`=%S H7MhUGdIގ )/67Z ^}ۈ_ [V-K&֚BQ]h0d[,"KXBb0,Z޻^7'MGgDmy\YCwEKiR[J?pPv}Wqr7#"^J˦e8o?BZ0"QC(1k[ح(sҝcTgΠEvmA١i}>~`X%kL_k!,%N?JuZ<4s2f-GFZ$= )ȾFns*p,؅}{؁~LOnu AOymN]PCh-!ك봘 `;.^MDE-rdVQq-ĵ: FV%DgGIٛб :YuY8k SF1ZÖD^wgy+%~&-IFM۩gB@k8js=Ԯ;.W K=g*$z|i7XAp `Fto7ūFOOf" C1ro" qPis$o4CdO~QEpk[^ȼ5Q5yN1:6D[cxڥm| w"mM"yOEU8z8Ų,$F( mqmOĨ.\]/O7*̷k_nV Ee*3'ݨb^U+ (*G|qJ&0u"4m&jzjiU@oz3G$8t^BKoZz[|ucSmsP>2Ǿ.}IWqBE6([aVI-2IG}1cUތi&0E|=PQI:jWyfQcђTSUr `7@ or_n0[jmbzy!d>l?vQl}mӅms~ Gz?MwܠslFP\/ D^LKgPjK HȾwIr\jf.ҬWxH?B+TAZ Bې{lqPD*5: ;?L+aM8++w`'Q޺B9.ҪlfPcS>I}S{(FkByQ=&yuJB/+ L'{[.Tϐ<)!8tf?{=D{"TkD>A2w=Tݿ\=|=ۉn J .烷߁^Iuuudk6>MDW%TYIGd .!9U$_Y:6!c4 ]r(l*UAQYţC*Ba'1@|G 7L}_z..?@`K0kXUT_ ob(7]5 Qhb'#{D-,#yFfi(=vJMoFdzk ߑN4m WfOz}xuղAfh2AQV)\~G &޷Ja~޽Ǩ-]#п_62ǾC``/5:AU8F6P]+9+<1þ[och2=ɓnbLx%WTHe[TP%WoJkU3.!- !ŵL÷bklEޭ/'^_EM̯M=Km/1?;w~}[ZlW Կ w;k=@wԇ#xȔ ݲewo}'K:C{V%^~d)3q5]X-ŖW>2ORom7=~P&{ɶ9t=g׼Fpÿλ?O| ר׼D:x%fuޝ3v߃ֱ)I5;Et;!-r\Gɯ#!"+ E\EO3 yB-JQO=$sw}b 2f%_2q b0!@iq[ :{@r Gqv=W5鍪tUMrv:!R%Fѓĕ-1@fa;.~ߤ_\@f /Eq>7-Β?{D 5oap551fOӨ!H%? Ojݣ@VnmgRepGIbq$%XG@>2o~ O0F9Cpp?TnϑԢ;B-#Yy8FOjVvA$]:)]}DSs 5bb[@\#VX*4,WMj8zǰ:#^|WX7%RH94~_z(A9d? Jm@IRzr.z8p裄~ױ|a !WקI|&GjWTJMDPkZx"?r= _VI1FD3G_߻^p,F9K׮#}\a)"LN{cQ:'9>TnD0QR+P/fQ WP/-wFJxT=*W44Q>mѢ]c՗䍲:51ԗc%Z9jOr=C& jfnrSr%K Ї#VH%o~І͐Gd0lb$vB0n+ٮÖ,$+ TNM@Y5[v~}9xÄvOoIKoFt9wxӛgٱm YQ(ּztdaazSDعc+dშ1^YEO34umœ(-l7:nŶ\DYC7#i*&NL?OGŒ킮HCYIJmzF6a\ch.Dҫ_/`VWQabBɞ>z=xUDNS2LtE)槹|#oG!!I:LOFi('у}c6iՊёĵqй[?**<*=y|mW`ok>C}5w ܖDK&9M#gl;B+q%̃D9LGo:?猟!Ϝ# ?cLg,3!̼gJJ'nEqUIB<cOl/ (쑑uٚCyCHF>oZV+/:ԋ !f&H+d KD2}{>J3z-d:خL Q֢A"/X9 b5|PTGDU'*ſ$oD OPz0y| wmfy mQ:J2^湧qEI\WifX=x+,BBax(kӳX5WDbhW26㲹Ã鶙3b{?QeS dApvVO~\W 0j0Yή^{C؍2#_!4woډ|j8M%i䐋ZƱ OmYjX |믡A ER~_V7 /<=i5ˊ=ڍsՊE_L{ad3wBVkbe?".M\qR{T왲`#;E4A6VȢԑ:SB6WRIȯsCv!ZGFT"(`K KDܽ^MisOU\2y F wobmc\9 Snp➿.BG&鄻F~Gx0Qk9$:1Jh 棹:M}yi)p%AH mS/Ѻy'L}*uP=d?o;eu?ê)8BpvYcwp-9ٕ~wfط} ׏RtDt:C8X0ڱ/DVO}lR_Nu$MAci#Ph+ *_sSUjW0*+mB%.l)t`}^ Oebλyh)4Tpm%\^&]D?\BJ%{=/w:LMbVr$~ =ҍ+ئ,#w$Xg zg.p|#ԏlNO&imEPHϐrM(w)x줾Bit!j[V(^'ﻏe)vPS7IJ-/E=?KE]FPΓOW(|X 8OgNwti]!3e삀P.,aW l!9|$maZ9+H(z8yjαyS{<7M~Kx{wNQ@Yz+H^\Av] ~i$Յ˼)s(Cpo 7\FˢayXo%DGM8yǎ:(0Gg1פ"ރӝx% *=*RWvQ_=۱"݉s-#^ XkgE[mf!4L?iIhn䉧;6Ff (##{%oS&!HԬl{lO>ş=cnjǐ䁟pEtR_L+ d)t jN$͇(S"QZƓ6lxp[{}-%@ ;ۦ+/ZXiWhE|oGk4|-ڋK+u8;mv#].^.aW~*6VصlvX6`6^miz{gA?Gv-m㹋/<qzqm Dwvn&8t^zv2~sf7ŗ#`91O>2MMw ruVaI YVnQN((J Nط=m$q+?cTc}_$4|+,V9()ND$2,m5t[/\_&8t:Dwɫ ]G dԼI:_E4BCw H;@@V| [ТvD vEɨĈSC>qSU<,w'OLM|GoК#лWSD::gjڋNABEuxkW>ʑOܕ@/P8{6aoĉ{I W3в~c* GHTcܠy|w=]Kw2OtqS5=]ɭDYf“8H.KNQ/b FKu2-) рNO\#Q%X<}OͳtPx@z-!ZAdЈ6Wz3ӤiJ8C4Zm<pa0J+;G!${G]ɞ~7?m/:7Ia*"Ky {ׅVBq Tgq/P8Ƀ? ⴪T.Ko֢cxc B&\![>:lբ6uk3+5@f:)bCaT&YY&U#a|-͢Ƈ}"P:gf9CuMwXqv8a{1JKբZ3*;@OHh$1>s "Pd:}ݓwM?ГT&I~_.8 ÍIom0"g?Ob!DQ , D4MKɰɶ,,k#f8Ē]\ce]12 $gVW$tq*jT/]GuXX?F |m2~hd߳i^n,N,f1ZZ fef&J m4j˦jOhWׅG$.cTg΂' 2'滱jyR~ܹѝJ *ʆN'Dyd?5GjYj&~1"6{I*YsOP'P,DA#!*S'_|_6?Dh=y,-sK_"8~-O?<ۻ0[ϽȮ=6 `^aFrmi9CBQeDYER'nqk98dY\E n ǟ1%.$tI&U(y8np1AB I~V^[$Cdnj77>Z m>@1*BXn?tn%J,Hnwha#iOl7Mk3i^ZTQ9P)' Y:xO^?}8Q!vT9ŗ3l?}qd[Q(׾B!>Ƅ\ĕ\a|kVZdMUMĂ۱[^.Q7њ-^\ ֨H6zh 4ZaNo+؍Zއ %wfVn%o=ߣXxc2fb3ţ_Ö}[V-75Bu5o/z k9sa;Ыd/!0 -sq] W^%x;ȝȞj8MIL&Mmp72}mE*wf :}CqsDwm-QFMPY*^+UF47qmz 2b+7RSU82Rf걿AEwކ{;GLĪh3D#1pbM@edWDr%B(0 w`Wx."=DIw0%d1RCz @biv~VT?|LNۏmysmd&BuK:Bi|WELb=q㏑ɠOMqѯ}miR^l."}enGhᓪ<&=a";W(\j! FM̐QnSsD?!|BR{E R_Jku/uaJ $_rh> ^ꆳa" (3L'#vX:ԗbq7SZ6騎pQu},~_5K]T"J ]S>wH;["VjE3iػm@`p?VUDE'8r 7ұG ]vI¥gqrBI,ڹ7َ:slId=Jd=U`敧0fyoz3v%KAjWA*'~]>w~y:}yġ{Э"M.=Oo|ޡ1z?YŪ0_s=dvsxWPp9{u*="bs ^&–mx3J``P}+Jd.BѰ6-ʦtE :Ufiy?ve͠eegX2::W^ª 8׳IVs%}{׽Obu\'5e $}ǓA)^{5njVl`Zd]2jTnѼAhelﲭF̱!A%Yun"`M"vaD1E-#p/1Ye\~(>vNu,+Gmn曗LVkSg n^pu:/D+حL*$i>Ӊ.>H:@oPY^V'=#{uZ HFYBktVկsy<'Osi2W'^e~|?IODwjr9i8+4x:tj&Z!Գσ7(][DE'Cnin2؛g?q%u䙘kǘc~@)+/qo^aa~Y^z+ȩ M[䏿tnË"i̽FU@(c>Bss9v~ ! 'kMwk/iN=>@wnfK8$7Μ׽FXxZi*M˴gU\BdKר /Kh+o.}LULBD\ ' HHJK܌yY=CFMajZ; ~6[Զ} GD6>?ֽH,A7iG1%W%Z)O!zh2g~Lr#Io*q[syݵDo- [?G7d?a(m@$"5&(їxo͙6k0DA c&s"2H4Zw bnGugaC]o;Q80[!\NRH >L(S#ֈ G 925d T2ČEp5S}Mp.z"?س'Խo$KZ %6Dp$ޝHz1$j5B,r@8ȈoW-xHVB좳1GeUA\'Gn+>]|wEy}tڦ/2z>)쩷ɯ-;#5i&0M>L4/Y<ǿ#%m5;j?9=Ĺz}ٮ5RV]ތ=u}CIDR#[`W R^s6MGBO}#3L0Gm٣GԂC% 6MV#U?†rV~#I3|>d=Jw>l|KD~Yf觰 v: $8-)u`H"3%ݬ9ߤq8=F@Ne՗#^pۆ+!8rATC'ەaA!w8|mDOA?gdlcص~Q?BVHow?(55)L|4;#w~㧦(ExE== :׻X$u&v80&b{fT^F$CӮGhOUqn+3[p(yZˬZLtQ6%^֗dMz~m0й~E*헉uM!X뫐MH(A4k23S^66Ҕ"q"~ g!hd "tX7SG^0|Ŀ{$>4{2ȏb|xp*BKT32ѱ; ڻ2 HC|} SW%mL67H(t|X&Fش~8f v0C4mK..&i~Ϟ屟fIv x u851Nҡm %e!n~JoD`b>ߡfxxo 9~_߄S.JX^l<YPVR{$߻()~;>ONE1C}Ԛo'ܢɸ.T}TG7'Ϟ&|ߖs:Ӥ| Y>>>["Ի6@* k$*`+lLTD@9{")VJ&q[DKdGEm10v'8:bKD#):kxz8q8Xiw{Τ>LyRGl|?Vfg+L5CxPb/{E&ۃ;924es7gx={eeJEO~D`SβXw5z pCK򈉇he7BƱwRzq7cw=Iշ`<8.kB$r+xL+z& &Q-jO(.f}k.wW ?.15xAB**VAgh՘sXAMZfQbvDPĩ,0\~ì-7ʭ5R3[kgo 1K`^jjȷ m Gpk|Plج׬-׽´mki*W{ؖ, dSUC<2y6M{:S14ק r|%wt僽(~/̠FԦOcSn|k-bE(ٞ,= Au Eiv\J ٰbCnH"zu5R`ZWMQ!02A@2jUUkv>DmmbVֈ|Râho 7QwE,DUCAD ^s&~%Mbd*̑Isح:ŋ8cB^O3ݻxF0b](y@8J4Gnmr`0r ;D/\>%ֻӮ).j4AnT6`, B[HzԁOdhRi;"؞H(6mߑ*N,%%{ۤ>{-~ feEs]OGϲz1"%گE<0#v vqYHz)̳_P_@l}ouKH#7޷{`:9¾>ϔF/N2"xB,kLM-HoUܼ+o3>>D$BE,ǤZZB !fhEFGPo%՗ϞF0ϝ>w KNǮь0^ ,ؒΕol7nХͨTu%L(WT7n 6n$Cc c6Pib;4/\eS2ߪ5k/=8ki}=wX⦛YP8X'jVM:u,e:<׾(u!_}!a-lTU_Ư3\Sjt,oˎPqR D gG0K oD?j6i(_=!"g;$}h<426q8rr/;é?E}G)wA6@ in,:zաֶiY.]3/S>dɟAόlB{e>ʺ}RYc^h+)zF}eU"GY-`tɅư݌~ۓ#HT>D[LMCtl,q-zɫ #B6f;u5օnc${8A2X|ORѵi a쾻(,5X&w3kq 34k}b s "a}:.NR~IՈ"$Pn*Q5^Eͬ2ы @iBY?9ځ۪`!OxϑQ"+/;>ϡ{}r >KOr e%?A+V;g"<|Q)5lKNt5X8z*\[k3HZ2tAMo-AQv]"T.frj 1HQEОrCi!!8:)(:A:mtXAltӈNrL>Bd0Z(ZNc1J`Vۦ|ZBD.m.;PU{ fѩ"0Fd=">QrU<\߮e[Hq J7H6b|.~IzbATTp! 5BdZI DET'fNj'XB\]jQ=0|ѵ#(@ tH&\UJ0%P%|ZLe" H N(kJ,,&[!\A c[F (3a`b:0wym@E-޽oOw^" H2j`Nw"S8]KWC'>dTzG;^ӿC#шQ?$}d"^Qv &bVuض{|dg@xCۑ~E"{-H7ɟP ܤp`}0?GK ӹmvvuGOO`V2xqŠrUZTn.y樷}`P@DTVE٬ZMSPe rp=ofh; о< C0G+{Dc P1pw!$@PF@ghks)!Ca,z-p"% 5Ft\\$zuZǰ%gl!*dQlMWChh-kkB$= KkvNa7Go3[*4l6:NhL֫6IĆ(AQB HوX"7Df@}CA iH t8rC|7m[Fzvanbßl+˥ H͛nQ}i;hv"bk~9h(gm-@ܕ=vCTÈzQK6Q(8M>3 |Ne==t{2%$x*v,~_IBUjmBJӡ+ AK" O碄S 0KK6%#k8ESDt@BJ. ;Q  iFsOө"Q@}p%"k xfySI$&TnAs*oשD U½-/fo$"Zf,e;[p@j7kPnp"ǍC& c;zr<() 侏ŦMyuR |%0v._'JԘslZnށ²=+&"a90WoP4/rʌr}y=attKfC_B}{(oaNlu.~=;J 5,R:U@R/^dh>RE<(W WFh%ՋDJ7+/bGhvYhko=+ytMO3(4:s9-"` H2ξ^C_Y7O"JԺf(*}Ǫ -ƹqDEZ`2"fn\Dl/#,!ZfQV8,# .crGJ0V%HFhZ4.BxFn3׿0ҧxrFAE~$HU% \6-z *&NĩgD 6>*I8n|PRElTMa| d !# I/Z\\hX2/t^`h"ငޤ)OW%2!bo`ַL~@rA7CTgOQK$i]P4mtJTi E@ظ]w )"Y(u/*eKnSu#7|™0ح /aFym҇~A1h>1#s'0&2_0U]h#}Oj%C (l\'?lWqm ES9k!$Q'rmEj6 vZl6Py@,G:Et)m$ \OIzx?bͤ;Ck} =5Ho{\2}^lc<'hTxRwUpcߢt0Kܤe>&xY큇_9~A?U:y݋$#u-xQM8 biۺ@Í34M‡f0-Rus~ Pyer0'~Wd)b$q" [26|;%qvfR:sV侏ىӮx8J8X&;G\ٝ"1>r6Tuovb4E:r;SCtK8+/!"C?D} FOXhNh`S 2x}UAĩoPo4QpBG6"Qx 'ߦSߚ]i_$Կ ͩc{(aDCDڦIєA.\%o+mCE+lmFY?ё$Q"ކޒl\\B<YF80bgP^]-[a]f[zK"Pޕ:g({hv-EHD'2a*"WQ"^ "Kgp:-o-%c&GNn^|lk;ִ~U 7Nb Bi~]$(9 hDw܏A|Cȡs73,^3}?vˡWSSTƣdz0JD|7AYp=n3Eԗiϒ9y^EeDE#xv)h@,&m# ,S"فLFXNګh2 bXh;CyzBLQt \/N11Ea_ۏѵ%!=#$'{J*NL 5HuMƒh\q^DqM(7l̐>}{dn#vV$ECp:=42(Er#ü%,2}?oL$q|= Yw|@?n Ĺ\Qzp#s2RItp/F츛r3fȤB2kUJ˯RU Hk`t&l*:82yV_ M@ NTqpm 1UE:Ao ~rHoQ|Z:~ӳAVW2=Mm&tYGWmy;k9m#L玳qk.aĻ ͶKf-RY>٧P#i\5fVb NuW j] W\T߄Ūgq;\1+ql˲\mfh˯ӵsh%7o;~e<<9 G~µ յ<IV}4fx!FBPJ 扌.LwM|ô3$|dBKdߤ( DlJMTX%2tUj_&ڷ 9֋Ge!pћ[dJZŽ1O@etY [!(Qz /ZS-;`P>0sOCj'Y:ZAV|@zvwc9$K%)=JtR'{1/AHkǿFtޭYY,-E|ׇ*Jm@$ADÈ[O/}wEmKĐl8lvt z;4&uiqaU0"k h)_{ #;}0ء.n uyQC>XIk4.%zQ_# Pil#CrzqgOD/ͫϣ&hjDϧAk^ )X/鯐UBA`7 fYm(^ Ltt¬~ei$'Ae *XLt>wFmFݦٱq^nVfȎ#=ͲHzėu{h.e\Lr< u ՎXO ܏P9$ɡD#AubӢ]v,Ec?Q.|k퓗۹̫ aS&V}Kר͝!1bCdV4nA(F&}DJLsg`7KDrȒHnBHit\L& ӧڞG*`:+/}7C ( Fm~EgF!j3g2zlwpE ^}h>HVxIQ}B}IxR Dl@SDBwђO@|=E0ThZ.wro9v!l ͳ~[⟢rO~^ DIbAwږ?t 5"6N}:krGXR{ωZmC6>]d|v@hLl- xK<4F'OdQD77n\ڱU1ҿW?3dn."J&TYѱq\f9J:E&eRx-ҕhMGޟډia 4;l9zMVns?&$;:w<6tA&['r^[9t罨@(H~[5w%X/={"%sv܏lD H0kx=B 5Ul JƑ@-$0.vCJ/aUW-чi"21"wgGSN$G (}vfwSZԐ!st(a: vNu9.Aߩ"Q%ѷ.5dRanFBw ,G$ eݲt7+~ׅ Hݻ/l%wn@T{ȵJvoݼzN7$TFM Ssؖ i{4r'ym# mM;vJʾk[չ X!ؾ%fw=KR= }A׾@m4HZxF99wZ w8TN(sfg!7戎^/Bo<ٱh|`#EMH"1zXV_3!:wNfATh^<{H4I (W?u|FDESlm>A6yĵ"t A5׏}k `w!x5Gڴl ]= 6~$lqjN`S:_n<:ދ1W7?6wFYT,&(n}.]#d"ؿԡF6b֦M 4D|e"w .=96ɷN2x7U׀ `(=W#Aa5˄`dG?1/;d3ߠw }DShuGɾqc+/!c4WaJ=>ijM1c\yPDb!ISHMZ얰=xN@r uM6je?5c?w?Զi&pSwӝM(|i\@ 5HJ(_"2rd.**പH0cmM<$5 Ii "v; YTYID,^?A78^;þ>Nҷ v"iAfQ :L}:qpqKM"}v>H4ۃ.)gRTwZL淒֚}WQc9:Sk8X1pohI<ՠ9IFFvenLXZ,Wep?C O#qC&2zၽȁ0'pI l*(_~@fdk\Lƛ$v?B #DQ@Qd ŧ!ʤ?kCqD/O.OF4"y0,K_"S*"MFAK%z75^?-. uoؖVWg }mo퇿?Z{Ayt.~=8 Fݤ< A|CwCDc ɰv\O"|E$=7 E<ۢx9p==NRcV蝘5^%Է՗ iDySEZJ7}Y27ib;pȲB'<ΙČbw8Goxl'fwne4E\I|v>H๷ml# U)74I`mQvrUgNoޓ믣z A&mdmݚFqbaRIh׃@s*J0'6s T_dVM0>7wAy <4IL5_S\&ZgNo:6FDŋGDd+UxrX/HSj $ЗPX1C"hH&j{I ĒI Bvq6veeQ2 4V"qF];um,^~.ݦ2w!څy{>E?~Gw:{ u OQ-gF"..{\UY2 =3YYS\ "mۣ `TEYs,=qͽy!(^F6͢oE$C,We-P/_{\1KK?Cs2o""קТ]7PrY&Jef ml#VgWM8+wے7X[appm8Mƒ(_{;aL$e+NSIѡvHDuj"Hx *Koy|or+To/ʋڄZ%P06wU:}6)c\YYZFόƗ:m6rM=DNBP:ӗ 4kE@5(%|p ɷFB̬v$'*IJ%Trqō+ KX2~ ]t-*7^Gu }q޸J& "nM|jM~ejáPo9 |\Ҷݻ@_t%jqzA'7+p$[OD<]"/D2DcϞFp: sקU -(wzܨ:(JwJH:k2H۾Ʀ-SOI Fح Fns~{;ŋGOIY)؎" [-~׿56ϭH0Dt|]^ ""hSwg3w"i!CPq_{z~<=,蹝,WLr==,pPna7\=3WX]Z onNIfJs>_ƛR_BώXBNk0x}QCbz": QfVt C~zrqz='oK|O}Sh,atmmHÇw:uKWNХ˜m`"YU5}sϓ#]twPskhxQ)*}Ҝ= )l_0Nf)5=4N!H "b?FsͲz$O>U wsz?'γQR&G<ֳi4]c:2(iva٧]j$ݪnz#z2(3@Ϡ o;\~$~uN>~E?`ob|l9IsKK>"\5Mu3YdGҡ+=DB:kHz {)bCը? .N>t 7$4ʍ7p b'2|v~ 99DCAEAj͂lGHGTZr]c1W Uk؏=\ǢzPr\D=T.!I"ɂ"F4xDF9 RBi׿HW8 UڲAQщE|CHZ:DIA г{G1gJJT^'zu_bhuKAr).]#k!CeаwOc" =B`aq$jI̐nۄIgRH0Z4CeC?Dwh.]{TN~4N5(P.H& ]Н8DFO<D!0dz*)M&+ D4*Y ]ר,ۜ}IEM4m֌ 4Ex0j>Z6{i{O8ff&x@g&ݏR8DcӖc3w.$R[$SQkARP"ip %!>0sB{O|9&II$Q _EmL*D˖)nNz'vO겾I}۴|+cR*OI 5 NR|ޏ~?]tϟ=˩胇)x14?pɒ(J(^a`-Ww![,8ʵRs' H} TnJŻ;շOq4VD`9 5LXAObdG)^>O\Pf9la9pP˲6p;E 6u/X2*bUx: DQTzGk.`f]{vS71iZكT#;D'hw߉Hai;8 z z4M|G(_~Ɍ<@lXtw>.yT`XkB#OYH[cUZzfg3C㮝Q')xa\n0Lj#ml02]An^7,vF5uGXrŦx~k͵ImحNN0X>6F" ^@yqObvqt ّv8 +/m}EO R_,?C̬KԱ1J/vNuԍiCKM_9#2s-+en^X9 $ݠ g]ڻ+wE咉 rx-˥؍I;q7({0Կ#}臩-^`Wz}AK%F ' p/!NI更'17uon\Jn,VFYZS\Yݠ1D͠zĞ44WϳOnN̗l#7 " _;XmTo(y.Qթ͜Fp4FEհL6dxs_|Wl[I#,6-*K&zB\}P.?Qӄ*@INYZm j2dTLC$V+&`8A q& E=;8 :ERG>OJi/c.Q}^6w^!!AB{|d?o~Qm)U 2\wk=(6\}HoaUVQ9AYC#k,)ރA )^>#H@0 b9^17ױ&5oX:G@Ϣ/QmHu3 ,e[XiXfz˶'` q?㵅K?S@'sصٟ1{P>,=zލqҌξEjDJrd3't cwcےzh0{eR[ѝJ v"4_.:Orc'P\[`}yi.-59x(n!RY芈> |k906Mڨ%a_ϭIѣ?eI5(^xJ-RFϵ:y; \Fˢ#E!0vf7rVCm"l۴l-b."m- ڎ MHxN_h~Pb spѣ|3L/>vʕig7}eYCtZ KֳضoA D4ߚ1+keZ[.   !#@wsAE+rwou.I20ͷ^ae%#`2eAxb&S1$-Bs zz&mV06-,v?/v ̤)(NM70B1"DG魯rs([UG0Y^%;ێUYteWuƬ mVJE.a=J{;p%R<\yg_f[04=TI ""Wh zB", Ș/1l9ct&FͤeDޥ1v/c0Hj=.#%u$}Pnwd=%29&֧%_#2b=,\k9ىxYre0vOK̎R{w!z~i0&?V#̐ $,ߝH7(8tl.m^s!Xѽ¹︟݈Ӯ{9J3$ǎPlyXH\|g$w#qGiݤt^҆jӤ)i,-'q+>Mtq̟;%J|E32NW^@\;\Z!OE2Mo#,ۡ2i}|U!4>La$;e %h_$>~+^\"tðY=MkމEjw;\nڦq tpmc4gGȟ:0ZׯmFɧjƒQep@"UtD% i$#喍 L|+ :Nqd( 7CRTRd!{&ME0 Ik!H:(!?M~xN0:rp6DQumk$ƎR9f„" bzGo^aeq`\m ]eSRݬ(W+xVu픛:Z>QP,ޢgɹnAyqiR@[~YВFs2 VL^n174i:Ly'C$Z83a%Erp'湯@1m[ԮږKP[@hǿJmF"V~ @P6QFncL]<ק95g#$ët]@)̹H==9u 툰peMs j*BI0 hiOxI{~wS6;D?( {vH?ߒ-_;_@űv BA҂RT.>CEDH$ QB?Q) $p)R4Xm\%󣻸ֺ "hFC}fƾ w>, Chz~ZBݢذ] vHBs]Uy|- +g(j %@n,p$,o?&6#v0Do qC "vNʅ<Bt}]cv<ԏM}p% kMK o϶#b4T<aAIf*M2}o aaqxng0k"С\c_z-d?S~glrDGjи 1Ag+0 ("I M_r|Z$ _RR&fu]?I__3?$1$o%k"}gLgm!w#&4}Zﻻu†FDzlQ.-f!&8x'1D3(`蔗34ϣ3B+>eYǣ6o脓] oپL哨A":Bzt t ^cvo= h";"a<^4Ml`EiMbj^޺ ID.$7xW:(x5LmAmpfmqeh<JgBHzId A-mʵ*qCt, ؞DgiΟ]ZF)_}IHzh+ ΃YX?ő(2Bm*Moqђdɣ}<7AfuD%y}{ѻ(.jaH =AR03v~L;!6,C,j1ޞ,׽з 2#K<E$?جX F\DzvP9M@f@zNi¹g E1"G"!$E}}0'J8ѽ -uL)"YZbw6,YD Y4ºX1w8kWBۋHL<@;$UMcAI@7.s`o$~藍DhmzȒ("Jמī_.\0MhE( ~?g[eʗ_s,d#kwH4[C`{qţ2sO&w 0joSkgȖx G7T͜i5G'WI>IHEịȹ$2Z" L  <|x.7M_]c?ݠjG xz;<ȯ?mw tOlmjʦC"KcW./ԏ:QRCH>@ .!95$IFD$7~7T*T*("Rrk<>$lO~xKcv; i2peMR -! _ 3uU0[ao(-(Pm&8@n6yuf@h2\`kkKY.r+(xڗ|hy[ui|T)'>鿓wytY(UlnuHMAH삀٬M^=@Oxw |Slx~ ʴ]߿ qXiDF$NH H q Dk} 볗P fy3E-P+z0O< a_hø츤¾XiTkoTKW_#_FBz꾻)cdtGs}{Zsk E;uoAi,Dg{(#" JՓ"SÌP?" 3ZĮ巄WM|?Da7г8 뫿E&c(VB\|?SdiV*%1_JRXhfE~iZ.=OĈG b۾$ ,BR̯Eҷ |mb cYV~{g+.E(,usեeB&&!As*$؏U/b׋ Nؘ۵%$ZM*G}< { ہG(^xwQR{w\{_AO6bw?4H3d9N6/10aqHٟ'HUįQ8"ŎLR(Q:r7+ȁr0K87fmN #B) 7KMER׿Ǐ Q RB: (c&=L?kx6FE³:ٻ~ 5 HF و"v*}{dl#YBREQpO9/OL$amQް+Fb}OGpLcģn(} ==b$'zpM Wh7*"}tG"SU x7^S/`7LovᡃDsX5*;H(rطzel^8((ՖC""`ANtv kǾ*z._?FKVn9.2ղ9~7qqH&xG <xk"!1Y&a\GLEpSݥE̍70t7$X==DÕ-rLW.#Ƚ;F/_Jޝ4LdrEp [3 r׹>ĵVc_du2{ lVfGុ|L۬TmZKWTA\H (\g^c,f"dFa83$۝V?0 3ӟTQdAh.[JH@rAdIz?Jd(3m+^{?F@QoRYAˎQN>",O /P@wL[L#u Yˁj4CDݻ$>oЖ62CI.@Gޞ>zkνe"H I^Y)b Ȳ@#Xu}~e*Zg%Zk7(]zp^Q;Q>hge %bڸ"EwoUwr0Nk&ì}v,y(A4Udl؎syCgYh[7Hl!$U oP~]vkv:/S hX9sP0F:K}6 P7H}Vu iL-IM6R9IlX7t c)m%P22BgS(DB ȟ:cZ-z,ǟ$Q$Uq9 !BLѠ * t)ZEl}׃ge\FM#!1ȟYB7uϱ,جŏ[Gsǐk+Dݴy;xv7fu&NAtdl0ѣh[™/niS)̳q ؉Golh a?C% OX7!+UE9e5lt! ]@|joͿy0 VB, D IϠÔ.H07a?>5֍]/Sk۬\%ʕLk cd<6묿e*70- i%{Y?QR~īV=CPXሮُSOO#y6^5Gj#(Bemq.&:Ξ? H(@Vh #VʘSwy%}t#TM1 zfG zݢ% l$ʛ4@N@uqMIgw7|/RYj>TQFFTۉ?god߻ˑʯ!*:J0Nid3zGq^h83xE D>W>?9JnLJ&=8:Ix&2pIQYLy*d.˒~S[vFBDwMa53Q(ՅxBjG7!8LՌS\B+VB Q_E]  KW]3ĊaBuAD742 ;qw$Pҷz{.O}TW Ѕ JgLAyˮm'2r7 6.}ufqHOiߨx.Mkא mi4&Oc;AtO P +h.7 xuLémi$YY^%$HIWVTCsIn"#GzhLWj=.E:@0^r5+R :nVdץM[^Z[᳝?"BV%`5uǎhq$ sQ$ת>-RTf/T )G%2&H j,o4֑>Bueg c15EJaTُ7$P\֊6+&9 2lVID&8m"aum tQ[.mR>>J+:ruId)<$+>IAR ً%ؼ|aMb5WƉE|X!!* ]"?և'{4&'q3$ ʄ!s<8M# Ԩv6wݏ]+!H2ۧ #vƷ8l0Fj -։lFP%0/Pk7 l16ʭA cZUDj-_A\GL Q5Q$PA8c6sR/-fn&me*3<} X@FܚN #ܮD?CLibvE6"~$D/f/l{L3%: u"*'1R}./\Yjn|e='*K^JF'h蘅[2DO_?S@{˲cGQsd>4&J0mGUB}eH>|G6ڻfԛ~Q5PmFWx tFW~ 7.jS`ty8-}X_*evmMO^sYshU{w"G;(LBF0Zpur7x,~bX )rOJ|iN[cpe;#w E$+6ׄZ4K-2a:R%Sx m=D!'{i։ދ쥑]hnFYQ04B {XuZ1[00_V)uN=wyߒPѶkz0~Ochd3s ,eUP`w*`b*M Mo7Eh !y)s:l#[ӧFʓO0g_|42xnC ͵%jAV7ϯ)lvF\>Mn\JQYFJMwY\cC=ޓqIbPIʋWkSCgU@vuBkϳgnh?S%&ho' tmwQB~M$zA㯲Wd:㰘mS';Omcn i&Vn%BCm$1f9mT7O&kiZضC0{enˬ'|l AeD=(~,nJx(]o%PR].!rߡI]kv=@bxܸ385H~n> % FzD B 1x\MQw= 3md^~w *K7@6B(8~@kH{NJmmD0lP-ӨpDR]1ɵ @(@[΁eji,'h84antB1Ocu}p42+NEbxƨ|S*o;8Wہ| _$oDLԫ]{\>)"#'8$9z%@oh <|iQZخ/hٞNg PnDm&HBHj$%BW};V`֒D|1$Dؤ t=ºBqiE6>ԟ{F1ZK=G҂oAmE5uA o;q]԰]/ƖZ5eӕ ii2](`=gR͋? uQj>ƿ7'ɇNt6ٙi_d?ǞGx~da"V8\~y}bѮvN.lY&RO~=0F(/\!wYfľ"iJ3 V=M^QZF- [>W7FOc r͋2X/Yl> [hɆ+t<O#[yg\@],i%fu˥;E bKXM)L.\e2j8EtqjŜV[a_i1;v /s4Y=*Wd4]X#;@Ulc"lnCkT'"5V.-"5ݔgrG !aP˨ޅw4mI=F6TW'bv=kU.]%wAї pX;aUIFշalzoǻ\~=ٽcgwRKO,QX%(NJe_A كSWqҳ;ϯxA%T`bQA+OsN.F@rNR|ľԊ_"Գh(336k`*XMYh4mB4avAOSu +4{;vl"}Ԏ^Zޠ|A0wP[peX>K| _3)tUy{%B])E۷y,qd=ChXM= g/Q|f0SX &C{\(7"Apus {.A6u2 =$q4'OQ[Xz S㵌zel^@5[<i?@"ގ (9ʕfҟ-rϡ&doeϥ#h6MFd:DTeaqU2PKMâVSFd#qVrA* W?[d"K/O-=ҁʯ09AKm g9*i=_c-m>{v%oaڮG9 +˘mG2o|L@l\4~Qw!SQ$?5+WpPvcOr3Ճ ~-ቤ0Z8-_2kiffi}k" O|!lYOu"C-:"PjΘJܔmƎ(N#FmJ3M iA{ATJg n /(Q#)Q&?2CTWtGt0{N5+-*\kHe4J}cƏ-Ea@% 9ft"Nu8-3u8؞R"nʢGSq}HPiϟ<!Z IދQ 4KC;q qVXh?wlh@D SoI[nU0db6{W17d.?Id8_ H2Y wysTWƩ,]?+P4 k4y-m O}BI"G"+@_pޱcqJWu2YK֫4kZ~R sh-h܋C[qT?Bg$h#sT&|k>A+\ }kRcwcͽNq [k7Aֈ~b#IXBp}k }41ۆ.HLӋxX'гP!Bއ#еtQ!RƟp.!}~lzh*nqUAm\rimD]d/>A?C~ Ei^})>GB{$J A4EGL JHIy^ZK-LnqLBLb wJˌгVob_eOdh y牜&:<%?-CSO]-D*!xA (o]8EQXCn 24NBt'^؉ѐmaΨJGD!(>wb]' zۅXw^?y'Ǥ'Q$Z:׿2e|4luom6[7ϡj8]Ku=AcsI֎D҃zy{xC z^֪J| $y5Ka̔錪tFU"Ɲu+FH"B 4 9hb8BA.8B$l4M]{Ɉ<;q]D[znɟc샟=(X8WNXXYSf_cߥCt3o'FPAd?٫?Y Dj(JS?n痛QO~9 jt;6?q>e>ZbaKOa=\쩧ٵ#D{? -ƍ'pwnD% ⡈ J2C{D8:qC' %q#d.?bFIU:w@NO>0hљ(!bd&.܉lDv0թWh74kfߤxJ m֩ A%+Ky&N>N!0L&a"CM'0Z0<9Ku6NLw J׈Ky*þ/昼U}Y6K ՛UN~ƞ=9g^ .TM'{Vi*E5Bkd>hDyۂ?'Ptf C~R&DSDZBʏRk|E$EC #r ~6dHhhY^!:|O9Ba5 "cښFA߼!\yzf~۷^ lkLs%Ts azS9`n4y e-GK܀ër;@oÓJKw@lwmR:a&{h(a* xD2͋rh UeԟP}jF-MۮD:ykW8ܝ?8]c G)͋igPn=0:! 1zn0tEb3Is' ڽ7  sI%4{%NYcp})QnI-w8}C.,z ԣm{hH E䯿Bg޷wǿ¿b]立=Nh p& F'6](I&қϗn150*LbJ"H?ދQU,7$5dH+5s.ŻѢȞGH1;v> jfo~$E'!W!2x$8Mj tF5w"Skanr@7Nյ%g$!2i`hq"ݻU++agY=%̎Q>[t4:)>!ܻ.riJN.Yg +Iӫi'w;NTÇsўEeuB= `.!vF!ow=mAQu`fa5=p򷐊@y&ho+@0_y`ꮈ&MS;V%_1*YO!xCSdzb*=qߒ^-[X]K$)42=dNԙg6nB=` 8to}R>WWo, &_؉zOM'zS$8NJ,^#Q(7uy9ӯ#}9;xOLmmM 4coL1 ]P LxӜem$J@V;\ƞ[!R(F]IR졾rzr/CoR#9k!habJsobpa<7s4a %|Go/]UX#ZGTQ-Fī54GWLv5azOֻ~eDnْ]%z س-jx'[VYȟNy o!޳sC鈪tF$m}H8NDGݦ6׬QԪw0=*S"RF[Xa5d`SیvHQ/s'I;v(luXp)a=<`.k0^J{Wi"-aL#}[W'|d{:ο+z=ك]>I|Г}HzIeK_._x2k$*!#a)hyu۳4NT ;_ %qmrKcI҅&ٲz+Mhq'6ƙo{=F=ivwh)|gqjfۉ[vHmmʏ/LB}J:%`ދkUdH@TDIƮz+Jb+TVWChcTc.xaV/rGDsNz/=H~fS|E~ J/O"{&%B_K}sMbx7fDMz[p'{~J [>+':שo arן#2QBnI!w^J&^x?xCn׋sHÔ6JUV5]ǣTk2<gOZf3 5:ۊi 7Y*ݠ'K6d /B(Hԇ*<?R;w u7k׾Bpp7(զC(cZj+#^G҃;:_:3t t4YFvLܼݏLoafV3" L=F-HX5V~VQ>Og4sױH([Ǧۛw{A۲_i}P_7ۯ 9[MY(\`)$ShNd3-DS)>K_ʯ7:gZU͟ Fa 3|WQG>fvuBbW_tMѽ.n(W ~?/0F#|aD/|Haj]iDL+h Ft5*K׷qRYtzMJ ĶVqF~`ػff0f0FȖԇfeo>R< *Biq-O.78k̷DBNqdens~`q3aV8I^ S18Or ο@ѠOlI"k=LI-T}lZoR}=WOoH d5gA}cAѢl_dYRcyG@@!D@Wےs{ߧhooc)ﰙ/ 4Dl&z^% w&3s{j~⋜4rKd/?pUVΗ-\a<ϣSt칏]weCC4EuV__J0zٴhZ,Cc|n8vMӟ_针&Ԧ~*ИxɌȯX%r=:/P&+U8V22N9Kc3o8ys Rv'sQ<!##ԐomBDĐ=3/PwD!!숷<=Ç/siDpp쿎rkDǁ.%-MUI SoT$|P}@I `4~E"R#TWnR5A)I~t!ԉRYBMrqCmظoCӄN883&8zX2c>6#id26ku"^]Wl25v/#<R1v2>q,Z|kTl'0k8Sۘ!6t·ޭ8~!M߶JHimMbUۑ)GI/#,!$~scF;Yz?R>G|p!IƮNо^"D< )uڬGmr$q@+u6NQi*9D^;Oov+4&N5Gdӥ&ݨ0% z@.j̕YQDOtfY ae G[DaW'=a̝%qciy]G:mQ1K@m$vhD3[h#+#$K,_Ó)Lƹo"DՠYĩP-HZI ES%`'fr:,}oB` D9C&:D~([W8C  lC~`H?:B)?EN~Ze";b%lH2--q?$ص2ivjA)N!2tF~ IFȏD=ލL96k<[PaV^BjH8; d~1Kt)ݑEGiokby/OA6يJO%zpUF!PE,mlüuf'bw#ҥ-H? T/!CkWǎ3yE!>ZC6/~h] ;A0ٍI>J{5ڵkr9N8:ꒀ`;/ըt9Fcc@ ';p&="30v2`>~7cΝlfr 5j ;Oje%¦`` FZA.HlܑHrr)[mE"RJ(I`(T/Kǘ4#C(]qq5mۊ=D>CjTkudS?D%sO8}3kEV^aov`*"]BÙ~GQVUrEIv}$?/ϻS-/xxFpmy=cE>F5zias~j(z$Hz@nd5@y )*WN[ %-מY+,GgrhSLρ [Yyt©,\F4ZviR|`WUAҷh.Caxx/-lj{1ى>2>fop>x f=ځ!a وB?j"T%j?%2mW-5F}>N3g_fi,)ߋb4$'ph @R|[1jH$m!u#C~@.TommH*kl^>3(fŵ:KDL@c0uc)6i#׿BYω܍ٱvf`0J+nbOWVw9B"s]hf̵(/\sz:R|_e}sTgn;2c¬m\[X| 7Wdq8MM.qe=_{_na]g|*/HVR/S;/0ްTg\>ßxUG3RHϯc(-}3kI:Z:wmӲT.,-+bkDa 6%=4.*M0eJ3D^s!$=ΚHRIjn<ٱp;o&J0f?|= r \sh SW8t[ {٬]">x&W.e4!QxPi6hW)NEVC$|#DVQ/jA3xMU&J4]D?Kq f?Jh ;AxsgHqG&Pz7z#BH b:T&NEr%6^zZ$M^EtV4?ݤ-#s^ D5ٸ ;vP$j;3O txdAjLj 7\>M?D=}86TVoa (h=ب W u@ZzUwi}o[;H P3G'g" \u=ZB[^|AMh( BFL!!Dr=dEu "md>Cd>E0j0BKaHdtEDo' YP0$Za6 [qvw6kx*!3kdM&EmT+Y$o@i +lQ [qCŋٻpoI z#w,.\`ՅJj&og}}g2=~9ؕR8S¦t 6ų[LfrrpJe{~ H[im?T*%z;ZP T?DTi`*9y] RyHW9rv 1W}9U+Ѳy HMŽp5=Tşm^@ؔNIˋ#!tY`jj/ EԞD5?P"ڎ]#b,s&bxK=DV@a a^".9Hnbe1ۤ'YX] !MQ7NJ6͚5$cVUn߂9'}8:v~yԇ5!b'eyο yff((9\XDo'ktfO%Ĕ=ewo0zj`9*MH7u2p[曗pc=%$3В(ϖX跁b)/v-w}!WP5xU[Fpq UUGecKOrSx9j%Guޑg"1MFژ#D "{G& 5ݹޤ k~+K'#̤Xb4vs`wRDG0{[mw[ȚIc."_"c/NK bmJ<n!='`.!)FR]28G|3ClֺD~ u$2JTC֫d_UN->E4c)D ~~{Ƚ#w!ʳ)MQl&2tzv̕' i7'pPQf DSx9 _z Cm-):Eq ߾i3|ctDb&s{A)u֠Ѿu(]I Ⓗy=8^ye ODbTa+vlImD 9F8jEX,f7b>-$:ȏB %yq13Ol~*WQ `g-MQ$M, #%-xǮ֔EtYv\Fg THnu6;;LĸPzJEf ay,<[ J˲PUQmt\dKg."*ƶo~~__ۭqIV k =R #l ,ERU4b{_oojCl۷0(N5"C;(Z@M t@d]GػaZ;P'~WƵI"i9m'F{ w1 4Ckzc$S}IQ1ZG|6ch{<}^T4ƒ |@AH~QD7yi [w?!& +Oُ_%uSYAEmCu IM C݃4{5)Z:Y.I|g1CcS(!`AVX;@UQ]z *,#}}R*F>nc{EحUSZZ 39(lK<2@}m;7ws/pX8Exop!3#qgcty!BUX):d6>C4Ěkd=%w`~$x9L{Dc!tҳ % DTQ*\>w˚6} ݻ{h>궏7$̳Ni#:W(,`-jnř+4.a ;QdzXw]ת:Id)o"S)]Mrnz0drB2k^9u}[6&RFB;~-E}s3TƭINu&3:YJ-cKx,}+M7Ygun^{yd[)'؇+ 66Q g9* c)RC긞@J-L~ HADܷg\dEȣν@($b1 @O>(d J%R| S: #H I Ah"}?;TJ5>@n1ɢ.1h D*&V9G#HiH, MLMPwpwߤ-/p8m! M8x }1#,Ҿեxk:~Gn!س`>hjYmva}ebhd vtI~mTŲ=ML&DH#Y$s>ss7 yM<Ǣ냿gwTln5<8ٱ c=gQ6tU2ԌGPw)͵뜩O|-6Hiex }{mu:W~~QF {({:Zsgp WFl=ȧ?au,gHf(o<eo }ѿͣYsIG}n5^Yl?-Nx(FW1w i< &HMDHA$`;kn+x'5{9g``;Ge[b׊ f(nBA^}nc!ߘo³l^X:QZ>1M~ sN+^'ܽAT1bD}]|Q⃇յU,Qcj2>=MY^ \/&+ݴ}?}-Bᑫ4,Mv٤a5iAx҅oĺQ-NȎMj,L *A 9qFP(XrhT$JIJvQDOZ';FV0a;U|_xoBŽ}EG(]x HQ1e !b Q]aȊB)h8Dr<4 aKl=eg">@]fD V=:TWƑf,PozT-SEOAMiCDwcR8 cA &)Nx49>DwޏlDhю;fu#Wn ~HϮm@{/Y2W[A3xcy B$yџ%(%5DN"2z߻};Y/l\~#ν6C88Wg^eҭ(]m }pi2 }7Z='N"wf9)o7q>o`瘟ܩ+m%UXmַj+4ZQOl{9~P" ݄,a0ZQc4r˄m#. ʐk"4xǙ+Ei9_$mVih8ؖ>"IgNS;Gh[ q[bɝr+GXxx9*< o]"S cҋnH$d۬NazPUIQ# ('SqI+SIPvZX:@hi_]vW%I#-۫, p;>o~ eI"H 9&dD{cG~݊xz!ҍ Rjn:,uFsy;-p6I4Qr\DzI2-,{(Kooq/!KaC"eqAcko|QV Z)kFb; d}_V nFi-5L(kޚӫ/ΔlD:RQh6QDeDY%fHZ  jB,ъ#ws22Cë\ZnVP "Dyҽ;)]Y(74l[' ج8T,7e(f47)\$ނP%?@ D\VC܅D|3vWZovnnv"2~h8B8bX?~1چA/dѭJ0Ji`fv@%"!,PH@1UGWîWq%B+OP_9GnnAI:W޴bTNsJ(䝺 [Ө)ld85nHAq ZcCۉEBLy{2JS-t]gb.NӢ%$Qg^Q$jC#Bb;AtRXJEVj?ykC8FOS}Md3F@dCY7q\?K<R|Q6 u.Ǯf}[B1R>޸cYybDvs{`9MڤpUٱ`>rsX ze`e8,]vDUzza@RD8w({(s34[-;).^Gub-A7߳m>Z[${u@+ZhXyTƐ(peWr*I6/ATZ=KƳhwmF Oy>@d ND3/Vrȁū4kemQD)&.=qeFw{$ͤ2fY]f(μKc1?ZۃVIcW6)MBOr,SSoscnEVj " zk=4/04W\zMz3t o,sky;-r,33̮,8xI7w7+>}Yuú. 5BШ^v)Ӻ G$ԺSN$v,![n_/xu"ؘp #d.?IgΣf9í?"Z(GkX@G4DuPcTo,R0Iy*Wqz Nz V'pj%H+J0m^-4\v#|%JũӬ*Bub"W7m5Е$1FpeݦP3X#ܞ(6YZƙ imvѾFJRj1Nu@ofĦ2GD|g}[Q>Z[;v٠Zk~nsq.!ut>C"f@оI G09SCD:wA8"b0:v*={,~ZQZ -aֈBTw*S9Y k ?m>2MzH[B0_nҦK,?ߨM!>\⯣x FQ (nLt!xf gS>G#N!6*i(sr&1bYvWmD[u*jj d{׃k J! 4E`|N`I Kl #55 b$.ۓI_BEa>c?̆E &aCzv<ʖ''^=tHFdF-= 5JhWhQqpR?IիT^}L<[B*ݻ_i9t8Xܜ%o tEj ,7縜_b6ۤL+*gS̚븹.AAj#lX*.R!'ױ -@&q,54]yⷮқ9 va3z! "1z PorIACoSyJMji#^3ghvǔ=G`nRY"4xNuk.ٜ-H(@{T'hQ9%*+Vo,mR]YXCO`Wv=&w9d3To FL+=owTU棟$rhmxI+EVsՂ]Ρ$ js7LU)^_M"ľ~"D:wj6܍%48]`~ `>J pc%Ku䮭r=fܵVTx\Rh$ ߠpQRȜ~APh oAe m!6lQch.&ER?yC}|A"u 6)>2FBQ˒u &u282,K M):T 1 }Wes+Ep`k#NZ:~Ond/S_%\v?L}k/x'Bx ܇ _ڎ2Lxd?KWqP$Hn9gQK}c Z O i*W츇%Sg| F)n*)N[F 8Bɢ&^Ό0#1h4=2ˮNX@f1k8&4FtVM ľ|a>`_YX5}," (5G><չX:$[rEgRIy³_ [ξnW LŅ&ʖrddHV,f6NuQ%k%S+-t]#?Fsu{f~_QA&o?VKma߀|GRQYYqU珀onh6_3u DA"9B!AGm}%>VyTgpӳM ZQjv }K?p+"Z͢tHD\*'>NыJbՋc>;P I$ToDKH:2N~:j yM@ s t|Ɔw"]u\۶Q'E>X?޽O08P~ds8&#R=YDbZ LdI 7*9@ #7MmX2}1R@f ^,;'pjD wߜ8- ,SRjRm9t\W`lV=|"W{+ҟШKeR!VUj°=J{h "Q]BoY>,XzrnB*WSxN sXD"i7M|"PX.[wõV;T ۹KrX_-*M*Fsu¹WQBh4Q#:z/jIG$/`Fȟyǟm(س:ۓShD7ݷ#M&޷,Fy"3sU|0 XiKcwQ_Dthw+⮽XEK%ә@uS()T Bݦey0ܾ2mK?"m꿃c (833߲/7P=mע[?us;&ņM{Qi\U^"l|~cp؋I,r6aژAݰ v_&c̲}?fD"7sڧ.V51-I},#>O(_f\9LhpkX>Zc_Et]b|=dbhX678F-äC7QÃ!i> o"Pب +DmAQOTGםO'@+7C <ڙ8{S5f >O)Hd=4.S=[`7m&~8A"_ȷ./'&0K˄MU9PYyR&YAXGԋO/n`7Ȫ9-R}`n;zz`9^.ⓨ춫C2(S72W6-ŧz\Ţܰi.~U*Ve"]/b4sӘ<-aNB_FP|D[.—jV}si o@{V-J&a9H7x,D|2޵1*zmG nF5HFe7R@ǓOAdnr'G 6nYp~I4>D:܉CւF>Jk'm9z"Lp:Bce?c6 @}ēiD2sv$zl1c8.M֔O^$ ȵK2wН8ccWW݋'Y7jTMΑ0NCD-[KF2gpU{?Qɱrԗ.ݶ}_"PGթ/\DP) ˥Ҵj+-g#(%Yjd8@yU,AJVsE;hJAB/1*W̜N+?N @dξ|SUO %7P2 5qt4,A>Kwzdu 0,Oa8m!M FE uRZd M (F|"ig0Jd2fLe+\ǤtsQ.lDoV[T[[x6^6!DWTE=AΨ%I9XFaUZYB&w  D]gm{6ϝp1m,AB봊 |fݨ3.ZFrh^~\ ݁ϒ?3b#PE!,0q" xQ!:v+U|S4m񀄪/؃!,\BH %fll_gb0;sjWQ8 V(z]TM&UDi$|'-cͯ?7T7iZYڮ^Jփ6qۮ;weCޅ:tKӴ.Bd`7z& , [he8x3Сݒ)5SHZ 颢F2~ؖ)^Ǭy 9;N8ᗨ^{̽_$6v?R.}HLB(6#1V,- ZSMa)tڙ׻Tϣp;cAU #pMWD>΅H_*S1@!;-Qµ-~c4cL&HB8btAҨΝETuxO]/K_Gik :&|(pۉ*GarfEB2޸JPˌ;e:hJ Fh. {z50>HH[ih0ܓ$ht{ke ]t5#9',N?5F$p& x >EL-a4WD 'Y*YT DIfkRDEDIa4 eBl*FP2&1/4pNܚtY`vZ"ټJDSvL" Tt&#$[fu ersC{Idg^hbH&O}P(KI'P0<(W_=m%7E~Ql*'l{Rǣt s˰Gb {O >d%gh\pR`[5?P"]]huέ' Qc{ߥF_jp]vv74'llAU$UbI<(%XqVn0L Mۢ.A=KmDh؞g_ѸɠijT6F[zljSŰ| &QP!%̱ź+Vj8I;ԗMaQqμݪXݬ2?%#ϪdTTHFEVXN"D:@ gjIENDB`quickroute-linux-upstream-2.5/Graphics/Setup banner bitmap.psd000066400000000000000000033377521446222606700246360ustar00rootroot000000000000008BPSFVX8BIM%8BIM$: application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2008-06-07T21:49:54+02:00 2008-06-07T21:49:54+02:00 2008-06-07T21:49:54+02:00 uuid:A16FFC28C834DD11B3BADDAA85DDE585 uuid:A26FFC28C834DD11B3BADDAA85DDE585 uuid:0EB50BB5C734DD11B3BADDAA85DDE585 uuid:4609DD58C734DD11B3BADDAA85DDE585 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;BF8D7B2974472A20379ECAFB120F7DC3 500 70 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;2B3CC4B5749FDC035DEFE67D55E18B16 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIM[FSetup banner bitmapFnullboundsObjcRct1Top longLeftlongBtomlongFRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongFRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM )@JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?&<'U{ZGڟ8|v-DSFѺf=ԙaow#$2t?zI=6\p}isԉFJnktL9..|?HZh L7|<䘏<itp cݦ&\K11q R'MZGGk42vUTCv"lwbֳճի,-{IsX4v\v{2>ˬ`H{[zG8JqҩpC=EZmL s׺9M\}B~5061ۘNwc[뺽QX`9kC;FFƚ=WO2ܟ_06IZ~{^rY`1O܍e#_WW 22ӣvHQw<H(~KO5̐OIߝ<_/$vzA1#T01x/H?e fb#I7nsK{Om̩&/W t6 q2.pval^Wˉ$KIZ;mZ`n:<#w5Ho\/ӍnAkO hL~n8\x:cw"Hzh koo۩ȃt-_0}zz n{ei}v{6}\ǥY6:H56߹uI =Λi/d^|=8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2008:06:07 21:49:54F&(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongOwNFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongOwNLCntlong8BIMRoll8BIMmfri  =LF8BIMnorm(Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpi@WSL\8BIMnorms(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpq+Mi4 \Mwp0?Y8BIMnorm(+t(Q8BIMlfx2nullScl UntF#Prc@YmasterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H?yL?yL@} PG@IVb~2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@|n$@"ʂǂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂƂʂ;+K^`dhe0b7\KJjQZ ! $  %+|  xyxsvwI`z!qywwvwT#w~wutswI'9=~jb\T4*Nh~W/L %]#',Z!N@C, .PBPT*.XJ_ &+ZCv\O?2& Ogjxis5L ӏ{;3"s%r\xYȮ,-}D3BkSI;0#Ke[Жl,I6Dz^-B_W[O8"DdXC - (%0# ?* ) , (& 0AH8HC+ Id:+4.  H~쨁  OMJIKKN;POONLKN2<789::;:;<<=>??863167899:;:;<<=>>?@ABB?>CDE>>?DCD>=687:  }avyp| } Yjqew`_h qagpyNtnbt!qbml^Z~Rgqobmxfhqex^`g oahpxNumbu j_uec_q {{aahmot!z_v}p]eq^boj|yit_ueb`r y{a`imovSx pnpk~f zURyopk|h  ~zy}ĸǼ¼|)~yy~ƿ¤ķ ǻ3űōӿH򾊐Ѕ™ϲϣ3ߏűč H򻊐τ™βJz㛖yѥ賦ă侦ۦ»ΰ пCZap{kdNVn}j`ey|rUWjfaaiϫ ⚇̊˝ʨwxʻQ,&E)<9"0@+kJz⚙yФ갥‚㽨ڥºͯϿCYaq{kdNWo}i`dy|qTXifaaiΪ ̢̉˦wyeܾۢňrЛώĮԣ=ؼַԳzٺǵžƽLahvb`AEdpgl~yXM`PQbqzʤșΡڳڶ Ԇړk<ۦbȊv@ɦВg̍@SWA|S{,ny=iYۼڢƇtΚ͍ŬӤ?غַӱyڹ ƵľGahva`BFepgl~xWM`OQbqzʣǚ̠صظ Ӆגk<߳٤bȉrAʫϏhˊ@TWBpY񨸻նԛ؉řlۖXϞuϽ ϵ̅*UȻҷ݅uzohzdZ㾫Ŏͫڳѳş᝭Lp|slbmnlfnwyuoltwpaabz} h׺@ݱ˶ȶذŎrH.ϣדɮƓZSOW־ǧм_niqyg^Cľ½EWeǠT29ͶŦĸέqvVֿGgpdmdv{feyrdkdp}Tgl` ۣZj?ٰ۪ĕ÷œ^z4ƫ͛ԜŎRUURԼ㫭H֗LZUOPf8wZKWթֹʴýLftlqer|ll{terlt|Wlsbجƹߴߦζݵ Пjŀ<ӧۜdˊ=ŠΊgǼCX\E~Ʊվ ~[Z_W\\Y[]XRH՗J]RRMi6wZJZԩ׸˳߮¿Ggtlrdt|ll|rerlu{Vltb׫üܵ˶۷ Νk|<Шٛdˊ>ƥ͈iȼCX\Eű 󐈡wè| } ҙΒ ؍qȝռČ̡ɵĬ󋟾%󍉢y§y#~ Ϛ̓ Սqĝӻċͦɵī񉡽\[\]SS\`]Sqrqrurqttqrs_UW]XWV]svvqvvrstrsrrtsropoqsrssroposuowrnpr w}uxW$Z࣎iɽû{½ÿ»ÕuntvwqVabdeebc`[[\[ ]TU]]\Trsrywx{wvusrss^VW^XXW^rvvqvurvxwyzw xwrvrsrqrrsrswuuroorssqssortquutootuuxw{񢘙XUߠnɽļ{½»“tüh|v\`lkn[cs|ts~|}h`lojeq$~}}znF~ªǪ ̰~}||zz{| ~tNQV}||{x{| { Zjm|{|}wjkkiz}{ yxz~z|z}|poonov{bgjkg$—շȻċϿƿeS侹@)$tWϤ ػŸ ޼ c(8 Ӗһ)ɿ/гŴҵǺ õȾͷøϺݾ@ȐܳgdjMո0BC hgپx ^ ٻ̾ߨ k o H\ϸX^Ͷ0@ H Nô✓ M y~ ڸľEZ` ļ˺ "¾ ɾݰᕈѤ]]@,BCSE ƾ󟯦 <+޷ J_c ) ڽ  ̽ U¿ڔɑ\mx܏ z[ t~ a޽涼 罾ҳܴܺ ۽ 뤯ι zǾ*ʺɿٴۻ 鿾 ŻUѷۓڸ S~`L\֯rA ʼľ w Ѽilǿʼ ºžʾ¿ѿͻ Կͼ ȿ ܽ۔ ݳôƴȵŽȵɷ䣼 Xez\tM*ϼ󥦜 پ ӇhؔOڽʾ ߿ ɿȽ 읔̽ Ƚ ־ l Ļڊxּ '(#!!LS ':($%(!!""A^ ''""#3g"(("")"$$  ^@"('$)#"$4f!#)$'""(i)'($ '#) (#!$#&^SdcO@uN"Ц:Aʻ߭ ˃฾s(使A뾿 ޿ü҇־ľ̸ѿѼӻ %ɬ#Ӿľ vi޿#ߒK'1.KT&T[*1:.Bf=,[VO`/Gc/_41bKPZHlO7m,1.PN)N_BeC_h0cI,01[D+KPEmN7j5fE*Fh2JJ-p31.GV.ZD+W[.IO>:-[>op_pgμ̻Ģ ̿ÿ͉ק+$ Ԇ y½վ%# zܻ#յ\n'1+c"T[*1:)qW*L2Gb2B.sP@}q2n,2+o~^NI2bI,(eM#c-o2gHV'<ap'p31+Z_N#+y;,ţ^>  o!uιŷ ĿӽΐڽuCIͽ#ηƿݼѸ Ѻҽ$ܺ ĺԫןމcĶ '1-C$T[*1:*uf.[l4^Ae F,aJH99m,2+Ny'9ynUXm"eI,'u1B*88j1U7?tk(p31.[#""" !.d%$" $" "!Z=$ !##!/c! !"$g&$$# +3 !$"UW d>WqΝﯲ Ra e޽ "ɾ˝ܼ `ٽտ ;Ͼڰm Ѵ syxttyxyyxvsxxyxyyxyywvyyxxyyxyxyuvyyxyyxxyywvxyxyyxyzyyxxyywvyx rXn~v<糉ռ ƼĨ ; $|oؼ  ƿ½ֿϹ l];ý( ԻUȾ诽7 "mVbҽiH5rܿ 禫 ɓ& 'k¿ ¿򨖏ƿڽ ÿŒ ƴ6)޽  [ʟټ^x 3·ܴô¿ڍ߽ǿ¿žو ڸƾ׸๸߻ɾU{ļ 𘆰)ѫԐ Ęʘڙ ș⶟V\bG飓rr݈㿼ȼſ1@纾ؿڹ ڼ-kO  „ڴֹٷvسȴr۳ ٷֆgrm2c޶k_n䔣bǻԿָվΎ[¼ 8&eʾԽ ѻ似߼ĺ!ޭŽļص  ӡʎѐ׭㑶ֽ ёȯˢ[ɞ`{p W-z}Ѷa۶̝Ix72ٶ")5־ Ïܽ ޽ ԾȲ>׾»ԽɿŽ|_xԁ  [ Z|Ytks ˮ͸3Ѹ¿ Fվ Ǽ ľʽߺK|º%׿Aô ÿ Ļ$ÿPғK   vY\ϩ0 ָù5mƉompͽ̎½ 弿ƽݻ%ۼʽ ž鼺 EښkúԀ RiiNUb mR ܿߡ0һrSkBgفrraٲ F{۠ >ֿľtdz ľ^e }  RДӸۮ_ުw#}e㺼µ#I셧|bEz] i|8n󿿾񾿿0⸻ϼ켿㺺žȽ .   d ȗ ٓΔó֐ӥǠѪɖӕ [cO|s f¾pzrʹr$8a*ƾߔ?K ÿԱ  R 耐ސ ͕ 쏬Φ؝Ԝݙߐ„֕ d}y!Xڿ(ӻʿ´ Yɽ¤㶾ӼO\pA սUžعм Ƚҷ ԭĘ ϝԟ 蚎ϥؠМ̝Ǜ١ڎπȗ﷑Zζuj-쮾#= ľƥ Yڸ ġƾ&Vݖ* ֻϹ  RR暇^cy߆ ĺ Aþҹ޼þȻ !ٸӼ)Ⱦ4ξviɑ]λ~aG@ā_ ȼ 7T¾ͼŽý-ػĻ Խtz PՕ_} @g oͷl   ݤϞ%P儳˴½ȶc ' eZU ~ oǾ ü  żi ѱǦ즭 ٲ&YLэכּc̎ g ͸  !ϐıl ޼헫 ϻ ޻ ԺԶ Է ݷ_  䨾ŮӁŭϫϬ ӂ񶈜Q{MF 2j~  | ջֹó   u Хv՛ˤÁݥҟ孮 榠򤇾[GUʓy^  z?!㼻ƾն᷾ѷټþ绹Խ5¼ԻۼǾZ ߺ ܵнڶ ܽZUwm|ږUB: o ~'̻ظν ߼Ʒ7ƿ⽻ԼɽK ÿcmzm^O ٠{'ݼ˿ ˿~!Žŷ޷ ݽ&˾ ȽȿkúZjprkj  Y ^ȼӹ ۴ ὾ֺ˽+ƥ@绿rٻõڼƶ¾ ֻ!ž ʾͼnWq߯ϻűb`v: F֜Z ,̜\iŻT^ټľÿ cÿGž ۮYs ƌ{sڜ Z8 ɾ ÷׹å߼*Ⱦ˷漾˹ʼԲ۽¾żɾ_  ̜+{ș馴xܕؐw_}` ّ՛+YoK ʾǴaۨ  кȾÿܠ+Իͺÿ  ͖戅+ܙˬ啍޾ʧָ‘ʝ|β㏄ӳؒ璃Vνi_ei ЀTZPfžt)mعʾ׻жҽ#仹 ڼδ ʷ 8kٸ绾ĿB  ˬɝ+ɯײ϶óҥܧǡܝϸ޷Qihυ Z  ðދ𩽾E'żӿſݩο,ŗȾ ׻ t%ڻŻּ{ Ibm  )rҕPS (| ־so ժӍ   :ŰP_٥ 4؟^\x]⿚ ϯWu þڿ 꺾Ʋ WþDz   8@¼ҽû ѼrAüMһݪѲ]柇m /ͳNيI L WҼ J к⺼Ƿѽܽ ²̾ ź  Դ˵ž伿ּ D˽ܷ   x]뎒p Up@C{_΀cP o@ j ݆ ῾ ɡЛ Ϻ Ƚ ћ ӷ  ř ϩρғӁ˚zӱ ꡬWaC ߇kϗ߻ɰ } ^ټ ɹ޼ˤȽ˽6߿壷hDڽHǺ$׼俿 dʼ  ڐʬĠɩ وTݸ_ 鍩\hg _r͐º R ޽ƭʋ 0ƚұèl ¾*Ǿڹ ޼ ڿ X  șƦ ÐɗɠĨȼ۝ԮĖ꨿Է ¾ͣTjoL x KFB?ϿJUmƀp|_ D` ¼Ĵɠͽ͑ž-ímÿ'º缾ֻϿǽÿź Ҽ    sid )Ġeds ǒ ʺƥ#Ϲܞæۻ¿ ɾȽȈѴŶշ)༿ 뿽Lpkh VX]] ޽Z~ G漾½槜 t 뿿ļҖÿɛ ¼ ޻ Ƹ  eY  L~ͺ]ɻ YW թ  ʴ#ǻϸ߽սӿ ż#̾»̑Îmw,˸Uݱ%м輿 ۽bտ  \v  Kļڦu~" ׻iս  ̾Ϳ!ž֑ᬧ̚Șˡɯ¿  ýǶ ְLJ ܕіћݚҫΈМѦ̙ YbYv3ᯰU q½_  ⺺&ݵĺžغÿӲغşՐ¾ҧ 뷷۾跼ɼ¿罾ҵP 둞Ȣቴѱ΅ߑŅM͍ٲs`j ǀh  :Ͼý)ƏؽȜڹ.ëʴܤɶɰ܏ƹܦҋ Թ̻ξԼQ Ϝ 螏Ç妸ڤޕ߾ް֊ƍ칒MAlaм^ m#J׿Ƽ ڙLjѿF 㾷.Ĺʖд㶯± ۽#дοץԴ˼> ˻Ȼط͹濹øֺ ÿޢ  o`dh W_u  `GȻǿЫʭŹ廥̷ɽʾج殦 |꾃 &M¿Lc^XTE%ջ ޸Ų;]ֻ Ľѻ+üԽǴʺϹ-۝Mȼķ ľл ⿽κFû Lfڶ]jm⇮  ̽'߻ؼk#ε۾i ̛Ժܺ ٵ־ýdzİޯĿ Լ ܿ ¿ ӄý9^jاD ̽Tȹ۴Iyؾܷ忷 سͺ罹 ָܺӿϨ@Ӽ ؽ ޹㼾þ ڼgÿ¦ ֥ Ӥ٫дٛɩ׹•оaϼm6廻׿U ѻ¾Y տÿӺ޻¿ 晾?t[ n Dۺ߾ÿOſ ψ觼ˑ ڪĈکےɯ赬ȳ𷇛LwXڣdErĺ K͸C gпݿ Խ޿轷廾 ˾Ҕ c`  ۽ȼƶg qסÚݠ͏쯬踣~㜰մꥇĹY磆H Uޢ<Źǯ׹  oѿڽ м¬ŕƾϾ Ӭ ҽ ۽ɿڼ蚹ƾ ٿ ܽĻڰԟ^壇 `Ssοͼ; ɾ  ½޿ ݾƥƽ׾۽ L   н˾ Ͻ#O;R[^夆 ئ Ӛ ѿk˾ϩJ eǾ ߲ žܻܿžöַ κν"㹾²˒ɾV0 Ǿ  $~eRiҼ]坄Vސ ;iȦ\׺ľ ½Žܻÿ "͹Aי _1вpr嘍~dтgxʾ  y.ɾмj2Ŀ ľҽ¸츽 Q<D н ӻ Ի˾^=  ھ ؿ a Ďw_l|¾즕ԜU<   Ǽؾۺ|>v4 ¼ ə ڕ 㹾߼½ھ"ܽ`E ٌ곾Ӛ΂Ɣ Pxսaeђŀ 彾 öux  @ƻպžͻ»J Զ кĠ} QwŴ Ĺ׶ǻ ~0зڄ މ ښӧǚ楽§ztϽ 稜ꕃPan wg$ RZ r   Ӱߑ 4  ɻ ޒ̠ ·ŏάӪԯݧҧޝ 湼 ^`νݳaZљ.ſǾƿH^ TPQ ؿպM ˻ ߺ'⤶ʺȻ ` Ѹ/ļ׾ PWk_Ѻ:Cnػմ\ n   ü'  ?ټ UyһŔcmkٶ7q=ǻֺc J ܾﮛ ¿ ڽҲ ĻԶ0н ž'޻ ռ=ʾ;  ֐UemƑl]ǀ犥J#ӮR6 ׹ҽ⾽ ԲK   нߨSOൽ$ཷۼ Ǽ ջ .  l=vl?qsxߔ}}澡4]`XuƻԺ]ڲ[ں ڹԹ㷼Ϲֻıۭ ״ л » .Ϸӷ ɱ Ҡ ֙ߕăÛۛ ҆݊ⲛSӾՔanň}}̱}w)ѱv°߹J ߹ݿ ׺̾Ė º ٶ/ͼٹ ¬ ࿸ ܱ ꢞ켴|ȑê ͏؊Svvi͑Ŀp޳E ~b MяԼԼü*иȽЈکƻ! S̼ )л&ڼ ֍ 全ɦʟɧĠӞۣ̰ ƛХn]  u̳aq  ٝ_aҽվͼľ !ׅϸ վΝٚü!T: `⽿$&˼$ӿ   {©T~zڡx_ƽyy鳹Vҧ{fuX{¿޿7T ſ’ӚĿ<\g G  յ    V %mZ{—Ӛϻ暙]Gſ|ztE޽ڼr| ޶qstb`` ۻԼľһ 龼3軺҅﾿麺zW r׼Wǻ K"  *qompU>CDA !#$#!%!1?5>?Zg,dҲZr窋õ|Ƌ jȯrŕRgW]kxaqYYqþ߁ AwKл ׿ȿ ZݽɼǑ՗ Qp FpC ޿    9~ouuq|~NZ[[?/677"  #-2::@cE,|zF[~܇|VǾ |Ǽ>ν¾ ͸ǿþ ØŦʸ 滿 ׼6[ S ͬ ޝ˙ Ьמܜ؍̝ٝ铴˫ ɫ!jͫ[by)ضz]\[\W==BHB!![藦w Zjc ÿ» ÿz  c弼 Ҽ+Ț׷ ӵК U ͠Úސӈ掱 ΆDž|f gbﳳҹ S Ðt ?Ц ϴ 'n js ғY]boҋ ֱӜɜߢӎֵ~ Љ҉ﻓhfʘn_g͆8Fџ Ϻ޿ھϻ֝-&ӼaWLϼӺT`}b   gc  ӄ(۾ԼIt-ϣj\]S; úٺ¿ Ϸ,´ԀsJ߻s1thRXؾ߾ ʳdEbn"ٺº׼忻 _`OFA ,߻ ؼ ּÐқƢ뿻ʽι֙nz¿߸ 8˺Ļibk _q o"˹۹ɔc緸t ,߼н%ṹt ݻţƽ뼹ǿӽ趿L!º܋Y nj \럀Y 'ܒɽʾ׾俿{#~_^x|tge |T&$ -ź͔ɺ྾׼ zfE Ф ݞ޳ʦ ̝ۦԾڟʭѤ׷ʻ  ]U !cXĿ¿տNɝ~X\X/ ½̺Ѻl þ#ݾ ˾ ž ټɺF չջ伿ſ ꤢޮݔ犱ǼsWqu[݈oV Ͻ{L پ ڿ ō  ϼ$ Ĺ޹۽Ӽ ͏ՔՊ Չ԰ӏ햱ƑƓЋ饧ۋߡsꦆ  Ɔesa}Yp\nVXݴmsc[ɷ  ξ پ\K-@ɾ ٽ Ðӽ о%½h ȿսUϽ ʿ ָ ݺٹ mn[l|'Ǝ|{] ЙͺͼտȾʿ¾p`9`н-򺸹 Ⱦ Ҽܻ մ!մ܍ žɾ䪜 ͽϼŠh迾 m xew(򌏧Ǹxi ūǪX½Ǿ  Ѳ'޽ſ6Jϭ H ]ͨqܷݹۨ͸̺ܺ\߾Ӷع߾޼Ľ Իۭٵ ʼ K ó$¿U [[ؼ追{˽ټ_ ¿ʪÿ P ¼ ̻ ̏6ֿ عުعһ xZ^}Թ垶 ^^޿ þ    ؈ يԜтӍꩿŸ𧗹갍n ]llWüx~?վҿP澹׽7οʼȲݺ ѻ -޺ɹӾ Ϲ(ջ ὼݹג 懃ҥ }֕˺Đԕ׮óҩ喃i ]⽵Хn[^oiU޻޾ԻƾCǽ_ިɽ 2־꾻¾Ƨ̸ۻ ǽŹ϶̾ Ƶ ЯϺ ĸϰµڨķ٥ܦ²  l^؛rêȼGv?  ҝָǥ z    * ׹ŷ άssuogͻgL ^b󿻻ջ弻齼뾿!J ־ ưҿ滼ؽŸȵ nټ˸ ݿɽ ʿߜypÿѸȲ2U߹~|zܒdا}T ļԽ俽ú ׺ ߦZkľɻſ ɫ ,vȹ[˵)׭{ئ^X~кǹպ㻺֗T̥"޵ӡ﾿ 幺    ס :Rں2ѹҽ Ŀ û¿5]& 񽾿 깯}[싘Zy~[ƿ ۞yn    Ȥɹ ײp:r߳ͳ2׳ѷɷŭ̼ rͿ  ݊ ƢΪ隵֡ꞮˑۍÄԟ؊ݑQ bpvhɨ Ӿʽ ۼڽĢʪ 龯gWr й2ֹؾ̼ $о ɞ О Äݙߣɏ{܋'崳uɧ} _q i}  οÕ!LSž" ӽ 4­بzgvwɾп !οǼոзÿ(׾ź;ңʽ˽ ڡ ߇ӷ ̎޷÷š˥шڳ٠Ө#ݽƦ~Ű{ lo=e璪vp(ľž ҿ kk5ɴ󿏅к /亞վإżZ׻å'ؿJǺ  ,Xy^%ɜ S׾؆&ٿǾջ ϽFӺ5ƷŽķ.ƯӦﭞԙýȿZݺμrHºvپ̽*Ԡ þ   ,ԻǡͰ\O  rwDEa eĽ#ɽԿ 'ңd׼մĥĻôþȶպ-uʸ[40g˿y&ާ ح    ,=հɑY  d| _ վ"Ǿɺʵù%߮ ƫK渘ڲѽǣvőҿǡǼƝƻŷ+ þ۽ ݼ⺼ᄍ嶠̾ẝû   /Ϲ}]  ҾЃ( dκ޻ HͧĹ믩޹˥վ겚Ѵ¼ş-5 ޻æ܊м գ •̒ܤٛߎѥї﹧́ʔo\yj " Ƽݿļܼһ&Խ粯̣ۻ#ζӫ׿һ-νܸ '⻿ ÿ軾龌¼Н ޽Οد̦Ƀ䚡˅%ϣg̼jA [t  ߗɽĽ (}ɽ&졍/͞׼̴¾+ӑҾ ߭ ء̽ѣ պݜڡѡΧ⠰ҷϴ،}Ѣᅰ& a٪~É sp  c ߹ƿ˽ Ծ ܵÿ ٻ۵*Խ&þѳɭɿ־뿿ڲ񿿾ɿ[쬢Ϳ (⛙ Wp b >mپ۸,ľ־Ŀ ú۶+ķ&ÿҾĿ  ÿ¾{LLwS\ZU  { x ͺ! > ޾&ÿɼ漹 ֺ зȿG칿߮ܶŶֺ Ӹ:ܼ ;ĺ˗-˻v롁 c8)Xb |#ٿ  ͺ¾ մڿο ۰ ׿/սƼϿ ¿¿˽нɹX jtlR ˱ ˷  ߹껻Լ ׺۸þL֦ȼ仿ܻ̹Ϳɼڽ෻¾е<>ԫ ݦ Ĥڟڠ֟ƽߕڙ졢ֲ͢Ž˸o_ռ׸cɻ޿ ͽ%Ծ]L۾ ݴ˾5ݹʼ载Ͼ˻ǻ̿t1ǽА 򮐒ѳ жʙÆбҸ󻆗,peӽ}^p'щƸ] ӿž ʿǼȿǯ к%ʿĽ׽ǽ  ˼ٺ ϽƽŤ 㞺Ș«᫜ƭԸ/ӠpԴ`YM*[jHԯDžqwm{ZVP˸ñlڮ ý Ϳ½g Kƺȧݸ ׽Lsþ̽Ľ Ϳ ݿNE ˾ƺ ſ ޻ؿ*wds_b߉ ҰʳƹcչĬ{رufʴٸֿؽUɨϹ1·̐ ǭ$Ġþƺ ޫ)»F|n  ,eؽMV#ɯȮҭTeԱ׶ҵѺºкĕ1IèͿʻہҼ㼹 ѹ ڴɕþ ˼Ƽ  伽ù л·ü[ W׻uV4vcɶ;ͺŰ[U޿v[w#ٻȾʷ9¿ؿ eJqz ؿ±νS޴m#Ǽɠſ&ͣڪľ  6  ݸ׻ »ѰżѪӗ⣼plZ a^; m\mf O#ý֛ȸغ躽ҽսþ[mE ο׼ ƛ ܍ƧۨR߷ Һ  َr h\wT viRHj  $®ž׽Ľվ#ҾpUOǛ  H»ȈƵ:zֲz˿  %v ͱ`fe\Rf8dk gT{ ݺɹض̶½׶廹 ͷ u<׻ ѹǾô̐y Ѽ ުЋ9߻㿹Ժ՜з ǴaƸº  %7ȴҵ\~4!l˿ QizhXO}m ݼ˽yPݭ׼ ܻ  ݸ 䞬2վν̹͟ D^ Ժ jW̿Ĺƹfg Ծ_ lOÍ iưn{½і⼵Ѳмں#ſڿȢŬȾ ߏǹоŲ oνo:ÿ ܺ׹ϱ ɟޑō{ՠΥ򧽛ľɪps ~ԇ ڨW¾{}CƼҼ ̽н ̽Կ䐀̾ʿԦѼٿɻ۫ G/Ƚ7'پʭ ګԴ𸭜⠙ߞ޸ɦٌ Җ_VĻAOR Kh£sȶQϻ=ʿ¿۾ įⳞվжǿ#¶'ſǽ0άĿu%ػ އթԅ ܇׮ѲܠտݽЉ͉Ӭ% zYDļhI ȲѾ̖1ԫ|i Ӽ ƾǽ  Խ ٬⠌ ߼ 翿!¿Ҹې]!0Ѵ *۽\Y? K뿞ѓ 9ƹwѴ֮ bۼ Ļ̴ ƾߧ䰶ڡ{ɿn". Ud;ᩩʻȠվٱιRkay ,Խǣ ҹè * &ȷȯۼϡb-  ʾż[{[ C۸ȟԩЁNLuϱ֪ɭ̾ ɼ 弶۶þθ Ϲ񛽖 Ŷ6˽ ӯڗȌΊʿ   ǧ_ 98,yիf}iY» g{׬#t ѺhuͲ Էε ѻѠ׫ڼ )νة  ϲŒ캰ߠٹ]Ϧ ߔ Ϋٍ짽┭ ֊  ʕlt#l)իX堊wTӼʼ8 ͹ӿػĹ +иٵմ¾м 񷮅 ¥Á 휲߰ ыԝ̅*ع͉]\DY*ի ڂ [ܲ㰽ǿʷ 2ƾ<Һ·ضϼ ̹ ֹ״ <ٻȨ¼ϯŧ 쾴߻۝ ׎ʈ ͏Џ͠ֈҷ ˟™B^eW I9,ի8dſ`X񹾷˾ 뾽ߺ便Ž5Ю෰ɤʳϩ߿ !Ѵʟѣ #ӿ¿  1ջF]cCA9٪F,ތq 㸸Ʉ丿yع и߻ո87Ÿ廾2볚Ŵ⸚и߼ ƴϿιԨuԼӶ(v<Կ _j ɽ~HV錗ô߹` Դ߾½ ͽ75u<2ȱ­л䱛ܼYd ^uдߓx0Խ'oY<M!һVl짘0kЫؤ ۷ݾǙΰ 꼽m\⺴߶7@½3ۯŸќݱŸY̵xJȿ0콿ֹ)ڿw qr>=+ҲPгR橀qؼ ̽ìuv ~ ʻٽ ҮFʲکɱѯ 뾻Ƕ֥ž$˾Ü ۮΙ—۝ۧȴ֙ԴؚʢŶ*IYT8'խمDs䬆X ཾɷÛ  Ǽ  ü橪 ֫﹭'ʋ˩нƻ'׼ вȗ┿Œ牰鴾ސ򻆔%.;qV¿ Sd(ݫB~Î ⻿C حᢄ 콿  ߾ɾٿɴŶ HɜvѴԋܺලʸ'Ũ њŴēʦڦ~ϖ͗򮊽%鿺 \c¿+ti-ӯ۫ذmRx o Ļ ͶzẺ ¿ ˿ֿ꿿ÿɻ [)ɋ{wʬ˗ľ墬üϰ۾  ׼ݸ޺ V꜄.ձ۫פҎQ +ĥμižc 2˼پ㹹Ƽ̹Ź Ĺξ 4^&ż{zȬǿ"޽ƣü ͩ1<Śg"*%ձ۫קܻ]PRN ü ɩiގ 5 ޼ 3'ݮŽޚs_ #뻥ʴɟͰ|bӿ;$ձ۫֫] k[ v ȗղϻþ .ſٿĿʿ3ҽٺټ-ǾǾQ "޼ ÿknVT%ٰ޹۫֫uw | ɿͿ ѹн ˿ɱ0tĽ޽ 4 ҾĹ1ν꽾мۿ+B: Zu־!꼻 ¸κެ ] ļȭn_¿%hڥ۫իˡs T˻ɻ)⺼ʽ|_ļ̼ uȺ1ؾܿȿռ麼0޺׹ ࿸郞ɼ ֫ 禷 ΔzؚŠݬթ {Mɯaۨws%%۫ի @©V 0\ ¹&ɿػƆzu̽$úF葻0Ľȹ ¼/뮼孺Tn Ѫxˬ쩢Еۚӣӧ隄 <ྰʠ[  %n۫ի>Qe&ùڻ羽ʈZpлpûؽ$ɽٻ輽Ỽ쿽ɸ⸹n(®۶ľ߿lݼå#̵ Р ߿ պߞع椼ƻݸڭՠٺҟ įhd P;$ ۫ի*vVƆ ؽ龽|˘۽ *۽꿼ʽȺۭʠמ{q޼ 쨮ðY$5h۫ի kbj̽'ᴹڸ~缎޺  ѼĶڸ績÷ϿǸž۰ ֹȅ.ԾȽj͹øԹ Ze¼ůT^x+۫իоdq6&f 'ƽȾҦ ohO킻1̩ĶUzcw.۫ի ޟ]aM`> ľ(ڶѽ Ἶ)ͶռSF ½ɽ淸˛ӚϿȻCȾ0ķセ  ǜbc#۫իлgǿ 8ͻοN΀Tbõ ý7;_cʽƤE Ҹ ƿȺɒ˾˾Ʊ&ǿ0͞ َ̤襛藺ޠ|{դ҅ﱗ ߯ۿù ba)ۭի ۻkKEGܽտ}xmTQǼAL Խ"dľÿ׸ ߻ýĽʮƓſ‘ٽ0 燑΅}ڦu㼫ș˫Ȍ݋ ׽ܤijqRw)mܥիfêݬc8W WvcJ[ɻȓ ~ج  ã ݈ٴϩ ܸ߯۫ةբמ˥ώ֮ ƣZ](|ի̱蹻 kUۂπzzտ 6漻󹋇пÿ  ͺ þɿ p н 쯾”¾ վô ['_'罩!EɶիE Ƕڿĸᄏ ƿ ݿ^ع Ⱥ 밷^Ŀ1ӽļ  kwuӯ&u۪ի￸ ྿Ñ߹ ٺѣѻٹ̺  οQԶԽ漹ݻ ƶɻѓƾ1Ƚܸչ߻  ƷZ4wϰDٯ]۫իȶ aʹƬVnuǮ󭵻!¾[+Ż@Ƽ۾̿ü½Ӻ̻ȒͿ0ӼܿƼһ   "ĸ`WDղM۫իǶǽp۳]Kƭ۩ ¿׽&ϻź̼(>ѽҸ*辿ϾǼٖĿռ0ľ˺޽Г ޙ ЛޓޣţʛŌ "dɭWn%A5ձg۫իǶ ߹^~ ¿ؽ$ܻѺ󿿻3ƾ¿﾿J"μԓþʏÿ´ɿ#׿¾  ݬx~ܙڃڳ Ѕ#ijr@b޳6ձ谩t۫Ԭ۟Ƕ]_׽!к⾿ۿ¿ ˾Կ+ٽ¾|ýʤ¼¿| П |ӟףݘ礡 zӜÛ$־û^Cގ6ձp۫ئǶltYR~ndԶẹë뽻㹽 ׾иҸ й뺿Yb麾ܼ ѵɺнҹ  $߾şcT̶6ձ4۫ȺT쳣ݲtLӽؽǣ 弻ļǻĿû  YqIֽ ɝ ־   l÷ThĿ ̼E\2ձڈ?ݫű¼ݺܼѺ ýøyŽ ~ 彿׹ =`;¼޻иŞн޸ƽ & Ǭg׻2ձ(}x߭¬o|&Ϻf%c_L۾׿־ֱ þԽƖĠ _[ȿ Ϳɦ` 2رUҬ-ѽʳѾ ýмż "{QG¿%ڿӾ ׳,¾¾ƽ܄?舏_˽΄s|͋yyۇ䕹ʅځɓ}߀Ն| ڿƪad¿^E2βٺi׫Zv@Ƚƾݼʖɨ¾ ȼ̽ ý%ɿ( ڸƾ+̽͊¿¾ȧ¾ؽe̼kс|hd탚{Jɑ㊰ZxdipuNvzydt 밦<ķ[v15ɨo bի&ԒH@¿7ϰ  _%ؽLҿԽ ᤬ gcu`ˌ႞΄l~c|Y{vsan{r~xqw 9Žwqp52땪jlիov:d$Ț Ž ɿƽ[ ʿ&Ž׽żλ߬غȽiֿ޿ ؛G|׽3miիػչw ѩTƼ¶ɿ  ߷#份 Ǹ&ƽžλӽ¿ ϽȾܳл ͽ׶ TCTų TEƹYD7ɡիƳس ɕ󻫱 ̾$ōſϾ ͸ &÷ſ͹{ʿ׿˾  ȿ霶ʽ¶Ⱥ ӿӶİY۾¿g:ԱޭjcիǷঀ86~󫌏)ī첵ľ½ #qպӼ zƽ ֊ܿ E ͽ뿿 ͼĿ꾸 'ɞyd F4ȣ:ֱ۰\իǶ[e!^ν;Ǐ Ŀ2ģﶿݷ¾ ǽY־ϔü ˹՝¼% ½̻ Ӻ ù ӿʘsTۂgY|ֱݪ<ƱիǶ]eľԳgiƺU b ɥ}X    % d ƹ Ǿÿ O Ļ ĿǾUhN91б۫2"իǶzĵzjì ]m پ śвƫվ  弿и뽺 Ǿ йƾ ɼ¾!)ĻfnejͿ9_݆9̸֦(ԫǶ.ѿþŸʷÉ ׸2ɑ ļýڼƿ z!jĻɾΏ_˦]!,Ulرۥͷ9eǶŲøt|ʝ澽 ĸ Ŝ-Ľ{ θֽ׹嶿ںľȾ¾̾!Ƽf5Ļ#ؾÕ ]=_տĘ'bԛB̳խ0 |ͭǶݍ#½ٸımrκ EݻŢ ۹¶ƛeٽԼý Ļſȴ]^[mUЏbڻlѶݽ떿}4ǶнqҼľµO•潾 !ظǬ˽ g 㼾  ⽾߼ dĸžؿüݺ}°ԹĿ׻%Ļ ĿڟfgĿC3հ²۴fǶв=VtDv½伕I~лȰ   ׺ ѾѼjɻн νƺȆռڼ̾Õ Լɺ'̼Ļ ýrT} W3ߜܲß_ܪǶг ާ7Ļľ{[ ǩ꾧м v ̸  즟 ԧş  ĻĿTޥÿX`aLF ý3ݡݪǶгGԾüÿȰʍbݹꩲѬ ܾδȻļ¾͹ ̽ڽ z ‰ Ļ4gtpqc[$/k>e_{m`Cֵnt,¾3쪵еݫ=߻ɶг 8ǵŸùӼț ҽ껶f1ѳ鵰޺&¦ʾ޸뻺ùºպ ɶټŵ䡾Ŀ򠴸ӵĿν ƺĻԾջ``NehI3ͣ;۫>݅ϸг "Ͽҳ 濼П Ȩ;  ީ0ξhEĿĿ ijýľڢٽ $_ĻjL ^EʽՀJ5M\۫ lE`Pг ꈂ ٿ㹼O ӽ伾~&ظ𲕩Ľʸ½ҾFTaY½߽㽺ܿԼ %ĸਬƽ μͿ %А伿Ļ Խ‚]#r¾K_뺵9۫ݚhկгþĿ¿r Ļƶп%̲ƾɱ묝Ė Ӹ ׽X8 ɺ ¾½/Ϳfʛ *½ĻK̭}shjhľ˽pv vܭ۫6ѲͮгſĶ㼾r οvĨ᳸ĿiG߯b4Ǭڭ⽳ïվƾ ξ5ڀݾݽѼ ľ彿Ļ>Шv\|uUͽ>2<°۫ی罠гͷ }Ŀʀ̿ŷ´Ћ8ĵ°jd0Ἤӷ亱 )ƿƽ ںʼݶ/ʽðѾξ ٽ⽼ĻvümDȾPֺjٺWEͭ<۫ԺE˹ӛгʿ½κp ;ۿ½ɾ Ñυnۍ/зe{÷̱رμ߾ͬѮ岸꽽'ɾȾ㽿 ؽ(֥ ý Ļ^rǿZz᾿ײ#b\ʈµ<컯۫ԫγ՟гȔ#׼s彺ĺйϾºM ҫĶƺݯĿ7ʷ™߾˯߻ӹúѺ翸 -˾з%¼Ļ߾ V½Hg =ػֵ۫٬KѴƷ޲г̈́w٨ ̺ û˺ڿн겖š &߾ ӓĺشʼ׾㽼 ߿ÿ׿0Ļ [X;V!ؠ굺=ޯ۫0ǸгZ ۭ~ وiݽ Ի}l (TV֕ 'ҿŷ¿ξ俽  Ž忾ѻ ľĻ LDf¾[phû =ո۫4 dzг ة h  ؽԲ}{HS>C|ژܻ$ꍺBOΚٻ̿4 Խ ½ſ þĻ p |WT.!ڴ=۫5<г ب R` о  }Ѽ wsnbͺ}a`Rzƴ"Խ:y$Ծ*ǽס к ǺĻ Ͼÿ iij&޹ۥ=N۫]΄д ߵi |  y!ح{l0ȝ)ýSb؍ ^# Ļ ĿY.ܫ>ɴؤ۫;̼g֜iԤn{ٲɚ\ պҸӟؽݺνĶ輹һ»ݠ %ƶʽͼ ľ+麇 ʿĻ ľlkn3[㫴?R|Ѡ۫£RҏԤޣȎhpժvʅ *طǽΪ֚üZ뼼Ǽ Ľϼꚪ ̾$+ɞﻍ  ߻ɽĻ U@пVz؞VDD$@ɺܫٴ$Aе [ڇ׭Ӻ̼ݿÿ櫰 ܸ*乾龭׼޲ ̊Ԩ ýнƺюݵ| Ժѻ#໼ҼMu!Ļ [xm>$ձӛ;ܼ׬6г ѹ֪iޭ㭑ӿ¿!պҗվЩɂ e ꡟ;{ǭڼ  Ē ˸¼ ͻĻ ֶU DMӿSӵ%α:԰Ȯ_гNͰ٬ߛtɽ]ս!Ӻ½Ō=п̽˻ Ŀ¿댉ټȲT:Ŀ뽼 ˾e¿ȣ׽$ͺĻC¿ r`V%ͱتߚ:ձҫ߷+>5г.٤፩zgֽϻɼƼ ľø»Ƚֻտ֚ ʾ뽻İ"ͧ½Kaſ滵ӓҼξ ڻ$ ļ ߺĻ" REؽuoy%ͱ:ձƭ֞Xг.W;çqtпƽ̥ɓһ  û*IJ겧ý ?>BI׿¾Ļ*UeX&ޜͱǻ:ձګխޝP:г&л47& r!Ŀ м ո ۿ¾ϭƶĨِδ ݻл橩в᧷Ѣ%ľ?x|ɽĻ*ޏ`N(ОͱҨ:ձעի·Յг)٨Byds-{ǹnɥřƼ¾ÊץǾͽž׭Ŭü ¾ ԼӸ 'ٽƿĻbۿ\Tw+(ͱTκ:ձMPի e6г)Ӥ٪jz2I9r鼿Ͻ ū ҼҹӼѽþ嶏Ž˺þɲ¿#öѼųɼĻ#hhT^(ͱMzϳ>ձpkիķdZZг)٪˞1{J ݽ Ե ˞ӄE  ֦7¾öόSȰɽ¹ 蟼m䷽ĻYؾbLaW{(ͱlh̰ٓ>ձիȶmkг)ý٪ԷL{EMּӶܻ Ƚ ޾ڽŻڷ뻼΀չƽͪzݸ9ٸ׭`Y.v]\fhb=˸ß´|q,*ɿz` &۸Ļޱ\unAԝ(ͱtۮ=ձàիǶ"cг«,ý٪Zd8 ֠ όǯ" i|4Vݛ矟}N!骑Ż}rp 굺 ĻBPς+ͱ'ݩ=ձߑիȶIг,ý٪ߪPds婢º½޷ƽ ŽScʻ NOt#ҷջ߾½ ʷ裠¾4ĽдѺЦºĴܠĶũǷ ޵  Ļ h2[ͱӛpң=ձαիǶ}Sг,ýڪSs1gǽǽ ǿڔձ$͖9dP$ӿǾܮ禹v͡峟޵Ϻ֠嫷C{`2 Ļ セ^]q0ͱa=ղɧիƵPU}Zг,ýҪ!Kjsy¿ 컾%ơa(ܹ껹پÿ/÷ѯƸ!ˢ<跲㽱ϫһղ&¹òڸցNòo Ļ {`q0ͱ=V­ڴ=שߢիʺꭵQ[г/ýһcDH{ zſҽǾӽɺy ҼĿ P=Fةٲ﬑ڸÿ:ξι˻Żaɫsغ ĻifYe0nͱϋ<ۚܬի߲#+г0ýܦOrB pֽڹ ˶ ž<常; ѷ;߯ҧߏӭիǶ!cг%þТùwʾƼſ Mo̯ۦ1ýʱǿ4ۻƺտžH­׾ƲϻҸ;Ǿş᦬Ȱ ϻˆjiRS ûؽuU(ͱعҗЭիǶbTгýݤCңbýE`ư˾3Ņ,ỡҢ߳ƽSk ؿڿ*٩̛햧^ ٻǽ b_(ͱYհش߫իǶ̷гȰؽݼJսYuĹꕙvb ʹżmܻAľn=ʺ Զξ Ӻ!ٟĸ𘷰ǾA q  ɹ (ͱްձ۫իǶг<薂'Ŀ޽ֻËuW!ݸƼ¿ /ҸJÿ ڻ"㾦梸׾ ڀO  ˽]Oo%ͱձ۫ԩϳ矜Ŷ%гܴХ嵢ڳ̞8oϽ ʼQ޾۴˷ @ɾƾ˷ ͷؽ 1כ忘²x¾ ѱͼ Ծյֻ̧]ξ Ƿ_#ɬձܫޤbȳ_[гߪaіƽY8ngýƿĮ$bھթ򾩣볩KʿĿڽ ѿAϩШ˨ ̓໿C]\"ձпϬϿޤߎվϰt6PӳМUyýܻ✻5 ֮þ A SؕαѲ='䣾๤܁lż Pf GoձΩ/ͷ⮠!гAžýԙ `  п侴ұ H ʼپ꽦ɭ  CƿòܿHоe Ļ deߢۡӭҬl|Ա߭(uгaݵ᷸ xսп㾽ⲵ>»кƽ ׷ә Gÿ/zջ￿ ̤FZ Ժ Ļ ۿNYb֫w3ɢӠ7`г۵Şժޟ xs ƽ,󳪂Ӫ蹿¼λ޼$ֻކU5+ټþἽxͻvڻ Ļ lzj V`իKῸ՘X*Ѳo۲Zw A׾;ɻۺ輼ûл޺ž˽ֳ%zi=Ⱥ·ӻ ٿL`Ǿκ#ϸĻe_Q Ҵ pӱիŴ׳dĽ׬Nfؾ_ϾնľȮ1ſܾ¿׽ úͻ  ͼ ½  ڿԾjxbP =;[#Ż ¿fgY ̰ Ywުիȶջߝ~ ʍֽ ¿ĿS ھ⽿Ǿ 꿿뽼Gɿ뽿[ǼĻsq ͱ^tlզխ뛻ʶVӒ5Ⱥ汪 ,F,- Լ 5:־¾ս ˽ 򻷹ȽϽBF]OؿtԺĻP\RPͱܧuիK贸'ϵ럝ǒܦJ س >Ŀ Ļoc~zٟtu spbU ͻĻuvfiͱtڠի𼽻ߢҢɠ] { ǻ幽 # =ۼ湼ȼ׺漽ýຽ鿹ݼ ߆.`e ոлfbT ·xx·Ͽt 轸ֶĻîlZYJͱtխܷۗзɅ|ȍԿ ϳ Ƚ>¾˼ڽƽ½ >i孌žS|u¼ܲL ƽžj Ļ>Y@ډͱtիůQ?а+г߱Īyyڼ}kl ٹµ ɻ4ﻸŸָ躺øȹٹܶ>+q Kj0%~·bڷĵF^Թ׸ Ļүǽ\|؍V̰`իې뱍 f{гȶڳūoEA ߾ ^ ǰK @ӿ㽿 Hs¿2w RV̺]aSվsVs Ļ״|LB˴¨Ա۽û~Ygiΰaҫʮ!гӜո  zA IM lΝk5sxnY]^vԦKʡгýϩA翾޽ÿοݿŻ ຾:v,lTTP Ļ%ηɿCg{Vs?JʴгyҷͼĮ˻¹sxݻ Է˺ŵط㶸Ķ乸龿¾ ޸ ۾ Ͻ -¾ñ0\樲iζԥ ѳĻ'Ϳľ?MZг{~ܗҨ Ҽf  ݹ鼾 Ѧ3uǼ#̲N V\δ  ļĻʉ񺉵 "ɢОݪ٩&0ٴѸ|ѽ FӴоû ļ¾ ݿüӽ RWԼ꾪ทt ȼǽƿοǼƽĻݨ¿Zkd~ f֧ҜiΧǶ~պˢФٰ}ǭ@Ϫxɿ պ] `eּlμ; û  p}NJ ¼ͻĻݨ~kXufʿhLܣ_Ƕۡ~[иὸc ںK ȿ< G u  ĻݨCVnx 뤖iõpۭؗѺǵ, ۤ~Lb4Žz{ͷ$ܸ8Ӿ_¿  Ĺؿ¼亻R ۽ Ѽ "շĻݨ¾RNZz·|Uuãˍݯ3ܼƹe5נ|<߿`vִعÿϻ 꾼 ᄐǿʿ żL!׽I͞Ļݨ¾WaѫuΧ׆کyɽۈb{&Yޤü…:odgr۾)íμߺ¼ϱ  蹻¼ֻJŽ 纺侺j4ìzi޴ĻَӢ ˹٧ @jxkpwȴږԫ#itĽPՐvjp#ǦX c"nٽ ϸغxM ȼurĻśĥ彪٧ }KR%cګ˲Ȧ+ sϸQ%Ȋvgeqû"ȫ^\Ҽҽ̥ʽ д#Ѹ׺˺Ͽ 徽c=ͻ$ìĻ 諫ި UlvSѩyŮ}dzؠv(§4餅yqjwһW \ ˾ Ѿʿ˻ ߻c=˯ΣcĻŹݨ =Mz{ڤzѫǶitҶϩdos0Z>zM?Ww}Ҷ ¼ƾ"Qʿɿ۽ żoׯ9e g ÿ x᭾྾з lڄ0߻÷{>ͲͺĺλݨF@GbڧlԯЯٹ̬Ƕ@ճq~ .o\}~pG`kͽZ+ƽvhĿ°Ǿ nfx:  gúؾ Y+ھ,޿ڿƻ.i lKƿ!ﮖǸݨXYV㦮qժֱиީǶbг(@'[Z|~YN˱b κ){fĿ붶߾;úμéT 強? #ĸp׻޹ѸRSຶյnzҠK!ȥغǷݨpaHbֱߺP֪Ƕ٦г\ʷ⼭UOǭx`DȦo(әɱu ȹ( m ۺ ͽʗד K"ǿy#wݨRFaֱڨիǶBXгAīۢ]ᦠDwʌ{lwgڻھƾǒܽм ʾ  ֹ ϻٙ῾ ӹwx2ۻ׹ڻ¾ϻ οȴ#wʷݨ@ݪdױ۫իǿfgгWrļu 䣥,ް\[Sܿ?ֹӮշǶlc  ѹ 8 Ҹ Cӻ'۽Կ佾 Єu仗'ڸvswx¿Ⱦߧ0y!ԡpձڨիόɧгyý^Ի,ş`YX̳ԏMۼʺӵ ¥˛Cʿͼ;ƾ `N Զh ƻۨ԰X̿˽ý ƽѻɷo㖑ՙ6mXNUadifpuqt{xlz Q՟ԯWԨԡI:[ϱ6ۻ Ľčw!չĽ珠dzQ|ɿ޼ƾɼɽ˳0`dȾ_eAV ȹŽ pPyѾ-Ŀ$ȾỾϾÿпڿƤ勇П عȋוݸܼˏԗwܿpݸٰռ?BҤǗ½̺Wñ b#LĂ1˞7лd] ǿ  Ə\$ շ pξ q 񛮰ζQ      ҘӠ Š ͈Π à˟ 񳿘ˠ  ¿   ǿͫw ҩx鮥 d bÛҰħ ʥǾoǭx߸ݸݸݹ¿ ÿ尬ܻڸ ܷ֪ժսۿս׹ΣԾܾԾ̣ϸֻոϸѹƟ͹ָֻ͸ŞǶη͵Ƕɹ̽ɵƷηʹŶͼߺںغߺݺ޺κߧڧ٧ߧݧߧΧޘؘƥ٘ߘܘޘ͘SRSRSRSSRSRSQYdPSRSRSSRSRSRSSQZ67656765676656765676764554345432354346765457766467656766567656765676676454324543544323543246' 5TgmehdihR DIF  " *$*49 /(     ) "  3  $4   %$~vzzuuHmgρ{{{zyzz{{{zzylYVYYYXWWYXQPSYUSYUTZYQPPXYVWYYYXWWP{o~nxxngZv OKRQQRN^ZRPKRUUUTSS"TSxMPSJqOMHsGVSOKRQQRN_YRPKRUUUTSSK{yqmf{h~ŧSwXq sbeibjSi^SVUUUTSS#Lgml]mI~gqbkd`ghckSk]SVVUUTSSK{}smhb|p~}٧Gu ΗcȮŎUUUTT$SMv@mխQ^ÜfɯSUUUTTM|{urne|޸p~x\RV@͹Ǫbl|YϮōv几zܶ笟?˪ȭߘ줰 ѽܬGjmð}w{ʠœמo`wppuYFeRMZjtʴ̽ǎٴ=ؔu܎Y|ݡ|ߐ>SU@߰pQߡ˸וޅ]ŽT媭sҡ¿ߧi|˫͹Ɠ|wul׿ɻİ٫ķڴٚL׾οumltyra`ex|pr~ۛ tѽBڧԺۑWOʔ׾ܜYSOVگƫiY±RɻӖ߂]ÍS媨tϡ¾ߤi|˪˺Ó~wtn׾ʻ°٪¹ٳ֚G춱־;tmmuyra`ex|ot sоBڥؼېTLǕ־ܙXROV𡧛pȲĀߜֿӂ{ÆͥCVFʠsf۲Nոwݹ}SM˫qՍaەLɳªخλ\hdrQcopW̟ _yB֩ϽڔL}ј¡͙ۘQVTPࢣҺz`\~Yôߛտ|ÆΡ@UFȠpj۰LնwݷzROʪüqԉdٕEɳǿȿحͺ\idsQdooY _uBԩмڒIЕ̙ܖQUUPݦpʭݒͿ̩āZjc^Ȼ_xͽŰBͿŮϺvaiʾǿͿȾϣż׭ֻK𜔸~ÜרӼhpkvUist]ƹϹ x>xQۜ}Ս?VZA¹Yůܑ;̩ÀWn`aǼ[{ͽŭAŭϸu`jʿƿȽѠŽԯպG𙗸}Ü֦ӻhplvTirt^źͼ yߐ>xNǿښ~ԋ?VZA&˂jug Ƚ ۽ΖΒ ׻ ͰڏƳǫ̿ &ʂjvg Ƚ ˗˒ ֝ջ ͯیŴƪ˿rqricjmjiwy}zyw ø϶ X$]öՠ̵ڃugԶ⠼kstwyxtsoospooqlgkkiiwwzx~ »ζW[ ף̹߁se Ѵ䛺l˷ŸȷǺǻžƸɭƝsv}6yj7vc|nc ๼ ѿ ̲Ľ˻˪ȸǦ׺»%¸ƽǽο̽ͽ0¼ rtzXz|.ֿ˛ĸg艣իũվÛٟxl5G-Ŵн$t_ֽ-Xѵ߰Ӷ ձĻټϭ r/B ʿͨFu&Ϲĸ1ڱڹ͹ĺ׫ʶ(˫϶Ѣ ܸʧӹڬ>ϻfʴӽf功ضћٰϛطҚذΛضћϰ͠ӘֱΚضћܡ՝ՉY-7KLgڽg8jԴUݻɰѻͧ` 佭˽ˌ̄ݬ>ŧ M ۼyקض ٻ ѬѧŵnHٰȬдƽմ`剤֦۱ԥ֩ìEA5H!U N6 ; 庸ŒmƴѴ5о׷›߹ç8ԨΝ:PS ީ ڻ!ļɷ ٺؽԪի黼ݰ̰ خ޵q`剣Σܦӧͤ׵FdmJ1PCUEұ2 ?強׾ϽkӺ¼ 2ȝҀÝӽk=װ DS[ + ͽŶϽūڴź ߼Ϲ źЯ ƧڭٲUݥأ^勠׺ѤضΣ׺ң׵Ϥ׺ѩҚػԖ۶Ϥ׻ѤƏԤβPZ}_덲xt˼ ݼ, _{ձ  ǽ3濿ݥfYծ䠛z oİ*q ܵݼټҸ  蹾ຽ UظUꊢüҵдüҵеüҷÿԆüחеüҵԱԶϩkjNsT\֯r ǶE߅1 ׾Ի oΙ z{ Ѿ?à˽]bŰ੕ѪƊؒuٶ¶ ÷ݽ޵۷  ڻӴ斣 (ϑׯ)ױׯԟԤwtQOz[tN/ҷꮺ9 ̪ cޯܳح ѫY  ;;ҽРĭý ǻ˿θנ պ ۳ l Ҵ \d`_}_d9`]bd^`_^`u\^dc]a__`\^l`dd_`e_^a\a^]_u`dc]bd``a\^l_\ad`]c_`dedd`_c]bd^^d``aac^߉G֪ŠіĦʨT`GBuNήϽ&ѧ˭9>̽= X'ʽ QݿǷ҈ݙֿ/μ,۴ɴŻ ׾ҽڻ%Э!򱑴 دvi#ɯཱུLȳcjh~bfj:g{ohhzljmw}{nfjhzexxgzgilrf|}znpve~gwgkjg}isfh}voh]璀شљڮ͘״җد͗ٺٲǚ׵zد͖شѝ՛.}rpKsh;wA۩-ջԺ p͵ҹgì׹&о/֬%׺ҬԻ蚑ݧ#ҹ漨 ܺյضx{#ź}mǵcjf_fj:d}fgzppkrlfjf^yezgcyail}cudkjeycflh\㫈ѱΡֹئټH`7  o-޵tr쵸î۵eS ˯uu6ѿܳƔ>Ŷ߹̏Ƹò沭4Ǻ$ͺ߳߱ӫɧ·͸ꑤ زخ j cjf}`fj:ginv`sk~ujpfjecq`zfdh}hipkjyšckjgvjtvd\㧈ڼˢ֧ԢܲLV+v ciؙ/ǿR׿¶Jdɼ{Ù׾/תʠӤM ۵֮جɚ㫈ԭٛuG׬ެ÷Ķ 麮\RǾܱ cjgifj:hlzssdqfjih}pezhgdrywgkjfiyf\㩃׸ПٱΞ׷ҝزʆѽТƦϞ׸֠سΝ׸ԏݲգґZH^Fd95ݒ"f㳿leؾġܴ0۴۲ ԯ(ՠ~ޠTbݿΟճ մĴ¾ ھ ֹf̩ Y`a_^\z\`;a`]_]_]`_]\s[]a`_]_^_]_h\`a_^a_^^_^^_\r]a^^\^`^`]_h\_]_]_`\\ab`a`^^\hh^^``]`V㨆һѻһȸնѻ¨лיԻupHcw>}Zqף ~ TGƷٲ*ʡƭeׇۭ欻4ثо袇xݻAz˾վٱݽ`зܥ ıܣ ܷЮmxճ Ƽ ԘV㧈Ѫ˥ܭӧϨ^RZ`{<賉ߺۻŷݟqMZ Ķ  ٭$ϺӬݫ|tƄν˭ ׿ʲͫĒ /洫w^(»ۥκ M= ŵҹ"Լ޿W㧇ÙȟϤŞսPhLDֹyvٹѼ4l@YscrKF › ɓ!ش ĸ'ҥտڷͦeû٭۽ԩ ̾ƒ ӫ ݳ0ݖ$޿ ܼӳξƷԶ⳼߳ ;)˸̶Ӽ  ]簃سіڬΖسӚ͕عǚڭΖ׷֕ٮΕشެ{ڭ׊Iryԧ ]ѷճ?BjYF۾)­֒ǰ۶㯯ؿͼݼ ߙ3  .ݘӾǩʹճ-̼屾U{ )⾭̤ҼҺ㸲̖ 𚡧皤ҕ 곤 s֪Þ ֡!ОֺEcfGw׹T+,3 ݹԪьJֺ ̲̮˦٩Cݮ k˷ѻ島޸赱մ ޴-ɻʥƷݵ¾٨kO η績 ƯӻμԽĒԽ۶؄ ܾ·]Zҥ¢׿ݱ׸ěRO"7^Ͼֽqt3+c~鴫ǻ.اڭg۵ȻϚó?γõԺ\Ⱦ`\߷ݹ͗ ޻ˢӰо׮Լܿˈ!ۺ鴫նżjױʹܪ ԛ핬Ǐקِ׵ ƒʩ̠\豄׹ѣش΢ּ״Φ£ѣش΢ʈҡ״Ρֻͣش؊ˆ_Ihp W1z}ۼ68ж޻ʾKz贠x92޼١ЬºῬ&ߦ*,ܵʶڻIu筭ʞӧճ¼Ѣ AԷڱϽϲ˸ڹŻξ܆̨箓߾|_߫n  \㨅üѵϵŒصէǼѵϸʢҴϴȗֵ֔xoJjYƪtϪhvԷbyež֧3ع԰˜ⴠ˽⨽ ,ޠ{߿ޱڟ7ܽ ׽ΪԹ作J{ߣ%B昻ݭ ĥ ɨ $ܫƺ̪PŴǻՒL 򼾹 㧉ԩ=ҞǥӬbPɒ\ͳ1 ǽԳI< мȶʸƮ5̸lƀLqwr㼣ʪ㮜ض϶ļԱڻݾ+w ̭ٸݻݶ%ڱŷ̴ ܱܼ˸гٞ qEښkݽ S㨆׬εʑҙԞWhRUb۳ pߩQ~˺׻J_Ĵǵ0·r׶rSn>bVk]rla 񠮱Jಸz׸Г~0$Ʃ7Խ~ж³ܭРq`鴾д ҁ]eȻڅ   S{شЗ٭͝җܯКشјٮЙ״җخ͘Ӫїٮ҂Mwx%}eؼȫƳtsjҳļ Գ#8_R9z`򹻾 ΏPv⎯!Ӻηܾúղ ظ޻ 鼽 ĸ/ڷԙ ޷TѷԿ[[_Ժ׻ЛĮӥhQPǰm ǜ YҹF ^!ʮݼԑ굮 ݵٱ⫾Ȼȿk;0޸Hݿۼl Ѻĵۇɼժ +ǻÏ߸鸷ҶŻ Ƽiھ٥Y`״{ޮܡڥїخΜǑ~ݯ͘׵җخ͗״ҝAdKw9߼ ܴFAܼ(ޭ͹~T ̩쓻ڵeŸ_,\g̳M`ڧݱ}⿽ԼѼؿ d١ľ̿Jձ ܸ*٬פXtҤ̡Ѡмԭ[nJ¶g ƌ{s܄ ĸʳ4شڼ޷Zj? Ž ϼ?unJv+ŧԵʩ~Ӽکκ+Ȼ ߱aص  «+yNjˎշ㥬yՑ͛⼸Xrªڸ״ԵФոW|UױƼbb uّ2֙ͻϿ¾+\ΪȡfT޸ݸ 龾0v/N\ɶ ظ艱׀ܼҹД-þ㿾ʿ  ͗+ʘѪ{ԣø̉Դ݁ӸړڑΨWm׶ݰٱԦҜڣɣ׷ѝٲΝ׷ҜرΜؽٱثSVhιi۞ ӀTZP/g푝̿ӺŭƫlӴ)⽮`ƶҫvsɯPϟS슼髲8ⲹбԻƛе 羫 ڲƹ ļ8p۩ɡЪ{ҵݱ˻C  ij¿+Ⱦ̵ժԤ۞יžל\p٨ͦҼѽѽҽмد׽ĬZewΆ Z ȵðޕe:tc˻A۟һݶߔ'ةٯݾ»̻ջp5̸Ⱥױ꿶Ѹ ໷վͮʐؼ걽׶u-帻xӱմܺýzyLо\߰qѦĨݩʟܿڥUlԻ  ڶ)ѾrѩѷҕP 6>ȹ踥ʾ ף ޒ(~ֽƺ Ǹϼ\է:GQU srǘ߮ שҿt0i ǩ&澙ԿƯ 渾:Ʒֲڳɝ˷ WsΥҮȢÜѻNus޾ Ҫ޼4Ӵըb\{]޵⿚ $uѫݲWûļԹuڳ Ԡиȳ?x:CKz˺ ˰Y}5Q βݾ ´3Dմ׻ջܷؽſ JW฿}v״դڲԈ̟ܳحΖشїڮ͖״ҕܳ۴їڰxHp\ ޾4̻谐T͵ȍȹN .sM T ܊ Fٲ񟼷Ϻ̃ ܼ˿ #@Ҿ2O3Dgܴ Ȱ [oӼݴ٭׽Ϸ;ָ ɧɵ ս˾ þC    ǑkΥԧصџĦ حHd˝p Xq?»B{_΀cP p- 2i߶ 姸ތʱż ֞ۯǧ,ex+*_:?iޮ̪ l~˶ ҿܱݨ ܷ᳹퇡 ƅ  ֕ޕ »ĆӒʼn͙zަ 蘶\߬ٞKΥ֪ذڽ¤ؾعH\? okϗۻ̥ _{۬ Ҿƹԇ`ܹ ̳ܵɳ޸շڄޣݪ?Lڂլɘ]<2S췷6ڴ\V̭|ػzn欴ܵñE ֺӺϯ崽ɻcGխ$Ϲ [  ꊞ ƏǾ}Ϡ χ\ݦ׹ڥٯтټ՟شΠ׹ѡشϡܼwڸΠ׸ѢˤܸF_ 龍^ih _Xt͐ Rҹѿտ ؄&q.zڲuA1E|⏯ ԭ0ɥc^Үz޻Ԭ߾Ϋ࠿ŦҴo ۡɨлޭ*ɵ  ϶A  ƚս 옻ϔħ̰Ιשɕ׷ ðТΨU{Ľک׼ҐظҶжĽѷոųͻжĽѼݢMPL x KFF<ɹɹ M圌̭̾͝Ȟ֦¥ϵIY뛰[T8%۶Tv 5½ױ<­` ʜ , 迳+ַĤϠmD$ SȠqzrns$ƲN߳Ƶɳѯ߷ ƻ륪ԲD ޫMUسїɦߧ|Ʃp٭yڳіڭΖ׳Ҕ٭͕ط֖ڭEhm֋ ֶȾ̺ +B|j%۶rٺpμаۯ߱ Ѳ㷼*ߵ¶ö†PL:&:ºлƱְzع޸ ʿǼ˲ ̭ ŽӼޯ ſછ҃ܫM䦊׫ΠҤٮիحְEfاBֻƭ̲Ӿ ܴT=ɳ*K|o¼ۼķx ͼ闺ָռİ̫(ۏ½ݶϻý۳QFm߸Ŵ}DϥӶԶ޿ d޴ 活ɵÔӹɫλg Ϫ 寧՞ƥب֬͢ݗ٩M䦌׼ػŦףװէ׮Kl6'Ÿºͯ҈4ݼR qž㺇Y֦ ܲøطڰ(¿ǾȵjĐwĈC8Zv6TNѠնշ n ÿϟԵ?ٽֶ߯ӱӘyýϯO˲ ȈݸϘ ΰ۩ϏγݿʹܪMb׹ѡӇϤƙҤçӂ۹ѡصΡ׹ҠشΡظѡصBuzdBnߵտ7 Kڽüִ·B޸ô i ˿ܹ۷sѴ꾽 zNJGx̶`̚~ӻ݁Um`̻ͱ ѷԾſ੽'ٷرȾ׵ջϽʻg rѧ̑ ؚÏ覲豵xեɿ㣌ݪMkľѸדлȥҷֳӧľҸѷžҷзֿѸÞCtH HڳհBߧɷDܵ ۸ɬ ҩ޼߽ ϻ՗V;Cfⴝɼ߿Ѹݭ»Հ{ ܾӬ֯ 贴԰ݼǾ ˾wμ ߹۾ҵ߱Nٺֲץƭ΢נ²ӜIs ´ƼcFG|ֿ: տ طµȵ ̬k;/A{ǰ"o6'),&S~Ȼ͞ѹٖ֭ ~M  ח yٿ"±¼VɩSOtسսơ٧ǨװĞItԵ μ٦ >џն ̿įiΊJܪ e ۥ ׶˼ƼFӵH/;bں6:s˾hS:Ï룴 ײC1f ֶ޽  ˼x$ĵ΢̾abRXشњڧΙԅ٬͝њٯΙ׶ҘٯΘۗњٰJpV붺ސŰ .4i ߾ijǸ \Ų޷߮յٻ뻲ǿŽ׽ ˾ܿc;=\ѽ#v$y۪Q*񨯶伩Ѻĺ˨᷼ӛ !ȱ.Ǥѹ㰉ིQ⼁Ψըšףçӥ͖K_5вpr噆gdgWѤ4·x~ۺ z½˿/Ե˾󹿲jۻl0 ǘlA5TuΠ¬֩ @+D ӽzض̬tֹֻ主 Ȼ̈սY.  ڷ  ߯Qtְ֩٢ڹѡȥώJ^ܾ gaWl|¾쨀՜UʵCصٳCյ شڬԲʴйG߶۸۸|@y/ ŵ ըsKAV޷( 㬸έ ݗ}  Ÿž讻˱"ֽb3 ۦ Иژ҉˕ «QgضќٴМڡ޻~شҜԯќٱΜ׷қرΛМٴK^ٿ_u|ђŀݽA跮 a]  Ż$ƻŲݴ ⴷF ڣfF=g=\߹ͷȷ ڸO{ɸ徿 ܹʷʪ!߼r-Ω͹~ ׅ ߖװӽ⵹Ϡurݵ 韛ޒಷQmҾ˦ԾدʖѾկҾѾҾо֫ѾˮL_nּ wgѽ$2 ^L] ܽسav ״*߾ϧԲ ޽޷ w%c21];Çݟܹ҃ݾ`ζ 巻4缽ƹɭľ ξί˶  ҖĤ ɭϫիԬܹӤޕ ۺުQqڶײҩץ̞֮ڸIZ`ѕ۰ּaZԚ.ֹԤ,H^ WQȽήU ڼݽǬſͼ̜ԺP鱾 ኯ ̵ϱO0'p|鮑԰دҡ ͻյ߶`թԻ ʷ/볻ߧĻز㦺߈ʳͻ糶 ڥӿʪXڧoѭتԟѫֺβϪ@O_kٲκ:>e8үմ\n ˿ Զöҩ׶ֿ{ ݬ:BČƲɲ⿛¥޷ժѷʸٵ ߴ ݴ?}ۮ׽gв῵pճ ѽ  \ڦhسЗڱЖڎ٭ŏИڮ͗شҖٮϔӶїۯ{HRƽﵽਅ}8V<+c ӵ: ݻ ɵ ٽڻĽþ Ҽ4(ՔBM Ƿǹڷ¡ ֻ٘г=׹͹鱻Ŭ̾Ȳ͓<!ڥŭ̵  ֠⺀m ֥զ˧ֻ֨֨ɮIHRʍbTٻѧЙ1衆ի#ގV9ȸ M ѿгиθK ൺŬƹ%ҦĿ¿ʱ׷҇ QM ?椡o񚺳汪'$õ˼حԿֶ 踶ޣϻ ȹֻ.̼nɿŸҚѺ}  ZẸօ[تΦű՟٥ԩ8WQ -qﱽ𥌊쩄4__Kt۹=̻]ѵܰƽп[ξ "ܿƽଯ۷ؗ0GŴ2۽  ճ;.lÜۿ ܿǿǯ۽Ԭ ߙǤ ̥՜ಧꙸӜׁ ؅걟TЫsظѠٱϟȏܹ|׸ӥѠٳΟ׸Ҟط׸ѠܥsW_Rwr}ղ௻һ߿)ңXŴHJ܋꽶ο ߹ œ陹#ٞĿξؾ 彽̾·ϴX;e< gؾµ춶ݲ0׻t¨ Ϗ ɮ ꤖð{̟ ͉Rqſѹ׶и׳٦ךǾҹиſԼشָžѹ֝a~UIpΩIډ H~ZȻӰŵۺ䳸ů M鳱я ܂#޺ʧӾ½*皾ѧ vZɬϱwH˿!⾾Ǹϼگ S ܫŮ۱ʾ)䶲ݢ&ɶ˾ ։ ǧȠĞԖڛ⛼ӧ ҦprּԠ̠ײۯųڼKI¬쳼տ u柣~akw˪꿹ϩòܶ¼ӻ߷輶 ٝ_aе簪þ߰ɽ ٫#ɾp {7~ތ۪ϼ!гL0 `$ϝ޵ٛɩ(ƾŲ鴱$ݬovڿ   {r<ƾo᣿éμəϻ͵hoXRýѯ|yΕɷhVݰ}婤ڸ¾ý±{d[X{ ӲîбhՑø벿 7Dؿ @zjz⹪ؠʡ@dW ٤I㲾̰ ޱ Ӳ¸ܺ ȸݸ޲쿯  U !y~[LfiɷəΨӡķߧ缸ۏݡ޳ьǠgjIٳG θ zuF۾(C| ¬ڸ´ùs޾stb`` ȹܸҒ۵ýٺ޴ Ǽ#Tv}ծȹڰѮϽʺ׼WHž޶ rܿߢҋCέ˵ ߬Mx¶߿"آɴp ޫ   *xxvb`^bE3==9 )1#22KY,Uo~yw{xƥøt‡fCtɊحȹط!n̳TZK}X]kxaqY$q ŽǺն۟ڼrӜ AwηL þэ} ѵ ºξӾ⼯޺mSƴͤ歷轵Ƹ Q߼Λ悔Ȱװͷ[ǻ պBdI ۽צٷݹ   +rly{ybrgZg_Suqp[um9[]_B+201&  $217U;&mlO|?~H䖭ݩ缩ݴݽʸ΃f`Ԇ Ż崻غ |2sɿ Ѿ Ӷ뿸κ*] FD㐵Ѱζ ܴ磍n ؔ*N ķϺܳ XҸ 緿þ  ѧ ؤ֙ԝȊáפٌϢ XԔXKopRsbdsuhxbw˾ǖľ~xy}ZNROQL66:?9Lѝ佽ƾ̵ֱ@Ի jc ªp 𭹷 ̷˓ƽuɿ{߿ٷϭ ÿ ϿγڶϤ㶾,I-{ֈRJԵڸÿشӾw۳㿾 ˸Ζ꺸 Sޭģչܶ ˦׶ߍҼÆ׈ Ɔ׳ԣɴĢiKǫ ᩢY_|˾䦓 һAPS͋ п󸖸~mܾt?̣֗ܽ ر̄}I+61>K; {ɹ'嵼Ѻõƿ¤̱JЧּ ȣbqd ժƕZp]boȕ ׍ز ʜŚ᛭Ǒذ ˆƔ轔ַ"إ۳ԟҭkʔö®Yc뷸wӬɍx qwҽbcjgl1׭ѾFШݺ ϳԹʽ˼۴߾ ͼۅdCʻ޵˵&ɶżȺ;ڪXM7׹¯ֱ ϮûŴĸխŮںV\fhx  ҝ!ǟàٮٟȥ֡\bү鷔rܺ ׄ)ۿ<u@v-ݹȹ׷ŧk\_੹VƸм Ͻ ЮȲ þгƾ-rjqQOKب׫ٷY6vx佲YKDῲά ̮δܼчϖh|֤ҞŞױܒ7پἶRzdĒq#8 _`O"ϹҽľҵѽAD ڬ±¿1֯íљȸ޹޺ҵ ڵ´VŻƾߒtR⽗ıϻ׵ưՔmѺʵVƯ 8ƸدսǸfS׻حӟ̝`˼ ިMyVĶ ԗ~Αo"ȥGɔc緸u /ι񯩱ٿߺ½%ѻܻa ݻ[Uù۽қvϾվƿNףȱ!¯댳tM̷ҥҟşزק٥ Ʃ ƭEq۸Y̊ '濷H{#~_^x|t'ge|ϵ~Tz͹į*ฦ裮庽۱˿&~qϺԶڶֺ-ӡЦFJѵشӾŸ°滰ɿƒ ڿtjߺϾ̾`> ƫ ӠѺë ÷æѫܶҡݣϣƞخӟʝt ˨ ڤڵB_V ɸ&_ƽȽa';Nɝ~X\[%ĶԵ·0¸E߰+ۣdDI\^YIFtĿ Ѽ֡ԟCYý Բ ڷмоߢx׼ ߧֶ㪽ٶSJ ۶ݴ̨ ⧢՟Ղ߷ħğص֢ԟ\ӳꭦ<`qu&p0[߅nU÷·u3˸ʹԿ<Ȳûƾ@co$W´ ¾ ݟ΢_rź㩹҄ ն ÿ܎+ݵ ڦȻᴮȲĹƲ áюց ̈́ݦԐʞ狴Ȕђŏ畮ҟ՘ۜw妉Оٶײڣw㾵߰FSļb}Y9nSިt_fGXޓUug_ ܹmݳ ۾fDqڶľ-ȺͼлA4޾˚e! ݷxý ۤRoºձܺϦ־ȸ ٺ άwz ٰøʫճ U  ̼ ־ջ(ٮװМ̝oϽ߯vMQAݺq|,Uϲ- Йͼʶۺ޵广ѶyMCJp׺ż-㼾ƿԵق6z< ٳ ̽ «Kh!Ѵ̕٬ldͷ 󾽼虑Ҷݼ ؿ-ųް[$ȞϞٯצӬZϸժeXKޛqyq;(쾻ٱdlxjǾƺż ˶ڼޱ޾ٛM 긼Ȳǿ%Ѯkg˶ ݶƳ ܜY'ȮٹԻ-JԿԴ̷۴¦.ձҿ¾ϔաׯΝ־ڌ5ڸagIݤ󺷭սqެ]ܵ˳¹~кѿIe Fݹɹ̹޺̛ɶDǴʥӴŷʲҷ ʼɱǨM溧޹ӭ ̷ֿ,ӿϼӿ(׷ʞثѝڵ=ܾ hhHUËWԴ첂˱ʰ ϿΏͳ1 ׎'^θ̜ ٷɸ߸ôΜ7Ѯìϴ ƽٺƾ͵ ¾㾺 ѿ+5 ٺٹ۩ў׬ȟ׬h ܾ ޳`wN^ݲkݖ ™`{ ^㴫 ܱϷ7ثWp·ƾ7 ձ$ی,Ƽù Ѿޘð˽ʹµߵ Թ׸裭Ȥ+ʵЗ ܏ њֆzə´뢦񭏨׷Пحƞ۩S ˳ ѱpyRqhAûx~ز3X+BlvNQOdŷ ý¾ڠΫſݨ72˻ɺ$λ׺ľ+/!۫ҩʿٽ *۵»ΞӲ ٤ѽՒ ݂ײ yԔӴəӕôһø̹ܕ%ҠվΝתL БŲ syYļŲۤХnV^n\Uܿq^<5Խb ʧĴ첫ᲷЃץʹԼ1ް0N콮˾ڳӽ¼ݵӽ寢,9ׇݬت̾$̷۶ ؽϻո´ ̯в ݖødzҫءئƬ0ǩת۷Ο߃yԻƿ ע]OձɸمZiܱGg9ʳׯֹ Ԫ ̾;Ľ;ێM<ڲܲXS|)渽ݻʺmٷ/;Dz~ذ>WȲοӯƹ ׸&檢Ƹ҇Ӭ ꭱԾ)ǪףԠֹ־\ãX]˵Mޱ Yb͕@桯𻽿˵Ĭ!J구 ̷ֺʼǫ;iyĠ+0A2:><*2FUWWj}`7Լӿܿڼʄ+:ǯ퓈ɧ֤g7jӻǜɨɻ^tŵͼݸ:U/ɴǥש۸ym˸Tv~@Ҹ H]׉iִ аוθ ȶجԻLfĺұǽv}}pmeP495359JR"Inzsdaȵڰè%!ձȓûIZ )r,븯ԨXǹ˸Œͱ޸κa(ϐ.ı|ϟҡKѲ릝˾@rк WX ̥"Ϯٷחμö Ʊ ܳûнūͽw;տʽȲ zʛx ܲ| rxjUH *,6%8CNgVƷC2ͣ>^ )I@߶["˻ٺ Ԧ ͢ÿ  ר٣Řūߧu1ȼ½ӗDbZy~[ u߲yn ű دӽĩ ÷ɽ㱰ܯ ˙¸묳Rzy̳Ľ.c ˏYu@A<8,*''7DEUMVݻ42׹ɬҷ´wW &ɷvԾ޿   ώ ԣ ƹ畹܏Հȯˎ ˹rƟ}7׶û௲N^pvhظ`߳ ǻǷ{vz ڶ۷ⴽǹ伵ל Yʙusd|m~RURYSK=*-2g=7`vΔɵԾ־Ⱦȟ+ɣTQ}ȹϐ ߾ü$ٰηº̻僧 Ѿ ګҗ Ο »|ܚxҊ+ٵmծ دIRi}  N޳!ݭK䵳L "Ҙļ ҳ ٽ3ÿŵԝ,ԔyݴŻd߭Ȳ̪xJFaO`cRLF>85JUB?ixêþQO.(кɷz㻲˥;ĺƼʹǭͭǽ ʽ ݽբ ьִ ~Ĺо̜䛾ȝÏޮԡҧ.ȫӷy̺֞ ͹NQ >e޹ֹǻOϳtn ſa( ޻ִ߶wf6״鸻yҸ/hҷҲ u½=գCۼߕ\h^T=8<68>6ENI9_qʡᴫÿtM}YoZֱ֧͉A aカߵɾŒ˾ ͺد ݲ 0ҧ®N㕿ĎġĔ^H$ɜޭƷ Hѥ^׿އِǽ ½&岡 GΙͱݴ㾼ʵŘ[;򱼹ۧñ5ϦƧxzȼűķ¹R7-ƫr~wcgtag\A31-8C73.5M~scpK YqiƴJY޼⮺ȫwHԻb٪Ѽ Ͻ չ 2ƻܒsϦƿ߽ȐbIO ޼߻q wFαȶquEcպh#󛒯>ҳdzε刼ne<\lϪ¿h̰|Գںύjֽŝͭ׹źȨƿIWaJG8*bëoзht7୰0æǿZ洉궩^'տ}Ӻy$]Ϗd ɿۦ   .ם+rνĻ۰vqK ή  i~ĸd_ ӳӿ ڿ˲ȾŸ԰ϰ%ܺ춸չŻռы'ѹžѽѷ ̬#ҾÿԳõ Ț ̤|ۨĢڝ…'zԸͩȫWi෼A [t о۲&GѾ־ҶֺɻͼҰ(ӻj&?ﻼ亢ʷ/ڸh̽ÿ͕ȽnPÿ ء˾Pxĺ+㴸½꺾Ӷ̤ عڕϠؑ›ęʩԛղӧʖÊӛ꿘'ܳܜd⴯դ Px~߲É sp  לzڢO˹ μ仰¼ {ٟ Mpܹ*¹ܸ̭ɮgkGټ˧㟒»ə祾ӿ챸;Ӯ ˶h{v )ȺƜ~ǽκμڷƶߦâĥDps d 5aˊ˹sv׼ⷻռ8;պנɿ ŸöдǸ[Z+ڵ̲ȱжQwGݾɻyozsز öδ ޸˴!ϸԾt2MyFŶԾѵдͱϳ쩨FmAU  {J Ϝzߵ¹ Ǿ ¾ٽֻ>Ŀ˳ д&ɁnϽאӈP  ñ޽̨NkлGڹߤ"ŻvdϴР͍ɩ ͎:槪1Ӧн*  ͿaִӶֿȵzJd/+X̿b |#FзĹ ٹ ȲȾ 󿼩Gķ ꩩذҳ?ӹֶ׷/ɼ*㾼ꪮҬйӭ۠0ʮֿÿѤ%s˹MضūLJ”SPR Ġ̥sY~ʲپý̮х̸  ٿյȾĴŎ>Lɸ迼ҹ򁖴<ܿƷ*Ѯ̻qָֺ٩ز̷̺ݰ0θԻ¾ˮݽ1yѝ˳ ׳֫ 嶧ԝѣӖͳۑϘ眩ќ!ڳbнɸћv_JճƫϺּ͠Xpʼ׺d յȻ }Ȯ%ձݯԸ\Kㄞ7;B?Eeꤽꮷɢ6гݴq?dzױS5d]xbo;?áйq ͩ ߼¾խ`4ր ݠ ϷǨļݸ0ϱeѬڽd½︳ѽۣQiKp'h`sxǼãcˬf ͕зи– Ϻõְݰf/ϊ඼%ѳ͹I ޽l ̨hfJq\`]h œ¥õUܵ̾㸽νſm#Erü˱Gʹ.ךŹϬḸݾIݞŰ&ʩň.! ɫ83͹{0ϻյ0ܹڶľ Ԟܱο ͹̱ͷ̰߻Θߢkdɺ׶߹ͺ&ޯԫxoI azμݷ m?mf ҹOw#¦˿ ȵӯtֻXmEl Σ:.߲ݰòݒA ߿巿 ˭*h娯כtF같uLƯ6߼ܬZ\滻 ž˼ ׉pμջͲʺ ɶ ]SοwTwh=Hj ǐܣ v۸X$ӸѺǵ$١ͨeNN¿ķזԺϻ ľ⛸ÿ#ɾʳ2㷽HҪĻڸ÷ֵȽԼHf}<|}޳IIJ~IͶ䱾ҥƭ 崷ǭԱ!߳¿%tѽݻʼӶκ׭˹Pce\Rf.ʫdk ǾgTK{ʸz ʼܼϧа  ̶lAѾƜL\}Dz޽ޱּ+ӿ㶩•2߳Hҭΰ鸱޵Ͽ4 \ĻDԹβ辽ʽ ߸½ʰ %ʼڴӼŬӾ7ش٫ұνHtɱ4!l޼ QizhUkOؽ߱}ҙNp ۽wN_mԺ˿ָRڛʵԷ Ь˲m;cCSj̽)ÿýӿ޹ė5 آ #}̦=+PӥﱸUԸíѭ {S 'õ¯wv ˸ Ϸ켭 䭱ļ!ξϵìXΙͭBʵm%6߱jpڲQղ5|fRKJNz԰Ǻ¼Cܝשӳ$ۿʻ࿡ ̶ֱš 崧ӡ̦ۢ˚ўý*@׼ȲγiFT8'׳Dsڻ Jn ٷ0Ų˩ 黼ɥź   ̳۸ڭź}~Fީ ݿ Iܭϯ0X½'Ҏ߼轮Ěbcݳӡ'硾 ݞÔٜѸ؂י%#Bͯݼо q|Jλ Sd-鰷E~ ۰ j ߹ҦڞE ؗǰȧ ӳ ퟽xľӸ乺‘◰Jشгһ׼۷Զ׿⾷ȸӴ?H|qѧuxeUݢoߊSoҹ࣪ုڹ'qҫƵͪ Ε ̬ݓϨ٠Ɨ՜ϐ鬐%k殩Ҭղ޾ʾ U`+ti-ȶݺmRx߹ qN ݸݽж˻Ъ Ŵĸ۱ ٴҸ˳wbķ ףX뺴ƾƸ ȿǭώDW)ӗ˸zsaYɺȃÊᤲ?۾¿ݸڵʵ  ߹ Ͽڶ־Ȣש ηIn.ΐ򼾳QG ߟ ׷а讦+īŔl ˺b׿եԯ~Ѳ2׽Һүg퉰  < ϫL6Tرѽ̼M&ϮѽÖ"䤳ܸ~ԣ.ƾ ߨų ۳48ΫֽභżL["%]QۿɴH޼NV ߺ ٽո쬞j|մֻӰҳ ѵ˲κ5ʿʼ߿ w`nŽnH6쉵üزۻﲡҶf'йڮoé#ϯ۾ߥ8ѱ{Uޡ́'䜝ź(ٷľXI3$ֲ௾P ƺ av^t žw Шý ެȃ۾׮ տʝܿ .ѵ׳ ̹7ٴ(5ɴ쵪мνV-yľżMδ٭A ) ʦ^ħpdI  I%«xw ~ ˸֒ױf ¼н¶TZe&ӵ t~ۺ޴ $ٷqtɵ-ĻӶ۵8k# γμi벾C主ړpܷ'Ƿ ȧ ՠ ˼ޜ֡׸ع׭ʦֻɦ͠LJӸP;$*vXරлƆq] u˹ ɾ޿*¸߂Ƚ˔INģ GƾةK걞Tߪܳ տ巿dK׼$6hʳ k׷bmĸ\CO[IG%ʾЌkѻ ɿ گƿҶޭλ߷Ժٿֱߘ'?Mm 8ýǬỼĠËNٻq۷纻օ  Xȼeſ߮OYx+о渻e~#ٹr߷6ME g*HΤ&ֱⲀ嫿 ۹س'ǽǽ֩ʫ |~粇uiۭ ͸ȿoLkOrx0سƼØ׺ٰGtzcw.߫ ߞ])JV}ݽ`H4x0mѥqIóߥܚغݨد׺ 粴 Ҷ)г޼ݷԮSE Ǎḗ ʳεʼý̽ ܹ%ߟʦerEѴ0Ǽ੺ιꥰ  ̶ܮI\c#ݼƿƺĿhɿôz; 8(nWشܭEdŽĹ ⱶ7״ԻѮ̽Μյɸ2MT ߸Q Ժܶ ➹ĵοОQp%կǾ0ĭֶѽ򣺺ݘ բ ͓⤝휼ס}}ȴ𰚵 ˞ _Iża)ɪ üžͺۻ¶kLƬI)Wിݾ൫ٷٸִ]WR޽H^  ɩ"Ըĸ֥и״ضf罹!ϳխ غٷή㝻 ŻǨ˧=ܠ㍓ئɬͼ y Ɨ|ښuպĝԋ џ݊ڷ̫q{>̰ηw)pоܼҳjϰf8RKfW ٷZۺ˷ں[LZöɱǷιৡɹۼѱ٬wί·˼ мȼȸ; ׹ɽ׵׫˚ ύиɪ ۭاԠՙ͖͢–ڬ ﶫôNVɸ(ܫίѱ빽־ rmUޅ͜\q$ݼ- 6繬Ԗֽ׿ Ծī Я rϵ ҿڲ龾Х6ٞѿԦ  ܡΫپ޹紽 žCm'_%!Cв봸м˿˿)>Yзٮˣ̭ǸϬ¾ סⶹͳZеĿ麵!ѬֽӵЪp࿼Ը ̹ʳлзУ߾/_0ᚚ̘˻ j㷼ѲˮՐVTږ& ξÑӏ«^òɾw ״װܪߺԷɽ!չ㲠ǼƹɓQĴίѼҺظ(ʼкХԝޯ*Ѽ0Ѭ漴߾ί   ֡ȾȸoG4r㿺&*[ RaƫUmuθא!ܳ[ɼƸ,̷ᶶݹԾ#үĀҲ̺ӱβ*ݷ¾Ǥ׵޿ԡע5ʯ*߱߱   #ɹϿZO D ն㸼οٴùpǫ[Jڱ ݭ̻۲+˫ݫͦ물ڼ(ƻѭ~Có·qλ*߼Ӿԧ̾ݾƽ ˵:ճ0̷͞ںǞ Ҥ ǥ֔˚Ó $g˭ٹHyok%B5cٻ ܹ ^~Ⱦdد 璘ݺ$ԣ2Ůܴ%٪ݷ Jٶη—༹ѵr׵ŷн׶Ἷ+Ƚʷ¥~oݷ׹ ڟĀD͢ݮ#ȼ佶û~Ṻժ ܙ Żuݟƒü٢ԁ xȆ$߸ζݮSZӯCb޶6ڴ]`״!ݽۮĸ κ ɺڬĽ¹̺ݺۉŲ¸+Ŀڣ|'ͽҳǺ~Kұţ件鹳̾ܶǿ|˽ ӈњ |ʽ՗ךْؾ䜫 ņʜś%ֺ˸hFŴC6aþx[sгvZTƶendӐ(ʴ Ȯޮ̸ѼѸ˫ܺ_J,Ѿėܲ ڬU_ͰѷյȶǺι  &˻ڵ_JӺ̶6,!]ϵӸҿzaN±ӊ ҵ͹ב ι轺¶޳ڭٵ«ɵڭѼܸܱ벫첳óз FuQ-ɾٴ׸ǣżưAe ⼸Ͳҩ&ٷjƳλFg ԺE\2:בҴұӸȶǾݹݿҾԹɰ߼ ֻȾ˾٧yǽܲ˺ؽש~ ﻨӴj ȹARչѽԦݫ֭ݳ?v  ԹԵ  (ɹ˿J]2ӳNoҿd׷ռʵ޹ܶ鴸ζ;&Źŕ䈨+ؘͮʾݷܺn껺s2ѽᴹ᭪d_Lݻ̷ ִӵ込&Լ੥> _vԡϷ]nÿ  )ֺܲgHް2T⸼ƺĺ~ȸ۽Խ,ءΣ͝ʹ߼޸ιĩ ⴾ"֯۱{QG%Ƴ(ܵؾľиϾɼʶʮ؞Ӝ8 2y绰Ӱ݀eѴܬ݌Ȉdž~ɇxzŇи~΀σz/ݼܻҔѺ߻MV ^E2dXwֹȸ ~bmɰş߿ாɶǹȿĽ޴ڬɻ!ٲȸ׽%߱ŵСѾ(ݱij.´۹ѳݹĠܹ-ζܽ֯轴ưeƲÿ´Ɨiw{hpރrG偭Wsӂpb~qLuv\w"׼ִڻ@ ٳ»Nuc̳1PӲzȳ/Πϴ谶tH;߹}Q>/ĸȼ֤9ʪⰸ뾯ߦ鳽Ưһäԟƽ ̸ۯݼ_$ܴTڵշĺ¾ ɻ޿ɳɺʰ,Ƭ混 ȹgnj]wh|yukπ_tbo~m|sovjp"ܻ<ٸ&YQȿp52izӑ rﹹr|;\ܶAMbQuļEp×Ͼɻƺײ]֯ǜԯڴ۽Ѹ &޼ûƻڮӷѹ  ߼дȒ 3ǽiлگ"ȵώ׿ۿ}6zz3۳s| ε»aE=๸úUѻ͞جۺռƽ ʹܮΩ׾Զ#ײ &ƺŶ®ϲ߲Ч߹ںϽ տɰռ뻽۱ؠҍ9 ޸v֚"|XH@ L?ƺYD8زϳƴĶ ƺ섐N ꮿػEϾߛǸطҾݼҷ ٩ ̰ˮʞ~(ҦЮ'|ϫ۲ï ߹ ϼ҄ ϿӼᾇsB ݨ೰ᶿք#£߷Dqg:aɲا:ѺvŽ߬H§,Ø䓌θվʵ ѫ ª %bڥɹŽ߰ĵ Gȼż忷ǽĻ̻ɽ NJJ Ʃȴֻڷ#Ȥ)VL F4Ѵ:\[d:T[ýԯɹMԴЭѿͻ6ݼ̺ʾ俼ÿ޿۴Z߼⦘Ҷ ǽᄐü %¬Ƽȼɽ̹½̹ Suԫس#ֺǷqJۂgY߯|[]ew˾Bs a ⻍Ш ַj_Իʻջۻ ݹ wľ ۸ο𸯳ɸ %ɷ⽲Zȶ mս 浵ܺRƿ #į޹ٽGgM92.w鵮҉޿]^Zއm ޶оߴ۾%۔뺸ϽϷµ䷴ز ˰ ùɺݫ ־ǽ ϭ ڶйϾ׾žʻ뺷L۾ 䴈ʑ.ڔat{ J^d#9_9̦*$򳴼.밳ͼϢ3м ž2Ӡֆȹ̬ۼӴǯo˺ ϵǮ޹̷ 2ѭ #fnm糾$`׹fL#,Ul侷7ꮭֽ~.~֎Ŷ ޳űdzƻ-ùϩԲݷ ۰ӻ ʽ ʹҷҾǼс=ѷᖄ#ݬ\4%׻ U7^"'bBҷ5ݏ߲$Ӄށv۪:䷺EོЫוΊܲ׽߳龷徹 Ͻ㸭ζ ܙߴ ծ{޶Ӵᡩ¿❎w~b5 ͳᦶ J|_\mQbٴl̰ڕQuݮע\ޤNo ̸Ƚ Ю!ᇑtڹ g ºo޴Ê׿ ϼ ̬ȯ eҵzثýɽˎߊ֮+ݸrŰ%үŵܷfKg;z䤷]VuDyֵߴZӿܮD ȼжѹųɮgԶ ׊ҧَK71 ެݴǼ kǿ ڗ٠ѽӿݭD¤ڨδ'ǵ&ŷpH}e3\ Ϲٮobj |vw߇ݲ ɰל)7g~Ż 襊̰x㨞 Ē춵 ǩJiڳ ˶ݼ ޽IJѹ׹[鯾ֳnV`L D 3뜺HԝԿʺiż5ސȿνhZlv튣Ȼй_.t벼޷ͺ̨ʲçԷԸҮλ ϕضŽ •٠ڭ֙Sַ їؽCgi^^SL+2P^Be]xm`Cֵns,C譬´` Ѹ֦Ɛ"׶嶖ŻmC Ԝf߫ζ1쿲mκ}h@٪լ߽&ܿլ׷Ԣϵڹş /ސYø Ȥ.ÿٺֹ`^RoPgI<ƳJ4.˹䰴Ჵвþ㯻H ~Пӽ ˫ҭ ɾ"ſ8óͿлפը Јŵ.d? ;#ͱvsټȳ ڱس*fq¨·ճҾlLYAՀJ5MmԼ v֎nKUסp} ģ=ַź뺵J ߀hj֪x򸰫Mȶ yﵥЧyٻdz̻꺴ݨӰE軷sxOH[ ȶ{/ӭ຺Ÿ޻k꽺 *ʶ޻ӿ־fJ~$qK_ܻh¥\޷лλзҽrPֽ߬̾ģxuuٸĉqҨsOռݱ%п+®y霊nt ӯ 濻׫X* ٴܻ ϝΥ0p´Ӽ˷G )߶Kô︿˿حn~hk]Mgpv ӹi31결ަ޿޹rI׳wѲt޻dǺGѰު?ͼϱڳAlf̵ŸǠ٨㷱涸ڼqڳز 3ȷuχ7 ־ʷͱ޷Ͻ:̱Ғxxμu|G>2ۿ<϶Ί˷ɼ̸ a^ͽt̬н Ѻ:ҪɒƔث>ܳ߱𠛝ׯKZەnɲy+|ǜд몉 æ)շҰѵθ˦ڿⴿ4 ͞ƅ{ƲW JhQEڱݵ<۹ȵeӹ۾hǿ:Ѽّz՘뾜oc`ζhpֺⳫ]нЛ߳зL'ŷƿݵػ۽'ijɼӖɫ1Եðܿ ^ἴyݼAV!b\ʈŽ<۬#v묫P~½ɱɝ׮PcU~ٝz4׿ګӬʹ̲Ʈ̕ǻԹܻ-ҹᵿئ9ը%ֲɭҫZgBHg ɻ=ùرtij߿ ӟ5ξܮժ˱8ըռӺVޫҬ4ʴҤ حǻČݹ縿 ۽ ˺Ǿ#޽Ċ= ߸0ξܻ轻ս ںظѷTQ ;V!纺=֭3f }ϢfQx檶ǯ̶ē͹ǿ9Ъ½ﯯNbPSۢ鵫Ҿ΢,Vxpҥ "Ӱ׼ė  źùӣŵճKȶԓչ O=K][phû ̳=3$د޼ jޓ=ᵜߟ  Ǖ̉Hڬ̙@5}*/⥼ͫdRunWGRThܴδӵ$rֵϲCPܣϷ0 ӧҿg븷 ȷſmW ոĺ㼮 p Ͼ˲ |xCT.!ӹ=2[ú̐ R`Lb ⼦ ѱ ַj ꙡܿwsްƞg|`Iӫ稜ĔL)+3ZfԼz\_R"Ϸ=z$驶ǵٿ)ӸƲ|U в ľѰi  꾴 Yej&Ǹ;wUں综 qإC͹ Ϛŝ~!⼔ۺ)ůַ8{mMo|WB2Lkj+櫽Wgز̴|ٮ۷ ^ȩ%ͳѲȱܸŷڬа{T ƒ꺸Ƹ Ƕ^`Y.ޯʽ>/u`вūŁԒaB-2AKMVʳ` Զɼö㺯˒˹ղ'ħr'ͱVTKPKZ׵ٻųǪ߮i ӵӾ&ڴԼɾp޸޻߿ µ+w^ ́͸ ^]o3ŠM͸Ů9FiΟߒ yqƹcvxn%LӨ~D-ſĮ t*̰⤽켾Xy庸滛a}BȿװߴƣhRO>Ww_ʧӷա 츖 ı ˺°볦ο&Һ+ŸЦ\ݿܾҵ ޺  ᱴZs@=|fτNʄ<=$Ϫ@!A޹ `.(iͷw(S *ʼn载֪-鷷ѼĐw߁6x̍۴د߽ɦpI?Qjʲ ɤϮۘհ ܁ ȭͶاڸֿ&غۺ*˵B}NᶮȽ ƺŴô \ܿٺ}_Qᙬ>$;۲3 ٩uSν9KǶ۬ϩ!Է贼69y؁˺HK+ʶиʃ򫱪ÂO?;3z ߫幅б׶ނ㷪Ưٴ Ҿ'ڭܹӺˇK ؽҹ y ⧼չϑWʸپ >ETӵ%Ϫ:[õI :l(¹] !ݚ> ֻҿYSrKowĽ鱜kI'FlΟ󒘹t"ؖͮſP1¶ߥֺ йϽEXλ٭žϐ˺׆l@ûö$־ӓE PY`V%ɴ:f5J2۵̲뺡ifclJںþњլ˸ķ+m¶!sXLAHuî"ȲԥıHgۯwٵ۸ع 鵻Aݻնճ쩞滋ŹղΨ(ɶԺإ)޺ײǹŸ M8uoy%:T1IJἩT1׆t](Ѵ ߽ڼ̗Ϧݻ3Ộ啵Ӧ ɧvUE:AR ,׷Ǽ̬xޞӽ߯Բ ±AҵÏB,;ijĵ< ݬ ȳҽ*®ͱϸ=odX&ǵ:FH&л㿹4==ɴ0xجҼ̲ ٶ غ ƚ˰dHݿ桵ƳֽŰ\F9@Ma協|€ҕԪڞ'Կ꾤ݾ̿ ?صph}ʺʽ/׺&޶˭*ȼؓɽ_y9(ثִź:޺׼ )MZ˳-}翼Իn ˥Ϭ௯+ژ⯱ѳֱ oS>@Od|ǟݥɦ¾ɲֽϴԄ ;ſ٪qJت ϝپ'˷òغƶ(޸ZFQw+(ιZ뽬:]Xշ۳U)ʽvyʮJVѷ[żڿѷŻƼœȫ Ž:xٜĞǯmWB8@Zu۽ѯ3Ϻý@ͼµٵȰԻ񾿵Т̪W½볼嶥ͽ䴽ڳ߽Ų ڷjkLT^(ۻ:~γ>`繸dgW'˯:sN |޸ ڿ٤ϵ Ķw@尴ߓE˭ ߵ$z[I;=Pnٴ︷تŧ:бё\Ьʮ uXlݾ޹άĔȗ{cĵɵƼͱż0lύ!˯ZMHaW{(˵ji>p)жQ[PĹ ǻ˿ ڰݻǣ߱&Η찳˭fD75=Y} ʶ̥ľ=üeK$nPHdi?Cݵg¸0-Ͻ䜦÷밢h^)آڹԼ̕&ۤnӯѱͽ]vtPAԝ(Ҭ徽DZ>1bȰ,bļhG ٱk{9++K[k ƷՍ Erռ۪ߕ ѧ͵ɨ]C36Ll⫞{ ٸ&ͽѾTv{ʹ`dH!zq}ư ³ː7ù߸Ҝ Ⱥ ۷Ϲ@A}(怜,=۳ɵܹ,뫚Yc~ȧȺpW';CA]ү ˳ҶXȒc6ޒʕ묭˸͹?Ku"b kK87@Tuͪײ4Ѳҽúz⨭ȥ|ϡ{˿ѳyƸ ˣɟzP г ܶ ؿҼ߰޲jJ[+켮󄀯÷=ַ`,[{¾X/8Uþߞk}[902DZo¿ֶ ϶Ψ(,尿ȗijַ䯹ҡ(QR"Ͳ Ͳ~aG=CXkáڪڲƽपۯ鸾tМ뺛}dڨ ͮǴۮEtZ3~={͵ַ䮽Ե Ĵ߼ N[q0Lj=MQh,۽촿Ƴ1X®c)oɲ|eM5..Kn Ƶl(Jc嵩ݧõӾb(蹰ɲOнzeL<;@[f~dg2яӧȭ ȶ ΰiVC:CweP۩=ڶ֣Pڱϐࠈ "ʻƬp_:A>I\޷ƷòìӲaݫtŰں kưMUe0n–<"u/ζײЩ_i-@9 _ܸ\;*!!;Vr˾͝ح׵*ޖ ٱڰ<ԾbBB9W鷷侸ͤʢY--,*7cwŢ+ɱ˦e7,6Oa}ƫ̞Hmţ1lϞH`ɖۜݼҫ3̬÷ݶ^îgH75?R¼ס}Q\ز۳Ǩ̽ڽµƲæHؖė4 ޜzILSSpU(ѥܶ~Qι¯乽˧8ಾ̕O~ܵ}ؾ܃٘hRC3Fhɡ<Y׺HثҪϳź|3ͱة԰؂6˳~dJ48MqؕEeӽ¸޽7}ҵꃑKj ӷĿ)̑ݪĹ Ӎяl`ֵj wɱܽo밷ŵ ZO(ըQűwٛ鿴ҹִ}{Ϻ2ܓHǾܱн˲=0ZI,,Tezԫp}Ѽuý̰۩cۻȾۭȶf尤pۺE]S=THXp˹pH÷˥n;辣>ϻϻ鮸 ָ̼ żν!ӴɲυNjفںѾ5ʼH o ĺ \^(ǵɳ;÷隈Hұһոp\B5.6656<<=ADW~8LBSո ɱ󻹥߼ȡ?ķ 蛬ˍA쯣ȋկsWzY[}|u}XDN2Yɼ%yɿਹʭE~Նϵ ̼ ̺lnUj V`涔KQOۺЯdɸհΏٯƽܺιҬԵZݿ|ֵ곾̻Կ 꺿 þkK ߷B:o>̹KiA|*ٵͽ߭ͼ͕\ټ(ڼLr#ϭԯ ԷLZQ pȽ[8ϲD_͹嘠㾪ſǸՠ׹մѹFӻȸ/Ȼ1tĥ Ʊ²Ɵרk]麾ɨ ޸˿̴ ۣȿϪҽLxxdQ8q HᶜZ#ݸϸ ˶ӸbNY  \mִܶ޿ҫӼϛøն謸 ߸ɿ쁜 ֵҮٹ@ȸʵS  ٶʿ 㬮йߦ俧ⱺl<ޥɶȵȳܾܺuVSkޣޫ[۶ÿ轟ӼSsp ߾^TlŢj̴͖-꯫ʰϴƾߴҶ Չ'F.'ô 𺽲޶Ƿߺؾ K5~< òZǧ.p%פݼ-ȼDDkEj۵Ĺ=ʾɿ ӽq ஶ˻{cLdӠՒ5鷝{ۢtw)̷znZ(zny!&SUѻǷ٬txTfiȷt嬶ҫʼμսİʷ ᳽{ײȭ(ڼmM >罿ɻ ۸ͨm.ƶľѻTRSv' έͿڴ˺ܩdj֛tcT%Ĭû``SPHG}ix·d رPWӲYJ溸µtҼn%ѹͺӲѸΧֳ跻 ׶׻˞ޭ޳a6ҳ>ֈɡս <ֹSų:@rܕrXȩsyܲ}v$ļߴL eĹ ޟڡ ɯڽ+F@ډt֩b=(ڽ}׽ǼΦˠٱìβ̼}la کĶ̡úӹ2lEd>=۰ԙK1(2.tsѼ Ab-׵ܷD~鷞ҿœe޹ǻɼH{^ ׳Cßi ӻɴZ|Xȧ؍V`b͸۵U٩޺ĥF ⻹ﲱηԿ biʿ ·Oƿ 欽q:dxC3B޹@㰹ȵͻ߿ȦϲHł߾ڽϙWӾ-x׵ ޺R4ڸZȴѾbeSԾѶȾuZx ʴlZ쾳̲ϴW}UgiSʴ!ڨs ̺ƿ 忷ÿ λYӔþٽVXڻȬϰկŻ㻕ǫĹÿ ¸ɣߪܾҀοաɿ֝ qq$кԸ乻ȷʹ޻jKUA㷶^չd#Z?7hӳٻúq Ʒ뤳 ᵿ›  ^ǻۭϼ z껻ջ 8hUּDz ԵԼߞrѴϴʅGﬞջ۷ğܰմߨߴ εޟ[ZK{ɍ|vҲ\ş򻽩ǿ5irsѷ ϼ r ٿw ؘڴ%޲uܽ߶˴ ݼȨDܼ  ߷Ҍ ӵ&ѲDZȼ8|ºȹԶѩĽҷׂ6x3{Zڹ\>dξ𲲼ּ>CԜ%xظ^h檑Ԯج׹܂BݷİܷĚǼܯ·oȬ۴ְᒉѻ筹͸Ӭçĺdzܓlj߸ȱƾ̂0y>eZ\̳\r5լõ߰¼˺ĻξɃc ýߩN/®¸㽾ǼʹѼݾʭڜ ῷ̻ ԰ǿ#ļ燸ҧĮͿŹIeɹ׷ڼϼҴ߼׹©hadUUrŻħٻًᕊȡ֟)ǵ>hMʿEӄĽdϻ֮εĺ ;4䶹ϸ޿۹ɣ˹ѱىˤţ3@wӯǷưسݻxB߱ܢԵߣЯݤӮеĸ ϶߼эډckLd˯£_ ffܻʩЬȦn,ݫ̺oLQVԲ}ȵdżlճм 4خǾ޵ʽ̨pԸڹǨ ˱޳ ˺źEƴާĉ޻ԁݯġɽʬ  ๽ߑbҴܽзѧgүa 黰ɬ KqBq Wγdݵ¹ի n޾5Ծخ̵öᶾ £Zɷ йͲަ ݸݩ޳૞+羽٦۩˲øܝں&c]Uv䮝Ȼھذ˱Cܳðͺͯ 㪴Ĺ!_⮯ʾֱe辭ϫ?? dٱl[dYPCX)ƿʺҶ憎ϫԶprϷѵдةϸǽغxϦޝ&iܸ̰ܿѨ񳿘/!KҰê˽Mq衘!ȷZ䳗 e]UhOʸ]β]f*Aͷi۶ƹʴ*Ӻܷ0ŷɨԺܶcq վ ڵI۷صݞԯʗӪŻଟ² ӯη пʩŜ RWɷ¾͞vͺ ۢ%εα֢Ⱥ忿eNyKf~ ּgط궶kΰᶭܴճƽ´˦rjɹߨ0ڍʹݩۣټy ַ ˶úܷ]o cpo¸ ۥݦ Ʃ t柊޾ב׶ ɻו ͨ߶ eدMzJufֲh<[Ԫsݴ͸̴[ʮն㹖Ͻº׷ٺ̏jŵܰ 屲أKķ˵漴B۴ȱ·¨7Iùʽ mͼ̺Ԁl̺ؾ ȶ߷eʶis|ִQý譩ɮżǿؿ,`ɮDZηƨͿ Ƴe՞ϳ  ksӼּ ۶ оݽ߱ΰµٹ캭ݵUOϽٴ ŽսѢ™ǻa 7tF%ٯcףͷܜ(~ɹڳQ%͵ѻݼþƢ,spļѸԴ е࿻ž u#ƻؾ 껺޸Ŷū ӧ᯹Ӹ±cߺ٭=îױѴqʹ· 죤$ 鸺f VKRSƩyǰzߴ{&Ͱԧݾ5ͻĦѭɰwYس޽÷þ X ؿѷ ڪ̺ӿӮ ]|̮<ɾmرղܼܺͻඨ̼λ「{^Ⱦ˽ĵe 6p9~{zܹ֫բh^׼dԣǼֳ>ÿdI[R~ľȼûƫ+ڷը`ᵥѺ޳oöür7f e {ħѱ鮵˸տ ܮȶ𠘻nΗҹw0ظѧֵ˵ޯ|8x馭޿ɭåƽվe65G߿bl߷ˬ޸Iv̈́滼ʱ׳.ޟoܵmˁշ Ϟ[+¥ս̗|yנʥ ץγ,峾׺ĵȾneq0n Zͧʿ ֲ<೸ǰ/,ڵα򽵸Ͼϼ0K ̻ŨlL!𻰷ƽѼƴe\B_R㦮qͻćعt IӿиԸ޸$MZCľӻ êܞ)绽ߋm;ܸTİ ܼիŷ޵E|Զ޿ ໮'ܾ뺶oӷԾɼǺ¹ ߻ǣI֑״Mz­ֵ¹qd𶿶H!ͳƽѼŵe_OdHbH٣kԱwWϴݣFKԺzʽ ʷ+ݼ׭ Ljʴ (ܡ¬ѵѹȢ pΩ ½ v ƙѼ־ ̿Lܽ³"ᵪղ ضܸƿݵܷy#ƽѼŵ{vye?Fa]WEį]˶Kh}Ԫϳa Ǵֿ˶Ʋߤμݸ Ұű½  Ǹݜijǻͻ ۷z;ۮ μ$ƽѼŵqmfTne3μӳЫdk\u ʻ,ݴㇻfyͽƽ#ٹݻĹڵ۽ـpƽܿ Ӿ̫ Ľ ͸ 9 ׶Ž ޭH&氾ء촸 Խ׸Ӯܖṕ'ūøʹtso]haXbfu{`оd+y!ѰӲղu®mWݲ,w`XϟiͪwεܜȞ OɾƼ¿ ۸aN ֞hӾ ٨ΩZ 팮௿У ݵ˭Ƀ뤦җ6zomx~~~}{tsqihkca_U`^YZZRTZRNVQRWTYSlz ¹ؕw˶b̷YPT:޽ׯ ,ᕈӲv׾ʴi։٩۳݅]~轳ܻ0ͺ^eIJȢ԰ҩڹ^ewAV sŹ qDy,ڸ๨۷ǵ$¹ҶɸĢ≅͝1׶ʼnߡѐڶГٜőޢv빻ڢm@D_-ԻӯYü#ضLȨ܆1٪ڜ5ڴݺлL_  ݚ[̺ѷлտ  򺫸ҵ ¿ n˼ ྽oǽ 홬̴    $   ϗО ž ˇ˞ ȝ ɞ   վ๋ܼ欣 wuϭָ ڶĻnīw ᮪ڹ׶ܿ׻ջӹɵǵǾĹȹǾǾȸ޺غùٺߺܺ޺ͺ݁ց~ـ݁ہ܁́~}~}~}~}~~||{~~~}|{}~}~~}~~}ց~}~|~|~|~~|{~~|{}~}}|~}|{|u-U[accca];;`hkji|.}2   %&%.4 )!     !.   $(  $,~~xyvq^_P[6 acfdcUV  ܅fVTI?$ j2]/ #Wё$S> $@o۩w " -(ax (! 󯞣Π ùƜծӼʠ ĸ z vpw w ԆŨ ¾~ ꣨~ ꡬ       ܽν B纐 캌 پξ B渐 췌+ˀX}ji{֍݈٭!ýBݝY`oyibMUm{h_cw{pTVhd`^_m{ye_dfxXMVx{q``r{dYQWizf_ey{nVQod_Z`m~՝Qo|~ƻPX~ji{ӍڈحĽBݚY`oyibLUm{h_cw{pSWhd`_`n{xd_egxWMWx{p__r{bYQWizf_ez{mVRod^Z`mԜPq}~e⮾–x[kieɡ=߫צƢ˴ӱٸKߣchvb`AEdpgl~yXM`PQaitmhmZmL>Q~yhhxe[ID\~ognvZEfRMYjtǿ XZjԖp>՗ݙ~CsӴȠ۬էš ˳ѲֹGߠchva`BFepgl~xWM`OQbiulhmZmK?Rxhhyd[HD]~ngnuYFeRMZjt XYmҔp>җۙ~@tֲġBB33-#svәLgpdmeu}feytdkdp~UgltKb{xjSjhhUtndmpkzfey|[idrQcopWů h⃟?ҝһZRulԨʡOVTN׬їY⡧↬]zOhdI]Q殹|wȯVϿÐz*+17H;B@<=C>AA23-$sxϙGhpdmdv{fezrekdp~ThmrKc|xjRk~hgTumdnolzffz{[idsQdppX i?МҺX UumץɢOUTO֬N痞Ľ͝=KW_UkyrsPԨé̹ѹڷKgtkqer|ll|seqlt|WlswRj}zpXj~ooZsskrph{km{fpkvUhst\߶ Ќ@ԞeANnfd9SW;ںعʯN㗞ŻΛQnee:SW<ؼۿջ%߈Z_T^_X   ͕w TZS^ZXYʤ%ۇZ_U__X  ο ˕w TZS^ZXZȤ(T\ y]hc^bd^ ϵ  Q\ zX_a__]`  $þť֖۰ֻͻηȪdz-ÿ{ռ¦ֲ⯥ڽѨȢξѩ̸ˬɳԯ͸ʦܸ˫ ".ܶظ׶ȾŹձָεþӠġ˦ĞdҨֿرɺ׭ /ݵӿfX0?CD@?DC=BD??DC=CD@>DC2DC<0C@?DC>JG8HJ@=JG8HJ@JH43J@=JG8HJ@GIABIG>HIC@IH>GJBAIG>HIC@IH?3DCBII,@JC@IJ2:KBAIG>HIC@IH>I:7CII>G8D"N@~Tg:؎\֯r ঊIǫDǍ òũ fم] yڵ آ=ΨLBƞɋcEqfz[@ndXĤ`]eشrѭ¤ ʖNj Զ ݛĕ{6a4MHHIJHHJHHIIHHJHHIJHHKHHIIHHKHHIJHJ9=JIIJ;9JH4FK;;KG4HJ>9JH3FJ<;KG3GJ@67;6FK=76D5GJ>9KC(GJ<;KG4HJ>9JH68?>;JI5?;<{Tuکʑo:vhѴDZֽ Ÿx쑊ć߫/}ᒲ򑯮𑽕ݣ Xjjn|'ћžҼ}|_Sʾcu#ԍ񏹸ؗvاѧ ؔƓ߅ƬԼ,{#ЦYmcꝗ:t-LH IHHIHHIIHHIHIHIHHIJG;4AJIHJG4BJIHHIIJ>;JHHIHHIHIHHJ7CJIHHJ?<@*@ڮu0 o˩ӎ-܊tc᝹¹ɇ佷 쫉jWʹƎu,`mR婻JɇӭPݜy3٤Ζ̍˯P}4^UTIvm't'ձ^Ѥ$}q͇΃ͺ{u˧ޏԓ잍Sq 쐕 †} zr뉑ΡuΒq ƞ9/q-MHHIJHHJHHIIHHJHHIIHHJHHIIHIK>32CFCIG@HIDDB7BGICCIG@HIDCIJ3ѴįaZ>_^qzziP׊́쮱 W/ޥ)kBReJ}ʵ4[d٢iR^Pؠ yhv„ʗ` ܄扭Q_} n يى ÎnK ΓॕՅz!q-MHHIIHHJHHIIHHJHHIIHHJHJH88GKHHIE6BIH*JHHIL9>KHHIIHHJHHIIHH7FHIIHIG8K"biLذGΠјB=鳉В핶Ѯѕƒeu 쾲B ՙ ~Ĭ$~k\Y|yI~ r {{Ů 읠{due Ꚍ‘ê_ ef_q'⤭q|ġ D E 丐"ʛ펔ꚧWq-IHHFFHHFHHFFHHEHHGFHHFJB1=JHFHHFHD4@JHFFHHEHHGG5DGHHFFHHFHHFFIC4IHFFHI@8I"qZhNǞDbzƖʽ{˼ɶ ݲwƆļ ɓ%u 뢐'֙q]coagꭋśw ƲUu 躢Qn  @U$˚Ȕcjy庲ϊº҈͈ B)芑  \w+6GJ>9JG4FJ;;JF3GJ=8JI5968=JG4GJ?36D5EJ;;JF3GJ?08I3FJ;:JG4GJ>9L9)GJ<;JJ/5C'}Nzյ ߋߏ)оĹԝӽĽ⟳ᯕĻ ׬)s࿩Y~Dʅ{Znfk񽛬ڟ㆜딖I= ٱ ӽ .^uzȜ琺xxܑ𾉴,քҪ󗘽IU{ ǯ)爸ј}qtЙtƟ 䛞ߗ󢞫ʕ拉\P0KHIJ87IIHJB3EJHI4BIHG3FIHJ?<<,DkG~lӪǽ❭ô޴ߴ̛5 m镠ʐ[&ʷSȏ a۹Ԇwm膩z˟v\xз ݂[~C޸ևːي ًϩˊ߬rʊtkNۇ א ӎ¸ͦŸʮǼܦۥͶĬ†]?,OHHIJHHJHHJJHHKHHIKH6=JHIJHHKJB4HIHJHHJJHHJHJ@8JHKHHIJHHKHHIL::LHHJJHJ=B2<8'М7ߒ҅X՚Ěݾzٷ¸盛ciو|ǻU.tՍiXUjًr엖Za~k̟\ãɅw[T#Ҙ؎^]ٌ[ ȿ̔|S~Ӓٰv ͜Gv閛у řE!ŕnࢼ\Ƽ5Vxs䠭 ͛擸УЕϰ Ȥ͗\x+:GJ?=JG7GIA;6>9FJ>=JF9A5==JG8FJ>=JG7IE,;JH6FJ>=JG7GJ?;5E8FJ>=IJ.A,G~8Wp؋ ɫW1z~َhǔɧqßȽ"MS܉jjx;r2ݗ̖ږM若davlVIAc*%ߖƔsXn]|{ fuR DފŐ󯲔҄đ VItyawXՎ͔i|_iȠcx^  \q,AGIC@JG>GJBAIG>GIC-AK>GJBAII84FD@JG>GJBAIG?E4?BIH>GIBAIG>GIE1>J>GJBAIJ1E'T|>ZY܇ytߛЌeêڝyҺևӭؼηνut3ñ㯆xU׸ؘeT׶䮗ϕw} vfnQFpzW0˅ČJ[ |z㴶٘՘bJ{n%CԆݖߞ]ǘ p 𖭫u шbʃh~ZPڇؒL ꕙ׌[q-NHHIJHHKHHJJHHKHH7AJHKHHIJKA6EIIJHHJHHJJHJH3CJJHHKHHJJHHKHJD6IHJHHJJHH8I#_lJ颓\ɨ1Ƥɪ ֈ觑ú%ۜm\l5ڟS\jyajIh'hrΕoyςfΉ-rx&+Ï^ʓɍٽ$E܎Çͤ {ȃȖދ׈к\RϹgߘ  EښkɘՇSr-GHHFEIHCGIEEHHCJ89FIHCHHFG<5AJHFEIHCGIEEJE/CJFDIHDHHEEIHDIG1AIHCGIEEHH4G"l]fVUbLJؙ` q̋QlԡՈբƼۣ潯0陁"qSu(gq19Z=yng izNͅz插՚y\$Vݰçr1~ȼಽ 4zd֛Цh׍M܉|aʶ 9ܝ]M_eݏ@ ㇝䐊 S|-5GJ>9JG4FK;;JF6;:@9JH3FK<*:G5GJ>9JG4FK;=G1.IJ>9JH3FJ<;JG4H75;JG4EK<;JH+C"vQx'}̟폝e•̥ׯï݆㸊Ŧ䷝ƽ դ#ڂ"Xt3WF5xd鐓 H9o?"t݉Rȓ,Hjѳ'łΠ磝nbن~Hc ݂3 ɦѓ{ {Ӕ 夙毌d  ɛ얰ǟƑԞĆ}0JH IHHIHHIIHJB4IHIJC4>JHIH IHHIHHKB3DKHIHHIHHIIHHK8;KIHHIHHI D:>,Dc¥3얼׉̥zhn֯ݲwW}뵛ʻ ڱVbНrta\|x(-^Эrnj$ݨە7Kw띊xAaȝiU 쪠F Ӓ Ƭ^Е߀z ͒s} 솧{ꍏ܎~t섊 ѭk ߄ˆR  Μ ͥӘ ߀£܈ˡԳϝ /KHHIIHHJHHI4G6EIIJHHL?3EKHHJHHIIHHJIJ?5EJJHHIJHHJHHIIHK>8JIIHHJHHIA>93=|uđ&G֤ߙ!cƾvsOw깶ߤmX_gޔ\֢ǮYPْzU׶ʐׁP)ÀxxgY ﮢW`pHxߋʣx^ܱym^㑖~wzy ؍χR𪌚   ơšŝ مɨ̤ۄÑֿۖ䮴¡߷[yn17HJ>:JH6FJ<:JH8E:*;KF6HI?:JH5FJ==L:&HJ>:JH6FJ=8̶̋-ֶß퓣ɓ&gߜ㻼A縝߈ {ν 姌eh }ޚj\թ_mg訓y}ɌxԎbdޓ {ŹΊ̡ߛ]ꝟωŘÒȑvݏфߥ.Dž래t׍op] ȍ Ss5*CHIDBIHAGIDEC4BHHDCK75IJDCIH@HIEDJE32>EDIHAHHDBIH@GIDE:7BHHDBIHAGIDCJ7?*J~9#ʲcޑݒbŘIg߉ͅےݩ ټ }b˪ſ ȐUգ܃gΒ^~ցA񖻸Ώ=bwvh ƷקnÈ֜ . !Snf)G̪ĈrͅG q~׻ۭvh깋˃   Yz-LHHIJHHJHHJI3EKHHJJ7:LIHIIHJLJFA<747767=DHGHHGGHHEHHFFHHGI?2=KHEHHFFHHEHHGGC5J$Zr6_@ڞ Ƥ?|̭z h㤠qբ ȟWS߹㲫lΝ}k䓈P⭾|ތڸ 7uѩ՚鞸ªemɆ|}ߝܓ _벑$٥ߏ昢nu^Ym~ߥڇ喝0m쑐͕񍹢|ݘҒŚ QjX01GJ<8JG3FK9(IG3HJ.2LH2GL6)67*CJ?:KH4FK;;JG4GJ=8KJ,398<7go%ѼƔދُՐ گ݋T Y\ 8鈗 ȵ(othۗǯǑ͋蠹yjM;̊p$Ⱥͱ_֡ uC|_pfX|\zAw ѻ㓒ӎΣ!먝 piѺݲ ͽ ڪ֢ڷ᜽ գ3EHJ6?JHHJ8;JHHKD65@HJJIHIJJB65CJIHJ7DFsbJsߖc֥š||ִؒlǾ ׬槚`B 凞ݛٗ!˒ΊRܘَlܞ袺c6dcT-֡ܚͺ䢳酿׋Ӧ b뵸|g½fV]w: Ϫ[1ɂ流梡ڕ_ŋ ʹ ӡ¤ ͞ج|Ɩ翭Ρ ~W3GHHIIHHJJB6KHHL@5KJHJ?3@JKHHJHHIIHHJHHIIHHKJF?75@JIHIIHHJHHIIHHJHHIE3K<yR{TFא ܮᗞʡΞ8( ˎgѹ |quQcԠ Vv#ΰ,瞻θyƾ.m콯Վқ朞Ηė絜󍮻Е🕘^B^ՔĬח Ú{5Ĥ֎ّԶĠƏw uȋ x ؕp ΢՞ܝrӲِ ۣٞ\15HJ?=JG8HJ?>LG37616KI7FJ>=JG8HJ@6?HIBAIG?HICAIH?HKB<<3/?IFBIH>GIBAIG>HICAIH>GK<.JL&,>d<砤_܂JB/ˉnˀykq{זǎl˜:ݔ u'֪=ώ Πβsܐݠ||ПᨐB˃듑FP Ze\5GHHIJHHL6AKIHH6FHJE3IKHHIIHHJHHIJIJKA8589JH4FJ<;JG4GJ>8JH65?>;JIL~] ƌ{smϰÉĕءΑϊZFD y 퉸峑xWD߃v庝Z{܉~׭wz5ʓͯvݜ͝Ֆ*ƶ΢룸Śy׍ ण̅Ưc澋 Žo} +ˊx~՟ݪŀɕĜplX:EHHIJIA8JHIK>9LJ<:KHHJHHKH<3:CIKJHHJHHIIHHJHHIIHHJHHIIHHJHHIKG6>JHIIJ<\mM˥Gbۢ 'ّnי|sW}̨+Հ^xk]\э̌}ɏ }lbt"w ֽ ҟEꩪ8s撫ǖvW%ԛ}׭  }zޞ ģ|+լؠԇnʻ٢¿Ϋ~ȯϞΒ[W8FK=ͱhɍՅؘ܍'ÇÁFʘﮔKߔؠ ߮ÆoBWxV˦͝ꧮȴоǬ񛋏 ̯Qшʜt–݄&,ՐlyΞ뽳ۖyx߽N]d;DHHIIG7HIHJA7JL8?KIHJD3>KIHHJHHIIHHJHHIIHHJHHIIHHJHHIIHIL@48HIHJHHIK6A"q\k  č)~rʹҕP Hڐ|̪ n 썩Ԏ陻ړ({Ƶԧ yswi ې۔gnk͍ stk] trw1m ͤ¸Īߑԍxh^N\ ؏Ⱦ4쥍Šۥ~Ӓws㉮ iy Aֶ|Ԧ̆{Xϔ堓tZuӇ~ѪР Mxyۊf]Ƽ Ҭ[}*O ʙdٚ/q1†ȕ왿缩 񯡡ܨ L  WlsN#IJ=9I54FJ=,BH.5L=:E31HJ;:JG3GJ=9JG4FJ;;JF3GJ=8JH3FL>573,IK=9JG4FK<&FC%zLM ܢˑ7ǵ҈~oY뵊קS KM Q֚ G ΢B˅gp٭= ɔzypw ٌ%޾걙ѮƦ;A덻عȊҟќ }~:BƏʉ쳍ׇ ڦ t{ 款Ǘ 쬾י멚{ B   fxb@;JHG6H J6DJ<é@}ړ{_΀cP q~ j׎ 枑ޑ򬘠Θ MR ˏƁtsrwՉ%{cd2uë~>vy jH;̼ѭ 㾵𖐹܈ȅwH yɎڦ|ЅCf ťql Еݜ ۮДД~㜸 \_k+?JHIJF6JHHJ8FJ:BIK?8KJHHIJHHKHHIJHHJHHJJHHJHHIKJHA64AJJHKHHIJHHJK@5KJ;.>= ߑYkϗՖϙ ~ă Ȉ`ݝњ ѡ﯈ѮNjˏ_>ozpEWijэ{6=8hE@rxM֎qt|ȊǠF u׊覵~BFҢ ޅ7  T 㓞 } ʺʶМﶺ 攞ÇXUO&IJ@;K64GK;-JH+DJA+EI6FJ>=JG7GJ?;JG7FJ>=JG7HK@7;3&@K?=JG6GJ?;JG8F5:>L;.E 斌`kiÛ _sؚ͐洦몤؈ ݑRP]Մǃǝ >֕t$ǰפ||͸ ݺq;:nwIJSݎ}֊͙gs汝xr kϰ騢v˵г*鹨 ӊ*  а ƮɜĪիŜѥěާۻ ƭϙZUK/IICAK89HJ@1IH/FJ>1KH?GIBAIG?GICAIG?GIBBJJ?C<2-=F@HIBAIG>GICAIG@6?DBL38:eL xϻ LFI8˯ij+Ioƀp|ל[伅 ݮمD`hؚȒΏ 0Mн}z}nӽϕpf>JHKHHJJHHKHHIJHHJHILJB:86@IJFDIHCGIEEIHCHHEEIJ6?JEEK :;ԝhy 菵Ƀ̉ޙ]kX]] ݩ↔Y~ģ 씔z<׃7P̱ƨ臆ōԍߋxuKB?ᶑt dOكЯߡpNp󹞘 Ƈ͈؋ )զ߰Ēaʮ:7Ӝex \MZ JJ>9JE(FK:+KH)DL35KH4FJ<;JF4GJ=:ME(2919LH5GJ>9JH4FJ<;JF4GJ>9JE)FK<JHJHHIIHHJHHJI:3KA9JHJHHIIHHJHJA4;GLIHIIHHJHHIIHHJHHIIHHJHHIJG4H IKCOxBb¢C߬Zd,(ъ{ũs.留ƋO鼫 k⫔Ȫȸ͆Җ_ƛ 푺߂ kjsq /otsyu½xةwxx{wpw󎁆}u˂"ߑΎҸΓxކΓã ͫP㺹 ͤ ބΫե؟ɶКzӣ׻yОbwMzS$JI>:JH03L>2;J-8L='IH5GJ<:JH5FJ<AZmRj ʞywԋ ʆ߁̼hލrԳ徠򫚰 ˇѣ݁ 㕳1V|d妗ϴ -}uqtcrPȂz.wvÓU:yuvu~|ݔxǙBl ߒЗˍm ŠPPø ǝ ي~اФ–сۣڧ}ֹܻWMf%2JHECIHB3FEB5G?6JF7:JAHIDCIGC@5EDIHAGIDCIHAHHDCIHAGIDCIHAHIEE8@CGIDE>amR׆H Qޕ#Շҟʐ|Jډ힊 ́読 uz䄇ȅ]uqK։еCӡvsw~̧[WqE~Lb{P?%A˹xvS6#ӭwwzw|HDSwrЉ|}y7qǤΠɎ ૅ욏 ꦚ߬⦛λ |cLV7KHIJHHL:=KL9HGD4CIHFFHJ7=JFEHHEHHFFHHEHHFFHHEHHFEHHEHHGB6IEHIFG;hhV۞ٟ_T+%˕駂ߌ ? ƻ&ⷰ;یјc cz ,ĉۏﯠ ֔+ش{iQxÚДvhX2=@I‹Llu%yÜƨ󿴲OİѼ͎ϼuyǶH^MqJJ>8JG4E69:M7)C7?8MB$GJ;:JG'CK=8JG3FK;;JG3GJ=9JH2FJ;:JF2GJ?.9C6KHIJ5CJIHJ:BIH(JHHIIHHJHHIIHHJHHIIHHJHHI7DIJHHII8pYkDz6'ٕ񔺤EäٖUb纝ԒBZs ͅzȲы曓촦(}؟P,ӛ{.5Bjߨ֝ϖ n} g?ƪ͂ѢңK_.޵Ol ~ϔ ÷㡮~ĩ̲]Mp JJ?JG86C38KH8B6==JH+=K?=JF7HJ?;JH7FJ>>6uOvƹd٠?jã͊zү٭ Jݘ黆B 롉j ܁ϛv᭚ȑҋ!ɷއ륣~s |źˣpp+䒻|>gHU렻`𘧬 oȯꘞ뚂ä TՉ꯯ʻŢ٢g蔕 níʚ ӠħƷ㧾培oÝ٥]Mz(JICAIH?GJ0?JG@D6A0JH>J;5DII87JDAIH?GIBBIG?HIDAIH?GICBIH?HJA0JH?GIBC0$zOçHܝ Ӝ ;ՍЬהƐƸ䝧߫䩎;؏Ǝ錐 vüȝ̗̕г«vكU݈yΈ¸ɳ1tɩ̙ťI^» șӬ ۉɤ ֋ΐȿȟ*ӑó꛲ì عۼڬɸdv2JHIJHHKHJ;@JHJJ6C8?JJHF5H/J5GJJHHJHHIIHHKHHIJHHKHHIIHHKHIA:JHJHHJH0%yNƣȱ ֞厓ۏe<qÜ㕳8 Ⱦśۊ 𐫞s s ?{Fǻ̵[g咭fYқS ɟ5|Mʢܐ ɨ XڳǴي-Э󬘟"ڟTǹ~\Sn8,JHEDIHCGJ=9JHCI@6D4HCGK8;JGD7AFDIHCGIEEIHCHHEDIHBHIEEIHCHJ;9JHCGIEC2%yPΟȱ՞q ۦ ޚәǏ橁hGJz e܊[ pqϕ؍͝ ԵɴEFйڐy鱫۴qRˤKM{ ؚ11D ˖җ蜍ՎԚπs ږ,"r~svJ[WRc IJ=9JH5FK9/KG5HI+;:@6FJ:.KF5==@9JH5FJ<;JG5HJ>9JH4FJ<;JG4GL25KH4FJ<93%yP_VϢȱߌwސei˲ e/idb̤ϤӐ_ \yԥˎ́ĕ學ὰh LL=´囬ԙϪmħY^v޴ΈuLcՇԖyw͢vΎ> 鳣\x"ylѥeqeQ1JHIIHHIHHF7IHIHJ7DC4JHHJ5CIJB7JIHHIHHIIHHIHHIIHHJHHIIHHIHH6FIHIHHJE.*AŞDZýܳ5Zѳpr噁QdMHx뿳u’xӃv3cƓ Ԗӭҝzjɯ齊#ѽҖ쑚jœV0֌  Ŵ ᭦k^XAz Ӆ0bnD ߖ.ڮ|z ф⾔Ԑ x枝EܒU x Ծ ֽ ٮTQ2FHIJHHJHHJ7EHJHJ:@K5CIHK>:KG5EK>,EH5GK65L?)HK=5:H5I:9;KH5EK<:JH5FK=50/?ěܞoZnHOђŀݎuɘ Ґْ RE rt ۀȗ .ݪȏ шD} TʾvsK_cs ďO،֙ Ȑ 񌉚y ͑h*vƂ ߟ|~ գ֤ܝݹ׾͟ln ӔekQ1EIDCIHAGIF7?IAHJ;:KD1HIDB7HAJ:>DIHAGIDCIGAHIEBIHAGIDDIHAJ8=DIHAGIF:1.@˺nԝޜ wg縐$Ρ 2K_ޡ ȗˆѵCz iNY^㏢忟t朗ł ؕǍ ( Ƶ۸u{>KLs?ʐȘ팖:} ӎ4ږʶݎŶ 䏱 ꔨ  ŗǼ ԶǶѰפ˴ٳʬۍ ^uQ2EHIIHHJHHK<>JJHJ;AIH7FHIJ6EKJ:AJHHJHHIIHHJHHIIHHJHHIIHHKF3IJHHJHHK=2-?`zƂa[؛i!ē؁n ӍH^ ܔZQ۸◍|W ҆’ȩ^fӠlR}܄ C 譋w'~yxcH~tQlލS ﱔƩ̌`uݑ 󫎗/uڪswA񬈪׸Ӯه qڳvwXYw2EIFEHHEGHH9>JDHJ9=JI4EIFG9BFI?9GHHEGHFFHHEHHGFIHEHHFEHHG<;HEHHEHHG8/-9絢_ez#<~rٝÆ!?\}p`߶Ǣմ\ߵnž ژf󜈿 y~gŽԾ⟩,˩ߥ };H€s^КOgϘdp^qt䊚‹p ̉ Ɋ?Lմ~3䋻Й뽇蠨 貲˶?z  \Yz0DJ=9JG3EJ=,DG3GK/5KH*EK;<;@5HC/:JG4EJ<;JF3GJ>8JH3FJ<:JH32G>9JG3FJ<-&8<̺r8D]]u?d]M?2Aܬ8<<Љc +ٴ ʔyϘ䚤ǥz 윂lgoВ 8 W߻&R\|ݭtqbz6܎ꨍƗˆzѦn e\܍涇=w{݄|s|>r]~ul R{X/FHJ7CIHHI6EIE7IHIJ8CIJ?9JHIHIHIJ7=JHIE98<͊YNyzt]E:wڙik@U~ξ}Fڜ҉#hY<ќ Ӿԣ ٵ̶K ΋}%ޢ|UT䩛݆ɫCQL ]PDLtۜ4qrb`Dsյר]ȂĵوЗ[⇲ ڹ㟠#mfqoNkQ_lqᮠˬƎ\%ʂ{}ߎ}Zܘ؅Řq 퇱jӥΩ .ɸd᭛ǚƚ|ȦǙ̫ ޟí ƨΜ쟭Ϩy҆ ϊT];JG7FK<,IG7HD.=L>(HJ?2:I9<9A;JG7FJ=ƷޅѺ֩JҧJ껰ك䕜ޗӘ\| yՊ߹ԅ𑂖 c_"vjѵI쭟ϟԒ™ ڱ̱eSz>xѽ숰˜F|㌌Ɇ(zXtwҖ PL~̭ Ʀ آᤞٽs}В ڹĈR]4JG?J<8CK68HIC.GJ36IDAIG?GICBIG?GICAII@IJ=.@J?GIDAIG?GI1)S;0ۙfg`ĩۛp鎑JjLF_ ׽գ~ĸR{ηRJǒԈŤ MՖ܈я٠Պ ;#gʶi䤢*ܝ׏tFauuI簃˹ğ!И𶻵Ńۯ Sӛ {ѷ~cϜDŽDj)Xt؊뉄~mf&ر􉹩  ȫĠóЉғ؞Ԥ ѝnmQ=BIIJHHKHI?>JHKI4FKE4KHJ;=L::IHIJHHKHHJJHHKIJKJFCC<47EJHKHHIJHHKK>)MH3:vޥ]h⇕ ɩut5ԗadԋܘRU\^wˍϞב ٝ_ay׷΂à z°#䆸Ť yuzWڦw!؎굇ƲC.c `ق;Ҷ ߾b띓Ȫw(좮գ܉ρ鐩})Ř   |LYZZY_pvhk;HNJILKEKM5ALJFB7HG?:FJD1H?7EHHEDIGBGIDDIGCF=42674=DFFIHDIJGFKIB;7(}3@|JĀǾܨy߈lfVӆƏU汝lZeM=kpN{cEX{ ֺɝ}超RՕ򙟐sᣣ7ٍљ4Ö Ś׻ѭve󢦳܊܍iDjI ěqL߂u}ގ zʞF~v׬ȓ 稐Ȑ鋛ˆ  U ()/4!36!2@=,3C?75D4F77<7H7LOD?OL9JOA?NK05?::ML7IL=??=>FGIC6:;;@A>:87ekYJ,՘uPyK詑j{Ž!qϸ|9ziW_X]kxaq`JHq бbptNs@ődd AwMܲ ԟMd3o ʝ їEؕ̐op砈o]o~yxOۘݧِӟ Qܒav_H Џ{ǝ@YNkӤ ƗsOzɲۖÎpߞȒ   8bQBBCOINR9J^[XN`cc^WbiJ2SPQ5ML%^dgK##"    L?!P+[u/7Dk~|dGޖwdN@TvɈ崦ᶠ񛃆|ےγ< ĪŴnKlψ“ ؜|ɢ䮽)Vԉ֯ ҈ᤣ չ닷Ѝ窽 u΁,UoޞQφ̫ Ԡlj]pܡ蘀oKᖡ  B}ڤT٧ tˇo ^oNt ؎ ˂ գ֞ΧĎΠ׎ѣ X3;CCE.<<.48790212356&*#:5%8<-5@;>,N@ÐS_~kfggfURSV32:885(')+% _p6i82nisb꺟i?Qyu{}~Xؕٿ⾁ɮ޼ֵ?ic ﶡɧ yg ߓЛ q\pɤڹ1^~q ܎ﭠw qhЈmX{Ÿ⼋ԋĒ ꠚҚ)ڍБŇڑϘ|pؐRѵ ϜًĻ͔卐 RƝ}Rnƈҋڿ ѰwצЃ zտKIHHJ=AKI5IKJM5IHI5AJH3CKC3HHJ;9L1sS~ol:uS\ӉǻSPu _`O ҳ跗JK.s z[[n| z_,zMǐ≳YG}؉٤ ڕܝ­ՙ'ʥth{{#~_^x|t'gej볊T-ླ ܳ+v܎Վq`hՒ̬ϝƃž*ޘߘ|лʼnȾ䢢-oX=yˆ¶iω姞ّk~qΖӴ쫛: ՗hZֳ̒ֈٗZ;  ͩÿ ̴ȷʱʨاΧ֬HIJC3>KHJ9;JI3BKE2GIJA5IHL" ڐ[Z Wr-@އWqѪ ժjyZ\rNɝ~X\`/֙ǫ쬪2ꙍѿ f̂݉쯡+xȿķ詣n`dڡ Ѽ ō˰vhy$ uοyxQ*OߍŌɉva Ԫޗˠ̱IB75CJHIB3IK<8JJ4AIHI3DIIC0_X|]x`(@quȰ [ჱlVƳ֠Ơyߍ\N]環ϒ㢞<ĩꌡždנӯ몡 oód>W Ԟw:zp 裂ԏLzyfېw1ʋy rnמω ɡ · ďʗ͝‘ߋἝϔˑҎsب4@IJH3CJG3FJ=7JHJ;9JHK.gҚckK0:Ȟ߉c}ܚY {ȳөxa^:Xs@vkb ʴȒɇ ˗p@Dh{S-BٸǕ֔xqx ǎ*򰟢 okbuɒoΗ Òꂳޯqf= րѥ[o!兪|潈U Կ ҽEIJH(J::KJ;;JG3GHIF3HHJMbi;5:'ɒwه,ɨwȥ Кҷу{у Œˊ 𓙻:L9-Zܒ-ӕnܾ { ͟uwd!UfM׻{M ˪ 횙ڄTzф؊ʕ š{r uΔM؉ IH$ID3HIG3GJ:JH;;7ʧ}Ê\m/A8a]i߉ƥ_-ᙕykڥͬĕ̄r~Eoֿ ߏ%μcyx׋̞ ʌ q}ҷ uVl~luyݙє%L񼚐ͳڍ‹s۔ѵ Uރ̊~Ԡs ym-|݊HI4AJJ:;KF3HHJA5IHK0֊kTy0N~:p쏤┑ǜqѨ_ȜД¢ȋ ʶ ;h ޥUž ۑڐâӈa񫒱 ̼ۘJp]yP_ŭ êɺsKPvϐ~ η뿛-些㥠,IHJ=8JIE3HK8ʫm w@b+~ ϙ헝^}Vj?jȅҡ؜zƻܝ꒕ Ϡ%ĭ㌔b]q𥗕 ȐYO㟂䡩 ᬘ{ްޓ是͊ ⼐ޤp|nٵ ڈ􈴤䡚٬Ƙ ֍ ʜݗ߅袪(2?HKJIHJ=8JHG4GJ9=JID3HK36fUc `KWoJҦ蝎ue.x~֐ߏמ ̽ߚ QBd վrY_ףΈvۍ7xuz|͇㭑$֞敢]ZmM{/綟쪙y×Ӡ´ ի&Ɗԟgp nࢫΜ יxͭ oΠɐɠі!#)3ԆՌwV~;j]TP˄Ѫ Tbųy棌Ϩ甘˜}!ܯJݍz}⭋ӿꔏͺȞѷyUu=3:,P|հVؼ~6雝ǹ妞񜮵[ĕqaaMԁ:douP=uy̶w׍wԍa߻pꝁ♭囹VDxⱤ)МCV/HIKJG?5+%!!"%-675MC6JHJ7AK?$,ׅ΅鶜lW`9oO`.ͮ Ԭ㓍a}8o og ߆܆֜䴐ҝ t֍~تѽ܎\缔na9*IiUx“l"ԸjYłxE!_aNtP 쉡Ŗ-ߑ>tn<JN ʰː锵h"˪ H-IJKJE;& 43>MIH4FILАߍMn'qb[cs}'wMt퉼к˷Ԇ [ ̥kڎ 룾 ›︝ ԄȈݯ|y۹m֫dw C'2cW~ ڄН~{TӹsMwVqu翔unǰrzbpɟѽ zg5@Yl݆֜ߧ’jy tݭpm$ɵ슙 H IE=wQbQ-"*:FD8KM/iي1͉翇tvswqhf_\coM,{CZy~[ϵہ ٟ yȰnjaԿۤ w ʥ ΠȀȣݲܝ9~,/'6R攱ە.kH"쏻䖌qPw`qsqo2ؙ|w{u`JIQU[ό 括zlęmtccʚ ǭǯ酗ǥ 羌 Ü ݟ儳܋ЅwH#EFHI?GK,&""&%/D:amݥ«xfmy|_m9@pvhաڥմŴ 襓m0ʜޛ욝ǥ( q-n۷ٱĶ ٍ߭Č^Ǝؙ׻ԕoT ya+8>~R~F(WYȏuw[[~qXMHFFDFNKFsyhx nu3TN ͗skON;ĂΚvܣı Ō è ٻ帴sѢ׷q퇃ɋH.GSREAJt4-+$" $_8pIdw=Ybޜ _~2~:ӓi} ǯ܉ɮև‚ʇۚ!~JԋTuGЇ ž"]Ԝ  ?Ö4񻷺䣋fD[eXV|tXuȇƼdܚ}ؖyv:xƀžq̬pҔ׺~C155CkXe~sqt~s&?dZCP^;s슨~߇ڠyӾ茜򽠣 Ȳ ˠ ËѮ yְޤɳ̶ƢڞȝަˠԟHFO{T~%өK8JB5(2\{~JElp;z}vmgnzĊ ho7:Ԁ 񞐖ϕ>ȇʙͥ t݆l 뱡({֝򗓗 YԜʔ͌ `6̿܏a꽘ޒ濎vuyƞnr mO{(nw렗򏨤;ӃqtytD6/bmpwmmruZᧈxvuSl{صfsŹBܕ:2s\ԖԄۅ疋͉݊^ۼ밞Ý Nj  2HGNϧ1JKB<9;Ѷ岖qm\QNB>{PAK܍vscG7ޖ$ٍɜܲƥ ײ{ a̡׿ͶɓG鰠&ֆkt拠晟 مѡG۩qɉӛ܈Օmꅗ۔ywykSGCIIPs5w9ywtoHNɩضwp´hR]OWš-ޛ窓s_JOb8ZuvųηuXyxwye>}rzHPPyŨշύ䇨˿Į ء ڂ  5CDAKХ5IL0)%ﶲՔ_f??`ۍqwaG~8؎ۼO ˕͔ q`w퇮H۲晕ƩIJEؘelФų#bUؒ׆>Λ맇IJhTүԖyxy?Qm^I{ytbZ`R߻`i{sq{}Z6}vw|{z[58^\c~u~Ⱦưhƹ{zo{FK]wɼzvP:sQj~1qE먛@]ybd(1VSǿMOӻ9 HdNe ֯  qcXm.Ϩ?I1Yә鐲c~^n~uuzۍn{PSu@YĦ 䍔  鎚nۚ땰Ӽ_ ؒK ߡ ꝜoՎ֙Śpx㈐%ȒԜj⌍Goҁ di{{S.Oiߗ?zGwvI@USJ|sfwUEM798nuEϮ}~RN}xwuoryiؤ_Z`rXĄ1u:a[`Դ͂ xD˾ G昗^;M ɟ 0ŷY:$AєؤېّÏԆd֮xvvۍaLVpHv ғ 剱ҾVKǦɆ٠ ' P3ϛ֡}߻e׍ҹ Ã3`uvl֐GժcAFoV}i\kUĸ}yRWfzj3kyw{{Q-햍usߖՃ΋B: ċm Ƽč!åߠhkL܅ 휵ԓ̚èDzźuŦΗѐҋq^˓xwx܍W@cjOqy {𦗚 l %ȊʫÐƠǡ ̹檉 ߙٕ둵&CKjߨ}謣ᑌ쥠ĜPA6Bs閠{bV|{swvxۃ-2ދ݆wyڵd'ճ쮷෎p ʬɾyض"ߣ҅ٙN_ ܾ ~𬄉ԕ{Ùմ&ϥڵδqޗΛūꩿYtДxwٌ}]:i[gώA [t Έ&̡蠚ͷr 󫡤 㟟ϛ ܹȤXԐ&Zⓕ}ӒmΫ߉/č2fXyVĽӋr}ysƲ 䧡},h:Ҟ爘 a]ݓaɬ ԱӜªʌǮy̞ͬ֠ы޿'oo¼ǠC͚щU |wv̉[|6pQ~ˆÉ sp  ݘȅo>ɚ حܾ瘕Ü"Քu⯛ڀ/؝և ͞zȾȐ*Mь覞Ǐ~rѵv ĔѬ+ϫwn䦞炐ޠ߉݉Ŧ~ȡam ف0頻tiwˠD )⠒o{{ōx}y͌yXj0|Mt ץתd -FJ{PӌӺ)ӣ֥轒 ׼㇫ ݺꐸܠׅȴًyθ_ĉ𡩄sقӇGʙ},|Ŕq"ʧގ"ʐ􌮈T1wƍطo Mz<Ν͵ݍoqupbWa~2N+U ϫ ʫ{ҧ e}֥͋޽ퟘ˜>ʷ p굇9 IJœpW Рʗvޯu:ӎŐuіݩ䔡YCڭ iLxLNÄ:|oy0qנ̔y6u |M̰sHJ^ca`bkpzy4F'-XbЪ |Ģ# 馘ۊшŽ ߭ JsP^yw_ăwӍҊ#аڑlp|ֶ֪〬e0~֟˻:ʝ$0i|׋2ƞzǠIJQ u`tf;:R ϫջnn^m͍cǬĘ'߲ð䳠ׯ?䯕  󎈑œѾ矨šnKOھcl狫d6ܚftК嗟֏ޗܶґ突[X痘wȁ0Tͱ✿彯‰Ř,b¿ ɵϵ 洰ԤʮіаҎ͜ᖵӕyWͺʝٚZeFCE9ҖҨǖ}|uukNMkD2GZ΁uՒy׹d͝⨣fߞ m3呐ވȀ [I]QsJi̅Ɉ"D{ʬӉyd}i^hٵjѵؔ>#r Ͻ Β"֫⎢L?ɇ פ⮍ ؘ Ǯͻ˴)~Z١}ŘdЃ揈n\kCt}qx!L~:ԇp穽<J`Z=N^|w}|sptrz[T~Zdj񌴎[ ˰丸疭ݗtɂӊf醲%nmғm?u ˔~ƒ{1uڇqީӈ ǂj`Ѣ Џū ܨЬʪ›ث0xv[}䔞wᒒ߉L!DP|fdnd^`qDM*҄[h|μֆjHވnh.t|p}^\WʴUaxswT|t⭥UW빕] n≇؊ߌ핔Y D3ᐅY܃ٺ]g}؍qNL ۧ/ϒ\ۦYL9st}u{ XI NJj e ؾ Կ㽿*vRŜw֤9v` cHCDPnXj$meYQ߉`?{yxrtsxtfO{cinM)2_RڱufxWP{ru\?sxtu~|lP_R}Vgr~U%ە͎驋Ǭړڈ2}w{:ܓڈDZ?X5˜ 󓜭/͖T՚(m>gp ֗WqWljwϑ HpO۷ڛȐ ˝ $ҍ; AC"To͋ZACHVQNEMMH5gfb]ء}ifztw{d?h{9w{}zvtwgz`EJjy]wuzaN8uԛó1I̿eyN4PejXjK~_/?(@v"y؎=íɎ厣ϋv {܆ڧ疈tʑ 鐓͙։Ґ ،wt[Ԏ}ڕ.r~豚̽wx~~ݖ ޚrV`p 揋n ɬ޻ ~㊝^PдЏؘn޷s հ ˪W̔Ɵ˳>sPFHEC1&@A3ErGz}3ɍ8+OԊ;аwsvv~EiPI6R\wroqyEeYmcvzUoaQ:h9㜡w#dyŠD+7fw<(zݾܘ9࿇u}ٱYμ}DŽ֛ݛ՘Ռ蒸&F fZԷ؀c,湦O[ɕs"yR}*Bwbe}ٞքڽՠ؉x҇輢 ӠھvԃJ󞎿,Ұz:5@@W_C:Fp\{vsvvG|}E!Znԇ“%鿛x|H V}{*HwƿԟFMMMyԱ̠X+؄۪SsytpOs{[F8e͔ݯah+厲#ѧ񜬾哢Ġޮ v48 فY𽽹Um팧$ְ›[bBԇ{8퍒"|͌@x۫ĕ_wÓ uڵߊはŇjΓ౤켫 ߷ԢԡϹϖahq_•/əǪٯ,rxp^m-`)r˷s1tYMUui qѴ,ܩЍ̏a_M󬴎Bq Οةƴ!ԎD¸sljPKG7Ie{|Чܘyӈҡ&߅ʒƟՒ`2σwlܸי՟쌳jmi LDeyC∥ɸ·qzjͼö̀άj痏ʋ/䫒yуWyٝŔ㪟 ̞ɟ Ȱڕؕߖ󣌱ٕyřϩϛߖ`p<;ͳ pqqYP̰Άԝkbٗ;è΀早 Ȳg!ֹsIvWR~}|o@xwwyw퐝s8HVyv¥wɛ`y~됮G&Ѥᦠ讧,Òǿ}Яző܍૞ ۚצ ܭՖ峫ل{Йy|ǚ͙å፽ؑɱΩbC<<.:pS@Ԏ `՝Йޜ> ܯމ橠k艩JqօpT{rx Vќãۖ܅רכ㐖m#1W{ֱ-a_䤎߆yuǑaY^v*̖xvݓ{򆘢# :3䋝ޢѶ e ǑŌ٬ Ȟر θ½βȷڳǘٜf\ѸԲϖ̕ѕvʵOP{=x aZĴʍ m'mf ƹO~ߞ#n{w쳥љ $zVmEᆸ xuڊ.҂٬ƒr~ս td *Еw{u{k֍g݉WF6Ε~­ٕ ⒣ےᴥjo͈Ƞ%փm}噽څܕ¨ |>_lKx ѿwTpxg*HjЌ wnnҗ iՍ$\غ~vv|˛Қiʯt\HM؆잉tuYoʉ숲3ԇbї•{tر·ҍHWb񗝷գŏzRsyw|І2V>3ˈԣώЅԄѱRu_Ҏլľ ֊~ׁ!͇Х%rĞҒգFء٣쳦6m^`옝e⸳ª\Rf(dk 吺ÒgT{d˜v}|x Ɵ߈ɖױِX ҄cFĕƗfkuv|ʔɄ󽿕+ӝٳ驢Ҕqװͅ-Stuױ܏ݕئlj˪v̝j 钩ͧW썷ލƴ򼑱ql یJ~^ݰ%θŊƓ쯽|ױv7ͽì1zN穄4!lȠf˖ QiziQNO—̅Ֆ]}s ߴw8jﯭʞUهߘ| ǰ׈m⻾a[_f}ݱ)帡ܠ͐}زݎMn| ݏл{-|J3D[ożčӠB|ЄxH4r| ߋ|z ܽўźgl>cɓ'ǿʼ¸;Cׅyg _ 뱒 ntPloTӬm{ io0Q^נ֧v֌eٹ ַ_QR_*Ύ١ԡ{w͹ ߺvŧo[Ks*Ku۝NjrI܏E Ȳ҉@梨VJxz}`ً6ۡɂ׏ †쾽߁`LGCym, 哫2f;躳ԄĪ ڇ뀔caAOkֽO􈙚Ҽ3ww>&Ήɻjhf\u&id0Κœǝ̏  *⋥航̾զճ/dkL&鼗 ޻Kˆ{ҶhgY~Ȱͳ =ܨUIaVeᵂۻՋ؍t i䀼ۘΡrРy{ZO̵ ƩuEH ݉)Ӕ<Ħd|;0jچn²ؗts}rrQI^Aege.ѥQŃs퉳̨ǯ  *奌цˇČʙ֦ ˹l;m^_k ;rᩨŻ›OԧιR[踡kx`þꕚg_ +ڣݗjXcoߊk؁ކē׊ͥǘő ܐی ץhͯkՐ·ﳃ}Iu ǯ0∪WRƦsZxʱ؍*Η׈}gtiky̖Ũ1 wߥ?.Øs}ttt$pύz/\ߎтfcXLj,hfyʊˆۤ ֓ʬ µkGwN|[ Cr۵ڧZΞρ׏цդǓ٘VM׏@ꉠuلҖeRw΍բ cZEۓβxmʌ|j뽒ߎHEb2ߪZywcov鼱 r? ؒec_ʅsͲوۜ fժ&xu{۶t`r}wwqӷߌβǢìskZ﹓̏  ⏤ʚ桡޶t꧋ ʢ Ȧl9A ׈98¦,y٦ZϠf̊oR}̑Fž gpuy%Ke٘ƦҔ&y{{̶ї&㠓xCF{ʉwvu{jþ̋ꏹ~~|u ͒ߔ)|b6{my kš֟(;ʋjďyx쑹ӑ<တvldӴퟕҜ њޅ DZǗ›׈Ûٚ䔮 ˆ{־Ȟ܎߉ ñ ĹiȖ:;#l)ȞjϠXۊ⟝쏖ׂ菡ϒ I]PP̓Ϙ迉Ӎ輘qmiu8䎡ԥsԉ梾֎{wwqvxoօzҸbLɐr˙Շ˘ɾ‡ ty{ 艃pͤ알p+ꉴ_óמiqT=@x!]YwŇ嚒Ia쬛҆թőhѲ} ۼ~w 㟴ئ *䚪ˎВഇ薚̪ؓՠƕѵ‹@8 Ä\BfY*ܻ|Ϡ, 蚨ԙ݂|񾋸Vձ셯|x~ۄ湴nΔ啨ư񑌦2ْ޸йԽꍿ<āSxɗıԷ}_zݗܬ…}n nwÀ җ1|ÊhxCљwwLܛȬ ~sҺvʔo©@ʧ ~¹ µȀ¤ۼǮ~ǭĪ ê‘Bɸ宠܎ЃϣhB{Ѕ֠࿏᷎ϿbSnI ɰB:9fϠȇm8dƟKg_Ϋْs_܅׎|OYʑ󼔎£uߦt 1ԣƖܦĄԿ֑5dzSRkv03P¥K6߼Ӝ𐭗 uȦ q_¤R}܇齍traiU@\t}kf{~씩թy 皧򊅫㠿  1֌lˇ:͗ɭގPg`_̗EA9\ӟC؃΀,Έꛞvysl ֆՅ 2$p 莽wǦȰ͚Os3:ĭw~品4 Rt>٦ƬʖfRvi1TE=}WeeygЌؔ~׌h ~ э^~כnަ8.5,6S^qۆgKhŻۑq{igy؅ٗ  .I=ѯ뇕œћߑ HsVE ʊ~HU틉WĮЙ❈ڒyw!\ɢjA ۋwIo囙ܕv'á𼓉Rtb紻25sD߶Ǹ䁁2眠ˡsFXvvt}g?]{{Ph|:jvCh|ܥ訣|ʠx^d? աf]x{oي͕홞tzwxe]5h~唊ֿݡQh{"}Γ bৰ~Ƌ݋u3~Iz<M!VJo~稘/\܅ɝЫ Y^ ՠ؏ΉzuvP 捛mݴƥß^ԑ峔Uaŷ6>ϜԤǓ{4FfUABEQNu[i䀀dUBAǵ=oW|johfž_rӽٔkorxvy䱐ʍfdw˨`lZ[U{0ׇ͚)ǎç亗aҟĜ `89Ƥd>=+d`̥P֙ĭ意X}o hr %燤•{|xv 鮏 zQwߴ 偸 ptΝs!೘Ў}vxcqJ>ь:rn̈́VͰ|4||żqѦƬl=#yوwKxXǚ;ah̰ Dz 岳̬ݦСţӬݪޘ̤*8zӖ񲆧ҚH{8gT8'~Ds՜ƕxܔ ۥ

buʦ‰Ǝ꿜ЙTkHm=uhzwtvwmmq_1ox[sm9us{2T]׃Sy٦ŏeUEm:ő'й{ɬ ҏň ѩӋɧД~ÚƠܮ%zV}ˌoca˕Ŷ זPh^^m+th-ͣ֠ҨmRx̑ rΕ 㵟{oϛ亝Яy uoor|W 䌂Ƅ 杨oYmlƜx򛘌9ٶė wZ˰Ϙᒈ솥򬏒 ~zUR|){;>xsvzЭXXıV@]H~z}wtEiiSĵܫ圕i>ؐɷ◠Ȋזċ ֥ ֻ ׷|Љ1\-Y ز?vJ.Ѧ]֠Yrˑ]떙Q NQ ̍ﬔۀrnŢwpnt¥sn –dጫ„Va5˪2|F  xk|Kƒ荝󈎞y&{vr1JXפrD`Mz_|!nȎòZc~vi Їw8*rnPMİΘ̨os´7=xt%Ҧv֠q֌ؼ]RzǛۄ?̕NK ܙ̾ wom ܼwrzwfkƜpάWћ𺄲񴆓 {՛Ώ걓5~͛ *t6퉓ŔkŽЪӝṌ'ߨKi{+΋#ޒƙeA]}LYl:uUzЌ*݁IqO)꼧ף̼rmxvz>7 z!$Ӧwߝ֠~գx̙ಶC j✡ XS`Z ޹x wW ȅzrvȜ 襡®du[ ٙ¶ۉ.uʶȸȘÈǕ58Ӻ뇘-ϒ4򳡣K豉z 1g5sw}yR֗S~jxCu@ p.%ح[֠|ՠ鎷}{w C ͳSe <5Kyzœ Tv޶ JX`Ŧԑ昖ыެv3鑶֦ך(F·򴠤󨋐ԲфL<؊vǰOvƙو ׷ۦөݴXdeꂷ 懶׮wlXeWo}%fj֠cԠ׭ˡƙL߯y ѡ >N\j~tי 谗ݿQVUe&ay슐 ǝ圑wdƒ݁ i$uԢzȢNJzwґ͝e ԟฯ̥߇|zՐtC,j}~߇@ ׼ ʠ ؗɡֻ۲ڼӾ߰ձν鎊Хæ£l66 P;$ ֠OϠփ*wZЌƆ⏊Є ɩ~AexՔ ضӊ麝 謝ʶʚ*の蠏ꅥ֍;ڑVՊZj㭢o F󰙟ՉwύŃ^7¥󠛵8ѹϣȈ` ̢֖ߝipCx?g$5h֠Ϡ kbqבƼ۲V&~ǚy}hl^Ԝ |ʪ ł~ʄ鲕Ǿ횧ܟЯȣڃјC{ aP靓ּ 匞쳡Щ!}̑CMzHmv܅ۓ=vѥ VemeMddTx+֠fϠо赒gkZ#ĐtXsՕ̎6Ѕ6o&lpnY 짫ǐ~‡'ۣҢӕ}ثG{ϖƮ͙ fЁΘ؜} 䤢ݦ ʫůqzoPa:òvpi.҈||ƻpj=yN|cw.֠`Ϡ ޛW'8_cɗ`Fr H栈uoVAt“YaΝΜ م ䷌)̵˘⊭SC ؋[ ٞۊȭ$ץɵϟ qtF~P0⍿vl~t ܸ qâ闓䀯Ájû6>c#s֠Ϡ󲜟㞹j̿ټ8j 8Šǿ6B_uÜt@vbqrZ6hⳡ 㜟׋ЄΖ7ּdɓƈډ*>G^ 7蟛ߋۤ g ߣꧣֶp#~ogl0ɜ}lɝ։˕ciqgڟ  xߥҧ̃ă ߛ穻~Èqxº C8پa)$֦VϠ ˠ棡ƔkN뛒MNשWω񛇵ș׆`uvoÎmbNZR˗Oo ׆腹yթ"ՊT_yꆁh֗ٻxͱ ÓÏϢݦlfڈљ񑳧 ƺ nn櫵MUUdiڊ]zuΰֹ zz pؒ|ӦԻضȌ ˄ƦqghʼnerTx/ܮw)YwߌϠވӢɖᘕdmŅzh8N  J^ǒUőQmPOZi݇r 𶨡֜߉ܝؽlpUWបǗv||sψp~r iԚ!ǣsw tgpَin}Ύ ķij }Ҩޥթٛюŝݝͥť٣ ܔh_nǘfEnaPg(uXϠ~lى✥ ^oUሾl:i]  o/ؐ|¢wgtə̠ͦ}񗉓ףpqvlӌ ۓى[Ӂ tzkչ۶Mٟņю ݘ饠՘q `aͻpҡuq ՏߒǙCjyƠu«oz غ1I'_'轡"E̿qϠvt˷近ד͗wC T~zۜؔϖ즗ܛvQa͈Ҥϙ㽤T֢Ţܒ߆ꓶ!{|ſvΛ蕤샒ࠢp_1]Z\敯li  Фi܌]}mkhk<:Ydݍӧ&knעϠwՁ ُߐÑRŲ⿪) 홪݇Dm욊͒՟葘ʡv!Վ_}P{pg[ޢО7Rކ쨼vՖ֫y'율Ϡ鿬եm1r{{זȳoi   ͒˟Wotp zK|85n̚ЦDӥ^ؠϠ[Ƭ՞x aĪTmu ͼz|gȥy[ɠل,ѯό`Y]cdN˒w#yүṇ᯹x)ɎٜפOnڲ򒥒0̂fqꕡti  #ңxƫksdƏ}÷VckJ m4ϧ?]֠Ϡ È飙qZJ hIuܚ~ȴW򯕑Ɔ+~h׎cԯVe_}(Ҷ~zHߖ损֕ܖ u*˕㣡siz׳qtִ0򗫏쑃bٓm 㗩 ѝ˖} $Łj^Ușuf;xRoS%C5Ϧ g֠ϠXҢχѲ ٺ ^}  sHʓ7نn1ȉ%xcˁҵǞ ӋJÍpzyvbH͕# Д)֛rȟ¢cM6Ə؁ pºҷ۔ŕ꫐򛋡5w 獕z ӗԝ Қգ}~tͤv֤ |%$brϦk]kÉ~;=󺁲Eb޲6Ϧ士J֠Ϩʂ֑ɫ]`¶<ɗՌƀڼ 퍩 jš񋏑`ڂ̛|ɒϦͳkFpޞ ܨ栙+񰡟nȁ=Ċؚxu^CԾۇlՓݐ򋮑ڋtͷ ɚ uͷԚҎψӵݐ ¨ƒ%xkwOxkF4ߥCڃ6Ϧ?֠h捹qSt믵ه{e^ZVOndPߐݙٙlp ؕ؝Zbz̶wwn|Ǔԓގc2+ݣBcpy׭߇ŬϽǺ   &wqͲҰhg]\pB뾮깒̶6Ϧ#֠p[P㹸񸚔cCQOZޠ İncҀܘɆ|ċԊѨjjr~zթ_dԷȐȅކz_ḭ{~h4xYw,Ćs{S oxgۆΎx՟{ &nď}g䩡NJ⺛wΩ|y|xwq&rlj@:Աp5ߜ2rjiϠhٸw s揑 ns~=Us͂EdވӐvwyz҉ӞΊ𻝡𳚏|bct`ΫՑb{]`ʼnǖەӜǵ&ʖդ^Ifɘ܎]jx k͖m̺LPiґܿͺ"ôʯęrtg⥿ł૽Ȝ҇U~*wvԴߜ3lkfXϠZӗ_ ܞMw Սḭ>ϑȺɚWݜ^}ì򽡠 ӥ`aјН璝#俇ܒϾ &Ḗ\zaZå̑Ò| = 멣Cԃƽo ۏҋi ށb"הlx^[M-Ҳm Fjh;ƻ⻸YDߜ8fǕ ҠuϠĥ\̡ Ť禍ܲw佻蓛 q>ӟv}fފyܯɜԠͱʕr\ tc񂠡 ϲ_h5(tӟ'}t쫡tOeif`ύ `͑ x<> ̳򍪜緥䚡鰧 ӝTM ~ߑ;#mn㒘Ϣk4}M׵gߜ:ͪءkZjϲϠ遬kШ>O[sɾ}πκϾၨtׄ.ꦢ}~mmx嬋 yp x ʒu%ʮVrǡ﷠qpwgiihpX H֙ȧjǛ͜ʙžs `fj ~؁Čײ#inlg*ڏq:9 Fø4ɖߜz:ӥ֤\_Ϡa[d:KjɈsëޫ纾ậ~ζIќyq̡݆“rLjԜꋍϏ{\{﵈jYJfl %mթɬ킯ﰠ |ɖsĘΊࣣ񯝶ձ#СoZqCۂمogYߜU|ϥؠ8Ϡ|ٮ]euӠ􇸀˿݉ɷx |~[qِ#`{We˓ ➤ǔ [h Ԏ mﴠ Ǝʟ^] w#rӻ׫јP訡 z|ꢔy ׉{dV ձ#孿htėʤǩi#,Uߜglҧٗz|bc9_ݠۨUg|w݊dǧQڽͦ t͏꥔-xrëأӬ蛍}]vbyAɍڈeҭ匐 ƃ ȟݰ㎇ s1oyd阑 Y8#zT4ձ%ֿһwnѢj Nkh3_ε"ļ'bђߜvBȪeϠܓ/ vǡ㐄ډ$<~mۓ{ot{ɺՎA 凲Ζz5tw]Ćӽ̈ۙ֙ܡ Ԇ׎c|x X׎̊ݭ aȟǝǨՏ(ᴹǷ ،i㡢fAp_jyw~#𚠾Δ؂qձƭߗºfύu:zW`\mUںb۷ߜOlͬpล쌹r.Ȳyjpkqm Բ詗 ¶ϐyx=ב)ađ ΅g !߇|xwwK 洕 _iꍩ e㙿 ݣ/ՙ^Šy΋Ρt!~𤊂ձ}h„˜rۙH7g6ߜuzЭye֩h﫣ʦuVxDՏ|ipml½nоչģ ڌ˷㣈̛cCr ƺˍv؉b퀚Ζ }ͨp m rӵeߣ 樣 s{󯧋 zձ&{»d۷iźľm[v>} ָYݖߜ3pŢקğ_֠ʨ ~Ҩ7ztopxº{5x܊]Roa>ʅ wkHGI[p࣓ ݧ>`xLyǽ~~Ӽz O ֛ꔗƜ sÆ 齮ɐّޣձfyラt¹RܤVNqW_LF ܺݖߜv3}뷮؟ݠavʨHzeɷo٢ʊMԨ}YGg'ǢEo핧冨ޤtʿMyޅŸˌĎ|vتunVo YŒ 㢠 ֺrt}ቴ ݗY˟sՈձC쮞ƒᙰigS4Q}<61bs$6:BFe_|m`Cֵnt,繵ݖߜ]Cu߁amؠ9]oĬʨTh8ᐥPïԳ֝ܡ~ɚxꉝ cf{ȱ1wyxxc|i{sį4}bpg͗r%᪣睑䕾|leŐ٦עg 挝쭩.dC٠ǣnϏщ Քձ.յ|ēη}`_UM|@hIݖߛWliƘr8֠@cⅉʨ򤂎adЃƱƹ§򘗿ʝۨ鋡 p0jƭП=iں΍xv w Ϗ̼"pàܻj{w\Owꉕ zԘ㑹=n̤0߳`9ŧ#Q_ (lԙwձ'ᴹqLVce=³ԀJ5MݖߠWm[}֠ jdɖ=G:ʨɞQُjyHĸӡse\y ϧx󹙞ߑP۞E v|}tyy݋xnNiqaXwܝ&[](bZ\^z؍jĴ ݒ _0۔"+K1\Վ Ƥ;+􃸊eړ ؞d)ۯwݐձ 뿘βtjٛÅH;|Y%t񸸹K_ݖީ]4֠|ߗ۟irvʨf~jڿ|rꖖ̝{ɞ |{qxÑіoROa͘ϱPk]Z_X띻ʄ%~tUiپ~rQ9kyqzlb֣ǑiබzYմÉǕ aq_/zԝmDǙ (‰˗ձK޴p|Š|åX_^lͭ?7čhߺijpv Žݖtkڤs֠ 7׎gίfʨw{鷨q˚РαʸrϘص쫢w俅svyz̕}t]角Gq`aWeKh򱖌gZhMYĪ{X O#Uʥtun=TXuԌ뵐f c֑З ΉրĈͱu 6ê}'ݫ|U ̕ńˎԴφձ7eȡr^WuSu>ų>2ݖ^=a֠Հ~݉ʨtЋy߯ ǟ FƬҟ'׽sw ܓ⑷:d[>uA͆cd}x(mޚ0'K,K~nqpnnsoswMJ+Ƈ}yLOFZ~Lywseb~|Rt])ŬԼأߕ޶ޒŚυ\G ϥf ͟ձ奆kgBɦ·|EjYjѹXEݖshʨ܋󿎈#y|qv򰡡݊΄ä՝tr{קʞň۩v¾WZvxaSD|zqgoϝ˱{~~sx]^`WͽӍk|֐ǔ ᢠگ-يЊԀMv$鿆~eʸzձћ敓ڵ~kE~4¸Hg ݖf=u{|֠֌EҨڙ_ʨդ~Ā͚ ଊ˛Ɛ݊ʛspzğ8Z¹TcepU^aUeܺVsWrr ɾʼny~}y]M ƣɑҫ؏Ɩ #Յܒ]oj㊚Ǚ(zȓۖམձ Ως붹vƙtPgcQ緹;V!֒ݖțfߜf=|˄֠a0yʨȫʧ^DŽ ա rਅb{鰌|qoá9\`^BfNQޓ{pYikٙzn`䏜 "ɦӢ@3*Iaѧ[x zϤ΂ Ȟ٤Ǭҟ{gƾҙ?^n¸ܻƽѤΦ ձ ҧT5𸹹ikӇ7>紹[phû cҼߜV=Ӳ֠jp5ʨ˔ Ҝ kڙՊ`pRc ۇ dV阈xJJơGHYIcTRxTx`kZmY~;ʝU_y溯Јո$x̘XDQDŽ_thQ8C©ɡғ, Ae\g㈯ߐ ڃ틩ޙ̡Άtﮁ hrtУӕձ ͧpxƏz |Q~5ݳT.!|xb^Ƈߜ=u֠jb57ʨލϠP ћ S`Ug ڕ V\kQTDzSnkrhũFҸ@M:)äxeJX[è՗֠k=¾eϑkҗٺ΍ߣzƅc ޳𪖠Ey~m`a'ljɅzdzYypmtǑ]ŕx|z ۹~&p}uuàɍ˕͚ 򊟉+ثDZiBXޛݫ 1粏ͧձ щ踹sjضRdrRv3ĊBïꦪݖ§r?Tvϓ֠tDNԌΙܕ /WŴiϞlIrԤtރޢԎ i)rϘᗚXqމΆSWNzi~ou⁨Ʒxyt彺{ʟ [ 猡'ߑn҂`s߇r ˟"֫猍҈ǜ˧*펭mr;tɚȚh˓z z9ձ ߇⍥^g@ȶqq)WSmGűj78$ﶩݖZ֔@ųߜנ{$Aʪt̑ eѢؒwsMwբq ֳE{y笛@܎jb1Kиr̐f]̅̕ѭ n|ȼxz|nv`w 9 ٓxg_~I|llꥢ&śē֦)7ΚBύšΌ  垉ձ ݅\ș涻nA;ᗑ?$Φݖ;׵Ҡx7ʨ ѝQ\Ӣ}tώ~yΞ yyzzwׇҊW@4UĿ*c}ʅj_jxﻥə봁|O ԌhGOSVFG8xv|yzrb}ywzғQLt珩;dzi߂nP}jt Г۟'|KǔɤvxlYz × ~ښ *bձ սwY{ 8nhAлUӵ%Ǧݖc:ΤĢѠu_ʨ٢EӤkϸˢ ۺe岲^ ͝څ!Eu6 ߹ڌɜ3A?ٿqӓԙ+.ۄ_nQZ woQrm29ioE4Wrvu=,ywUE 򴵐מ)J沓ˬ攸Nmdxq󆢌gSֹձt揞Gڼrӧ 8<𵸳`V%Ʀݖbՠތ:Ϧ͠XĔ$?2ʨ2퍯đࠀؖ˚ΥráT^œ ̥{H} ֒u}釯ڗӭڮs4(o猟с!xĬ"䩕ɇX;c<^S=tȿL:<:AOj]ǀ_]s܌ ꪠEّॄ꒦{jܖyĦtۮ엜nͣձ*ˑݗʇxiۙ Jdu/ѳuoy%Ʀݖľ:Ϧ¢h޼Yʨˣ1׏ΑvQ[5ƙqՌVJ其ι ЖŖ֖ʬ~اtuƓ늑}zpڻi۸ ڌɾ *MaTXt}\]^VzttyOO4UJA+ٜq3gxC{ ǟâB޳tFy.霼搼x}ڷ| ձ*}鵐ó|*JhX&ߑƦݖ~:Ϧբsϩ]S7ʨ&}{f/?^0ƶ}Ȟ߈ ː 骣©rswĸ|tuVrΌϿrh@xOڹV|U,C{g&楡ޓ[OX`seʘϦ 7Š]Y~ݩ~oאʜՆɞߊϋ¨|ձ*Ր薬ӗp_R)(ѓƦݖRv:ϦӜbϢV\wʨۋ)ёRנvTC槆,耗ۈך鼓n S쨞öts΁ry^}ובż՛៧l|H|ϦsÚ֤o?y$yuٛmTw}ߖz g`𚋹™ őޤձ(懰ܔjQ呥4YPw+)ƦݖE[:ϦJGתϠ|~^ _1ʨ)ձ⫘㖒Ԟf_fG ݣؗ㥓qp{DZ sppk畮Kʽ뒚g_zzo%궟އ¯ @ɺ~ޔ韈ƇƟ阚݅hb߇׍rUߎъ˅ձ̘#哎okG7T^(Ʀݖ}6γ댕͛>Ϧl7⏠ϠicY[ʨ؍)`Ӟ?SSЄ fʍ󛥭 Ϫ Ś͝ۥwqߴ_̷stF~ ӤΌۖ!Ĺ㏎y@Ypuįt橴!ԗe빋{rqlbKjq f)=kќێ}ЊpYmָم՘氢㫋͓lЖձ!܌Znխf?z_EaW{(Ʀݖ}mn}w>ϦYϠëdjʨ҈އ)rݣ̳ӞUgP鑛ɍ񝏯 āwysYgcqtɴȻ 맋ʟZEq <١ӫВiB!gMLhjHyrqqmq{||ueXavx4.`r𠡎ޥahJCt)ڇn鞵ĒҫڐX%pϗձՌ 鱠^࿅wO8Aԝ(ƦݖEwni^>ϦżVϠdʨM,博Ӟg^[ ÄT˼Ƨyȴ ЍQh|vsvhݗu˶ú~Т>tn4Ï඙TF8;Wa8l>LC y{}srwx⚢ޟik͎펰e 쥓 ձƎBêiڣ4wdx+Ʀݜ|f'vߩv=ϦeϠaŬ=yʨ,vޗӞwidQԸY~̰x^TYdвpqnep[z/Ew ֣ߋv ĹڄͲ_wy|p4ĬGo)nvYpaSi\v|vuĄu{Ni㭠wfip 嵇 Ȍޓϔ ձד̓̅軹ϫH32[Ʀߘbri֑=Ϧʥ{ϠLpvUʨ,zYٞ҂u߆cnrCElpƳ߬ w 㛉峋OJ(ts\gn|g\AU$ݴ zૂzuwswz餜ϛڷȂy}GbOa_gtOmTi;}u qr۞ztqRJlGmT4݂aqؐ՟Հ˞ձ ˖ 쳹IJBv]Zq0ƦdiXhۤp=ϧś`ϠPTu\ʨSՑ,ʙi뺧F\eO(ij؛츱¹ւ ӓƟSA({xk}rbc'蛧ڑ۵z/ↆxɆvҾȬ wOln=UN:yoQ~Rt4u=lrw A؛ѼxtYQ[؍Wuг՟ցMŵoו ձ՝ ׏ |Q-q0ƦJ\g{f}=ҞYۖױϠµ젴G\ʨ{/pyi~LØwe->ˈǿx}Xbձv`~vr `pd曹 ʿ{Pʡ|wѧ݄=r´}})]F|yʃqޕ[ 㢜"nΫ{JMNPV]m|:վdh̋ڞʄauΌIJ܁Œ ձژnɻv<}`Re0nƦ[vy_|u}<ۏcڠϠ{ᑐ%ʨ0Ru~sIV:L޺ Oo砲zfbwe@qu }khx`fba;ɶ߄pwٗ6~~xŞޙҭByVǩthԸyDPtoۜٝʟyr^MKnʏJ PLZ֫ے绛߲쩭 ձՉƮzcэlZ~=/pƦfyug;ќu݋ϠvZ~gʨԐŁԨNʵ^^Züҷ Τ󰘣ɐ[ݒۉOHtsq x|eaҋnoƿY[PG}נiqNCzɸx{|t~wh[ʳ|~{ꊸ E᱙ߟo^_|S>HHJo kxB(xߜNӉjxpv!ؒÝꤏЗBF ?ձِ}vİk×ǔ;Uo.uƦy2Rbyx=÷ߘםϠ|.ʨ!w|0ͤ ׽)y܉݂fxD_$||ǶгtueN_ya ~frk"e|uĴ͗HoWOjkrƚw}ΖlBxHÓ(鮏ˢկ]nQQE?Q oi? ׸\Z΄ ̊ gձvj]_{:Z.ƦROĐ>֢aϠ5ʨQp%咴ݗyѨԥvԺżu~uxg(tw^||뤕lgDo\[1JQyعt|˂Ogobr3YyqtjʌgVùwӡƂѽmnkPthY^s䐾ϵBs͌Р͕ަ~yTVYGÄ[_} k՘ 膭+HڄʛTpձҵ†vʱ:LU(Ʀ[mr¼ߜfwҢGϠ2,ʨ޷T}^[ݜٝխ{︿>·w?Rĉ4zݎilqRkN3>PX1kvюiwut]bet:2vv|jpģԋ7ɧhnǬݗf[jj|}y`܌6ODj 觞ͽձ䋧)~XxAVaͥXp҇u ܿf|ȯǘ/ނs ձ ĶnnThrC(Ʀ=U\ߜժᆄfߠϠ?ǭʨޗz]1EДݜbޜ^ɘڔߌԹz۫|cU6֘F}Ʉ̑zf|bPNEАlQ`aa=oM>ƔyyjhOҦҍsԎDɊћlʝmHxuspn=~ֿٙգZG݀g͟ پΟ ܠ!޼ϋdNWznYfU諕Ql õw墓ϴձ 󻸹q??(ƦAܱߜϦuנϠì_ʨSʬǿD吇}ƜoꞋ2k͡ꎃ΋ͳ˿`aN|A۬wz~yϟcn|㕥sa|je}ɿ!t ݧ@̖֕Ҭ|Dw~dp3)Amx{t]ڞ#쎳YccrӌSާW  ձл쵹zFqn?o%Ʀ\ߜϦnj֠СԫbqզYʨñU7cS\u鼁ǛŚxm7eȃڧlҸFҕ8oļ<ᑿٚǖˆëLV꺎r?WdʭCXϼco֋iy`Oyhm*{ᝠx˴灴@αώs/5bfɲ__h/Ɋ䂤cA Ķͧ<߳ѻ_xOg7Iѩ᳹T wR~¥ձՑtӷomĐϖH>_% vߜϦ疙w붍ܠ]ɍ]Қ>aʨΤ[jW^_jd`bPvazijxVx}R瘚>یn^򫄵ߨ֝z듗AV _1\-NqSki_˨Irch`cJxvu̇æۙ v އI@ī厕чUw|_ST^qx;uOj|eubطPicˁ{;Hh7ɼwqnmpĪpŻzup'#ܑĵ(hꊈ ډձΐøuq䏛:{dS"ߕݗϦ]0xy*;P̨SlmG}sTe`㘙hDKȃd޷5tˆ}‚÷K&I {sP~S^qe|MyxAߕ 쳟 a{ۡۅMAﴄxSsd`hM3ttQ_GυàuI9ԸѤԬvWwvrE0xUɿGƋq{wȶŬs5̟؝xuswzpɑ˄kZN Ύձ HY6 ʄGݠϦ[r˝Kn1um~jʨG+^r^⠥ڍﭽʲÖ̳ řAu𖑤[܈k쥈j`ƽwwq@>/ֿ px}ВVtit[hvOPK y蛽~¥AyfTBShQv|cěUUɽyޝ`Mprذ条䮉ĐÚs vBhձ qkIJ@GfSeۗ}̢瓑؜xģpi|&iʨ_wCjjګ䓘难qx ˶|߰ Y ȼD,AAӈ ]͜\OMGECOT[]뺫{ҨƓҍ蕑Î`3yjyџƚȱ ѾD9z̚Ȣ̣Ҏ򔕞 HӌZϔ吟ձ ¼rz¸ё:ppFbݿИlӠb-ǧ|9 ʨAkpשyzN ΀ TڐꙘȞ{F 闍$:.Ǖ~~pyՄִب|Jj嶎$㬸✤\d+Q)1=${uܢ܍譔wU𯗔ձ ὈuÃmI:j V`jLoϠHl] }ѫFik^ylvaƠRMǁlɓʲ~ˈZʚƥ¿ކ֪ܒ ӡ ̎6C8 򄺡嚓bgɜ󙓬>]ӑã"iE/ݭهݨɶgt}ҝU~񯛎DŽgJN}ձnr:`VQ ˩ هpj螣Ϡ飂eբpOߙz:[˶vЉpмGpEטyxp΃iu4ڋثȝǾМה ێ}b%{rr mf}ioyדۤfuw ː_㌭摟 yT𼣡s̱uyfRuRiZ"΍҇ձ xtӊ_[};Y ť ⟨ֈ_m{ߴߡϠİxaJiwgejrZۏɲ| ΋݂템 򿉯ΓلͥaS ᕴ JL{ah`oUrӅ r齷}۩əߨْ)pW[ΗƋmԡײۘj~yǐ:No Ʀ˜^5lꍼЛϢgīRԌΩ^H*a^dsߒ|׭͊ħϗ Z$G0! 蒖ˊϒ˜ ٗ ؽy@壻3>x y ~hn[x'suS{纪 qɶאɗg-FBa‰K襔uԂ۲۬{lNj8loJζůRPƦĠޫquϠ1!kbnҧs繎}{K ʍ॒ˈ 㠱րٌ žwŊ=ȫs ϖVc t΀bwƫYA+;^Ok˚hۄ܎e}ޤuz)ǧno٪vNaU bmΏ׊tR9vQfiƦשּׂ㿹tړϠ^cܕ̘m}oń֘u껢~z܂ χԔf{̊͞⚝ 莭}Տ-ƕ󔚫~' csV=ܛڏtrm21\rԜk~ϰӀṇ̌yJnwib\dTũ{ޱ Ɗvwx·U_ Ιhpn;]UYJƦגtϡv^#cٸʫ{t~豑vԷ~uÇҡaSڍўƀˈǸ׏=ۯ繨Dtk֣ Ěץ<^jjؿs.ѠTږ}{zR{i[Ѩw#-ӏ峛~v*񢖛簙՗ݶwL Ԋo_l ϫ̮͎eqʥl÷‡ėlv8@ډƦґtϠU˵T?ѣ+ʨv_ۭx繡ݴją܃|~Ξ}mX xޕ9ݒ۽ٮ?_AHѳ1ї^ۃꔝaywؔ֝}yVrjvuYޞ 7Z-ѼȎDՍ~؏g>Ȗh̐䫞񢏧ϨJ`^ ~dAڍ!ŖҵveśËYU<tg؍Vť`ϠڃUB}ʨrtǏܫ\a͓rI є凄 ޡ fL d`Sۦۜ슄 Ӊ}ѿpdĎ#䀒ѻrִ횹Gg:˚͘ոqi=g۟ӄ)y  ً˒R̢"ŏ^蹢ߨνeiSu]}E)תתŴx˝Ɋ:TV:giǥaΡs!ʨ`. ֛א𖡚א =|vV|ԎÖܼkر᎝>ڟv턭hftۓ^ S“u"țK?v®G՞o¶"ԛ뒹儥 ӥl{Jm̩t 4栙;N_Dyiڴ8qumhO;^ָųlȳ yފ7zp+peImrձʩЕʨgE匨ղԩ渑֞ ἅeȢǽlrޤܚÖ[K=㉞ΗџuqԂ䱈D^Ō̆_Ӝ߉h(¯좶Ur]dڏƇePĒъ2щ3jhaffxaoOةӹyԆ*m2ԁɝƖkmNO`4ŭה;!ʨۡ}msݔ檖­ꊹw󹍜r¦겑źžm탕Ǝ ñܯ󎙰#_r{Tg מU-}՝A{ޡ٫u |U K{g꺠t:MxĶƅ̙ Ǚɔʚ|񼺨,aʿԒ/`4~씧mY]^av{T˜ʨϢ҄~Q֘ЕܑpΏђǓոŪ͛匐ەȥ :q𿒑ُ֌ጕp)xi಍ ֞)ʇq䠒ցsϚʒHP$M:,qrҕ߯?:Ny׾܌¥ՎΒY񴌡 ٻq%||Ѿjo\ES@iVysh;H]으ªʨzw⧧vj^ܰqtyՆٮȱ↨)1Ɖ 󵓘@ŲԈׇpei`b— ܤy`L(΍󐐎r߬ڟۅ-Լ<:oŸ{ơNԹor禗ۚuˎ ΏıؼҢ|ؿjslox/SDMSגmکʨy뮝agĎpuоźڦp ꒀi= ȥ觙竗!|othŝpyStxVAٕ輐W]o賣̛Fh#؏c|Ūؿ^aεԹ튕܌ Ţݹ}ݪ~¨ӻso§jn{#YQMtUY޹mĒʨxҐ~wVj7 }ƪΎ + ㋵| kȵ}ڃשۑ국)t ȇூl~ 뵎 $z8ކ%Kջѧw(֓ ٌ̆ؔy ொlnevwXR8o\S_|rR-b̨OヮlP}meɊ; ٴu o[ ߰ K  bԌk햑 n۔x*ѹlgo9Ën|3ݼ+ꋫȅUPmq֌d ɌՒԾʳth~oϤڥbYWEyi}ևYߝà\輭:[~ቖnkYքގle`ynivy۽ɒ׺{ kzNO̎͌مԋ Vowz* xZb рgم cm~w墫ڧ{Sx隄`@˄㴊m ѝ퇜}½hq_]_~U؄[ؖѓno_)GҎ^չdӻ֕||zWFŭ7hʨTn鞯ݜad{ϔ q ޑϋ]Ρb ؉۶쮲R|v޴-n؝ʝӇטݓ h:lTݒބ 㺓ǭɤԧ=˦Ֆ2ِ@xѐvϺ͈ħ׾᧦gⰸ ϝƸӓ\;s7tsũK|v\ҟwZ_a~í5iʨ]ޒewݜ׭؝ӣ 훾 m ęP)ႝ q]ʼn؜l%Ĉkx̉ ȕ*gx}ȕٌ 터 K*ӓ֞Ԙ`YϜ8}ɋ̣m㙼҇霚sڱֆ} ΝZ.Tl&/tpsZDŽ\ۖҠŬ?dʨK􎛩ݜ׿n^Ӟː%<˞{ﴝe焔%ru爨Ύ^hySr}u፟ԛȟ}^~Xlэ;gBjlţm݂Ӻx^v؁l愽YDۜ~x𡓳TତݹΫӞvrln#bR7dZ\t\ےӊ↯t6̨@^ݜsсӞ蟕芣n͒ڲϒ<uXwa Pۙ*홺\kk~hhɘ{} m`{{ӯցҦ ўB_v^ʞIQNJy_贖͖e㊱Ưf_\TOvݧޤu8Ôɂъז)ȶin~1oFIɴ;ӄdҭwåΟ˨W`ŀdӞ 4ЅٺʛǐqoŮꦢܶq;ѐˤ3ԎB||Dֈ`ffdʓ+駘wUSɦxjTkqz[zdWrҘ󡎉ޏ ;͕ԃnK@Ob|8_@`c̼wȕүp,àd±ujwp5w6X{ȟd\Ѡ{~UҨo~iӞ 4^UgÀןķœˊXfpxʌԉ`s yxvhV̇v 讎DdYckΘB˔8ϋy|vxlug}|Փ!ɟ} 圓xۻpϑBqǔŲ Φi Ш}ѝbxkDzeENx-s ûWndϧϟɡdzۨ穵ţŖuӞ5bӇꄨžΟu^]Cь 盂Ns擸 ːbdnQʬ +򖘓ӈxdiŒo&>D@J|dlth꫔ř؍„ Cȇ 䇪 犚շyԅȢ!\рʿܰϝf{gƏf/dd2Ά dąl[޿adѦZQϘLѡȯ=;ڈooe|}yXӞ>ڎ欒ג jF^GT{ζkSՓۉþw򻚇]{񨘓]ykӓ]r&{nkE&(oșRZjꈛ]/ո!KߊަݒшĜyۜHkU"]҅[mv݆ ϝfhƸquû]9zGK]ˣ]ûAfΰvñQvњ¬_z! l{Μuo{kiҡČҢ/ȍ/ՌGj٪wۊŊ>f ܘĊыL͌fhD谭[AܻxԢ՗sο~ { WWqp܇c RWxԍЂ n%tޑܳ鞖zԘݐ ϝfk»DRq4gٴ~ xrkgׂРpg_G̛|^|~~㙆yvL{u]~ו}ˉ┴k@Y㗪v1}?ziy}n̴“tUw п `C͑桒ȍyߚWQ 휊g|r韎rΟꇟ Β_s ئds`ڲ x٫zE܎ʖ ׏Xi±ڿqq}͸͍ ϝfj¸6lR@uf|{ۑhc/nV~Qoxa\ߣ̚h͉֯[ۏڋ˚Ӡӑ[zգ὆=dΏBrãӣǂ ¡΋ׅ|ɞss_knK⠞Èו ֱƉ%UPu1ڸ M f7م¢ɪ ó ͪ\|wDZ~ݗdu{՝P߮}fxf}cu'R]_ޜvnx:篽pҝlm܆Šʪtջפ—䈨)х~~樀sԿۍҘoܟať-nᔾ w Ҹ䰉ϣ˭Q絙؟ƞ \wa~˓rf{ >nԜc巄錳!ȚԒ,6Г׊ųӔϦsTG[ε¾ ۫Ƃ Г_ 0Ul8ykpȿlߜww֒ʄsꦘowɗjrAuݜꨶRؠB~w}ʵՀuuˡݎζŭ˜K`f`{ꨅz㱚 ´fSf~ ՆiήߋTÿś au֔d{ ӐҌʋvz˯΢~ş3TÉ `=} ۱ܴU\\bWb )gO>Ӝ%Zߜc\IӠՕiƂxˁXە+v{ݜggȦPq׊%H˶wjxϮ༴j~ܩޕяod ȹ tWpΚ h#vٞ月{ѹגĢЮ— ᝚i݅quՓsb ӃԀ̌c˒Ƈm=؎˝I厞ϲ謡 ԒmsĻО ikldii訨g V1{|7R͝y֡ߜcyw|ܮ:v{ØҢs(aݜ񔠇ֿԋׄę哾+wjh}yӧ ƅkMww Y׶˙q]덍ך RѬ ڽ y ֓ࢠΈ㈰ov ǿV/h\ԩ.̓φȖΌvԑن{Jϻ\ϝ۸j`kjdjj_alXqf 2Lk*{Ϧ՗דpߜRzc̲vĚZߠUdv˪Ơel}ݜXӔѤc}{=ZXϨp{ݚvݜ> /uۙ曜ì.grrQltmo`8~lw齎˾ Ё[+~yKnmk Vhڐ,ևۭ,C}ndmcj&Qحۋ|x̄O˰uە̛ τh!χxۋs[izf3,֓ŋ_̡ޘΑꗋ҄z3/vbw 鶻v~mOϝ!vfmdklckjdjjeih_ilc`cmf`/q@O㦮qќ{ߜYӦꁢlר?eo_ʨ)>ݜ^vʿz麎vːҁ'璙KBbv~rrkiqzO;Ӕш(ⓗż{Nu<R` ȖŽ퓼XPQcgLyٿ˛ꓻϓ'Șڞnڞogẕɝ׎AushngRLGݦ.O}䣙wOpy茚ӊ GHϝ!Ěe^imdklckjdjjeih_ilhgjciwjyf@|x7fH߄t⾽ߜb֦ЪRӚ٦ʨHݜ`qT؊›ص{@RֵdvW=sl +ʙ{ ޚkd{ (lAZHfxm sڞĿw ꆴܐV מ[ny߷Ҙ MȐ!yωwoUؓۿ Ȑʊ¥ǎꫠIyϝ#Ymdimdklckjdjjeih_ilhgjhhdaci_^`mfg2FݏߜaԦϗ؞ϡ=Yʨ@bxݜ疩l^sǾΤC~P{fy{[ mᧉ,߻⸺_ZaJ j ɼl^jyuf񩷩VJ ۈ ӊ 򦏠m盂Λ ؕ;I_䉜 ϲΞ#mrfldimdklckjdjjeih_ilhgjhijhhkegmb Snf])ٜ`ߜfdզ|֠Ϡf`ʨWM\ݜu ̓Χ苏ŷ%Ϡމ力V^xNcn#ᒴ{ӗ ܟggq  пNfpH9߈ o8T Le%f¹퉼rۯܦѫӝ'۸ne`^glchlcjkbjiciieig^hlgfighjghkdfkdhk\iaYbfu|aѿe'܉y!ДqiϦmq՝ϠȂƙʨ힑chݜGk@{`Ʌº,xW⬡ВXђP~{*j{{ Vc]g[h} ˩bN dh΋壤 بǣ\F{룜̉osߤgz ڗЊ‘7kVKPYZZU\[WWZTYYTXXTX[XYYS][YVYWXYVWYUV\XY[R^[WWXPSXPMSOPUSWRmz 垑ÖGғlbΥܭΝϣG7\ɦ>ݙmԍr!Ņ*|⭉RMHŇ|~hlآ૞/]fa򏻏1yXٝΙ^e^AW e ۇՏ bfr8yqx,ŽѐsĎ齵$y狩Dr~ǵȴԹn ܵ{ ƨ~~ әŊ ѯȸг ȐΖrߞ٧ovΪҲҩϭα@Eǐګ¿²U!ӶO$zKqzǩx&‹^4ixybӈϹ4` ǻ Ϣ⼰|Yݤ'ʴʞȔ֨ܪ ї ƨȩͱ"ԉܿɸ ᭟è ֞Ƴ} fƽ 㓋ϰxhƹz ܎}Y )   ެwȴ ܼ} ݬޭ ݤ  ݳ՟ ޤ{߶fv|n؁̸ѡвɬǩ ؁֬בՉմԑցɊɁ"%"    @@``@@00РP p   `00pP`0 `00P0p``` 0`pp`0@@@@ @p@ @` `pp@p0```00p P  P@p00`@@pp0``p@``0@` 0@ ppP0@`@`00` p `0`0P` 8BIMPatt8BIMTxt2 /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (PoorRichard-Regular) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 2 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2 ! % 7Ʈִ IJ # , κ%     Ŭ   î     ݽ  -    ʻ   俷覷    ŷԻٴ   Ѱrqs}y      ܮ)|opqqeYZOFQafjy~{z ݜ   ܰ    &prr_:)!$(*.1AQjv{z ̤     &t@"%(+.259$'*-1.쿬PG;>BEIYh qwq  &4,:Ԣvr?CEJNQdhrw͘m  !(%ߢ{bGJNRV[htqҾp   $%-Τ&sSOSWZ^eirڅ|  !/ %qtTW[_bfniqߘ $ qo\`cgkorq q}     qhdhlpswqq qz   & smmqtx|rr r yî    4 truy}xr q oߠ    4  qx~~~ r r   ") qzy~q q Ҷ  *q~}yq q     #t}qqȺ  #u}qq'Ϣ ڜ )ľsrr    ۵~z}rr9 䧯   rƧxssĽ#   " qxүqp ,  7'#~pՂ|ӥ}xxypu% ޞ'$qڤ}x|z~}qw{{"  ݚ  tzyz~} ٰz~r     )б z}y Ҏzrq ( Z,ف{zx z   9${v{~~߈y{%   Ҷ }}yz{j   % Ă C  $x ੖y{|bߨ  ! '{{ƅy||r{yĻ     ! Ŷ ؕͰˉy|5 ϸ    zzy  /&͜q\wv % " ŝ~Ƚs#   " 宍{{zx}q  !+ֶq U <q  =  qw [Υ!.|}|Ŝ|} 7ɕ %ᴹBy} y 6ҩ0'գ|  ٬ } z      %z{        '% }yx     &Λz}|y ߻ 2  4%! ӣ~z~zx  .  "и  . 2"  % ܢ41誦#ķ10 $0 /岾#ɵ $(ɽ֜   $ָ 굲  Ư"̯ Ų  %ſ,ଭ ͷ%ի+ֹ 檴  б  ǣ<ک侜   ޟ  β  캫-ʣѺ     ï窭 'Ǥç  ﮻!߽   ۵ׯ $  ݠҳw"x|o~~ ꭺ  ޫ  گ̟uv$p{uq  ͢ ̞ ܥ  8vwwŸwuqפ +   &Ǫr 6  ˛  I{{ѫv #1ۢޯ ߠ *v~vʈvz(ߺ :̯ܴӡ ۨ 'xw&~wx{ڝw{٭ڻAԟķȟ:ֺ*ʶߙuwwܨ|ޞw 馲ʻ  ?Ŀ؝ ޞдʸ~ªtxwu  § ,˿¼# ឭ$ wózvwwp  'ѹǴ 2³ ̝ }qŽ vtqq   Ӵ ȱAƺ؟  $lDžwpxrڮ!  VA­αݡ =ӁtȤuq~v־ ' ºYߡ=ΪεοٚOީzuuqx % jϵƱ-ƿ¹ݭ¬Q܉ͧtp|w">پ4̼Eǭپ?Üfyφuqzn %ק #FǸԽ޽ӗ֓&vutm    ӝ$$㵪-$xӬvvv  ֝˽-Ө3w֛uw   $ 'wؐwww z       vvvw p JȾ  xww vo  ɰ  :֛ x{w)qq    #ş w~)qx  ܨ )ӟ  vp{ pؾv #ҵӥ *Ɽظ׾ƨ v{oqӹv﷣ 뺡  ν¸x{ wεq ɼ嬸Ϧڢ  # yy vǦp.ң ߝ ӝ x  w˜q  ޟ ڢ  ܵ| zw q9 碭 ̤ "wl xtr꾼#  ѣ"ќ vn׵ vw!0ڨ  Q.vwť~{{|v{# %ŷ 㿬vxnwpy~vzpv"ѫɡ ݛ ٥.ây-pm}{Ýpyw ഽ ֦ Ω )Ϯ;&pzpƳqwv (УZ ŭ1׃zݐs̱¿ns  㽩ҮϣUأ*~uus||xps%׽ӧ Ϥ  $ȧ=ڲy{˛qrujѥ̷ ¬  䥴 ZԲ{Ɖ~~C髿˼ƺ֙ ֩Zڱ|lŗ¿o|}~}a   ȷ,î 䫵 Zżœڿoupv|qw}zuqϷư МǠ -׫  Zʾ̥ὶŠ||yuvpr5 Ϻ ˨ ѮܵϢ'ݜϰĩ?~px|xvzsn( 붬Ҿڼ/·-Ϳʿǹ0͜p\p~{wtqwz Ῡ=䮣 ʬ&ľȹ&ŝzzw~~}|xsplilx-&̳*± 4ժӭƪ-οzypu|{~|khea^ou9Ƭש袾ߩݬDzͣia]ZW_p UϽԞ 誫ણ 'ʷ-rYVSOMfs T̹Ѱ˵ 촩Ú©>/WNLIELuzط  [Φ޵׳&߽׵:뵧.wkHEB?<963O~oz igp 6Ҩ ڬð ¹ȵGù'q=631.,3\gsR<ev   ֪޽ͤĺȪ~]0.+)'%#! mp     (㢴% |l.'%"  O}   8Ŀºƾ  ~lH%6joz   ¸ ڴ ̫&ܨݝoxjWKJERrwo Ͻ 2  ٮ%!֡¡}o{rn  5 ᾬ6"#ȥò#Ǭ   . ՞5ͳ" ߯ %㧮 4Ț3 #׬"ĺ1Ԥ Ѩ+ $4˙-#  ƿ՜ οߞ  !$װ ஹ  ư"ذêŲ ̿%,ɾʴԻͼſצ ͵% ʚк*Ѿ䷹ ŻÜ ͱ͸ ʘҶ4߹ ־ߨ ¦ÿ úТ 迾  㿩-ֿ ן ߾㼸߾ ԺȨ ; Ȧ殦 Ӿ ƲگЯ  ÿ%ʺϺ֫   Ϳ ǽϝ Ե}{e~}z ˧   и ڭ찷  ڰר|$m]]M>M_SXgypiȥξÿ  ǵ ڸܱļ |}}f7  'Wcpi ʳ Ѹ پv?%`k ԿǴ׷2 붵د͗  0ܺ~~G.>63v| #̷ʸ ٤  ֦ɾ%"|m>l|mNe|&ƻͷǸ !弤̿׿ ͣ׸   ý۵}fF} |~zC N}ۭ ѲAר۳丯 -Թ׸ֿγԜ|fm}}簉{q/N}   ̵̾/ΦȽ߼ ѫȸҰ Ǩԭ ʻېe/wr}}6^t  ɽй ɪ,гȿ1̸ úμ rwvڽ|}/bi Ӧޠ'ڿ·ȿ ؿ1 Ͻ ui'v{s! jj ξ øű%۞Ŵ"̵ پѣ $Ϧ`D e}id@n׬ ߶ Jδ @ӿڿŪǴ  ѹȰ,m 1t֊kCv|˽ ' д ƷYȾѽÞ;ǿ½ڪۘ<ϦќB jpoj <ȼ j̼¦¿⻱-έԨٿì<~1qjEqz ҽ 0컲4èǶ෻ȵ$ۻþìƱΎک۶#󳘱WW\qȦii9W ̾ѿ%Ϭ #ñШì%Ͳűûַɷ ޵̕r6q~s'[gɣ  $̹Ļֲ$ʱ̼ñ, 2pҥyFvq輮   &媮ҰΣܹѿ|uMs}e _ޯ  $ɵν˺ܴ'|^^||| 6vʸϡ  ̯ ޿   |>|} g֫   Ġ  }>}Ӳݍxf٦ؘ ⿳ :дݻܮٮ}&~}Ճl tä  · #ƽ }~ԟj4 ~ئߨ  վ̹ ) |>gx̲۠j6 !}٠   ѵػ*۹໶ռ|>xf l6 |⮨ҵ ʺ轨 â }?x|- l ˾ ⫣Ӵ䶺̿ص ʹ# }_ov}!+j.գæ娴̤䞽˨ ֳٳۗ}w X}"8k  ҿӿ˾ ݶ ;w}Pj9 Ꝭ Һ "֟¸}7 2a}m pj۸#  ƴ߲Ͻи ȥ"˩ַ|^dڻ|P-~ ½ȼ Ȯ  +˿ü#Լ | Ns~|3L# ֹӽܬܳԷ |F7udss`@@I]fu|u fp "ʢ⸷ ϴ& ܜ ̦.}u g`{x64gt }Q Eϳ ҹ <ټ˳Ϭ/O Kgwg0Vh}| x㵬(Yسи̣ ޗݱ uxʄk2 2: \dK 8l   й к̿-#Ӽɿҽo"&ko \zzY  ^hp "m ȽǸ ͯ àĭɣꬣҿW (uxMBhh k~x joj˺Ʒ ˴ 'ݓȹO- g^U}K Li! T}x$ ɾܽܽ ǣ  ǧ渼 w`E =TFf|}&  Ta յ³䶼Ȥν +Ƽbo[,vgq|osb Kh7έɷȤ ٷ  Һ Ըʰ +¨Ѽl& &9799. %fgh9ҭ ϻ ޿õ 'ΧħĿп!۱ۭ~eK cmd(ܼƹּ мĭ糱/.á͜o]Z? N~Ϻ߽Ǽ=جٵ¹ž  "ȷں&ѿ ŝrm]E43(()8F$,}ڿÝ.&ª*ȼ 4Ϥý߼%qlh^p~jau ɿS¿ɾ ۿ ޿˿+ܷӻѲİ%5i޻Uɱѷľ վ 'ª-VToةİ Tñ @ظǻ뼺܀!'x| ࣜ׿  ˰VΦкȳܺٺ ҾsեȺ̿軺sW=pŖqw­2ĺ̘̰Ħ%¶̹þYºʤձȻp)>~fw~_cgذ  ɸ6Ҩ າȯԻDz訾гļ Ժз0麹k%T]rM7]q ñ  ǹӨ˦ ߿ؽ̴Vg  õ  çȾ  )Ž ûۄ~k I µԾ ࿶ ȟ 㨸 8ֲ˽½Ʒµ飲 񺲫 ~b@ 4he| ϳ ؾŴͦ  ȵ &çڴdzƻ fs`WMHANqre| ƿ¿ ȳɸ2ѓ  ¼%ƿֿѯ÷!ƹ|exkd ¾ ¿º׿ٳ  56Ǽ"خß"Ǯۦ ÿ ڹ  4" ֮ݤ  ܭ !#ȮưݼǧϿĴ 3+̽ ̭ Զ̡!4ֺ#ڸ  ¹Ż Ӻ֕蠼̩quickroute-linux-upstream-2.5/Graphics/SmoothingInterval.png000066400000000000000000000064101446222606700245020ustar00rootroot00000000000000PNG  IHDRa pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F3IDATxڤKHTq{wp|0FҔZXT:6-DpU.*",BDҠfQZdZ0 SF"-g,S4;3["a&xlwq^BJJL+/_V^5\P#4 s.h * 1Тvk46"1|DU(x'ԉ"n+ٞPScyeM}dutd $ZmK'Dӊ]m_ONBB= 6ϼ##|1O !Lj|H+y '=۝ε4)ț =ŷr[ 5wll'~uZ[Ыv՗ρIǚR#P'DitJAwM" .A L 6a s֓@ζw=A>5>8IENDB`quickroute-linux-upstream-2.5/Graphics/Website header.psd000066400000000000000000023441231446222606700236530ustar00rootroot000000000000008BPS Z8BIM%8BIM$9 application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2008-06-07T21:13:28+02:00 2008-06-07T21:14:13+02:00 2008-06-07T21:14:13+02:00 uuid:886613CEC534DD11B3BADDAA85DDE585 uuid:8B6613CEC534DD11B3BADDAA85DDE585 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;A7CF1A6C3B538A20D890F2B6EF4909BD 780 150 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;82298995B10434EFE74A3F64715F5957 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMI Untitled-3 nullboundsObjcRct1Top longLeftlongBtomlongRghtlong slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlong urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM g: KJFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?\mbXW%I=v\W\uW "3g%y#*'?8($'8u3LKu :k{܍kZ%׵pk8Mߧ, `ofݟ?I髶fMm. }kuv3lVM CI}Agfֺㅽ9];cZ۾_?m3.FEL9톼c[lk^Ya-qs^۹QN6 1KD[ߝ3k}QI28|cKK]1mM8: ^1k]jʳ%׽Uh[\=R/1?,ߎ* q%չ-iåe_Qrv[][Cw _{܋1ʈkA!絻[?QF->:*-X-{A<!N´hٮ")?K_w3k@ƑH{7kwѱA !8- eZlzճVue#GԮgks?~߹c?6QF#$8V(]xͱoָ H7Dg酁lۃ9Bm,smqakgO_):5ݱ.-2ݮ17s?c[Z"Et5-'X u6:Aolvw{M;=EcL4סw鞝7 êmMֶt1]zfO[je{]s$0@n2omM+d K@$VcsG [u;5Gw{ =}qp:"Z@hl.韢 „fD= (64mfC. s6jϲ}Qjt[jɭѮ-v TTT8胻/fO󾟦R 9@"?{Q2˘ ` We cP*#2O_3m~אL4RNm˶YA{ۏb{YH2]y,ͻ]nY&A :}n&HȮ?n7ۧ_$H@NwG7Yy߶аkmlǶ-k@k9Pw9t{}cn59iRk-/w.>}DH_O LNk~\Q՝y=?c[YŶ~ͭ.zߙZL4[kjF:3Q:SjT8#F4#;Yd~6}IbM$m){떏W!5??fic]X7=>KXsA}tcg /$~Zkh}7hc\aKOwo8BRA?0zLpA|7nmЮAs9s=JS;`,i ˶;eUnmy^nM}6M ?Eڰlv- ճoE=?ԉ'GGG%q(Y+8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2008:06:07 21:14:13 &(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong nFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong nLCntlong8BIMRoll8BIMmfrit  b.%?w:8BIMnorm(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp'8BIMnorm(+t(Q8BIMlfx2nullScl UntF#Prc@YmasterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H@ yL@ yL@TЄ0.@Z]%C2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@IzF%L@8fP >.9$/%")CK_j`cXK@   $2'$.$ 8)+5G.2%*06 "$!B**V󤖘 p惖 2 !XHƲ̵ ׯղ䳳 浣gߑ^$  ŭϫ"ބ˲ ްମߢ˲ɿۼ־¸  ǣtk ^ Ҽ ؿUJ"ZJ zȾȽͻ̲hw w ܿȾǽǻ,#YYȿ ǻ ̴   窴ܬu設 Ʊ}d ޜ͹  ʱڰ̱'Ι㸬DŽ˯ ڼ괴l ͫi밳   &i   (ò   ͠ӛ ܞgš i۪Y   񤞛š!ڙ t皗    쩗   jl Q 䞛˜&󥙜  ퟕѕ韛 d]螘  ȜݚҔڜ 3آܚ  z ܈  ր  튇廄暈͉\: ԉσOefć |쎃㚆ԇ 䍈ㆈǸ9    kT)!  쨩 ־ ھ ޿ A ͊̑>z   ڕ ͉֎Z~U 앏Ǎ ޑ^[ 7c] Ô   ֺ  )\Q {풂{~~Ƈg;h~}T^ { }~տ ~ lIMp ޿{ ㉃~~ {~88z ‘   Z Ϛ qz 𿻺x Z 勨 ӑ⟓g?W Ɏ  ޿Ѧ. Ȑ ﹵ڑƏ  +  uǓut   񰐓Ў擓V 㓒 ܽ 妑ڢŽoW 掑  ÿ ֿ   /  㢰 ӿɠܢ~{ꬨ  ۢ  ߩ ﭧ䩨 ҥ 詨 y  ~ܱ      GPs k   ↓  Ф제י ޜ _ 矜xǘ Ơ  윚 ~  搇   rn'  赐  ႊ ĴӅ u }.׾  勄  ѧÅΚ  |沙v    ӿs`lnɉ锏ӍQ͆z Ɩ ̑   0뗏ƍ Exȍ  É荬測~ l ƶ  1ԫ&g~ ~҆ |}~zĠ|z{ } u{Ӂ ѿ я몀} ) 劃{^ Ȍ  uÁ  Ǡ^ 疜 畎yA   ˯ꖖӒ"򕕎ݣk׫ hÐ ㏓ ܠ Ў ̆K9o ׺峻  Ґ 뀷戭 5v ˕ ` π  =z R  Ȍǟۍג儦֕jޔ$9 ϔ ʉe   ?Ÿ   ؽ  ӑPk﹇ Pf  ۓ qҶÖv{ zĵ   馧ء݄ͤpέ|dw [hc ڳ!lפ zB[“jĬԿ 裟   ٤ʤa  ׋v~of_ ע @ X 쯃t~   ¡|ϭ ԙȕZ׷vٴfxkeY\l   ъ ܤѬԨ{brg Ȯ 쬱 𱱰̬    ȾݾŬ xl_l]pjgp  h2ȂݵҾsėlYW ſ! 'ìT"ܼú   ǿ ƃ¡{w|s$ܶ 5ަ}~vyzܫЫyrvl » ú¶orԼĹᵺgٶ̷  ϲ{kʿ¥ tp~"׳w[ ي Ʃبq䙘ҍkɸq̵ķ㲸F괹ѵM(궸+ }޴޳-ێt)cݒ 9㻘~|v}~ֹ}⸰̿xw˙)ʖЇwӸVϕqYnlEԳD2E K⦡ò Ɵӟ巜7ëxĽy~{~}ҹÿ{q'辐OIDQ̼wffc $lԿydQfբ`m|ڸnQ򪛷٫硥UۙݳꨤB| Κ ҆=٩{p|ʹly(ɤӻz}l|Z“uRaٔ{ѩs׺  e/ֲδ$Cǩ Ț Ę ν ¿c{x׽߫~ouơֳl\m»踹ٱ?wĩknwƵҳ|y੢ǘch弖 ɘ ʚϮ6z旚ؽ ;  %䞚)b|}z ϧ   ܆Ί跏vkyKp`r|ùњ{:Əzᵑwn봊 qΉ Tkȿۤ * f%ةYපɃ  ˃ 񔀔לtFϤSQyuyخ~j_UୈxlGknR{{}̅f䳉œ`QS\ajo̷}g~쫂 ӡ ;ѥ΁" օݿ~qjlڎƸ  qֿͅ Eʮٸܓv¼dz,|mˡ̣ ױ*|О*  񙊇 u Dkӭj򎎏ԏyʙƛ֦a吐Է f̅ ̅хpoqpobL m ҁ )撝 ю~عƚ } ţථ褦â r H(|̗˼{ڣ 戙֡՞˥I݂\ڠ£    nZwՖs"uyցˉ Īτg| ٶĬ Ҭ ޭ ɷӫۻқ rғϯҪ Ũٶ˪Ŀ۽ǿ ~zW ۽ ˮټ     ߌӿœ¿לλ ¿Л  m ׯ ”Qqu϶Ѝ쵺᮶įЕƴ̿ﲶ  ׻ Bz  הNj  ކߏ   誡ٿ bf'먥 ɻ긢Ԛ Ԛi 򢞢Ց 쥥ךꗮɛ 맶8Ϣ ϵɟ ʽ Q     瘟께 ֝ Օ؝ڛ ؝Җܘ^֞܌왰󯝟ڟޙĜ洜 ׾] ц'{Ǘȿ  پҼښ𣅈 𔅈ψ q҉ Άÿ !򊋌Չ ִ؃ ꌊ  ~  fK dׇ  v  ஍⋏ϊѕ̿Íϓ Ϝ͔ zʊ  䨧Ǜ% u 蒂z{ۄƇ  ~蕁 zx 釂|Ӏυ&}~}S_j ~ ˲~؁ I N ۇz   * x ݏ˅   H  ? 㕒켏Л|l 嗑m7 x݈אŽ׊Ҝ  ׳ɏoGBE ˓ 唒# sr jӥ~~ˆk   Fw    񘈋u⣍Áz  Ӓ  gp ]劐עP ݩªl  lUp ׭   ȯ ;~֎ ̋  [֛q" ժ ᪪窧 }%9Ȣu}ĞQ̏Ţи վߺlpȢ   w R֌ i     ޿ 壠 BY"  pooĜ!  ԗ՚ߙ  K,Rݺƶy dž} ╲ 6` 򰀎玉 ԍ ܹy?߸𑅅ʅ֍ ߕZ 騆׍ΑCĈ쮃J 玆g鯯n{v߭j}Y  m  ډ騄  Wq p ߔђ߬ }ʴo͊ ̔zX[wˊ `{Й ߚ `= mÍ ȍپɍ ۽'o |ɦ ۈ  Ô  d  |}䆂~x z|ׄ"~ ?mꏀɧ ؇҂ q{΅Wz˖Q}~  چ_M Ӌ  ԍ  ~  q ~趓׏Ӿ v@ T s ҥ𯏐ӐÎړ˜x=[ޡĎڰnm jdUŽ }F̽dɘп!Υa8쳋阑 쭏  ? X𗆿혆  yﷀ򽮝Nʒ瑎ˠޏ ω !ϠᨙGLc ҫL ؼ]YgΎߒ  æ޽/ iI  ԽǶ{v ‹ʷ|ѿ :uv ϣu 󻡣򯢣ò̠ૣʠÆ}gڡׇhˢ̛ȑyꥠy  /jƞ!۞ ~ ֹu} uo  T= ~  z֛æ̧̭֧߱ŨԞ ުރnߪ 띰ht䍇  ݪ ܦ    ȃ Ɋ  m gks XSP`J,8پ  >' ǻݻѽȾ޻ ݼιܼѽubWj ϴ  ㎈|ۼؽyL༾ӻ ν α۸ƻ˻ݸ Ժ ۺƱ Ы~}ʯ z  𴴺òkâ 񵳱 Ժo ձg ,8 _䮅}4히  ꦢ x٣llk*  ܥܟڶͮΦ  褌͛tҿ ʦҁ馡 ] ģՎ㌒ҦHqtzO,)   η ձĩp u  zTrV  ' 壠okuѽĺ Pɝ}Ьyrњ сɜΙ|{ 飜V[װahcַt| /   ؇Ԯyvrd ͖ !ä{›ۿ ~ _ Ռc ݒӌ dxʝkǿՆր a$ޡڨ~ѱrG}XҡR  ꘊ  žz)> Ղ㟄󲂩 W }0Ԗ   .c}ůꏎsɵ 和]Ϫޮ| (|¹ʎUpܟYpc /΅ [;  H,ߨ~ۻx |  0|򺏖辋< 񠟰ΚhŞŢe#鶁Ȋ ĒÝ ퟞ}՚ңzw`WɆӜ }ÿ@ʩ  QtrՏw  ͤ(駨ɲþ֦sȩϥܺ}ayѥ  h 뢧~htj񦡢쨨  lᮥЀ  ه  Հ ༺!޺ŵϽṼ հҺǵ b ڹlʻ ݷ ϓۣ ᰶ%vrख़dz̹ﻴ䱺ƽ޿ 趶߿㻾 ܽӼø˵yeՐ˻ nӳ ޱ  e췶 ɤy༙wdz~ ľҼ    b7vܮձǏ~v־ء~  y| 󬦪ۡӧݬ d' ҥʟEޑ_s䙊JI̳yܔ | ߩ ڃ~> 򼡤ǯw㮕㎱ b Ʃ"bj "ȫٸ~t܅娅.tƾ˶mn ļ̂>GA  vyԱb ݐ  _  ֝؞~} ަ ըEJ  wx#̕iyuuJMcȻwy㠠 m h]uj{ 縢ßߣڗ۠a   ƁƔ͟{|KmٳxzȥYWw ͘l ݍlS 匊~䍎 ]Բ } ݿvpʲߌȲ̵}Lʟ  ⊈狋ݑ$ৢ{ѱ{yr ȖÅX ƚⵇ& A~浢 Г̑ȁ 򛑓̖ 驐 ̍Ґ󠐏Őy fh܋ ВΫkRXyqr{鿌yÏ ͏С ﬖ锒 T  v ~)ᨍھ ŋl Რ}π~񒁂|舂~刂Ї 䇁}Oy۽úsъ࣍hOŒ 䠭}{҂{ʄvֿ ֔   ʚvwyz w}ͼ#svͼvҚuվ ͘   Í̊ ׳䋒 䋍 󞏑勒Ҕ    YШylq{rw^\WQSQVm Ν ԥ  Ë    Oq=̼uytz|j|{ |üz Ϳz܉ èƩ 鐋ӊ 󚅡瑋ԇ|΀I~x}zp㈌뉏Z@lwS ӄȽk掌 Ŏ]lw  З0 '#θ{s{zⴧ𴍦ż lك M*$ ͍2fV ƔvȽd 󁢪~ 9 ߫ +Ʃꨭ٧ Ӥ裨ڧÿ שּׁ ܝuĎؼ డͻp<  s2  Ϻ   ? ҰL آᢵ2͡ݣ̡^﨤 砥 ͤ i}Ўמ gg 1    ֬.ЊÁ / 璎0㉐ˈ 򐐍Ľ ƿ w֊ ꟎攎Ë +? ‹DZي~Ҋ A~~ -   г  $ ꗑꖒՐ 镒ϼޓ цկY t a^ z 粢 7 B} }~x}~ |d 򅃄  ~} ၁ۄͿҁ{yJ{ -»}ǃ  ݽ #  d Kjr  ΍ Ў 󜚖 ϋ ΐ̉ƍ֑  oō* 㘏     :qڞ򋄊  掊猙 ɥ݌ 򕈇ϑ QVa豏ՌvCXʼn ك    Ɲ}  ƛߟ 諾 ֚w礛֟ǝiCӟ䝙ӌ ۝d%S]Ԟݟݞ  8ҭ 醴Xڠݥ ٢Ƞպݧ0(L暨җӥ B;{枝ՙҘΥߧXsw̫ҳܪbЮ c    Z׿ оԋսt|M ȯU[Ű»zʻ ж߶ ⵱ jiK ׮ٶϹ{xˬ zĬǰʬȹvlŇ2ձذV}Kz 4׹ 꺳 翹kG ֶ ϶¾ֿ÷Ȗn źaԸ3OʿuW ĽŻ ؾ ǻ 鱕Έf ½ ڼ (Ϋ oŴ ף  ʹž EȨ n ۣģ mϤè [ۉmʨ  eQ   ܲӏ  Ȗ  ݏҪ  }~|i} | 冁|˃|ހ{wn|y} ߃ TL}ڃyۃܱ{ ئ ԑ ȿɕׂh{ ʼnˋᓐ߆  բ ˑ͚⊑ x壏ŚʑhSڑA ٝ EI6 ʖ  Ɖ !"==  .  )Gl[^DVJA-Jai|smqqdW2C' <:0' #  ,F825=BH;C0! =FZNDAD\OUJPRO6,-1/ZEL$/39! q 騈 ٻǾȠ ̆瘔 ޽ |pZ&nєg4ܲ~ʷӯ͛Țӕ XѼʪ硤!ҙҍN q$ØēėҀĥ܁΍抬ϻ ܊ ͻ߉碐Çÿ˺տak{t|Vjԡ Ț Α ݆㹚{Თ"Ηʓtr͌ڥΓ аħ񕊯ꈫď̋üꑶ ϏžՑv—ؚ ԍ п߻enq_Z m1򔒎֌ɕ ߈ 5Joב"Ȫ̄Ou3򫕝 «݊ݲŽt~䞓bŔܜΰ뤉ֲr噘 Ҝ쿜u δh{\!xՕ w ܐے҉ z톯#JSԺ ߒŒוґ ߁ȉeȒΎΧzښю ˼ǹ ˗ ٖdeqj ȸؒyoU{ ׺ǩ|к̒ܘ ۃֿ(˗܍踠M͉ ڏњēڔl҈ ύҊ ݟ{qť͓ׄ ғԏ喩뺎̤x攕r盛 c%dk`͊ ɶ 'ȚddƍԠڪ Ĉʅª ćԈ ʋϊ Ѧ 쭥ƿ֞Ǖ“ͷޕא ւ²ʉ {ےϋɍӛωf ˃̑Ŷ ҩo }0'͌{nڱ Вň܌ ㏒ح҇ (vvʏɭۚvŶʾ tٽ Ά  䙩ޗӋ΅ў钸ݰ ҋħȑ Վ ن .v۴vﴰΚŰq˄ ՜ |ΙsڅPl܈Ҏ َ׍ϐД&拦zϣŤѦ 番ľً9,60BRz ٪ }Ŷ Ȣuq2[p͎Բ巆瘋 З下܌֊}z Ӝ{7 ܎ˠ ռʑS㦜؆ }X:2496884+,3MϏՕУ t,% 斑 ۈݻ ˅㭚xa~مԍr䀬rm ˂唸ճɳ׶a'v݊ڑՅ ۟ ݊龤ʒ<*erE0.PLUlmksOɪӈ׾߱ ӯʪpwkOّ {@! 䰲 vyx}񆎸 ̜lC.7Xx˰ʱ؏ӉЁܛ֘黊ѓ , ېﷲӭυӦ熑ƒˣ͙ݷ߫nku὘GyxЧVTlb`xuuvV>@B@54;4(')0112=7?8QijkWEtȚТ몬wy.#͇Ϩ ƈǬՔ|בŝAaܖ:3* `Ԉqך} ` 葌嶈ԱYB Ȥϙˆڗн ľټv~Ͻ使"$Kz汑zVJؾJåþzX_o|]XZX=3378/(%,250"#(9AMDESwtĘ̼ ѣԝ젣ʵ)# ݈ۼ ؟ʦaʄV&3}xI+! 㼿 ۓ蕯_ŒMߎՐ؊˲Ԍ󖻂a馉ܧ裂J:o 拥ʻָըƌ뚯ٍ잱ǏˉކȘϓו1/c ˤ؄Š錼z:iPlzG3Pg]E8(:2-/!0./03 %/PaLEgv}R\n쏽̉Ћ2'Ľށἇ@2Du~R6 wd 藔9ݧ֗{餓疛ؕ̌ ײ¤嗹̠È ЎǪع~Ό ׻ݷݯˊB3]ŗղu鼔xhÓmCsNj¼˲ɔLꭋ۳vwvvxXAC8# %<%,!#4&&#"2Sd7-5]mϹͺ  ص;~xӺڴɜ Ð˦ ȹ ԋþ ĚЃӓ ykʹݍȆܿv:jy_&xhްxW頊8k. Ck_6@a>2',6*)1.0(-//0:<=5N_\^}؁ ސޕI  ۈϧzx}XM}܈X0;/:7։ Iל伃ң ޅ݇ 딋͋ Ԉ ᒜԊݶћߓᒵ!}덚xߋL8t⹤J۴ً Ս!ī`Jׁ_sN,[<,/,)58B:Nqkq؅ L޵E٪ѺwտHp:?m95唘͊r׋쏯ȯ쪒 Жū  Ǚ Ǹߒ ǃ털 {軃+tT[vsq։ߒ ˻p/I̫igoU=?97>%/5*')/00. 88#J:hj 9*݇콝%͗q~䩵z2'P:3sa lѐé¾܏͒~Ǖ؏ ϔ䒮 ƸhӗՆ }gÿ 坆͡珝_K6擜ǙiSUis אڍfg ҅»\mf}}^XZT%2( 2Wj.A9$:?>LOMOuĈ 𣑠ߋ%tęӉm|؍+)·׌ŎE4t xb бeҢޞ߉x㡘 φϔͻ vp֌֏ˡ ʐ v]Ӑ跠ᗐ XTyT(tƓTd~dv܉ ԑþeӵkqË!2<@7(;H2,-./3$@NKSmsN=퓥2tZʥ{sQĞxkr<0a5=!ʆ͍쩊~Ɣ ښ֏"ό| ̘ Ϋ ʴŔªƛ럦͎tkg0%ג|ɽ$؝t|䟉ۊ ټȏw}i4=ƯktvxZBDF9783((.,"4081(H1*6-452//.3:*#-8QRQZ@#6w漄Ӽ雲эrԚ~1 ,nt{]5K4؝d;(ӕ͙k~–Պ햢衽Ӿ-ЙԘ葀ֆȏd.ٖȂ󸈡|~֠W04 ͍攻9ⷖ۰ؾѱᶟia͋ Ӡ峎Ηͤ',Ћ5̛݀dJfe@BD632 $#(9;;>=;2K?1#oyq~˼})f ߎsf܍Ϫf… h%ѫi뒳~z$ވ废ę,omγ  ĔūČ݌Ј Ȍ 𴍗 ZaZJ922Of_c~ƒҺtfዶ⪄ͧ^Lwvs֓ɣhzfxwsŮ6{綌é\sgpǡw[_2й}ENd`Z8+.+$zҽ{WvX;g}+YԸj ɟq⿧yѤ9m}̢[  $␕]ϼ aw׋o fklŌܠ֑  řΒҾ ׽ԍñE348+iث⎟趏tNKʔtrKӁڞsn຦ٱɾ̊:~dzlᶚ㶑vuƾu#Ǧv꾁9?n}%krgÀ НVḾro Rms^̒Ⱦꛀ Ȃ" gԚmKۭ׾v^ޱʰ ݂DZǑЅ䮒 ಴ٱ bŗȮ1$]~yܘFϤzjTeӦt͗|u\đs|frcmKz}XcV7<!]m5纊Ӕwhgmq{ֳdźƹmqv|dL}L˱ 卙ݖѼ /ceᰴ ԝᤴj#ױر|߯͸ێżƸ Ħ׋ ۉ^y툅1-sڵ ՈĖEИіƺraަ_rאUyyĻӦɐ݌.zNܯ~5g֐|Һ ٶ.tޕ܍r+ȗ߳ӷێ|o ʪ͍͡Ե쪆ɵ ͌Ƶ  n UФL*R |бVҍAϒ΃~Ԋ/a T͙{뺘ȞvXٵݑ ȿÅ唡 g Fö ȵ ƣf߳ Ϟ೸덺׎Ҵ͕Ķ빑ϐۉbL Ջ roP*;қ ىΛ)֠ʪĵéos}ݖ Շ"QQ཈~۰ђld {yX*풤|²Ř㫰Ʊ̚~̪óӓηؐҝ ͪ꒙ 61>HΧݏ(يʘpY~x~W^…c{ 㖇fj놘{ِ͟ʸ̰]}ٽ~ʉ"%ߑ󠽵ت恵  ̳ ̧ҘųӼғLJϞ œލg[ؐn<8Гsϋׯɩ"f?}NȪ芬krՇX!bũʿӮ ڋ˒אzbڒԐb`wӆ젒 Ժꑑכ˂䵙ŵ ئԂ|yג B6 Ғĕ~Ƀے؊ ψ [2^Țiy P*͓ο Ώ؍ϻ ۛכkbڛȸأ̈`y̱<7 шr̙馊峕\-Ҍ݃ 㹂󝓣ʋ ޓ쮛“ ݘ°o Ŕ퇿·⒚n ނߌK1ω`}؈裵Cӎԏؼj݁{̟Ɍwدÿ  ؎ƗƒؓЃ쓢ݑΖ ˿Ŀ دĻȺѱ ہ …͠—]-tȽ~݂ԜDꢔ|͂emܦ-(u}ޒ_ѽ  Ȓǥ ԓǯ 宽ԓ®Ż B ʌĂ᪊i}r ܘ붜Ԏ 涍͗x+o 󺌖ݒ ކ㙐L 똭 Đ͙ظk L"RȔ_z{^c˓ ĂczbЍ񧞔隷͟i$ 񬈺͵̄ Їhag ͱ G2Q短 Ժ 汭ɸ 6߇ߍܸ%Ψ&F܌ؿ}diNuج߽̏֗Ĝw ƢqҨ8݄ˉҧ 􏬝 Ŷ մݧ͆ הџ Ŋ3T˟͌ԙ :6ʌ׏ ׉.1ِ륑 ߕ䌮ǖӊݐы ͓ މ ѭӒƆΠ Ւn4LͿb^c񘗊 ϚÜّٓ )&׌ה啚`6Z햢݋oׄއ٪ޠֱüˁ²𵁽~Ջjb>0댂ѿ’ۑಈg =9"ǫ봱гE/Iڥ˚jb וډɎ 菅ڝY ӎ фЇ֏ޥ̵ 徙 q۫P}@=HKi ȳi^”Ŵݖ K # 䓦海 ܉ұ50AhrsJE õȐۯٱڟ }ֲز╳̲ܚȐʶ错މ j_ܚېfK̄H<71-/-4KkԊӣʈى䎻卯 锹p?<ōȜߗk3%*]rWpnOњ$+5xK7ʛdsdĐ޳ ԋ뿈ΰՑ {sբß٫غѨɰɦѺvɺ΋݇1el"RuvR:)= 呦ӻԠԈ âǡԺԜ~!"ýϿλމ⸻l+1%&>7#!;Ll#d/Hɀ^ȞȻѺǻںuhȈ⽼ ɏȻ̕üب ꜐Ԓ}nޖϵׇ͇ݯӌ T3Eˆ؎ ⍡f䖫 Ň~@<ĒՇV5655%$!Qh+xq%ߋԑ ¬ۉħ}Ԍ Ԑًjh |b݉ߍտϪȈޭóЃ}8.Io} `oӐΔ ԒÔ‰Ɩ°}`g ]Օ1*Ѯ䰰֢郻Ӈь?2ܖ$˭튧 铕v֮ ш˲wʯ’}Ҧ汱 I捚ʀ Ht։~\ؖÌP/;ܓҢizΔ gqه /| axK1T ǤӞ{}1M ȅ HЉ Ч !ƾ²= {ᘞwۣ޿ʌĿn"-D~Yde߭{ýۡn7 ^葾V ۻӞvb(o ݒ푰Ȋ̺һǼޜҿ޼oGBI Њޔٻ |þ ܉ǁɎ"y `d݊ˌ50S[h~񓶔ׇ>Ϧ〶ҙfҍnև@ȉՎߌˎQ  ꔬ GҺd̘˜ h_̎쒻Ƈ ͒ϒ̷ݦ ؽ\1J}(mø՝碘񗋶ʌꠓ͸֔xl.5ʷʮ ajԌjl& η͖Ѩ ճ ^tﶺɄƍ摱зܩ؊ߍlj xCƆ19RA3ќޢꛉ ׮Ѥ FV,1ɣawމRNa$n슘 ߞӘ ͝ _׎ ճ݆dž ՐܴՔ䞕Œ <ܫWeo +?؊Ҕԍټ n᚞Ί& پͫ ԉʋ|ΌPO`1'ތ"䗵̔꣐~ }Äʺ鹕⍼ Þʋ Y*92S 33aޚլ} ͡ɈᠫꏾpP΋0\ۗoe۔ ؊ֈ\̏gMT}'ەʜ˚щʻ ̚Ɏ۽ۈ{ đ  ʔƫʌw Q}/׈]~ >2ߊܕփ΂ m ~qw֊>(I^{d ̇ƶՌ~V%r߄~|Ċ Њ Ј `v҉±  ƷߍǕ CB"ֈΛ6? m u#rԕ㟪ω~ >ShM^"u`ͦÐݓܓَI͢'w!ĉҐ߈ ֆ 徭͹VFW9&01N=?Љ҅螊 L/UϢ蕪眝Vbɷ~| EԔΘߣ̕韐贙f^r5U➑h׊Ԁ q鉱/H 휡,הՙϗ؉̨ٔѾԍU46$@IB8:(O ̗c{{ސߍʲ˿ݸหߐ 눬ѴʊlH-hx}W2Ș،vκjkp5E´ݪn☏ ܳYBݰEڋō̶蹈۵Ͳ>g~[t޻j01/> Ϊ𹴵 ߜʏ턈 ̠}Hxh@=sv%[Ï ͆݃ 󒍩Yp3`ك ڌˍcŵɛK9  Ww˯Ӊ節̒ pQ20[ڊꙜĬ׌~żཌྷ쿽ݾ݌ފ߬ͻߊ eMP}ǫ wƧx(d柞焰ӈ ¡qrt/z 倸 ђ Պa Z+: =ênɍǙܻȔϩ=.M“߻ܒٞZ之ėǖ߻ 푥 m'oɴˈn qTSA}Ъy)x Lj힘븕zʚ݆h.ƙꉸ Ϗэ çɖ ۉƗ κFhېҲ ϣđ\ s茱 D+Dz'މߺǤˍﴱƞȪˮԲ"etɩ߉ф @m述ԉfdɸy چ~Y$o ɲ#sƯºwl!&נ߭ Ώܓ ꎭ_p ט췊c ;ɗݳ܂ԑ ϔ݇ۯ 帷/,ډ ^ބ կª ~ŋǮ ȐՖώƓN ~҈ҋُԽ_&>┏ތчԏڐ</ނ ܓɁg] ۶ /(}a~knA U𜀗ܔͤtՍ߹ƞ07룏 џɋfػϼ伽ۻھ +|^፾ͽۻptŽ 萹}㖏̷Őzj­#؏ڻՆ߶ېӈy ȼƾĿ¥\ tj2Jǒ^g#_xЅq_<6ӹֽԽ>.ߊ솨ʋß ܒljμ ꏤ͖ ꖗ?XyΤҥ됓 򜔘ſ枮֑י <-冎ᵓỤ⹈ᝐҜحԈ뼉ΌC:y΃萄qۼ6“`.`ﻈ#ﺝ’ЊǓe񻸳ĄΩεƒ츷޹˶ޟߪ լҩ߷ Ѳδ!Цz,9`_yδukѩØﲔ ȡʥb" µ܊ ߓք բóԮɓ÷ރd[ߑ/NԼػŸ 혜ܿ6GЩ狮Ͳۇ۵ތ֓ duT߫ѕ$艺ވ ׆h=ȍ Ƕz꒓-+(uɼӟČ“ 뵖ڎŻ~9 + ԇ㢲ɵwfẑ液o8"_评 ߡ²ޙ4uօ ɳH)jӊ Րcqؚər{ŴףދԓÔה)D/o^9 7ZtŠαې󙕕☠̺)  գӘ҄ѵԒ_zˉʤŞh_.&ˉ Ҡ噐 -w'5ڑ zs鼏fԖ㱢ՇߡǨ׉ ҈͉ӝ^.H'޸K"%7Zx߮ꓓƤڰy/<okmr~7Ǡh ȝט ̝ M=l, I֝x Φ m蠊 фmk 뺌ǕŠԉѧx/bypB;[zx{~s̠ޏ}ӆ9׍h c:ebOD︴Ǣqo Ӵώ م =Al݈ N [Ø cn ɦˌ ߬j Ĥ ͊̊͐ӛԉo)7 ۣܡϢk[]p{Zu݊֕ 訤s(Aۺ׎яLH2t ߼s ܑƔÏ䎘.Sg]+82[[ ⌘ݙ~엯—ڈ ǖ>' ≪ڇȎъ߭ ٟʇǍaH̤ҟd`|}KXbtrXH:K㍥Ԛɼ}~_%> ۑȚփ ﹵Ž篏Hq.ډɦҒG+~kcܷ ꡎ#𬕒nj眰墝Ԥҏωȟ ͋֌ܩ 7JΒ ߗ۱ENLI3 60i촉גSKQf$= 쵈 ᠄̽64sʎ Y0 ї5>gzE\پݍŖϖB䷖Т,>ēٛ71P DzԚ֒kL9God"Qyuiiq(A ىيΚ ׏및 ݂qɨxǟ90⤗xًݥܳX1qv?!I岌Â3Kx էoвah*ތ ښ à—ų،wЍ t4;wΊ묁گd&54Kp^o 렙֎tlԼL:׌ ْ ّrx+*ʮjmԚY0ѷe|~Jᘜ;M٦y}t$ɐ՛ē‰˥ەє ꦐϋǢ絊 ߪ N0?{Ԛ ƼυĖr,)?<3-7Gm ӥҟڊߗ+4?E92169b ыœ wQpe*l듦Ԍl~˿,Ӏz\^i3;j)J u̅#Ƌη Uڿkuʝ֌݈󴅶֓ o91]ŽΖ 혞w?MmuW;)*.H^ԊӷʩƥĢe-?(MPgb ?.1">`çҋdc܄ Ylclג{z Ȋ+jбuYih~$1o}Ȋfk -ڇߚ 왐ܑԧѵ錵؈籫 ׎Š㖳غY.3f ŠƦƏ)ڈ}WӴW<0*1Ab}ɆГ!ȇߥ<0cɪC ܳl׶vG=80&&Dwjje`v_slm_bӉ-kjw ꍧƋ ѻ酪 ŕًߑهuɗ Ȳ ~M1"#3445,!/'Y ҟ0œkF%0*)6@g0Ɏ=0H|8.Q􋟇)Aݖ֍⸈{ǩG/a mkΑɦɷ2hUC*))?TLE^㾞z|xꍎy _ ڇۏ ֐דǟǠȷ / kkځǶ   ŗG17:421- Mяض˴>ĞʑHGC4;,-Ot㼹70Zw҉ ̶s!R Xؙތ쑠䌏&˵쮅M!6miA$62O︗aGO>$2*BMmڭлƥ}sȯec`RВ¸ۺ \ڭ ζ&᳻” } ^-ѸĈ dz ݒ̑م񺍟߽듺 NJДeJŭ*ǩnWmR0,)5@d䠭ɏG/jׂ-,x ڟ t'tqO#x^)6*-=_Z$" ׶vH))615Ri0aݹȷpx|zջΔՍ`㓝 ࠿< 𛙕ʻ,Ń鑸Ԩإzp羖ꌫĎϛr|^Lَ굁ٵѠ~XA,*,*Tl™Љݠc,QÖamꞸϏΛid2v쁑گz@=R85]\yɎܯfTC*,2JJ=뷕m]nkt sxwtڗrԝ̉f᧫Ӝ °Ŷ ًο 뛫뿑Œǹh]×{㾅麘@ɩy԰W5.*e䳗3E˘u+.af߇ shz62Tp풭x吔ʒLiGܕˎۙվˇ ŵȪ ҋ $苸趒ֆÚ璶 qTӐgaC*,Sr|㰦.plߌ Ƌ'4տ؉Ҏ܇u *lኖХ K6!h3ԗبcT>'"%C\l搲ڻÏίps’ʚԋڍ jkh{!ڋ“ۈ뢑 ̣Ӏđ @q2첔uJ7++-)eyv61a:҉E|⦫һ麬ߋ Ʉ| Εȼa,V혆ã7%c֚߸moycN4,*4>N|Ϧ%޵xbﭙ`sэ́ ; {˗՜׈ 䡓㖤ȌɒڵYyˌ˟_'-!2nȖA/ێ b@xzъە$G؎  -1 ~$o ϊタnD6%%=v ̶lܲ{n~HϘ ħَߌȡ ϗՉܰȌ ݍ‰ ͊ģHڱ7~möIJRopiyĕzNܢwΎL8݉ق۶X.oءﴸ 4< ֜֩f<#*--GXn UXԼt͜Z7-E뒭Ͷٞ ﺍ ڶ ؆ɲ }Ƀ'Ϡą}Պ ÍԛE몗F+uo_!7BNך\jxҳ{,zΘ  }<(`Awƶʎ.fؕš}d//-4B=<ҍξһj~۶z_4,dݜ э h Ӡ‹҇Ӎߔ݋师"bj燽͔ ҉C✨Оysמ܄}¢諊2~c4z·W^ʒ1GҋJ??hCʹB#\ޓIBA8,).EQ>Ȑ |ƤkEw էՈ9*`#•ÖE.;뢻堾 ̂ g ~ س갘~Ր~ܪ ɵ ޠEJ햜 ޏ׍ ̑̊̚8옅۷sxbh͎϶°˗rQWyo|פhȄҋ/:ٌӿ؛ [xca%J Ϻ__G#-'*\䕏ۖ{qzګ%3"6he[" /bߐ ɧ䩃Ѩa׏ ʃ  nb ˞Ʊ }Њă̦vf{rccMKrbi\lO7wa}á s?dim䕕 X0–zd:*#4&Yr\ ޮÑtÐ#UG_7(0/+28>]ǰuZ⭡̃ 顱ﷶ̶ڹ脪܆Дɳ ϻxiߴ] ʲ܉·׊ ȍˍ]fɏGeֽϵ[h؋Ǟʹ; ]υY2{ z_ @ΕՅ$z1gV=:+%Sts$ﮕ좍önijتى"AE>c^uέŔߍ焐ٳʶݤʑڜ冀  Ҍ׈ԅˊjOuڒiǗAܚƋBFtڳ0-담 n j/u{Ƒ!p+EyYI4)*;SZn饵ߴҭӓtּ׋ ۏ'@ħŊ…鲪礧ÅϲƽԎýӻ  и꾏˼ Ŀ伾Ę񙏳蹌ۚƼ҆ oŏQëƋ֕ fMǖ܋jQ{mQ̤ H7ԗ΅ -1.6Gbzw~ӍÓɍx̵uۻ }.AʟƼ 襝އ ŎԔɎp hgӄ ݺًۙԕ´ Ijb(_҇ԝ ­.V܄*٤L#KͣŶ{xyϜ$ޗԸl V/ǑԯÍօߙ Ѐަʌį֋œÛfsβⰲӮے񵱰ȿ܋ﵱ筈ތ͉݌ӼƐֆM9 俪̤򵱯կͼ+iѐФ^'a﵂ԩqh\z^Ie` 輤liOѮ۷ xK2O֯배ҭˋд屲dn騏_{崰ޖ⪮˕юيՉǛʉ|笐_Ʒ̙\ ͋ʞ-V麓ߪΓ †ť೨ҍϏӓ©X*U⾾ʐw|f]ֵԳdJQfa_My{Ģtxkz\ `R3O͈ կ`‘h~ w ИDŽڈ̻ ߍÇϋw׈ܶ Մ ꙝȽѹ Ҽغ ﹺ Żﹽ`(Ѳ֧*|ʰ ̑ͧʻ¡n]*>檇Ȼy7ptЪ|~|~tffcd^hb^g\SmǕnا~}xŻ̲A5s䶑չ эκ۶ ڷ ᨋ㖪 }ً萘߲ˆ䜋 ߔ`e ¦ 型,e𶏈ʒ茹壮_1 汣խ͞·h.Or<ɽ{֪¸ơx~cMպijʜRNǺܽhM3̤֏ උy~π Оݒի` ⤾ʟǓ䗌w~ж׵ʵ 򺷵 tbѳ̒ub 񻷵Ѷ钿>2À0bЖzzέ֖ס‹-bIﴗjﷸ󷻻`dy_PZ~ldf͵܎vNE4öǿ ؋ ܻ Yl x ׎׈bʧ }΋ȷ0 a˿ތ t,v Ꞇِ35® ፏ ݔ䩍?:Gⱛ̵}wyT巧_UJȾbǯٷxgjh̅ בOf94؅Ꮊ `M Ѿ-$ Ջ 쫇ܕ݈Їy󠏦و yn76Ŵņp`Xދ ܜڟ`0᳑Òye6]ޓѿՕϕϵҤ΂ ӟ򅲦01𧌟7m bҒѐ; Ҍ ⑾꫒١2Ѕ ؈i]k/PX$- ޻̸ޗ Ҫ+ ՌRExõ挣ۻƣƓ_n30﹃M~Ï d`me※ܥ 늟׍~⏝ ͊ 2܆ی ݐ C0m4/ ʎs b  iקּ2RԈkeƝه4 唟 đ?5ΕQ{yh؋ 㞟{dhڋΊފ د2乡緳ܷ45u2o݊ Ɏvjϔƶ  eϸG1ԉ LJۚ j 떿6K }b}诏⪇フuuڒͼΊۍʔĆ򦈰1ު݊┇֙c$)Bώ wѮ߉e -K֊ݒu#x֝ 㥉掙1͑ ϓۄ6M  ؘކ ͢Ԩ͎ۖ׷ޛ᥇0˵϶øߵ϶ ø׻ʷ`(&QԒ ِ݋ɓ嶻 ЛȖ疎ùT.lp ؝?0𽹸 ۷ ύꔜ? dž烩 ˆ6K綹 ؂䈥܊|ֆ Cî Βޱ- ی쾭C08z ԍ87ß2-v풒ӫ 렍ʊ,] {妐ӌΤ ͼΖ诗$ػ ؜㥔 μżٻμż 򿽼 e5,@RONGJMG,''-P>I#&-3m vEZYYWdȗZ_eexwxߚlSÔe]Tj[Pbbt bJA^W H}˘z\VY_ rkBKV*5Ȇ4=⾩D鵱fb]`UXSWC` r唐ƶ|HPzyzjq!J^?5K [RhHsNniI[t[?C`7XksBr:L؞\EdKG}鬦 Hatjp^K㬧|p[rFzHXmQZPޡBJUߩp{~vIkz V|g_HrAluon QKURgjE Bӑ`0Ax~Ѕ[S^"\NPzM~Lh`Fr_lQzT =d]ZggLohwnuYHHQXTM@jHS`Cy>R?tZOJﯚPу_mBn^LL|}N󶠤S(UzNJy\\`MnU l=Mp֣q}l[WܨXTMJYo̾S D  JJQ"sx.7 Nl`uRa|O ՟z_Qx`QFʆ@zQLPX%4fT dVbSnFmʽ CYg|^]dsfL JKGcXfec>qd#= |CR΢tt«Y@ Li\w PMS@POJME =A#W5Jm.;ZnMd^eMS{dakS=JGFXQ ~9uE[FSMG੦hXpSdt/`LWQ IХb jl[SPH [bLf<MfS7 Iimlӣm~jĭI x]uhܮT>]{ NCWw=[F(ȕxUrmQLݒd6U2F I\UhVZIHlDqBŦ |K@{ 6F< hVU\\ggo/!orWTWYWVSfTs=lvUKaES[XךG CeVNEcYwJN{qDD(NXXʚw{q evJWlG KT BH|fF5_QI&` {LjXd|vbbaZP@yn |LSDeEk B]hCCHG @l{oιt q]ܭQcfg{OoYVZYP hm`;維E ~/EaTSjuIJKcEFecUsJz0ńZM SDJ P?|\4{B^ (O)'Paԩ_}^"x}{ KtkFm —Dja AT㝞ixClB} ` {RO^P_xoVb>Lta[IMjz@bfbQmwWFُ_a \Q]hdHtR{K WpcMbe r PV0SƉ(剄cVгaShfhᣃ S O>S J8aJH]ewc0_#6?8lEUL NML~Q}|ɹV&Is.YzXQN~xRPXstoST Xy۱_SaPl~YmPLSL U̻zc^SpfF2ì lvwp]\/%Q`ذNӼtSSjnkM֍Ar]Iv7 _AgE]KGIKFaX_k1/p~ b.<cQSe LkkE[jdk DtiTj.?T\@\D izŋHKWOWMusOg\TZXԶoIˑ 뀂}s;Zp [RTTUYVd DVT}Fɔ 6Zauop+3bW?K"s8}AK#0\CSJ ?;iWQNrޚ~G@Ye3S7xy}SX@`δ iYRcp HݘpuU£`2h;GS^B`BSUjdTRajӴxwzgmPHmvxYLMg6 5m0`xaf(x6VSXo_Fi ם/N~M{p {9gU XޡIY{tc domӗo IxZ/HFw,IۓMf?𛑓 ƢYHrl cEhjQY|DJ ȹsI ʀPGG DXeOv{ Xa⼽ѐ{w ûĔruzXSO;SMqcacXr[*6CJdH`J_ Դyl.U}z@Y AbJs+J fBIHړvu ~f7_Cg?CJQi?l]> tȯ JnccQpyںҀ[OnKm8_Uz|qMR L5; \kwp᰼J _6sEo$>m:Ϲc˅iA C\GuXT},_Qc沘I` VfSO=~6KUtTyv HUM@a:d GfHeNHK Pڒ HYTStq$DֵB|A?CAGfb\c/ Wڷ@gTk ]鸸 GN\sfξ\ 9T R㾴 evvf ̽A~ʾऌR}CTh }K cGO&/RvAJNW`IK㓆vSyC 8'upUp2lHbaOMQAR`PACwdo\?fetL bϡIo FC嚎qFB荅Dy V6򵧽ݳіpB BR͡f˵ک; ]M`s|WB6|ewgXܟvxDLCaHsN?8/efЙͷsSpݜhtY rh9@ JNDN]gSzDX5[RUl҃emV] rXP_ EgYTGPaRrgbY%GbBk }THݗ g<괴]F n]]iѶ,FULLxhU F[aYORW|MCbf]mWRSSVUQlrz?ט6#&m{hn\S]=JsGZtPWV uMS `{RnayEaSWXIW NY >< %[Ṋjpjq4SATT`mɈcL}Ak sGũ A\oˢG ᢀswrtzhUT J_v<f@ vlWGVTNـNrQ:O8NܖRPw }y {I HIBrXcGKIH{QTgP~cM^^}F`WWCUKxSy_R fJ _K׶#TKVp~KUjye;RxBraeȵYdTXM}\(i?YpUPWwK| vdxHا 絥ݸR] pdRenH>˱ ߫^ql}wnFbD5S AFGUrʰ XIOS0?5JfJkf}Fbs*DٶSV zuEuAik@\ JzYEC\ ]Rfgk̀RE YO付f ][KSLj[Dpᏸb|UwH[spOVy_;McU Ɏϱ=m㓒 XvX}w|y|~7DwklR~U^HCyXaC♒DdG>,y: gK`\<F ёPf c±g @q~{ׅAHKIh\JB Q1P^BLўJMLIqݐWcxSz`#s`n:ZfX0=W/pVGgAOnkRQY~I`hkK֮ QU᫬Fc#҉yuz{q +/,ZO}l< YVJVPɩOK"̭kIVHJ iKclMQʭNTe }eܴBuS[j ymSuMRWwWcH8MAɄRTiDt\ΕT޴[SvSc JcL@M=eU XۜrWVWυleeȔ ֫S Ǹ>n_"鿰|mH@D:)`ً>; nTUa xM Jfq_GdKJ"ʋi| TUt LdMnUN>JײӶDS'Qۿ_nzY qa]kOުsFk^OFoS|MqIHm^ٰg}=bnpS1Bu&]`Rg`_[I acnTMpPe?uPVgcTʵ & WGFspad]w-p.v<)E*MG,*DmڸyJaC̆ ־Nд|d)@(u 9ZOudPQ w ̽EI{dNOF8bYe]XRh۔Gp_TM SWczcC/ pZQ6[>_otAx@TStٳnBwhH_]G{jZɏDw9鋓З^O#Nxp.-E>%4d`5kźöy;_ nPBrXLsݔlGcx}gzغXm>S[ `=yV VOM^r -LRK;\ct5jKT^۶ˣt-5OKKT$w\ndjEyw7ESTA}úu6ɏ3ÏfplDcQI HKz{VgRm c[J~DqYf.rXLI]?$YDŶ}|OFGhY [bKaDϖ=n_moT ?gpX\raqTT^CWHI CieH\fF ˫V[Bh FTcuGeaʌaQDSN!軩fxL`W!]wiJ8>!F?X?IH Li@WU(E@FjOɷja^rsRenzq 4^DzKuRs}traJABGJIn}Y]Y}ҿPBV]ѰH皉HqOHIrC?|]9xS PL Zji{ eeX Gȧ` Ѿý⹦jVSue h뷦I/CsGҥbͶ:@ldi` `xAB}eNYYX%2gHCC@AILKJLLWU#S~vr}w1JbYG <xl#p aZiх=jw\`;TOTs4YyROݨXOSN VSW؟ E\TUDTD:xA 2iPRnɷ|oEeBlK|V8ĹU_pM0G:7|q5S:K JPLcp ?~RTɲ6qMzU]WJĝ9ĻYB hLgI%GJJEKNLJMLKGBCCFC#n}ktܜ:߱@KNO Sr, Y kq\P@R=KLEJX+LIKml^V OA}MVxw볧 c(ѿJPYkVnA P;} '`xLP״Iڌi\Q *Ka2k-}yϒf)1y>2_DGu~l> SJHecPv:`bw5LsGƹC~ؚF[~Y1k%$eq{|ijHwL^ROb^ede]Yn RyGtdbXKedrȷauTBmxz|TseFHtnytv#ͣɳudy}5AumzyPA LdJ WSg^` IOBtQ jNsjKyлF>¸Y@x0%0#cy|~xϲpE?Ydv}B֐qoqx{eSav{{Mn3fSvmGd H+(@KpVeE/tI\Ec~G[YsxCH_쟜ufIYfϽjPꭢjb_c^HR7K_@[_PL_cV]SNq.ZOSeU;DjzY_ƶ BLY9㻘}}twzxs˨pmzw{t^,pqq7gG^H ޺iP{p Kԯ[UXtjdIdJ.@]C`Fm©E OcjOY\Y\QYíwkMCB:Ơ{ps~i[n~sw]fVʷk^*DHUPc@B2?}TFьHEE RJj_x`LRc Td`i\ļEћ rm-DA?[JsNg?wz^?thFFWQeLAlsPWqŶd?C7ɻsqyqpwpxsS0/&(+5DBKcx$o~b.No~~C:՜nFwHu\^Z[t}pOP(FϞX#62*dA1u@KG 0 YBv慀s#fKsruqyspvoqv07PfFԭur}zQ横ѦmR]j}ϜzykXYYZ^W:u zSF ΜSUrW} tZZ?ߪWJTSRTV[Bf< ̣VOwL`s`\AMM}~diVQSWsHY7DөxA^aHO4 v"ߦzt F{!q{l9GʮĽ]\PݯuX xsrSЪTq䢛 MQ@nOE*͸@ЈiTG GZSS]bmZpܨ;ꠙԋ_I֤ tut;XS2-asyuT {| lOq}O S@Y4U9QaH >ǻt~ ǽsFFTQX\Wn |{dõgUl NMtxpd 荑OgPZafmb]E>aEoޫ\_wn_⫞AD- ܯvYYRw~q T CL!7Y^U\TsF^U@trƸf{Dp`J< wdUnqLTm ⢡ {sUbTMX][Urϋ]8| zjV詠 beǤWVNܧCvT`| :`\jOLW_q᭪t~uFD5MD_?R~wRjMO]@xny[tQX쵧>tR ހ{ٰiBhI(_A| uvnUx NQ\qUHUo;UlICNb[ e` U=ͫལ_KᮣCojDSԔ ]9 >ҰhXGrrtg>s}w5:=[ctAqsSmW1y:\UnuSTec^ ᯮw|<S5մvI樦r rSߔr ^U꧁w@ w׀UBR=K~G\aoA ЮIr;w~ywxGVo3"Ad\YmcYZpM ؋LVq{еQYT[gA_QbBp]~UT P_yGRÏBpl󾫼WegTx{NOx:Ji bUCv< /䖎WOJbOK|^rfWUN_kٙip]l! ѳ }C= BQBbs۱RoN "9tkh~ ܻkRl ׅ~u?AB^LǐjFQhW%ۨJRSrb7+g}l[Urv|N[̗cU) ]kj!pw8 MsFEqt uqs^[un@dBWԮƷi{uV x<=shxITfN_ v`t pRsJLLNDbڴWDeۛGe rSk mbq򰋃JZqSE\QoI oRVUiZ CFV F}Ep[Q^kSRAj~} |0To Q]\H h`^qIcVJ|Up JvkTXPukZWX`e_│FZlswT|Xd>AQmyHپUSSiPv8H[Ѵ9?>PUP:p4H>U_OoTZ^VQKd%볡I;TQUφDfs`Ws txtmOzBJ߉=힛YBݾjq}p$G X_^[EpEXWJ N>^ISb@\eh ʲN >BOrcSL]T Sn{{4#%Lپ }^p bDSWZP>W aUsRp?QZ EḶŚgMyyl[ NLkTK]xL{{㬚iPǁcI[` 2WRWPSsWP`̧Lű۽V_E vaYSWQJ`IWQfKO[Qa^jSEoCPAD]NFLYDL U kKSd銽:naZE˾UѢA^?0^xbb\lnaJdN VLA }fQQcXɈcUsQ IiW\CSc涒IRpTK 0#[}mIi|NyDJsvH[|js W{9@iZvJfSaMh]'7mʵTuNVIR ?{WjEceL}EߢueMJKPUWI @[d^FHzDu<>fѹùp| tPV TޢUmOE[kNX \p7Jcv{sxhKܘg1^JZRI UXkҙ' E˲M*`SLk3k[sLINL`MSReiL]\Pf7= Be!?OFf5t֭MZI¶~g)D-aW@;Y o YUXmC{VMm3*HS YE}\=FqY^BgJTFqr&N޹ FUTR@ ȷyVvuHEjѻkrT FǴuE SC]T!mL; v]d*6n컯Iƨk])h ~0:L<jkCB$RsS8^^b`mN[xwI`B^]FFނmNlItnT0 _fSvS[G CxJSZW} SfrHϔQ\Jd MUNaNS@PpBBmŭބAs ;TTgRTo ]b㙋Nb鼟z%|BnݳVhP^[IIM^MtjwiUckͮfqirYAfLDZ QieJILKY 敚KРZJw`Yܰ[wB[ s WRI^nY?Tf]=lM[ѥLQVwqsoCޅErFgmKDIcXX {;k6Bu鵷\}e_zY6`BxYObE_jxpӘn !wkMbHOnQ)TXdTEtp~|,N.zo[fG]Wh\cTXg9fMV WN 9彇dg?}BU]fUTRțEsW^reX^aQFJ ?Mo=yPXIs} زuG?L8Ė^Gמ~ A.}zGE-yEÙdߥX Ec]I62SW^[G ve.깯VU`MpJ|p?E"\WmwFUmQqLVykG5O 7YA<P׋SJL fG 7j.9MئX}=, ⫸_|3M l5L}]nvZkgnHOӰ`LPO'GİZWPF bc xujxFRGhCWPڡt-=;ʤӶvTYnXdO^u`lETIJ\ ZyqEƗ]El0ۅQ Ffwjj V✖ǂUeSJwTOFqҷUx7Q 伷=GY2q7zInx QZ֥r lt3oINpBTq`0 7{w B_YGij@hK4}^r<;xį>s}41eFG DLGsMD H:C]IFVOVpzcrm; b鿪LY C-"@a TY^N ʭXKFӌvxtN|FRi[5 폇Q(K(dPIsslOTYC[VMnBYK':zܩ"lF][APrD|N u@] ֙~x[\njXKGe`ˑHD =rHet|@nfGMꞎGj L2XlORUu@cfSzUҽxz ΦXC\xԌj\DS\ fO&3?5+xqϰKO `GK@G<p UInGwtU`1KH]< [JNL[?urͿVN V~~P{viS`{NFjwZ\[PTXV qHkzG^c`7|gsI5dΗMqJlJGgYi߬؂G \06m}}{xy xy~uϳggpx^VbDm>GD`[LULMn{vkW. *lb/s NͷTeS GGisZGwxyy|n v`Q9K =yF|DnpÝKpa^Ea ]WVWqٻTSgKjԐIZEd{\Xͦ[MvRrF WKRzqnPe'oDM EG>%s~Ы|ӷ bDsg\GߎX\/`DcCq]EY;9e ]աtG[aϐZ npGșw |_M;tO nꝂUI >vZ_JI S콴}~.H'EHco͒`GipUܭLbf7b!8 %xF}K= @m]cF] FW u| byBFL##ؼHGi{tޣOi>?k WLM~tsBP7dn ~F[kwx n|x9|[]ɇLDQ vJ\RHC?YR| NӶIES `I> TžޝTurxw 3SĢH_QKPGXHʲJN.~BDHr}Kps^XgLVOsKDCuv}Q𝎋ODs:j5@Fo{qr9P7\SɑYy vHRLW5|KfBt Vd8[WerjZj7K̒@[fݶGbS oNKR~]QZ hmHqH^8?^LDOUc{wbzBx!m`JrtQJ}po\htucM P܈3}UZPLn?SKPװiMjwwmDЛPv2k8SˌubDz|=coqPhDr@-H gyy oKETUGaD&7+NF?^bMAe4CgSi껵GAv¬Hk;tM;HTX ~vTQЬFfq pRZiC> i\MQZ[[>XFEmwyh]{u PUY"cV^Pg@Lm7eWДpVN?ґCeQ?WnzPNٹdG}TAфpHśL=P>!wGiƼM #UP{sǵCd`kM?@6}Wae_Gn uywZw[^^=w <dx: }Bhcq u!ӧZV]t{frwA[czo]Wy jDtx F濱PZr|py F CU3 mMCe~^YcQפֱgz{iQůEFwP[I` ]cmaHLK5JIU I 'TU rNXzYzEWMCf @h2J~ nF.i筞tR`mrw{uth>nJPT ߋZK<fMazx Y 8Ee`)H`1y}Jej\lBG akKWZY/v>J ꪈSX߀hSN=orFrYHQ>zWI `Zf=fLBmDfH^CYUpZ݊V|j ַȖ]MQ[cmps 뭁^Q\SJ_XX]j@իZat F ϋT?]c=C\.vr,QbS #jUj7KEX\ N]_i_QT +DHnEXUYP sE݂ X.$ݗNWXkL߭^ݼ[r ybALTkmڧvZRgEy aDE?a̵㻕dPRWU`kjfl{^?gUTXpϘSăFw}n OaEQ`Yv>ԑ!(1]xVvM[C|Ykja e^K[ Ce@ G=^CXaμڠs  mMc*s isI INjFt Z= ޏnXfEdNNGEtj \nQR_ǐjTPQQU\cgmsuqiDgKpNʨMj|wѦJ HxاD8 [g#14t^OHTMLlg `NP ?ps_  SDz .[_tBgC  tn4QK {>fX6 pJf QWzImGinLbDEQ?a EnDjm\ɄeZ_]`_bfhjvvsRDuGTX ֫~w٭MUMcSO떎蘨Pe1[^#|W=V ̕yx}#z RWXfPYzL]Щ Vor+8gt|bc]\\ZjxU JZxjZ[5!_ZGsDzCZR|>'MRTDzA}?saG{USMP N[CLZi9uXckW7oƢ~edfcb8):cheT@nKrD`ĝ/Lzl0Nw5VD`p&EFoYMp@ OŶ ;jzJS弘]qsqlK}YZОP}ZrҍZkyBmsur,BQU`JV`ZQ㿜QNhpW U`TyY7'--%9b:{? wSsX(0ۭFFhOa MO߂NwGcP ϾO{ilOVFĦGL~i`SPC.)zKj^MbvJ߽uJOTC RiESetqPD.QNMMnC@q沪 BīCYqZaXŶއjx}HV]XЭf]jr.3Lz)F:HUEVHTpr|Zm}OW ׳m| PtQCδHmևCsuWOQ ȿsXYaZI{S` YDT֚w_#B¿0kICrphւ||1+UzRjIPU i^ KXPOI;8ɴUtI5Zڮ׵ہqwgfj3<Fr `A'1:d }R\VS`Fy F[PkueIDV<TPKkd~ ̹NV ]fHWy!szv{~M$AȺdGtxaSr]nW`Rx =eueKIk rdF T=fa -.8뢞O^T/.j HsbOhgԶ֑luz}thz~KJWi2G[U6UbXG2@BE(8fH^ dk^QSiu |xNIDل{HNROrEdX’TjŶW ~t^OPߐozR/iĺBU^!B_L]quk7@8ܻsXwN- ̻LuQ^jR |PNe~kd `A@=[ܶfVJ3TK ݏEt 80¯uxyozA wmQHu@PiMR 隊I @ޙU`cFQw\aQH䗅Sӻ1 RRwp{s-k}s}"]ǹ}V/9ӾQNŐvxY!D÷nK'b ƭWlkKl[fDPhdoW оx\Sm~~vny{zyfynzr xFaTܵbB+b wLsڶ{;S8pE ف@x CSJJ]RPa%_@[dTd מ|f^`T`M 4Xs^wDHNNLIz hJ{b0,0itՆLdEG^0M\P`QejsHkn9件{kuMԷGhB)CWTThLPi8Rz~cPy¢D P„?SOEs[zwVVo2ýŰith\wv}zLLzYֱJ=J COc ǘAKGdwPbjzge[րueo 0 9Ljf g鶝pd ` pґ\``^FmٿGh X9OBoIkz~vu}Ϧ2?IX9SKFH⹶kW ͥ Hڇ\LJQjBD?J&nt"la`9Ӽ;WZ][``bQNtW<;Zl62Fuxsnv{{wyyr}|xfS=Kƒ mI[x~ ՑJS 4EhK t\dvR#LW"[D~ЎC TQTm{R>ZBߒLiX GRW L6OR|sywsu{try{]CǶxc}BiO￶q{|Zܲhu=`k] hr@z Щ>%'zQSi]{`п`4Ghk ݡMtKc Uw˽0Et|vyynXPtM^sUe` =׏Q<` PDa^Zb&ȴsxM\ť9NTfNcc 6P\Qt T/tfqQº<9_ro5LýѐI܃Xͮuo|{{}}xJyElZwvԈ\᷾}s ]IbʰhyrcB IU$FmQOԶLzVoPQoTɹRVsW̦ECtm?V|URĺּ_`] bK1#Bv oI,WlO^hn?BKaZ>ĔO@L (izvK{x~WI<;GTpxq󔏑AݜFSIcm?oA{0Oi=XqhpFw@Gz|{|uZ^9[BP孄qQf綣_hj^SC,nQ_U zqNN*tzWq̈́L@^i?WD Jͧ CGd`:XOPc=ZQ. rj8xb`X;X%X_9ҝMJ^@ln=V}> 㯪 ^ey Vcv3cZNqQT_̸LakO2|xt~NtUxJ{sA?t#QTcaIRtkQ\`?: U~/!Im<UD񏐑mR@ o?pկoC 8IRQl] wz&V~2DóC7k'#N{NXe jrE`ff^t{f}H>m@V2 sw辦G˱\@`os\`^TXrɖ^LWʿ ErhZntwyuwPYPJz~_rI$FLUWe\˧;9Kx ڦFYײ_ix 0[̌dJXCj ZMkVZoHIʩQLOa_]e[zI1q>IGnN$,sv}>Qzt_Zѵ^T7vwy}Y~k[ h}n?J r`kCmfRSQbtN׽ٚ^]LrMhĆq?*5F>3pd]f]WnwGt]z[)JbZǸPM]}?d Q>e oWlE[uNro Mj[ IfB݁LXw9gj5S"bjBGDڛ{]QSOmV`U OFCEas_0lq`ru{|M&Eku5-$i,R7EoTL綾SIb\tdEEQYΨTIq|_]A7NNEwxvЫzk:WeNh~CG۪ Hx}txrL2g tPJDaE)(]p#Jöljѝ~wxw}M Q̐2 p 75 ‡jZW\bjZX~MQ汋,Y5uYU킁EIZcS PXrLW _QG8t}~J$KDAU~~C/xvr{r-1hplY$sm02rLɸIﶺJz:^PUahfP xq_l}aCQxE` M5?U`LEYO]dQZi/Lnujs{x~rxxE^%WWgCWmU;TOoEi vJX\4SP`P]wQc|atO՞ p0|8 eS y@ecV gTZq履Su5 wG=f1QFɄza(#RP*K;~rt}^vLJN*9pLCxv{/FdSwqfSɸm* 2nT^Wlex TddcYY``aXYs:лȶ{DACՇg ˁ@{]wgYw~~k{P#K]bXd?dAa\DbQ}]T3tIH} g}ɜzUE]cJ=zDպr3/HW #]ȶ ۬lXtyehE>F ]KRKjyOA~Y4$]|%xҹ8GmLERbչrz$-n@HO\p0|zm/DQ dX|}{?$aHemmĻoekh$YDmM[nQ^>RIc;M1oOgSGYx 9FILZZ^Ucb jUJDiQdz|@eFciz{ys'i}@[XAO^y~P&#hň;IK tVdg εuyoR!lnBſ|rwvr̉^Uи~ה~g$8O$wsrl N~t[iu8x;v5zSZv2Q賆FcMgI? pOL ޘNH PPn]^_OMۑJU_@ M˔{y{1{JY f3VXސb0zo4nIp MR ՘~zp?W m:gտ[K_VϐtyT3gwk Zm\PAqVXO3 y?BNNfCMEORzz6>c|k ʒ`Ev;I^FXe ENh"dשэFAhiZXUe E~]rt*p?x]Imܩyw|xwsquy[Jktc^Xzsy~mжlq xykvKY?c=K6_WΊ[ Tᕄ1SfIUHvQv?HCWPb`$CPTTs^TjթH~D`IdEJKu|Mm15>qĎ\DiiX]]V_FN ԚzigmqQL״%nspL[ZS˯AԷttyu!vxrnO,7kaʷ>ze~v~:kO~S Y{nv|S:g:3[\f iwPU.P铓GWXpEWcQNO59bFؤ2}P[S̬>nA^IiwuuwgEU7ntv ~>H0~L/liݓVUws~zH˱Ts~` ArDh·vLsPOmUIxFdhI|ĴUuLJyzt3*nxnrxg?u~{z~|~T/8D=r>Gxwuy{&o{qIM}s*~W9P] ,DaPJtONjdA iU=eL _b `Zꪧ[Ƕg`CLDbKV8ڴ=ҦTV qtC~>>pSBu<]iQtIV~lKM˴pw#.}}|xl7a {xovzqmulnqy@9`mi y|}}d,|mj{qox+RoH]=pDR I3Le\_ޚ C PY>ܛ}Yy ЖbhHs[R^폊cM@LNNrA o~bHF KWF rWE eHӴNDwSuFiQǷw o؃mjrbB~LȯgYyj AE B`ԫ ELSW~^XtUlXH twC \4ہNfOMzBZzIsVD\J&&yvKFLw X}6V/MrC1>HyZF}QVB`}^IevvHq>HU*M఑EI @x\ڵHWSOQeϱd ҕ qEG_ϯԭcb^JVJ3 OQ uy[ gc_Fs<\dAE dmvoŰQiu뢾qZUMUq] N-L/qB fyJDup=wK묎sSV^][R]na|T G ڮIU [cYPYNrõ eX 㹲  KWcJ@n? @;wlp q}U ߽Q[<eDqdHG蝎{lu1IgA EZg|LZ` VLXd/H- K<~|øyєyxM _Z`Lv~}lEvOKR{~>乹gH TSM{w dM6BP[y~ֵFo3rQbYIuodf aaӶmxYۂ[%xE _IVGET=  ɷV\JkW٩+{ Aɥ]bTR ε@>K 䴰Wj_F ֱƵovҳSSz|QabUu'^ZcNSqF^ŋ PȢGQ{RyyҳH϶lFFS7^zE`OwcXtB uQQBL\ sTX^ Nc@Y4  FMʓpnHתL C跖k[ ~M k[TYi꺷 hEFH@念`͉9SJ[V xs˵h?~Ӆ[?' < 5\ q^?C\d ?jc:ŝTCMۣQn MfѹE\m_LeނceDM }_bUXLIQkRs 뢢]C{Q ?POkdڷpXIV^[ڐ 񯏏 e7W[= |vĶG]`bO_lwf够 G8{QdYdT =t\Pzljč[~ HUyhqgJv[Bu nK9F pHKSKh|zVè]Wf?XJɓLٻ ޺sLʯ aˡ`^ @\ wƶf Yy٘-.Drܦ {@AB>[J_MlKTcWX `K֥oN >IhQa:QRDhG 5ޖO<YE$BUM[PFrY\ʶIfVVǒ ^g!Y_tSJROɲsqywøW= JqpnNي<_ZPW<}bYUxdҰGq MUo=GknnVKQ [aO @٢gPN ;ktҞVWpIY V^_?Yx'_ ķmǫZط F!kgVOhRNu+">?ﵸXEWNPalq KGXYI X eO]]yWsn[c~y!OVDz^nHm`Xޙ lO[z[dWfQQ wmP;SXYJK[Vtj~\`S4v VWqJ3NkQH [GddaH |xyO\]sKcOor^[AUbu#e\IadddgD?Z(Kl]LZs̝H¬ͭҪCBw㾖b%R4Je芖P=\ B:c]N؜w BHDOXB`@EY?l {gsKtRJrDeMx8QGWWzJtnrHBdda[mS_kL2¬bccaf螘֗cW9 r醴Wۋ^e ldZVCf=1KQ WiKSY~ii~b\AذQ}LI{MY]Fyd0(N ?9SzTrIԛ̊>Y`bjuYrNV@Kbᰬ߬Izx~jťܪf搕e0v]߷_Vl@H yaR#ccf˔ \U`RxvIXD= C_EGGIT{I?LPS ֈ ~y]ZTE}p] N՘Fd=OZP[Z[^e{bV{ljL`Ry|RTSOUIR™ǚvnҮM |OYnLBV]Rّ|JtLBF7W[k=ڹSw_9}a`[`HBwkiDTNq =dN 분d O#PKW ` Dd  8|GwiTdY?N[c⫥բrost|t:IfZs:Lgї}Ќq(4ZgZVOY~gDU RIV CbJHOIC[չ@vҀ40,nH ddJLHUOsVMNW o Wm8K ]Z}y ָ^eJU -KDQJ@ :]Qdq~wyiɏCIQǐ^O[ SSozs@^Hac@ rNKjW]Mۗ;Z?_OMY@؏`d{`Q]o MNՆlxUfW_ JxdKz=KL , 1K1 FRFh|ƕw}PXq}w|>Jf]QBE @ (:K >Bw ȣwM߰U^ YRqE{M yfUz z8=mDO]Pl fo]oTHD {}KXWڢ딓GPxVvwy೿Q Cki.i    &$%%&%#"    @0@pP 0p` p`@ 0 `@@PpPP0p P ` @`0P`0```000`p 0`P0 `@0@0``` `Pp`0p`0P`PP `@0 @@p@00@@@@0 P@pp` 0`@0P`0 p @p@ @@0 P @ P``P0@ `@ P@``p@``@ `0pP  0@0`p0@@0p`0@@`0  ``00@@`P `@p P p @`@0 `@``p```00@@@  P@@0P`@0`@Pp @ 8BIMPatt8BIMTxt2 /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (PoorRichard-Regular) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 2 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2 ",MDL4>0/!6QWjuolcTN(' +6#$  3/# 'FPB9$*<3# !07#6,>43"$-+B/3  V!"==     +5J%):YzpoUdUK>Wnswtrsf]6D3&JC:&6"1*/"1-DB@,1;OdUF)GP`l^ZOA/79`_j\UUUrfxmp\U?:3;<%\LV/==@( q!<0 "  3fU`CU:9,C[^qklkjVU*<$ 0-(% "-58!-35]L@:?FXGE=5$NKTG@B9TTb\cSM43*4L@K&(.2  m󤖘 p惖 2 !XHƲ̵ ׯղ䳳 浣gߑ^$  ŭϫ"ބ˲ ްମߢ˲ɿۼ־¸  ǣtk ^ Ҽ ؿUJ"ZJ zȾȽͻ̲hw w ܿȾǽǻ,#YYȿ ǻ ̴   窴ܬu設 Ʊ}d ޜ͹  ʱڰ̱'Ι㸬DŽ˯ ڼ괴l ͫi밳   &i   (ò   ͠ӛ ܞgš i۪Y   񤞛š!ڙ t皗    쩗   jl Q 䞛˜&󥙜  ퟕѕ韛 d]螘  ȜݚҔڜ 3آܚ  z ܈  ր  튇廄暈͉\: ԉσOefć |쎃㚆ԇ 䍈ㆈǸ9    kT)!  쨩 ־ ھ ޿ A ͊̑>z   ڕ ͉֎Z~U 앏Ǎ ޑ^[ 7c] Ô   ֺ  )\Q {풂{~~Ƈg;h~}T^ { }~տ ~ lIMp ޿{ ㉃~~ {~88z ‘   Z Ϛ qz 𿻺x Z 勨 ӑ⟓~g?W Ɏ  ޿Ѧ. Ȑ ﹵ڑƏ к~wy +  uǓut   񰐓Ўm[JHLx}c``e|擓V 㓒 ܽ 妑ڢŽoW 掑 㵗vrqrqs}kloy ÿ ֿ   /  㢰 ӿ\ZYSTT^UTPCCDEFJRYܢ~{ꬨ  ۢ  ߩ ﭧ䩨 ҥ 詨 yذwdhgdeN>5$ !#$6=Tduno  ~ܱ      GPs~{ iL(  !#%&()+-.05DWhknp k   ↓  4qjjkmcE  "$%')*+-/133579;BHMN^Ф제י ޜ _ 矜xǘ Ơ  윚 ~ 5gnkly~\2  !"$&')*,./13468:<=?ACH[qw 搇   rn'  赐 @||vti'  !#$&()*,.023568:<=?ACEFHJLKFEEDBo ႊ ĴӅ u }.׾  勄  ѧÅΚٵrl3x6  -:RS^iiaUUME579;<>@BDEGIKMNPRVk{{  |沙v    ӿ6s`lnߔ~hy[ $;Sgopu|z]FHFC@@BDEGIKMNPSUWXZXRthmɉ锏ӍQ͆z Ɩ ̑   0뗏ƍ E&x{{gs72b}|{srnjjq~{z|uaNJLNOQSUWX[]_aduuj{ȍ  É荬測~ l ƶ  1ԫ7gjuwhi#7Xi~zmis~x?BGORTVWY[]_aceginl ~҆ |}~zĠ|z{ } u{Ӂ ѿ я몀} ) 劃{^*zgie,b{v$̸}}{z{{yhWZ\^`acehjkmoorȌ  uÁ  Ǡ^ 疜 畎yA }U Evy| ѵwNIJM\abdfhjknprsuqkw ˯ꖖӒ"򕕎ݣk׫ hÐ ㏓ ܠ Ў ̆K9o ׺峻ԗV !#]xiij},˕pquxxwjfijlnpstvxz|zhp}  Ґ 뀷戭 5v ˕ ` π  =z RlV !#*nshyiÒ`GI^moqstvy{|~mgw Ȍǟۍג儦֕jޔ$9 ϔ ʉe   ?Ÿ   ؽzjk "$%,osi|nprsuwy{|wjp ӑPk﹇ Pf  ۓ qҶÖv{ zĵ  {jr !"$&'.o{gz tSSTTaz|}~lk}ء݄ͤpέ|dw [hc ڳ!lפ zB[“jĬԿ 裟   ٤ʤa{j, !#$&()/opn ihlkkwqg ׋v~of_ ע @ X 쯃t~   ¡|!qzjF "#%'()+-^|h{VXwwg ԙȕZ׷vٴfxkeY\l   ъ ܤѬԨ{brg Ȯ 쬱 𱱰̬   ΈiwV "$%')*+-/J{pmbceop ȾݾŬ xl_l]pjgp  h2ȂݵҾsėlYW ſ! 'ìT2ܼúϸop*!"$&()*,.01@g|s `bj~iq ǿ ƃ¡{w|s$ܶ 5ަ}~vyzܫЫyrvl » ú¶orԼĹᵺgٶ̷֒xmP#%&()+,.0235_s ϊ\ylq{kʿ¥ tp~"׳w[ ي Ʃبq䙘ҍkɸq̵ķ㲸F괹ѵM(궸+ }޴޳@BDi|gw}qi  ܆Ί跏vkyKp`r|ùњ{:Əzᵑwn봊 qΉ Tkȿۤ * f%ةYපɃwt`468:<=>@BDEK{UCt„ti ˃ 񔀔לtFϤSQyuyخ~j_UୈxlGknR{{}̅f䳉œ`QS\ajo̷}g~쫂 ӡ ;ѥ΁" օݿ~qjlڎ M8:<=?ACEFHJbƸɜq  qֿͅ Eʮٸܓv¼dz,|mˡ̣ ױ*|О* tFE;<>@BDEGIKMNhuPF Ϳr 񙊇 u Dkӭj򎎏ԏyʙƛ֦a吐Է f̅ ̅хpoqpos[>@BDEGIKMNPWqii{bLprsя m ҁ )撝 ю~عƚ } ţථ褦aSDCEFHJLNOQSUhwaQZԓr r H(|̗˼{ڣ 戙֡՞˥I݂\ڠ£   l iEFHJLNORTVWYtrcir nZwՖs"uyցˉ Īτg| ٶĬWQIKMNPRTVWY\^TSUuήi^TTS ޭ ɷӫۻқ rғϯҪ Ũٶ˪ĿdSMOQSUWXZ\^`bdcesm݊ddcǿ ~zW ۽ ˮټ    ga PQSUWY[]_abddajk|ߩaa ߌӿœ¿לλ ¿Л  m][Z\TVWY[]_acegid]qj}]]s ׯ ”Qqu϶Ѝ쵺᮶įЕƴ̿ﲶ  ׻BҪht{bWZ\^`acehjkmkizqmii  הNj  ކߏ   誡ٿ bf'wQhuW\_abdfhjlnprYSSP ɻ~jeSԚ Ԛi 򢞢Ց 쥥ךꗮɛ 맶8Ϣ ϵɟ qmkcabdgijlnpstvppo{ʽ pp Q    \MN_egijmoqstvy{NLX} pP} ֝ Օ؝ڛ ؝Җܘ^֞܌왰󯝟ڟޙĜ洜 hjkmorsuwy{|qv ׾] ц'{Ǘȿ  پ lnprsuxz|}ښzFi 𔅈ψ q҉ Άÿ !򊋌Չ ִ؃ ꌊ   pstvxz|~~ xz fK dׇ ~ twy{|~ I[v  ஍⋏ϊѕ̿Íϓ Ϝ͔ikkjy{}z|ʊ  䨧Ǜ% u{x } BRz{ۄƇ  ~蕁 zx 釂|Ӏυ&}~}S_j ~ ˲~؁ Io N |ۇz   * x ݏ˅   H  jr? I`켏Л|l 嗑m7 x݈אŽ׊Ҝ  ׳ɏoGBE ˓ 唒{gz#ny sr jӥ~~ˆk   Fw  sgqljzHl 񘈋u⣍Áz  Ӓ  gp ]劐עxn wiqvP ݩªl  lUp ׭    efuuf ;~֎ ̋  [֛q" ժ  UUvoT }%9Ȣu}ĞQ̏Ţи վߺlpȢ    ppjppw R֌ i     ޿  壠}PPP_ BY"  pooĜ!  ԗ՚ߙ  vvv K,Rݺƶy dž} ╲ 6` 򰀎玉  \FFFq ܹy?߸𑅅ʅ֍ ߕZ 騆׍ΑCĈ쮃J 玆 zzzg鯯n{v߭j}Y  m  ډ騄  Wq p  ȍߔISIIIQ߬ }ʴo͊ ̔zX[wˊ `{Й ߚ `= mÍ ȍپɍ ̜|||| ۽'o |ɦ ۈ  Ô  d  |}䆂~ϲpGx ~j]cbr{^BuBAAh"~ ?mꏀɧ ؇҂ q{΅Wz˖Q}~  چ_M Ӌ  ԍ  ~ ~||ϛ}|~|||||}q ~趓׏Ӿ v@ T s ҥvGIIu𯏐ⲫ~koiHIHlaGILk~yI]IG`˜x=[ޡĎڰnm jdUŽ }F̽dɘп!Υa8쳋阑 쭏 !Ъwرyysqlk{}styyztvxyyyyy|? X𗆿혆  yﷀ򽮝Nʒ瑎9yzFH}XzUY{EAosn[DtePGmHGGGEg ω !ϠᨙGLc ҫL ؼ]YgΎߒ  æ޽,vߎsvܐtx~tt ظvtrstttt iI  ԽǶ{v ‹ʷ|ѿ :uv ϣu~󻡣WQQPexvfPRRf^RRૣʠÆ}gڡׇhˢ̛ȑyꥠy  /jƞ!۞ ~(m~xlotۭqnkxfgflnvnֹu} uo  T= ~  z֛&|sxsliURUSaSnXVV̧֧߱ŨԞ ުރnߪ 띰ht䍇  ݪ ܦ  ޳h~ujˉdbetj`dfnf ȃ Ɋ  m gks XSP`J,8پ  >' ǻݻ΋مv{l{dت|__޻ ݼιܼѽubWj ϴ  ㎈|ۼؽyL༾ӻ ν α۸ƻtsx u\p{~~e^lZ[\~ݸ Ժ ۺƱ Ы~}ʯ z  𴴺òkâ 񵳱 Ժo ձgvh lpxxaccqgego}u _䮅}4히  ꦢ x٣llk*  ܥ}ps vY`nOQTxu[TUyͮΦ  褌͛tҿ ʦҁ馡 ] ģՎ㌒ҦHqtzO,)  _ߎtm ȡzhgpno߅ η ձĩp u  zTrV  ' 壠o5+ju ^NPPlvPY}}ĺ Pɝ}Ьyrњ сɜΙ|{ 飜V[װahcַt| / sX~x wi ؇Ԯyvrd ͖ !ä{›ۿ ~ _ Ռc٘y~y`FIp HLqiݒӌ dxʝkǿՆր a$ޡڨ~ѱrG}XҡR  ꘊww ~yyyyzl  žz)> Ղ㟄󲂩  W^ xfhlrmjKFGGG F_  .c}ůꏎsɵ 和]Ϫޮ| (|¹ʎUpܟYpc /΅  qi~ }gx}urtvtuu|rs H,ߨ~ۻx |  0|򺏖辋< 񠟰Κjqj~a ๙rk}^OPQƅŞŢe#鶁Ȋ ĒÝ ퟞ}՚ңzw`WɆӜ {sj~k{ٟ@ʩ  QtrՏw  ͤ駨ݸpy}kdkףsȩϥܺ}ayѥ  h 뢧~htj񦡢쨨 x{j{ lᮥЀ  ه  Հ ༺޺vp{g|z_s ϽṼ հҺǵ b ڹlʻ ݷ ϓۣ ᰶ%vrख़dz̹ﻴ䱺qpo~`cc 趶߿㻾 ܽӼø˵yeՐ˻ nӳ ޱ  e췶 ɤy༙wdz~ ľҼjzqcaeu   b7vܮձǏ~v־ء~  y| 󬦪ۡΧuSRUVzzVq d' ҥʟEޑ_s䙊JI̳yܔ | ߩ ڃ~> 򼡤ǯw㮕㎱ b Ʃֳpmn"bj "ȫٸ~t܅娅.tƾ˶mn ļ̂>GA  vyԱb ݐ  _  ֝؞o[RdP} ަ ըEJ  wx#̕iyuuJMcȻwy㠠 m h]uj{ 縢ßߣڗ۠ѵtv0   ƁƔ͟{|KmٳxzȥYWw ͘l ݍlS 匊~}|kk]YjktiGDM zw䍎 ]Բ } ݿvpʲߌȲ̵}Lʟ  ⊈狋ݑ$ৢ{ѱ{yr ȖÅ{yX ƚⵇ& A~浢 Г̑ȁ 򛑓̖uni驐 ̍Ґ󠐏Őy fh܋ ВΫkRXyqr{鿌yÏ ͏С ﬖ锒 ~i{}߅T  v ~)ᨍھ ŋl Რ}ixzπ~񒁂|舂~刂Ї 䇁}Oy۽úsъ࣍hOŒ 䠭}{҂{ʄvi}zyå~Eֿ ֔   ʚvwyz w}ͼ#svͼvҚuվ ͘  mty㻂Vo Í̊ ׳䋒 䋍 󞏑勒Ҕ    YШylq{rw^\WQSQVm Ν ԥ  Ëum}~u]z    Oq=̼uytz|j|{ |üz Ϳz܉sۈjr|auƩ 鐋ӊ 󚅡瑋ԇ|΀I~x}zp㈌뉏Z@lwS ӄȽk掌 Ŏ]lw {ugo| Η0 '#θ{s{zⴧ𴍦ż lك M*$ Ԭ ۮ}ho}2fV ƔvȽd 󁢪~ 9 ߫  +Ʃꨭ٧ Ӥ裨ڧÿ שּׁ ܝuĎؼ డͻp<   s2  Ϻ   ? ҰL آᢵ2͡ݣ̡^﨤 砥 ͤ i}Ўמ gg 1    ֬.ЊÁ / 璎ȑ0㉐ˈ 򐐍Ľ ƿ w֊ ꟎攎Ë +? ‹DZي~Ҋ Aĉ -   г  $ʊȪ}hx ꗑꖒՐ 镒ϼޓ цկY tui a^ z 粢 7 Bˢk} }~x}~ |d 򅃄  ~} ၁ۄͿҁ{yJ{ -»}ǃ  ݽ˪ #  d Kjr  å΍ Ў 󜚖 ϋ ΐ̉ƍ֑  oō* 㘏     :qڞ򋄊  掊猙 ɥ݌ 򕈇ϑ QVa豏ՌvCXʼn ك    Ɲ}  ƛߟ 諾 ֚w礛֟ǝiCӟ䝙ӌ ۝d%S]Ԟݟݞ  8ҭ 醴Xڠݥ ٢Ƞպݧ0(L暨җӥ B;{枝ՙҘΥߧXsw̫ҳܪbЮ c    Z׿ оԋսt|M ȯU[Ű»zʻ ж߶ ⵱ jiK ׮ٶϹ{xˬ zĬǰʬȹvlŇ2ձذV}Kz 4׹ 꺳 翹kG ֶ ϶¾ֿ÷Ȗn źaԸ3OʿuW ĽŻ ؾ ǻ 鱕Έf ½ ڼ (Ϋ oŴ ף  ʹž EȨ n ۣģ mϤè [ۉmʨ  eQ   ܲӏ  Ȗ  ݏҪ  }~|i} | 冁|˃|ހ{wn|y} ߃ TL}ڃyۃܱ{ ئ ԑ ȿɕׂh{ ʼnˋᓐ߆  բ ˑ͚⊑ x壏ŚʑhSڑA ٝ EI6 ʖ  Ɖ 騈 ٻǾȠ ̆瘔 ޽ |pZ&nєg4ܲ~ʷӯ͛Țӕ XѼʪ硤!ҙҍN q$ØēėҀĥ܁΍抬ϻ ܊ ͻ߉碐Çÿ˺տak{t|Vjԡ Ț Α ݆㹚{Თ"Ηʓtr͌ڥΓ аħ񕊯ꈫď̋üꑶ ϏžՑv—ؚ ԍ п߻enq_Z m1򔒎֌ɕ ߈ 5Joב"Ȫ̄Ou3򫕝 «݊ݲŽt~䞓bŔܜΰ뤉ֲr噘 Ҝ쿜u δh{\!xՕ w ܐے҉ z톯#JSԺ ߒŒוґ ߁ȉeȒΎΧzښю ˼ǹ ˗ ٖdeqj ȸؒyoU{ ׺ǩ|к̒ܘ ۃֿ(˗܍踠M͉ ڏњēڔl҈ ύҊ ݟ{qť͓ׄ ғԏ喩뺎̤x攕r盛 c%dk`͊ ɶ 'ȚddƍԠڪ Ĉʅª ćԈ ʋϊ Ѧ 쭥ƿ֞Ǖ“ͷޕא ւ²ʉ {ےϋɍӛωf ˃̑Ŷ ҩo }0'͌{nڱ Вň܌ ㏒ح҇ (vvʏɭۚvŶʾ tٽ Ά  䙩ޗӋ΅ў钸ݰ ҋħȑ Վ ن .v۴vﴰΚŰq˄ ՜ |ΙsڅPl܈Ҏ َ׍ϐД&拦zϣŤѦ 番ľً9,60BRz ٪ }Ŷ Ȣuq2[p͎Բ巆瘋 З下܌֊}z Ӝ{7 ܎ˠ ռʑS㦜؆ }X:2496884+,3MϏՕУ t,% 斑 ۈݻ ˅㭚xa~مԍr䀬rm ˂唸ճɳ׶a'v݊ڑՅ ۟ ݊龤ʒ<*erE0.PLUlmksOɪӈ׾߱ ӯʪpwkOّ {@! 䰲 vyx}񆎸 ̜lC.7Xx˰ʱ؏ӉЁܛ֘黊ѓ , ېﷲӭυӦsCH|sgݱe~~~}|}}]͙ݷ߫nku὘GyxЧVTlb`xuuvV>@B@54;4(')0112=7?8QijkWEtȚТ몬wy.#͇Ϩ ƈǬՔ|בŝAaܖ:3* `Ԉqך} ` 葌嶈ԱYB Ȥϙˆ{{qx ̵zb_u ۣMjټv~Ͻ使"$Kz汑zVJؾJåþzX_o|]XZX=3378/(%,250"#(9AMDESwtĘ̼ ѣԝ젣ʵ)# ݈ۼ ؟ʦaʄV&3}xI+! 㼿 ۓ蕯_ŒMߎՐ؊˲Ԍ󖻂a馉ܧ裂J:o 拥ʻָըlFHIz잱Ǐ˚vwy{{ݰDYyȘϓו1/c ˤ؄Š錼z:iPlzG3Pg]E8(:2-/!0./03 %/PaLEgv}R\n쏽̉Ћ2'Ľށἇ@2Du~R6 wd 藔9ݧ֗{餓疛ؕ̌ ײ¤嗹P aDoGЎǪÒl\^߹QCl~Ό ׻ݷݯˊB3]ŗղu鼔xhÓmCsNj¼˲ɔLꭋ۳vwvvxXAC8# %<%,!#4&&#"2Sd7-5]mϹͺ  ص;~xӺڴɜ Ð˦ ȹ ԋþsJ`HxxĚЃuvwiIX ykʹݍȆܿv:jy_&xhްxW頊8k. Ck_6@a>2',6*)1.0(-//0:<=5N_\^}؁ ސޕI  ۈϧzx}XM}܈X0;/:7։ Iל伃ң ޅ݇ 딋͋ ԈtI~ vCr뽟 ᒜԊye|NMxݶћߓᒵ!}덚xߋL8t⹤J۴ً Ս!ī`Jׁ_sN,[<,/,)58B:Nqkq؅ L޵E٪ѺwտHp:?m95唘͊r׋쏯ȯ쪒 Жū  Ǚ ǸtI~ ¾XS ǃsqs݌}[Cx털 {軃+tT[vsq։ߒ ˻p/I̫igoU=?97>%/5*')/00. 88#J:hj 9*݇콝%͗q~䩵z2'P:3sa lѐé¾܏͒~Ǖ؏ ϔ䒮 Ƹ!hx\sIÓxDtegjC }gÿ 坆͡珝_K6擜ǙiSUis אڍfg ҅»\mf}}^XZT%2( 2Wj.A9$:?>LOMOuĈ 𣑠ߋ%tęӉm|؍+)·׌ŎE4t xb бeҢޞ߉x㡘 φϔͻ vp֊{GkgďtYQ ʐnuVY v]Ӑ跠ᗐ XTyT(tƓTd~dv܉ ԑþeӵkqË!2<@7(;H2,-./3$@NKSmsN=퓥2tZʥ{sQĞxkr<0a5=!ʆ͍쩊~Ɣ ښ֏2ό|VZŶCx_d̘ Ϋmn}I\ ʴŔªƛ럦͎tkg0%ג|ɽ$؝t|䟉ۊ ټȏw}i4=ƯktvxZBDF9783((.,"4081(H1*6-452//.3:*#-8QRQZ@#6w漄Ӽ雲эrԚ~1 ,nt{]5K4؝d;(ӕ͙k~–Պ햢衽Ӿ1uNbjS qw葀qx}ȏd.ٖȂ󸈡|~֠W04 ͍攻9ⷖ۰ؾѱᶟia͋ Ӡ峎Ηͤ',Ћ5̛݀dJfe@BD632 $#(9;;>=;2K?1#oyq~˼})f ߎsf܍Ϫf… h%ѫi뒳~z$ވ废ę,omγ JQZ ZUČ݌}bxDPw Ȍ 𴍗 ZaZJ922Of_c~ƒҺtfዶ⪄ͧ^Lwvs֓ɣhzfxwsŮ6{綌é\sgpǡw[_2й}ENd`Z8+.+$zҽ{WvX;g}+YԸj ɟq⿧yѤ9m}̢[  $␕]ϼ aw׋o I356˜vCŌzyZGܠ֑  řΒҾ ׽ԍñE348+iث⎟趏tNKʔtrKӁڞsn຦ٱɾ̊:~dzlᶚ㶑vuƾu#Ǧv꾁9?n}%krgÀ НVḾro Rms^̒Ⱦꛀ Ȃ" gԚmKۭ׾v^ޱʰjdu݂DZrZcHЅ䮒 ಴ٱ bŗȮ1$]~yܘFϤzjTeӦt͗|u\đs|frcmKz}XcV7<!]m5纊Ӕwhgmq{ֳdźƹmqv|dL}L˱ 卙ݖѼ /ceᰴ ԝᤴj#ױر|߯͸ێż ͬƸ\r Ħ׋ ۉ^y툅1-sڵ ՈĖEИіƺraަ_rאUyyĻӦɐ݌.zNܯ~5g֐|Һ ٶ.tޕ܍r+ȗ߳ӷێ|o ʪ͍͡Ե\clf~j\V ͌Ƶ  n UФL*R |бVҍAϒ΃~Ԋ/a T͙{뺘ȞvXٵݑ ȿÅ唡 g Fö ȵ ƣf߳ Ϟ೸덺׎Ҵ͕Ķx\HGjϐۉbLvwx~ Ջ roP*;қ ىΛ)֠ʪĵéos}ݖ Շ"QQ཈~۰ђld {yX*풤|²Ř㫰Ʊ̚~̪veЭ~icηؐҝmdmw ͪ꒙ 61>HΧݏ(يʘpY~x~W^…c{ 㖇fj놘{ِ͟ʸ̰]}ٽ~ʉ"%ߑ󠽵ت恵  ̳ ̧ҘųӼtyҖғLJϞޕwnrx œލg[ؐn<8Гsϋׯɩ"f?}NȪ芬krՇX!bũʿӮ ڋ˒אzbڒԐb`wӆ젒 Ժꑑכ˂䵙fY\cxئԂqndd|yג B6 Ғĕ~Ƀے؊ ψ [2^Țiy P*͓ο Ώ؍ϻ ۛכkbڛȸأn a``q`unn`y̱<7 шr̙馊峕\-Ҍ݃ 㹂󝓣ʋ ޓ쮛“ ݘ°o Ŕsm ֪`퇿·IMwmmn ނߌK1ω`}؈裵Cӎԏؼj݁{̟Ɍwدÿ  ؎ƗƒؓЃ쓢ݑΖ ˿Ŀ دkiixכ^Ⱥ\Izkkѱ ہ …͠—]-tȽ~݂ԜDꢔ|͂emܦ-(u}ޒ_ѽ  Ȓǥ ԓǯ 宽ԓ®Ż!Bqx}bbcʌĂ᪊[Qqqi}r ܘ붜Ԏ 涍͗x+o 󺌖ݒ ކ㙐L 똭 Đ͙ظk L"RȔ_z{^c˓ ĂczbЍ񧞔隷͟i$‘bqyzd_Y 񬈺͵̄ Ї{Ischag ͱ G2Q短 Ժ 汭ɸ 6߇ߍܸ%Ψ&F܌ؿ}diNuج߽̏֗Ĝw ƢqҨ8݄ˉҧ 􏬝 Ŷ մ wtsvvt|ݧXv͆ הџ Ŋ3T˟͌ԙ :6ʌ׏ ׉.1ِ륑 ߕ䌮ǖӊݐы ͓jab bah~މXc ѭӒƆΠ Ւn4LͿb^c񘗊 ϚÜّٓ )&׌ה啚`6Z햢݋oׄއ٪ޠֱüˁ²\{z𵁽~Ջjb>0댂ѿ’ۑಈg =9"ǫ봱гE/Iڥ˚jb וډɎ 菅ڝY ӎ фЇ֏ޥrd[ 徙 q۫P}@=HKi ȳi^”Ŵݖ K # 䓦海 ܉ұ50AhrsJE õȐۯٱڟ }ֲز╳̲ܚȐʶ错މ  j_ܚ m޹|fK̄H<71-/-4KkԊӣʈى䎻卯 锹p?<ōȜߗk3%*]rWpnOњ$+5xK7ʛdsdĐ޳ ԋ뿈ΰՑ}  {sբßܼ^uѨɰɦѺvɺ΋݇1el"RuvR:)= 呦ӻԠԈ âǡԺԜ~!"ýϿλމ⸻l+1%&>7#!;Ll#d/Hɀ^ȞȻѺǻںuhȈ⽼ ɏȻ̕üبHMMK}nޖϵׇ~ݯӌ T3Eˆ؎ ⍡f䖫 Ň~@<ĒՇV5655%$!Qh+xq%ߋԑ ¬ۉħ}Ԍ Ԑumjh |b݉ ظYoϪȈޭóЃ}8.Io} `oӐΔ ԒÔ‰Ɩ°}`g ]Օ1*Ѯ䰰֢郻Ӈь?2ܖ$˭튧 铕v֮ ш˲wʯ’}Ҧ汱 I捚Wʀ Ht տ}~\ؖÌP/;ܓҢizΔ gqه /| axK1T ǤӞ{}1M ȅ HЉ Ч I_!ƾ²= { Ӯ_|wۣ޿ʌĿn"-D~Yde߭{ýۡn7 ^葾V ۻӞvb(o ݒ푰Ȋ̺һǼޜҿ޼oGBI Њޔٻ |þ ܉ǁtCrɎ"T Х{ `d݊ˌ50S[h~񓶔ׇ>Ϧ〶ҙfҍnև@ȉՎߌˎQ  ꔬ GҺd̘˜ h_̎쒻`C[‡͒ϒOHs͕]ݦ ؽ\1J}(mø՝碘񗋶ʌꠓ͸֔xl.5ʷʮ ajԌjl& η͖Ѩ ճ ^tﶺɄƍ摱зnT؊ߍcD[ʡy xCƆ19RA3ќޢꛉ ׮Ѥ FV,1ɣawމRNa$n슘 ߞӘ ͝ _׎ ճ݆dž Ր)ܴՔprrWDžoŒ <ܫWeo +?؊Ҕԍټ n᚞Ί& پͫ ԉʋ|ΌPO`1'ތ"䗵̔꣐~ }Äʺ鹕⍼dezvdÞʋ Y*92S 33aޚլ} ͡ɈᠫꏾpP΋0\ۗoe۔ ؊ֈ\̏gMT}'ەʜ˚щʻ ̚Ɏ۽ۈ{ đ  ʔƫvvsvvʌw Q}/׈]~ >2ߊܕփ΂ m ~qw֊>(I^{d ̇ƶՌ~V%r߄~|Ċ Њ Ј `v҉±  Ʒc ccuߍǕ CB"ֈΛ6? m u#rԕ㟪ω~ >ShM^"u`ͦÐݓܓَI͢'w!ĉҐ߈ ֆ 徭͹VFW9&01N=?Љ҅螊y yy L/UϢ蕪眝Vbɷ~| EԔΘߣ̕韐贙f^r5U➑h׊Ԁ q鉱/H 휡,הՙϗ؉̨ٔѾԍU46$@IB8:(O ̗c{{ސߍʲ˿x\ ~\\หߐ 눬ѴʊlH-hx}W2Ș،vκjkp5E´ݪn☏ ܳYBݰEڋō̶蹈۵Ͳ>g~[t޻j01/> Ϊ𹴵 ߜʏ| ||턈 ̠}Hxh@=sv%[Ï ͆݃ 󒍩Yp3`ك ڌˍcŵɛK9  Ww˯Ӊ節̒ pQ20[ڊꙜĬ׌~żཌྷ쿽_e___i݌ފ߬ͻߊ eMP}ǫ wƧx(d柞焰ӈ ¡qrt/z 倸 ђ Պa Z+: =ênɍǙܻȔϩ=.M“߻ܒٞZ之ėǖ߻ 푥~~~~ m'oɴˈn qTSA}Ъy)x Lj힘븕zʚ݆h.ƙꉸ Ϗэ çɖ ۉƗ κFhېҲ ϣđ\ s茱 D+Dz'މߺǤˍﴱƞv\Ȫ ˭~YrYYX"etɩ߉ф @m述ԉfdɸy چ~Y$o ɲ#sƯºwl!&נ߭ Ώܓ ꎭ_p ט췊c ;ɗݳ܂ԑ ϔ݇ۯ 帷/,ډ ^ބ կª ~ŋǮ ~~}j~}~}}}}}~ՖώƓN ~҈ҋُԽ_&>┏ތчԏڐ</ނ ܓɁg] ۶ /(}a~knA U𜀗ܔͤtՍ߹ƞ07룏 џɋfܛ ]__ϼ¯zNVr^tm]_c_j_]l +|^፾ͽۻptŽ 萹}㖏̷Őzj­#؏ڻՆ߶ېӈy ȼƾĿ¥\ tj2Jǒ^g#_xЅq_<6ӹֽԽ>.ߊ솨ʋß ܒljμ ꏤ͖ ni ||xv~PKtxy|||yz{|||||}ꖗ?XyΤҥ됓 򜔘ſ枮֑י <-冎ᵓỤ⹈ᝐҜحԈ뼉ΌC:y΃萄qۼ6“`.`ﻈ#ﺝ’ЊǓe񻸳 Ms$[\~gth}[XvahzkZxob\^\\\[t˶ޟߪ լҩ߷ Ѳδ!Цz,9`_yδukѩØﲔ ȡʥb" µ܊ ߓք բóԮɓ÷ރd[ߑ/NԼػŸ 혜ܿ6GЩ狮Ͳۇ۵ތ֓ duT߫ ѕh%xyx{xxŬyxwxx x ׆h=ȍ Ƕz꒓-+(uɼӟČ“ 뵖ڎŻ~9 + ԇ㢲ɵwfẑ液o8"_评 ߡ²ޙ4uօ ɳH)jӊ Րcqؚər{ Ŵ}{~ؠgcs˱~zpbdd|sd dԓÔה)D/o^9 7ZtŠαې󙕕☠̺)  գӘ҄ѵԒ_zˉʤŞh_.&ˉ Ҡ噐 -w'5ڑ zs鼏fԖ㱢Շ P},\OWdwusƮ|pqqtu xu҈͉ӝ^.H'޸K"%7Zx߮ꓓƤڰy/<okmr~7Ǡh ȝט ̝ M=l, I֝x Φ m蠊 фmk 뺌 ǕZ_-l`NGѭededlcge eŠԉѧx/bypB;[zx{~s̠ޏ}ӆ9׍h c:ebOD︴Ǣqo Ӵώ م =Al݈ N [Ø cn ɦˌ ߬j Ĥ E|-fFޘnmo{rkno rwo͐ӛԉo)7 ۣܡϢk[]p{Zu݊֕ 訤s(Aۺ׎яLH2t ߼s ܑƔÏ䎘.Sg]+82[[ ⌘ݙ~엯—ڈ ǖ>' ≪ڇi~*օhV}t}oş{jy}ٚl l ٟʇǍaH̤ҟd`|}KXbtrXH:K㍥Ԛɼ}~_%> ۑȚփ ﹵Ž篏Hq.ډɦҒG+~kcܷ ꡎ#𬕒nj眰墝Ԥҏω )dgx{ϡyBUq{|~~plxmiij ͋֌ܩ 7JΒ ߗ۱ENLI3 60i촉גSKQf$= 쵈 ᠄̽64sʎ Y0 ї5>gzE\پݍŖϖB䷖Т vޡF ͪKk{nwpops~yٛ71P DzԚ֒kL9God"Qyuiiq(A ىيΚ ׏및 ݂qɨxǟ90⤗xًݥܳX1qv?!I岌Â3Kx էoвah*ތ ښ à—ų} ۔Xa ʈf;Ljdzxide {Ѝ t4;wΊ묁گd&54Kp^o 렙֎tlԼL:׌ ْ ّrx+*ʮjmԚY0ѷe|~Jᘜ;M٦y}t$ɐ՛ē‰˥ەє _υcQȵjnx~rquu  ߪ N0?{Ԛ ƼυĖr,)?<3-7Gm ӥҟڊߗ+4?E92169b ыœ wQpe*l듦Ԍl~˿,Ӏz\^i3;j)J u̅#Ƌη Uڿ5*ԊJeƦ^[eccqqcfpzy֓ o91]ŽΖ 혞w?MmuW;)*.H^ԊӷʩƥĢe-?(MPgb ?.1">`çҋdc܄ Ylclג{z Ȋ+jбuYih~$1o}Ȋfk -ڇߚ 왐ܑԧѵsXК{~t ci&}~kGkŠ㖳غY.3f ŠƦƏ)ڈ}WӴW<0*1Ab}ɆГ!ȇߥ<0cɪC ܳl׶vG=80&&Dwjje`v_slm_bӉ-kjw ꍧƋ ѻ酪 ŕًߑǨRf)}[||~|{yz||Nt Ȳ ~M1"#3445,!/'Y ҟ0œkF%0*)6@g0Ɏ=0H|8.Q􋟇)Aݖ֍⸈{ǩG/a mkΑɦɷ2hUC*))?TLE^㾞z|xꍎy _ ڇۏ ֐דǟǠȷ#~vtm@FP^OY`\|}|zxvd\ ^N  ŗG17:421- Mяض˴>ĞʑHGC4;,-Ot㼹70Zw҉ ̶s!R Xؙތ쑠䌏&˵쮅M!6miA$62O︗aGO>$2*BMmڭлƥ}sȯec`RВ¸ۺ \ڭ ζ&᳻” } *[FzytzCmzcY^zy{}|zxvuxw Β̑م񺍟߽듺 NJДeJŭ*ǩnWmR0,)5@d䠭ɏG/jׂ-,x ڟ t'tqO#x^)6*-=_Z$" ׶vH))615Ri0aݹȷpx|zջΔՍ`㓝 ࠿< 𛙕ʻ&ŃH\Izv^Mofcu~|{ywusv~羖ꌫĎϛr|^Lَ굁ٵѠ~XA,*,*Tl™Љݠc,QÖamꞸϏΛid2v쁑گz@=R85]\yɎܯfTC*,2JJ=뷕m]nkt sxwtڗrԝ̉f᧫Ӝ °Ŷ ًο C뛫hu_HzRh}|{ywustz×{㾅麘@ɩy԰W5.*e䳗3E˘u+.af߇ shz62Tp풭x吔ʒLiGܕˎۙվˇ ŵȪ ҋ >ݭ~ntFj~|{ywvtsqxð苸趒ֆÚ璶 qTӐgaC*,Sr|㰦.plߌ Ƌ'4տ؉Ҏ܇u *lኖХ K6!h3ԗبcT>'"%C\l搲ڻÏίps’ʚԋڍ jkh{;ڋXXuAu~lv~|{ywusrpnr“ۈ뢑 ̣Ӏđ @q2첔uJ7++-)eyv61a:҉E|⦫һ麬ߋ Ʉ| Εȼa,V혆ã7%c֚߸moycN4,*4>N|Ϧ%޵xbﭙ`sэ́ ;;uZZUmon}|zxwusrpnljm {˗՜׈ 䡓㖤ȌɒڵYyˌ˟_'-!2nȖA/ێ b@xzъە$G؎  -1 ~$o ϊタnD6%%=v ̶lܲ{n~HϘ ħَߌȡ ϗՉuIrxnmo#u}|zxvtsqomkjhge{ܰȌ ݍ‰ ͊ģHڱ7~möIJRopiyĕzNܢwΎL8݉ق۶X.oءﴸ 4< ֜֩f<#*--GXn UXԼt͜Z7-E뒭Ͷٞ ﺍ ڶ ؆ɤdceqp{z}|{yxvpoliegpomkjhfdban }Ƀ'Ϡą}Պ ÍԛE몗F+uo_!7BNך\jxҳ{,zΘ  }<(`Awƶʎ.fؕš}d//-4B=<ҍξһj~۶z_4,dݜ э h Ӡ‹҇Ӎ缪vtu pjihfdba_]]}ߔ݋师"bj燽͔ ҉C✨Оysמ܄}¢諊2~c4z·W^ʒ1GҋJ??hCʹB#\ޓIBA8,).EQ>Ȑ |ƤkEw էՈ9*`#•ÖE.;뢻堾 ̂ g ~ س갘Ğod egeca`_][YWpPՐ~ܪ ɵ ޠEJ햜 ޏ׍ ̑̊̚8옅۷sxbh͎϶°˗rQWyo|פhȄҋ/:ٌӿ؛ [xca%J Ϻ__G#-'*\䕏ۖ{qzګ%3"6he[" /bߐ ɧ䩃Ѩػx yla`^\ZXWVTW0׏ ʃ  nb ˞Ʊ }Њă̦vf{rccMKrbi\lO7wa}á s?dim䕕 X0–zd:*#4&Yr\ ޮÑtÐ#UG_7(0/+28>]ǰuZ⭡̃ 顱ﷶ̶ xs\Z`u]\ZXWUTRPNlzw脪܆Дɳ ϻxiߴ] ʲ܉·׊ ȍˍ]fɏGeֽϵ[h؋Ǟʹ; ]υY2{ z_ @ΕՅ$z1gV=:+%Sts$ﮕ좍önijتى"AE>c^uέŔߍ焐ٳʶݤʑڜ|{o]WWUSQONMKP冀  Ҍ׈ԅˊjOuڒiǗAܚƋBFtڳ0-담 n j/u{Ƒ!p+EyYI4)*;SZn饵ߴҭӓtּ׋ ۏ'@ħŊ…鲪礧ÅϲƽԎýӻRGLTRQONLKIGFf и꾏˼ Ŀ伾Ę񙏳蹌ۚƼ҆ oŏQëƋ֕ fMǖ܋jQ{mQ̤ H7ԗ΅ -1.6Gbzw~ӍÓɍx̵uۻ }.AʟƼ 襝އ ŎԔɎ|GuzONNLJHGEDCDz hgӄ ݺًۙԕ´ Ijb(_҇ԝ ­.V܄*٤L#KͣŶ{xyϜ$ޗԸl V/ǑԯÍօߙ Ѐަʌį֋HnXKJHFEDBA?>@rÛfsβⰲӮے񵱰ȿ܋ﵱ筈ތ͉݌ӼƐֆM9 俪̤򵱯կͼ+iѐФ^'a﵂ԩqh\z^Ie` 輤liOѮ۷ xK2O֯배ҭˋд屲dn騏_{崰ޖ⪮˕hGysHFEDB@?=<;9?påw|笐_Ʒ̙\ ͋ʞ-V麓ߪΓ †ť೨ҍϏӓ©X*U⾾ʐw|f]ֵԳdJQfa_My{Ģtxkz\ `R3O͈ կ`‘h~ w ИDŽڈ̻ ߍÇOcKCB@>=<;9865Ap㻂pyܶ Մ ꙝȽѹ Ҽغ ﹺ Żﹽ`(Ѳ֧*|ʰ ̑ͧʻ¡n]*>檇Ȼy7ptЪ|~|~tffcd^hb^g\SmǕnا~}xŻ̲A5s䶑չ эκ۶ ڷ ᨋ㖪 }ً萘ڱYLvp@><<:9764324?er䜋 ߔ`e ¦ 型,e𶏈ʒ茹壮_1 汣խ͞·h.Or<ɽ{֪¸ơx~cMպijʜRNǺܽhM3̤֏ උy~π О]Woo^;:8754321/.1CI^wfyt⤾ʟǓ䗌w~ж׵ʵ 򺷵 tbѳ̒ub 񻷵Ѷ钿>2À0bЖzzέ֖ס‹-bIﴗjﷸ󷻻`dy_PZ~ldf͵܎vNE4öǿ ؋ ܻ Yl x ׎qgomnP653320/-,+*)CPCWvsB"- }΋ȷ0 a˿ތ t,v Ꞇِ35® ፏ ݔ䩍?:Gⱛ̵}wyT巧_UJȾbǯٷxgjh̅ בOf94؅Ꮊ `M Ѿ-$ Ջom>310/-,+))('&)LOCVza;fܕ݈Їy󠏦و yn76Ŵņp`Xދ ܜڟ`0᳑Òye6]ޓѿՕϕϵҤ΂ ӟ򅲦01𧌟7m bҒѐ; Ҍ⑵ymmli7.-+*))(&%$#"! *,)2"f ١2Ѕ ؈i]k/PX$- ޻̸ޗ Ҫ+ ՌRExõ挣ۻƣƓ_n30﹃M~Ï d`me※ܥ 늟׍~⏝򙲹mmrxo0*)('&%$#"! !  2܆ی ݐ C0m4/ ʎs b  iקּ2RԈkeƝه4 唟 đ?5ΕQ{yh؋ 㞟{dhڋݡ{z8'&%$#! `ފ د2乡緳ܷ45u2o݊ Ɏvjϔƶ  eϸG1ԉ LJۚ j 떿6K }b}诏⪇フuuڒ yL#"! YۍʔĆ򦈰1ު݊┇֙c$)Bώ wѮ߉e -K֊ݒu#x֝ 㥉掙1͑ ϓۄ6M  ؘކ ͢Ԩۖg, 4l׷ޛ᥇0˵϶øߵ϶ ø׻ʷ`(&QԒ ِ݋ɓ嶻 ЛȖ疎ùT.lp ؝?0𽹸 ۷ ύꔜ? dž烩 ˆ6K綹 ؂䈥܊|ֆ CZ%*B Βޱ- ی쾭C08z ԍ87ß2-v풒ӫ 렍ʊ,] {妐ӌΤ ͼΖ诗$ʊ`@!4SrzDmػ ؜㥔 μżٻμż 򿽼 e5,R?tZOJﯚPу_mBn^LL|}N󶠤S(UzNJy\\`MnU l=Mp֣q}l[WܨXTMJYo̾S D  JJQ"sx.7 Nl`uRa|O ՟z_Qx`QFʆ@zQLPX%4fT dVbSnFmʽ CYg|^]dsfL JKGcXfec>qd#= |CR΢tt«Y@ Li\w PMS@POJME =A#W5Jm.;ZnMd^eMS{dakS=JGFXQ ~9uE[FSMG੦hXpSdt/`LWQ IХb jl[SPH [bLf<MfS7 Iimlӣm~jĭI x]uhܮT>]{ NCWw=[F(ȕxUrmQLݒd6U2F I\UhVZIHlDqBŦ |K@{ 6F< hVU\\ggo/!orWTWYWVSfTs=lvUKaES[XךG CeVNEcYwJN{qDD(NXXʚw{q evJWlG KT BH|fF5_QI&` {LjXd|vbbaZP@yn |LSDeEk B]hCCHG @l{oιt q]ܭQcfg{OoYVZYP hm`;維E ~/EaTSjuIJKcEFecUsJz0ńZM SDJ P?|\4{B^ (O)'Paԩ_}^"x}{ KtkFm —Dja AT㝞ixClB} ` {RO^P_xoVb>Lta[IMjz@bfbQmwWFُ_a \Q]hdHtR{K WpcMbe r PV0SƉ(剄cVгaShfhᣃ S O>S J8aJH]ewc0_#6?8lEUL NML~Q}|ɹV&Is.YzXQN~xRPXstoST Xy۱_SaPl~YmPLSL U̻zc^SpfF2ì lvwp]\/%Q`ذNӼtSSjnkM֍Ar]Iv7 _AgE]KGIKFaX_k1/p~ b.<cQSe LkkE[jdk DtiTj.?T\@\D izŋHKWOWMusOg\TZXԶoIˑ 뀂}s;Zp [RTTUYVd DVT}Fɔ 6Zauop+3bW?K"s8}AK#0\CSJ ?;iWQNrޚ~G@Ye3S7xy}SX@`δ iYRcp HݘpuU£`2h;GS^B`BSUjdTRajӴxwzgmPHmvxYLMg6 5m0`xaf(x6VSXo_Fi ם/N~M{p {9gU XޡIY{tc domӗo IxZ/HFw,IۓMf?𛑓 ƢYHrl cEhjQY|DJ ȹsI ʀPGG DXeOv{ Xa⼽ѐ{w ûĔruzXSO;SMqcacXr[*6CJdH`J_ Դyl.U}z@Y AbJs+J fBIHړvu ~f7_Cg?CJQi?l]> tȯ JnccQpyںҀ[OnKm8_Uz|qMR L5; \kwp᰼J _6sEo$>m:Ϲc˅iA C\GuXT},_Qc沘I` VfSO=~6KUtTyv HUM@a:d GfHeNHK Pڒ HYTStq$DֵB|A?CAGfb\c/ Wڷ@gTk ]鸸 GN\sfξ\ 9T R㾴 evvf ̽A~ʾऌR}CTh }K cGO&/RvAJNW`IK㓆vSyC 8'upUp2lHbaOMQAR`PACwdo\?fetL bϡIo FCϚqFB荅Dy V6򵧽ݳіpB BR͡f˵ک; ]M`s|WB6|ewgXܟvxDLCaHsNe}gkaiH֔ VN LQSLfQbWS ɵ⛕]yota\'Hlr]g u\Gi@p.uCvzFaelnD[ahOm fPirruvLe_B{a략RL/Wh鄏y`f^jM%@ Yw~ IkKV_fQ{v\zs,߱xxwywpYavxaZOAЩ+MaX ˥Zg[UkẤ 5O`[ iyC8eRNEH VKW}7a\YIA||Omva;;`9܎P<`Ww@SU \mI HBi~s ?SNaDi KjcL [X{зR aC GRgZA1.-5V]?:Zq`?ڱ}zzz\E6?Wo|vQS QJќ NHiy[˷UilRdpU@OsZM_f~SOw;V_SfNj`SoD~>?8/efЙͷsSpݜhtY rh9@ JNDN]gSzDX5[RUl҃emV] rXP_ EgYTGPaRrgbY%GbymgH &Ms{|~Bk }THݗ g<괴]F n]]iѶ,FULLxhU F[aYORW|MCbf]mWRSSVUQlrz?ט6#&m{hn\S]=JsGZtPWV uMS `{RnayEaSWXIW NY >< [Ṋjpjq4SA}E**06;,$InucL}Ak sGũ A\oˢG ᢀswrtzhUT J_v<f@ vlWGVTNـNrQ:O8NܖRPw }y {I HIBrXcGKIH{QTgP~cM^^}F`WWCUKxSy_R fJ _K׶TKVp~KUjye;RN!902gyK"7n~M}\(i?YpUPWwK| vdxHاVsZR}g +lsr|] pdRenH>˱ ߫^ql}wnFbD5S AFGUrʰ XIOS0?5JfJkf}Fbs*DٶSV zuEuAik@\ JzYEC\ ]Rfgk̀RE YO付f ][KSLj[Dpᏸb|UwH[spOVy_o&}w0 ??O__V??/G~~ ϱ=m㓒 XvX}w|y|~7DwklR~U^HCyXaC♒DdG>,y: gK`\<F ёPf c±g @q~{ׅAHKIh\JB Q1P^BLўJMLIqݐWcxSz`&s`n:ZfX0=W/pV.3A eW )?AUr~yt^AgT$1rhkK֮ QU᫬Fc#҉yuz{q +/,ZO}l< YVJVPɩOK"̭kIVHJ iKclMQʭNTe }eܴBuS[j ymSuMRWwWcH8MAɄRTiDt\ΕT޴[SvSc JcL @/AIge0 VxsmNJ9++F}~o?OU+nυleeȔ ֫S Ǹ>n_"鿰|mH@D:)`ً>; nTUa xM Jfq_GdKJ"ʋi| TUt LdMnUN>JײӶDS'Qۿ_nzY qa]kOުsFk^OFoS|MqIHm^ٰg}=bnpS1Bu']`Rg`_-XU$N&}xj8(Nt~rG2 ?uPVgcTʵ & WGFspad]w-p.v<)E*MG,*DmڸyJaC̆ ־Nд|d)@(u 9ZOudPQ w ̽EI{dNOF8bYe]XRh۔Gp_TM SWczcC/ pZQ6[>_otAxl *QWlY ۘ]1Y~v?JH_]G{jZɏDw9鋓З^O#Nxp.-E>%4d`5kźöy;_ nPBrXLsݔlGcx}gzغk,~ggM)tH`=yV|M G]+AOM^r -LRK;\ct5jKT^۶ˣt-5OKKT$w\ndjEyw7ESTA}úu6ɏ3ÏfplDcQI HKz{VgRm c[J~DqYf.rXLI]?$YDŶ}|OFGhY [bKaDϖ=n_moT ?gpX\raqTT^CWHI CieH\fF ˫n+~o gq!kh FTcuG}wJW{20tʌaQDSN!軩fxL`W!]wiJ8>!F?X?IH Li@WU(E@FjOɷja^rsRenzq 4^DzKuRs}traJABGJIn}Y]Y}ҿPBV]ѰH皉HqOHIrC?|]9xS PL Zji{ eeX Gȧ` Ѿý⹦jm+~gB:e h뷦I/CsGҥbͶ:@ldi` `xAB}eNYYX%2gHCC@AILKJLLWU#S~vr}w1JbYG <xl#p aZiх=jw\`;TOTs4YyROݨXOSN VSW؟ EIGm*7Fs"mTD:xvw%^ 2iPRnɷ|oEeBlK|V8ĹU_pM0G:7|q5S:K JPLcp ?~RTɲ6qMzU]WJĝ9ĻYB hLgI%GJJEKNLJMLKGBCCFC#n}ktܜ:߱@KNO Sr, Y kq\P@R=KLEJX+LIKml^V OA}MVxw볧 c(ѿIm(_!nC7A P;zyq7>C '`xLP״Iڌi\Q *Ka2k-}yϒf)1y>2_DGu~l> SJHecPv:`bw5LsGƹC~ؚF[~Y1k%$E tMB]` r{brnyb_|)H WyT˟bhsMb&$&V\I=TҌ6|sztn$dAenYaZTM?;R1A=\hFUF PĔDP|.ii6żĚ9@iAU؍tiuuwoJ&"'+Q|h=vx}}{{tpy]\Voة\ EVwPCɟ] nsH9?NCj~AEitEEvXpYx!YJmmCjD5Y^LJ>e q{|gb5? N [^ede]Yn RyGtdx<1FXKedrȷauTBmxz|TseFHtnytv#ͣɳudy}5AumzyPA LdJ WSg^` IOBtQ jNsjKyлF>¸Y@x0%0#cy|~xϲpE?Ydv}B֐qoqx{eSav{{Mn3fSvmGd H+(@KpVeE/tI\Ec~G[YsxCH_쟜ufIYfϽjPꭢ jbH1Q], ;hqR7K_{s|[_PL_cV]SNq.ZOSeU;DjzY_ƶ BLY9㻘}}twzxs˨pmzw{t^,pqq7gG^H ޺iP{p Kԯ[UXtjdIdJ.@]C`Fm©E OcjOY\Y\QYíwkMCB:Ơ{ps~i[n~sw]fVʷk^*DHUPc@B2?}TFьHEE RJj_x`LRc Td`i\ļEћ pO?6*a U[JsNvJ=?wz^?thFFWQeLAlsPWqŶd?C7ɻsqyqpwpxsS0/&(+5DBKcx$o~b.No~~C:՜nFwHu\^Z[t}pOP(FϞX#62*dA1u@KG 0 YBv慀s#fKsruqyspvoqv07PfFԭur}zQ横ѦmR]j}ϜzykXYYZ^W:u zSF ΜSUrW} tZZ?ߪWJTSRT|t E{ɸV[Bf<˕}z{} ̣VOwL`s`\AMM}~diVQSWsHY7DөxA^aHO4 v"ߦzt F{!q{l9GʮĽ]\PݯuX xsrSЪTq䢛 MQ@nOE*͸@ЈiTG GZSS]bmZpܨ;ꠙԋ_IwJ S^p{tut;{;pvvXS2-asyuT {| lOq}O S@Y4U9QaH >ǻt~ ǽsFFTQX\Wn |{dõgUl NMtxpd 荑OgPZafmb]E>aEoޫ\_wn_y%QOM[A8N}RSyy- ܯvYYRw~q T CL!7Y^U\TsF^U@trƸf{Dp`J< wdUnqLTm ⢡ {sUbTMX][Urϋ]8| zjV詠 beǤWVNyQoCv*0qw5yy| :`\jOLW_q᭪t~uFD5MD_?R~wRjMO]@xny[tQX쵧>tR ހ{ٰiBhI(_A| uvnUx NQ\qUHUo;UlICNb[ e` U=ͫxi)S|_KᮣCojDH)wxxԔ ]9 >ҰhXGrrtg>s}w5:=[ctAqsSmW1y:\UnuSTec^ ᯮw|<S5մvI樦r rSߔr ^U꧁w@ w׀UBR=K~G\ao Az}~L 7KMOIr;w~ywxGVF7zz3"Ad\YmcYZpM ؋LVq{еQYT[gA_QbBp]~UT P_yGRÏBpl󾫼WegTx{NOx:Ji bUCv< /䖎WOJbOK|^rfWUN_kٙip] l!uz};axhY }C= By((gvBbs۱RoN "9tkh~ ܻkRl ׅ~u?AB^LǐjFQhW%ۨJRSrb7+g}l[Urv|N[̗cU) ]kj!pw8 MsFEqt||{|x uqs^[un@B#]|dBWԮƷi{uV x<=shxITfN_ v`t pRsJLLNDbڴWDeۛGe rSk mbq򰋃JZqSE\QoI oRVUiZxuuuxCFVB8Cv F}Ep[Q^kSRAj~} |0To Q]\H h`^qIcVJ|Up JvkTXPukZWX`e_│FZlswT|Xd>AQmyHپUSSiPv8H[Ѵ9?>PUH0?}P:p4H>U_OoTZ^VQKd%볡I;TQUφDfs`Ws txtmOzBJ߉=힛YBݾjq}p$G X_^[EpEXWJ N>^ISb@\eh ʲN >BOrcSj:s]T Sn{{4#%Lپ }^p bDSWZP>W aUsRp?QZ EḶŚgMyyl[ NLkTK]xL{{㬚iPǁcI[` 2WRWPSsWP`̧Lű۽V_E vaYSWc0~`IWQfKO[Qa^jSEoCPAD]NFLYDL U kKSd銽:naZE˾UѢA^?0^xbb\lnaJdN VLA }fQQcXɈcUsQ IiW\CSc涒IRpTK| 0#[}mIityDJsvH[|js W{9@iZvJfSaMh]'7mʵTuNVIR ?{WjEceL}EߢueMJ KPob @[d^FrzDu<>fѹùp| tPV TޢUmOE[kNX \p7Jcv{sxhKܘg1^JZRI UXkҙ' E˲M*`SLk3k[sLINL`M ?iL]\Pf7= Be!?O"f5t֭MZI¶~g)D-aW@;Y o YUXmC{VMm3*HS YE}\=FqY^BgJTFqr&N޹ FUTR@ ȷyVvuHEjѻkrT FǴuE S*L!mL; v&t*6n컯Iƨk])h ~0:L<jkCB$RsS8^^b`mN[xwI`B^]FFނmNlItnT0 _fSvS[G CxJSZW} SfrHϔQ\Jd MUNaNSO!GBmŭބAs;TT3)l;so ]b㙋Nb鼟z%|BnݳVhP^[IIM^MtjwiUckͮfqirYAfLDZ QieJILKY 敚KРZJw`Yܰ[wB[ s WRI^nY?Tf]=lM[ѥLQV7c;qsoCޅErFgmKO"GA}cXX {;k6Bu鵷\}e_zY6`BxYObE_jxpӘn !wkMbHOnQ)TXdTEtp~|,N.zo[fG]Wh\cTXg9fMV WN 9彇dg?}BU]fUT?gRțEsW^r{o/]zFJ ?Mo=yPXIs} زuG?L8Ė^Gמ~ A.}zGE-yEÙdߥX Ec]I62SW^[G ve.깯VU`MpJ|p?E"\WmwFUmQqLVykG5O 7YA<__P׋SJLvv~`avfG 7j.9MئX}=, ⫸_|3M l5L}]nvZkgnHOӰ`LPO'GİZWPF bc xujxFRGhCWPڡt-=;ʤӶvTYnXdO^u`lETIJ\ ZyqEƗ]El0ۅQ FfwjjoW V✖ǂUe||{]||SJwTOFqҷUx7Q 伷=GY2q7zInx QZ֥r lt3oINpBTq`0 7{w B_YGij@hK4}^r<;xį>s}41eFG DLGsMD H:C]IFVOVpzcrm;? b鿪vDvvLY C-"@a TY^N ʭXKFӌvxtN|FRi[5 폇Q(K(dPIsslOTYC[VMnBYK':zܩ"lF][APrD|N u@] ֙~x[\njXKGe`ˑHD =rHet|@nfG'/Mꞎ}@2}}Gj L2XlORUu@cfSzUҽxz ΦXC\xԌj\DS\ fO&3?5+xqϰKO `GK@G<p UInGwtU`1KH]< [JNL[?urͿVN V~~P{viS`{NFjwZ\[PTXV qHkzG^c`7|gsI5dΗMgqtmtttJlJGgYi߬؂G \06m}}{xy xy~uϳggpx^VbDm>GD`[LULMn{vkW. *lb/s NͷTeS GGisZGwxyy|n v`Q9K =yF|DnpÝKpa^Ea ]WVWqٻTSgKjԐIZEd{\Xͦ[MvRr7OF`4 WKRzqnPe'oDM EG>%s~Ы|ӷ bDsg\GߎX\/`DcCq]EY;9e ]աtG[aϐZ npGșw |_M;tO nꝂUI >vZ_JI S콴}~.H'EHco͒`GipUܭLbf7g/|t bƾr<Qrrr!8 %xF}K= @m]cF] FW u| byBFL##ؼHGi{tޣOi>?k WLM~tsBP7dn ~F[kwx n|x9|[]ɇLDQ vJ\RHC?YR| NӶIES `I> TžޝTurxw 3SĢH_QK;GXHʲJN.~BDHr}Kps^XgLVOsKDCuv}Q𝎋ODs:j5@Fo{qr9P7\SɑYy vHRLW5|KfBt Vd8[WerjZj7K̒@[fݶGbS oNKR~]QZ hmHqH^8?^LDOUȍObtӲw1={t{ytztf 8ttywbzBx!m`JrtQJ}po\htucM P܈3}UZPLn?SKPװiMjwwmDЛPv2k8SˌubDz|=coqPhDr@-H gyy oKETUGaD&7+NF?^bMAe4CgSi껵GAv¬Hk;tM;HTX ~vTQЬFfq pRZ iC3\w 7~~}||4.m}}~~~}}~~J o~~MQZ[[>XFEmwyh]{u PUY"cV^Pg@Lm7eWДpVN?ґCeQ?WnzPNٹdG}TAфpHśL=P>!wGiƼM #UP{sǵCd`kM?@6}Wae_Gn uywZw[^ ^#k?$sswݔw~sr}}O8@?:;Wes}zusus $sdx: }Bhcq u!ӧZV]t{frwA[czo]Wy jDtx F濱PZr|py F CU3 mMCe~^YcQפֱgz{iQůEFwP[I` ]cmaHLK5JIU I 'TU rNXz Yz|[w_}}~}}`):g}}|}}n Y}f @h2J~ nF.i筞tR`mrw{uth>nJPT ߋZK<fMazx Y 8Ee`)H`1y}Jej\lBG akKWZY/v>J ꪈSX߀hSN=orFrYHQ>zWI `Zf=f L{?!w~wvg!Z}zvv1  v^CYUpZ݊V|j ַȖ]MQ[cmps 뭁^Q\SJ_XX]j@իZat F ϋT?]c=C\.vr,QbS #jUj7KEX\ N]_i_QT +DHnEXUYP sE݂ X.$ݗNWXkL߭^ݼ[r ybAL T5|w$3?T||{T *uz{|u Q|y aDE?a̵㻕dPRWU`kjfl{^?gUTXpϘSăFw}n OaEQ`Yv>ԑ!(1]xVvM[C|Ykja e^K[ Ce@ G=^CXaμڠs  mMc*s isI INjFt Z= ޏn X:MO %`M2'vT hyvxv?  vGEtj \nQR_ǐjTPQQU\cgmsuqiDgKpNʨMj|wѦJ HxاD8 [g#14t^OHTMLlg `NP ?ps_  SDz .[_tBgC  tn4QK {>fX6 pJf QWz${_W$yyzj Q{yzzs ^zLbDEQ?a EnDjm\ɄeZ_]`_bfhjvvsRDuGTX ֫~w٭MUMcSO떎蘨Pe1[^#|W=V ̕yx}#z RWXfPYzL]Щ Vor+8gt|bc]\\ZjxU JZxjZ[5!_ZGsDzCZR|>'MRTDzA}?I|ow[,~|z :+ Ry3 (y N[CLZi9uXckW7oƢ~edfcb8):cheT@nKrD`ĝ/L.SB}~[ @}):gxv|Q Rzy]  kxEIx P=SB T\^Lߴ)=WB*8ZWc`ElAT:'1Z׫ ŶׇDG]YP[Fk>zl0Nw5VD`p&EFoYMp@ OŶ ;jzJS弘]qsqlK}YZОP}ZrҍZkyBmsurvL%w) :~+d~{zzvh|zs M}`ZQ㿜QNhpW U`TyY7'--%9b:{? wSsX(0ۭFFhOa MO߂N wmQHu@Pg [itM%A4a}tt#  9Z  Ntxl ~ޙU`cFQw\aQH䗅Sӻ1 RRwp{s-k}s}"]ǹ}V/9ӾQNŐvxY!D÷nK'b ƭWlkKl[fDPhdoW оx\Sm~~vny{zyfynzr xFaTܵbB+b wLsڶ{;S8pE ف@x CSJJ]RPh R+2j7~o T~~2\Td מ|f^`T`M 4Xs^wDHNNLIz hJ{b0,0itՆLdEG^0M\P`QejsHkn9件{kuMԷGhB)CWTThLPi8Rz~cPy¢D P„?SOEs[zwVVo2ýŰith\wv}zLLzYֱJ=J COc ǘAKGdwPbjzge[րueo~}q]b&5K3Ixs? Ms y?鶝pd ` pґ\``^FmٿGh X9OBoIkz~vu}Ϧ2?IX9SKFH⹶kW ͥ Hڇ\LJQjBD?J&nt"la`9Ӽ;WZ][``bQNtW<;Zl62Fuxsnv{{wyyr}|xfS=Kƒ mI[x~ ՑJS 4EhK t\d vRF&v: 9_w!cwSBI~}v h} TQTm{R>ZBߒLiX GRW L6OR|sywsu{try{]CǶxc}BiO￶q{|Zܲhu=`k] hr@z Щ>%'zQSi]{`п`4Ghk ݡMtKc Uw˽0Et|vyynXPtM^sUe` =׏Q<` PDa^Zb<)H*wJ #KJ0|vN 2xiqյha٘[J~H{Na!.V M={rt~|sļ;ߕ7^Ei>ȴsxM\ť9NTfNcc 6P\Qt T/tfqQº<9_ro5LýѐI܃Xͮuo|{{}}xJyElZwvԈ\᷾}s ]IbʰhyrcB IU$FmQOԶLzVoPQoTɹRVsW̦ECtm?V|URĺּ_`] bK1#Bv oI,WlO^hn?BKaZ>ĔO@L izviBfu%Vn+ K󔏑AݜFSIcm?oA{0Oi=XqhpFw@Gz|{|uZ^9[BP孄qQf綣_hj^SC,nQ_U zqNN*tzWq̈́L@^i?WD Jͧ CGd`:XOPc=ZQ. rj8xb`X;X%X_9ҝMJ^@ln=V}> 㯪 ^ey Vcv3cZNqQT_̸LakO2|xt~NtUxJ{sA?t#QTcaIRtkQ\`?: U~/I;ApnylC ?UD񏐑mR@ o?pկoC 8IRQl] wz&V~2DóC7k'#N{NXe jrE`ff^t{f}H>m@V2 sw辦G˱\@`os\`^TXrɖ^LWʿ ErhZntwyuwPYPJz~_rI$FLUWe\˧;9Kx ڦFYײ_MED<yzzV: 2 0[̌dJXCj ZMkVZoHIʩQLOa_]e[zI1q>IGnN$,sv}>Qzt_Zѵ^T7vwy}Y~k[ h}n?J r`kCmfRSQbtN׽ٚ^]LrMhĆq?*5F>3pd]f]WnwGt]z[)JbZǸPM]}?d Q>e oWlE[uNro Mj[ IfB݁Lƪ|FxXw9gj5S"bjBGDڛ{]QSOmV`U OFCEas_0lq`ru{|M&Eku5-$i,R7EoTL綾SIb\tdEEQYΨTIq|_]A7NNEwxvЫzk:WeNh~CG۪ Hx}txrL2g tPJDaE)(]p#Jöljѝ~wxw}M Q̐2 p 75 ‡jZW\bjZX传viWPMQ汋,Y5uYU킁EIZcS PXrLW _QG8t}~J$KDAU~~C/xvr{r-1hplY$sm02rLɸIﶺJz:^PUahfP xq_l}aCQxE` M5?U`LEYO]dQZi/Lnujs{x~rxxE^%WWgCWmU;TOoEi vJX\4SP`P]wQc|ë}4!0tO՞ p0|8 eS y@ecV gTZq履Su5 wG=f1QFɄza(#RP*K;~rt}^vLJN*9pLCxv{/FdSwqfSɸm* 2nT^Wlex TddcYY``aXYs:лȶ{DACՇg ˁ@{]wgYw~~k{P#K]bXd?dAa\DbQ}]T3tIH} g}ɜzUE]cJ Ȭsrvd Wzw=zDպr3/HW #]ȶ ۬lXtyehE>F ]KRKjyOA~Y4$]|%xҹ8GmLERbչrz$-n@HO\p0|zm/DQ dX|}{?$aHemmĻoekh$YDmM[nQ^>RIc;M1oOgSGYwe"x 9FILZZ^Ucb jUJDiQdz|@eFciz{ys'i}@[XAO^y~P&#hň;IK tVdg εuyoR!lnBſ|rwvr̉^Uи~ה~g$8O$wsrl N~t[iu8x;v5zSZv2Q賆FcMgI?8'Q ޘNH PPn]^_OMۑJU_@ M˔{y{1{JY f3VXސb0zo4nIp MR ՘~zp?W m:gտ[K_VϐtyT3gwk Zm\PAqVXO3 y?BNNfCMEz'pwwz6>c|k ʒ`Ev;I^FXe ENh"dשэFAhiZXUe E~]rt*p?x]Imܩyw|xwsquy[Jktc^Xzsy~mжlq xykvKY?c=K6_WΊ[ Tᕄ1SfIUHv(d8jb`$CPTTs^TjթH~D`IdEJKu|Mm15>qĎ\DiiX]]V_FN ԚzigmqQL״%nspL[ZS˯AԷttyu!vxrnO,7kaʷ>ze~v~:kO~S Y{nv|S:g:3[\f iwPU.P铓GWXpEWcQ\'ukgåؤ2}P[S̬>nA^IiwuuwgEU7ntv ~>H0~L/liݓVUws~zH˱Ts~` ArDh·vLsPOmUIxFdhI|ĴUuLJyzt3*nxnrxg?u~{z~|~T/8D=r>Gxwuy{&o{qIM}s*~W9P] >pSBu<]iQtIV~lKM˴pw#.}}|xl7a {xovzqmulnqy@9`mi y|}}d,|mj{qox+RoH]=pDR I3Le\_ޚ C PY>ܛ}Yy ЖbhHs[R^ 폊s1&_ZV xo~bHF KWF rWE eHӴNDwSuFiQǷw o؃mjrbB~LȯgYyj AE B`ԫ ELSW~^XtUlXH twC \4ہNfOMzBZzIsVD\J&&yvKyFYLw X}6V/MrC1>HyZF}QVB`}^IevvHq>HU*M఑EI @x\ڵHWSOQeϱd ҕ qEG_ϯԭcb^JVJ3 OQ uy[ gc_Fs<\dAE dmvoŰQiu뢾qZUf&4lUq] N-L/qB fyJDup=wK묎sSV^][R]na|T G ڮIU [cYPYNrõ eX 㹲  KWcJ@n? @;wlp q}U ߽Q[<eDqdHG蝎{lu1IgA EZY&$-|LZ` VLXd/H- K<~|øyєyxM _Z`Lv~}lEvOKR{~>乹gH TSM{w dM6BP[y~ֵFo3rQbYIuodf aaӶmxYۂ[%xʊ`@!4Srw"b _IVGET=  ɷV\JkW٩+{ Aɥ]bTR ε@>K 䴰Wj_F ֱƵovҳSSz|QabUu'^ZcNSqF^ŋ PȢGQ{RyyҳH϶lFFS7^zE`OwcXtB uQQBLˢ.c sTX^ Nc@Y4  FMʓpnHתL C跖k[ ~M k[TYi꺷 hEFH@念`͉9SJ[V xs˵h?~Ӆ[?' < 5\ q^?C\d ?jc:ŝT˪CMۣQn MfѹE\m_LeނceDM }_bUXLIQkRs 뢢]C{Q ?POkdڷpXIV^[ڐ 񯏏 e7W[= |vĶG]`bO_lwf够 G8{QdYdT =t\åPzljč[~ HUyhqgJv[Bu nK9F pHKSKh|zVè]Wf?XJɓLٻ ޺sLʯ aˡ`^ @\ wƶf Yy٘-.Drܦ {@AB>[J_MlKTcWX `K֥oN >IhQa:QRDhG 5ޖO<YE$BUM[PFrY\ʶIfVVǒ ^g!Y_tSJROɲsqywøW= JqpnNي<_ZPW<}bYUxdҰGq MUo=GknnVKQ [aO @٢gPN ;ktҞVWpIY V^_?Yx'_ ķmǫZط F!kgVOhRNu+">?ﵸXEWNPalq KGXYI X eO]]yWsn[c~y!OVDz^nHm`Xޙ lO[z[dWfQQ wmP;SXYJK[Vtj~\`S4v VWqJ3NkQH [GddaH |xyO\]sKcOor^[AUbu#e\IadddgD?Z(Kl]LZs̝H¬ͭҪCBw㾖b%R4Je芖P=\ B:c]N؜w BHDOXB`@EY?l {gsKtRJrDeMx8QGWWzJtnrHBdda[mS_kL2¬bccaf螘֗cW9 r醴Wۋ^e ldZVCf=1KQ WiKSY~ii~b\AذQ}LI{MY]Fyd0(N ?9SzTrIԛ̊>Y`bjuYrNV@Kbᰬ߬Izx~jťܪf搕e0v]߷_Vl@H yaR#ccf˔ \U`RxvIXD= C_EGGIT{I?LPS ֈ ~y]ZTE}p] N՘Fd=OZP[Z[^e{bV{ljL`Ry|RTSOUIR™ǚvnҮM |OYnLBV]Rّ|JtLBF7W[k=ڹSw_9}a`[`HBwkiDTNq =dN 분d O#PKW ` Dd  8|GwiTdY?N[c⫥բrost|t:IfZs:Lgї}Ќq(4ZgZVOY~gDU RIV CbJHOIC[չ@vҀ40,nH ddJLHUOsVMNW o Wm8K ]Z}y ָ^eJU -KDQJ@ :]Qdq~wyiɏCIQǐ^O[ SSozs@^Hac@ rNKjW]Mۗ;Z?_OMY@؏`d{`Q]o MNՆlxUfW_ JxdKz=KL , 1K1 FRFh|ƕw}PXq}w|>Jf]QBE @ (:K >Bw ȣwM߰U^ YRqE{M yfUz z8=mDO]Pl fo]oTHD {}KXWڢ딓GPxVvwy೿Q Cki.iquickroute-linux-upstream-2.5/Graphics/ZoomOut.png000066400000000000000000000004431446222606700224420ustar00rootroot00000000000000PNG  IHDR7 pHYs  gAMA|Q cHRMz%u0`:o_FIDATxbPF@,0IdȊgU#bb ?va@T D b FF<.`` V8Q5D[PC%`% /@g0$wIENDB`quickroute-linux-upstream-2.5/Graphics/contentBackground.png000066400000000000000000001234721446222606700245100ustar00rootroot00000000000000PNG  IHDR  q, pHYs.#.#x?vgAMA|Q cHRMz%u0`:o_FIDATx1 zv@LA0 F(`Q h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@,A0 F(?AĨ*cddD11Q0 F@1KP`6}[<D6ZN12Lh' o`@6F(!HFn ֖ S Q0 F( h#i xc6Fk 2 inh4 FMݘ6 FF(< FI`kN(#h#iѶ(m-Q0 1) gKT@Q0_ KFbF( FI``<ݧF2v33jk[12gbJ,d?2FcȆ866Ѡ FI`di5 afQ%Ѝ?ps ؄a6n˂deeX FI`sLrÛA6?FAip ZM(PC?QCYæl*,Q@-@Q0m4 B#h W>MѩQ0@6F\:fbVYrY#aF11GnхGttl$J(* f0 -P )j+{bCHXrw3kإglģ#M7{#hyۀSȝV?zMP);@%QUޠO@Q@) =0LcOK̢ Tb:ܜ7T _tY9z( FI^SlLL8~?&`3/t %f9 FGꅟt}]4 ?F( g Xfڈi" k IaT?&Z#4{ B@Q@Jqߏ?h}P$]"UMMD&Ьܰ8E?= CJKG 4HDǴ_D;t/phtЈT51Cyfh>4{ 6@Q@"$j dhmD/aDOH4t@Zm'4HX?-$76G191d/ Si!d4 h#indhp\x/?\SQ\4UngF$ѣ&Gm$k-tphf hy4+6ߔ6v?4,m'm$F6 хG0\i4,bFKFI FI-$2FG`HflLm* dv(3F(m ]lhS>)|Om(F=@6Fׯ_iti7 ӻD@KrH׀rJLQ #t0=Nt4Hm!ѪuP@Z?نl`&Dj !% "4=єM%v4Oo@ܣQ@@! ѿL? #!-!Hei ڊTBC&i4Y LdbQ@Fh ʀEHrƟXe4Pc N@!ATbggRz荁yQ@k@5EHt~ag-?ba?=i0`s3?v_8oT#XD-oQ@k@u?柿Y,k"HhdNI@L3 Pi(7FI`m$8~ͣA50X`tM+JZAZbdkD_gFd?N44Hm!Qp- /?mm4[K,ἥX:B$`Mᣀ FI-$J[H?їi#i?~7ѶPo-12gcg,b-Ii{Ph#iDI%'=Oh7.؀ͣфMykׯ_3#<m'h4BR id4vdX@yT߿j` zFß#(t$vG(Fh |#XxuG l* Ԇ8ƿh0-IhbT4H7B[H#d>N~`?ϟb Բh4 3Fh saDv###4aPh4B-$:Guy4T~EϦQSo쀿 vusaܣ@a۰m!%;}FGCDl\<=~~I@i!ѭ7,]= *12do7am'h4|0*-$nZ}'}!122KѰi*dˁt}lz;iPQ@Fu;Bs¤"$ba~/:4@K~ "899Gcm$ @ B{o6Zl{1'0ҺPee&dMf`HvT@aҋvk! Db2mFFF60MrZ7m R3 NFDŜ $G( h#i`qB4HeڐGH˕MgߠK G-m'prr&Q@$FTF Cy4 b`;/46`d@i266mH@! -Jw0{#nd-G] `Eږ!yv7F T[58m h4uk2ag͵ "FT\##:h 4WGU꣓n h#iS+[\l5ѣY=iߴXMl;ih a S炦I h#i` 2m̬٨BFi:RnZ0 I,3S68i m$ j b;?ܔiQoQEN-o?IC8bOn?~Jt @ 矕 ن#,-|j4mпMv_fqs"n*.rCh#ij@Y[8`-ѭ`-fx L\1OEm' F ~fTbk5/?Tޖ? 8n ؁0k-]4 FIZ_k#  ZH[G`TOv#;-I<T[M#|G4HZml,|qFKg{4 FIovUs`ZU'Q: (FҠԚhcf{5hQgs-Q0BI?Υ%$:*{tm$m$ .@ T$̥HCf B?B$ ,+SS.ةǏn#h#ipjMq!-E?G`+um!N;=GpU'[H*G4HDZm,һGߎ?Qsh ivFۈQkqҟ?u(Z FIPk z*pZxch ivnCg8i h4XUs}&H iGhMRy;h ic6GJFH4HThccH]KRبm4 FI@'J#8`GIRׯ_ioDm$ ZDadp acGwxh4`*i26CGHOͥHWQ0W[H?^4XGTt۰4Za ?*O kL@"QmQ0I:/#/FVj؅uM( FIX4:7?u"{,,, o {L I$\6U&ݨu( FI#`#itha,:Q0 ?֡ߙZ7Y3v&a h4*kh#":3Cf Q07(g`um(7(5&F* FI|6+f&rǢA=b4 F `ffV; z] =!< r a hDo@yɘh?4GB/_*]FyQ0 `aa;?]J Ql Bt FItTZDzA/uvQq(CQeI*% ʝn++FsP:iHZ{bQ0 ] R85@BDhz`aaʖϟIt.%S4CI '@$* #i3k̿Qa}t)(t&cp J*HJiBm.2hzP:{?35<*+hz FI|UFmzTt?|G~_*L FI#{zPkmHlllQ@B#nҳ\}/Eْh##13q̖Ÿ^ytmT5?-56 @6hr6p-gzщQ0 _ fdWp;ɣICh#V؇HY'5.GwQ0_z#,0S|`P4Z Pށ`cM̔ l9 F%9I7n,T/"y(GF<FM?0/F'F(Peo&T91:aGF4FM幂&H6B?)-RbQ@p,x0 @Z|t0iHm$QP~-IF(,,,7-9$GĔ6t `4H>\%JP`Q0 "bp7-9:4t@6p?#* #wL2KO6` )L"3oX &L FIT_gN0Xx=p14^{&04l&L@$*ʇXPT ~bQQ0p0i̬1kt0idm$QD2W# P~ zQ0 hr4+`<5(3 hDM@aGt"IHF/!tG$ M& GM`ϟ?G4ZP P/.h&4z(T9~3^:Јx0jbh#j 36DPXXXF(wEv7J',|0it4H,$V?dܳK馶aQ0 ,O()L|('Fus@a͵)f 04z0(twH013t0i4mTm5) = `m$ d#H/}62GQttiXXX(U73ˠLh;im$QBpFV:B?f w#Q0H,0i(̬,Fg܆F)y6P#i/<78H`4ph7u̸otmPm$(kcdٛ.ya$fff `Px2>! p0it۠4H")@\PdX7:6 FHTq hHqT FItjӣD4RXڎQ0 (i̬3QpRAhDB%?0gf;Tr8Ivli4 FPH©q6 FIDJhB?#hȌ6F(V˷x8@Y3 FI6(U0Bٛ$(k=i! (ri:Ht[R>6 F͓,#W ҄FF(ҀNhYg۷d`˷ FQ-$Jk\@Ϭa εQ0[S76ęθ @$"rε#h6f ?εQ0CɌ_FW@ёAhDJ\ྺ?䧟aQ0 vݤqx7%{7:4@6udm0-<2sm`x@Ɍ3n=nh#ɔA<8m(Ԝqlw0Gg܆8F ) sm{f {6:6 F*I<;ёh7OI2%jm6F7Q0 7ݒ[#`G/4Ha%p_PXx4mQ@>ѡeFgh#V }mCjrVh iaU,IkF$FҀm$m P2׆944gְ肤Q0 F525!kFILN #<0mQ@JH$mD#3,im$71ԚG0FGF(e|>h`*7[xD4:64@6(m31'6 4|FGF(mJSFGFH4H413sea`Q@F$Qe@G zm$Qp$ #FF(n#`P4z6 vQ0 $zwjѢw> Q@ё$pmֶg٢I`2PI#HP4:Daa9t4Q`PG%*i]np FI6Ѕ$t:!I`2i343k.GhtF#/=7zH( f@C6@6նy-FI`h$QGJѵۃh#FA|vQ0 FITY'QT^s;@ammcj2=yrQ0*I"jfm@kn=p'$QH/I`h$'WYMD#it$i$ڨFO` S@t#Ix 9AX0@$ֶdat(#P4Dt2'_H0@D=(9n{t(@/~蚤AhWcIOjnQ0 F:KpT'߂IH!<=IrQ0 AyeIHo$Qj[y(I2 F(PA~yЈ^Da=k`Q@Bm$ n@#z$c$У F(RTRv0XxD |6@n[gHZDɡF(48Oq8 hD7(_4N<]= F($`6Fϓ F$QY(`PPga=Orn=(`Deѣ=j'I{z\( ]JJJX g8z4vf zfS\9pNQ0 F m-G@蚌NmS2MG(`5GJ FI";#6F(`6$=ͣQ0 FԺd(S9 -m{E`Q0 Fah$ ̂!5t􏂍%ێQ0 F`rwf h$йOEFQ0 (t6 ѣ3鶡jQ0 F( @9Ik4Hg4Q0 Fhhh#iy4 F(`]C1FhhQ0 h(:q{LѮХćkh h4Z-uۣ`C|Mh3d$m$ 3:F5 F(Q@_@#D9IͣQ0 F(ma h&I\Լ 6dQ0e3ntmѿ8v0mPvaFG`TPv.I`Y8m0]4ȚG̢Q0 F(-wG4rIl_hhQ0 FG`m$10 l:ZQ0 FhY8 H4:6h0 F(,=nP]=ٔG[H`i(Y@$eY8B FGc/fa4 F(T :L2:z4 (4HmQ0 Fh;<X@6K6mQ0 F(*FϦmQ0 F(mm$6F(`hA>@6FG`Q0Zҵy4Z@!Ml8(`yDhhm$Q?h`6FG h6 +Fs(`y4<H FGF˃< F(-m!<-YFhhQ0 q#iP:Y FImQ0 F(ͣQh#iyHt(`y4< F)ݦJ[8w߿Gs(`7)YG[HЈIbjJXF'F(`FKQ4:F_06`[6F FhhQ0 Fhh`4$Qv$m{(`@.dhtd@=ͣQ0 F(ͣQ0@$ V0<`j7FQ@~@^߆':mG`ЫmD쁐`h7(9 Z{4ZNQ0 [h;G$ ^@m# +F(ͣ!\QaגHIۃifmQ0 Hh Z-Gk_oFLG` ^xmf@#}5I,j3k7H`P4+JeJIh#$M.<`T@ىeh @#DX?FYFG` hqh>:D@#In#w܎Q0 jdp T`M$:=(da4t4&iQ0#I ht$5IT ♵n(@IgiNÖC?ё$J)͈26:6 F(Y=n{ eJSI5Fm`6"z [)FGht|2e3L2 F($ a٣[?FP26Q0ekh[ ]"$ ~@$pڧHP<:6 F(v`Grt$im$$ (`hJFF$hS rGJ̊ kF(Arh4P< mQ0 F(# 31t4:FF_&f 1:6 F(yD4`ё$*4AI#,3v{Q0_r xDF =j{HIBGF(`PdXcn F[FCN?`'-.K`п $F6m$f! G{)9v4 FHt8n{`GdУ#ICh#:/# BrEifQ0 F +#zG$ @kHGF0#I`:4X=4a!hDGA<3#I`A~ҌI" FI()J-`$? `CGnQ0 MB `]4D@6HB'sYҠYxDL`е݅GI" FÚj-tIgD.K`зDl38d蚤!h4H"a@o'+θQ0 H/uh{ OB8zk4&jH^xDqi5H`P-*s#Q04H3ё$lf0Yx/np`1h$ G8ێ̗εhpG@7GGF( #: FPmm.<,Q0 HBt̆#5F htM5FP^xD#GF(!gqt4:%, m@.gKN!%WQ0 (YLv1C h# &7IQ0 Hl<iε )@$*'?ptM+GGF(Q\#$7@WVZ F$QD󑤁kG(1QVb k$70"3>$qD@$*7n3$t=`Q@\H\mAdtP4,~rK@In4 Fh#]Aױ F#Ֆ% t2,iQ@F#Is06@6e#i5` n`7(.Q'^2$ =@$'_8XGFH($^ HCh# G}IL4 deI`w̵ G852# =@$nHpCD6 F( \BՋd e27%(h#&-?L!<&ѣF(ttHY]4$@6h(3034G`mQ@Fa<G$ M@$~ʖ%a6DH1I`Zfv#2 ihm$L̸ 塣F( ((|NGG&ѵ`J302xSrTt(#P4`Rx`tA4: Iنi3|o4 Fh#@ލ$Ϭa6&&&FFD5P FI4lǍF9XGJQ0 ږ-dt4Hq#=z|=RrQ@I<{̣ *Fm[$*9GD3:4 F(UQj8K)j4 FI(%4q}sG%Q0 hij pJF$ 8Fmj$ K@` F Vmyf jJI h#?_궓1I`dp*.H?G`G7m@$648GFA`*gp&j4drGIh# #ϸ 1̸g4QQ0BB/i-$pr?eF$ 8F͛ϸ#h]4 F(fRegְh<FQ3nm=0 F(b#Ie.LհF-z& ; A8t= &θQ0)9-mj.@0H7JzNYZeG~# R ֋":ie14Fcg87s)Lchp4@阒_̬Tn$ yC,@ۀȂ08-6h-[`m0 `kg<t_4H"RH,ߦʤAp# V`3nj@΍?`Ox Fcs(JӨD5L0z4%)Sa`:FPKo0ASli4 F:?+n6 $1UEQ`{ &&&߿s70A* r E?HòOg]=D@h/VxheSNgGH# b)\w{>e7Hؼ,H٥:w:UTG Oh? Z"j _kmoO<)-1E54H&߾}* & @_PH@AC+Y i1έG| DlZ!=`/dH c 8q@$zb #^6"@Uff` & (FN# Xk߁haj8h_fPhJ/ hi"ׯ_iv@>G=@6(Lk0i(4E:Dya*4m$ P~3gb; 0 {Hr-L\u0Y#e_i*Nf7RI?aw/fJF![Ch#V*IX,$x ³Fqf@qP ?(Ll&Qk`K*~]F43?`@if3khgadF0@T??YSt;@5Ejn<}q32//}dHάxŵvNS@G7#hH0UAh4(??#Op,<"\L}:f0/ImLt5n`K>Pi*-:-w*>d+[x3aI 9qt \| 85كd8N(Gfa35i{*Im>6lh4ׯyI7_n8[3R,$FF:5)Fbi &23[E#CtA'3Vj3QG %ccTo'0][ZH?8G{# {W c#(*(&`^<5uDPq6ѧƎHF/Ufz c6hNcϑ[?O%ƣ7 ;(_*D/6P 6bql > P;FW8S,u%$pڔ`>:4\@6Bxɡ R@' J#`/ m[b , uIn;_k#XP ^B2@6:MCy/^RMC(`K $~paȄid7OIԚc448V DzKH7F`Ԛt:&ݐGc^ˆRX{ۂ4  ;+X-n*гD݅G֚P$`$` :Ǿ^>#j2HFO FIPks1t2-t(Z4 h&U톑k58hՀF k2PI,N[H[;Uk9@6`aaʰ_&&9DD=kp#!BBbg7Om G6oN1O`~\КYC7m#h#ipjMbc4g݈w7S"3(l$Q} %TZHC`/ O* )#4!U83ΠCyq6* n {]$ dМAeԇ~dKd-,寶fO:ܵHl%Npt< l#,H aXScM#I\P'k FҠԚt-Ny8#.j'Q8DPw+ 9)Զ.<"2aIUHtn ?LBs[F4HZnvqE/j.NV;B(\'T13IC4[Hو FҐo'Qq5'*̬LO# 8ɏ(k *N$Fz$NZ7 xI_XZHCnf b= h#iuZ܉FJ;7󟿃$RaS2%)'qcQ9'm-ӯL 5k3P6Q0l@6<A&wRs>P`#F<5dSj{0[*bz/<""gMAP{ن#,ƲSmQ h4+++qSDG$̯?.O!d +S}Ϭ᱔?^xi2ZH 3 F0] ?-jvYV3iҾf;pt#V [H?A-!?f8AGF&FݶJn;i5?ۖ7KD~q0)P ?l%hu$jN#,TKFV@\ZBte< bgF!3t*n̄q۠[xDY?ӏ? _T_xˌ lTF"< FI Pw1,q_xDBe_tz#8$0Bf`ZYY`)vϬSJ n`kdH-ѥH?F0l'kc6F*=i4H'##Z'}57UCfT+ʉCyz]0$:i:HITi!T݌}PdB Zw2N7:&610 VcnF# Hjit( h#iDi;7#Ԧ~f7fDjnbp"#DV gֆ_`-$`(9 N"H?~"=DE [ `t#(@@Q@nϟ?iD|+R#"'Fa3j C*6TYۈ#,,4HZ/Ysӹn&G L&H+ ,Mu6#C!GQ-w8022[H˴Gm$J߿NM%&Ͼ ՅG4ȷ4a#EEpAcGd#%̯a,,'~4HTϟ?t 0YY󈮞e|:(Gt:bHp6Zh4 p:f`_7,GdHl ۙ50 mOFF4HO,(} FF#e033.B h#iP׮7`_2J FGCyHC[H(l FI&N}?M%F"£ѐku#FFF)Q08@6Fo?!3]x4G3kCy4zm( FIϟ~g=U24h8FGO0>Gttm ~@Q@s`S>њJ =:6<j#,@Q0 h$h.1 ^DöGpD`蕷`xm$Q@s HZ=P#200&Qh#iLSråL8A棃I`m$Q0``t pH˷gj`(@6F(D &hbчmYLF(@JuPiAgedb^VVVT0  `f0m3 D 5zg`h0 r*hB H(C@vAZN; OA!S Ą؟?ȷ4fp9ߟļQ0@$Q0 ЛP&ɻC7z - ЁE_C2#8L H(Blpj3. ?@-`OF5#6B40P7`(6 FGF(~ImPS[7tnmdx0iQ0@G((bl?u[HZHQmG0Q^`8m$Q0 FR&{04[9F4H`Fa네m1v\Ia' &{t( FI`Q _GNX27V#*I+GP4H`,7`\xDPk09G(h@Q0 F(V821Q|U&#/56c4- h4 F(gP|$I#SlF4H`쀅8p#|e8ܣ`m$Q0 FvE y0#5+GH4H`$&R.t_xD +=z( FI`QP>DʤY#NCh#iQ0 VVV Y8CInvh#iQ0 HT6Ih!7n0P*߿F 4H`Mʯ`GH-?Q0@6F(dNi \*4F4H`Wނ `0i F X-vc4 F(`2Hz6(XBk4q 3P+++ng11dg%PxC( h#iQ0 (0o$`ff6(o" ~*##77Idm$Q0 Fb#8w!G.X a6Itf"''h$h#iQ0 ?(4 !lGJr~#m#/F ʏ9 FI`Q@N"&&FCyDk=tlcdd}m$Q0 F_F l'1c@6 oj3k70Qё$@0 F(4Hc'qCfaؖ~\@6F(`DFGúD~P6H4H`T$fjͣAGIt4H`o'Q4ji2)5 F FI`Q0 F(X@.L`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Qh#iQ0 F( F(`Q0 F@Q0 F(`, FI`Q0 F(X@6F(`Q0 m$Q0 F(``4H`Q0 F(h4 F(`Q& JIENDB`quickroute-linux-upstream-2.5/Graphics/headerLogo.png000066400000000000000000000062071446222606700231030ustar00rootroot00000000000000PNG  IHDR*2*FI pHYs+gAMA|Q cHRMz%u0`:o_F IDATxb?HI~v R P,R/@@#Nb$%D) Cc`1a`- u s @D9@- es &: ;;3Q,@1hPT1g`f@_>{V3@g@ t295сUA0dD8?u8 R 7Lb85.@t(Ё@@|FVsf`7nߧ `r8&::+0'n`8AcC,(q3&009'Og8<*=t I+sC٠ 9 :` b ] t$0 "?w_>aXߣ% - a%r0}q 였!?1 UOrxh="2%ȭ< +%Y}zx:z@Lh A dfeg:?{H<4l!GP5 /ycUv`ff`aZf A5࢏= &4H!:y9qc0a#R`ⵠX@`dUcUh Ą oN(qhwTG@2ρi\$ ubV,p@! *Y2 @(f~ :IPuz^p@PCB2kABU9T١:Ãّ  /ΓSOcq,(W?sP:s@LH q~1qY H?^ .z@(.aH ׃;P6? ~ ` Ŀ06Q#4+&CŠf/0m1̡`(r"ȑ@ܧ#A yPW*#-!n%I9\s(0âAt A /`d:XIL`G3)XUܟOj  6glPa1Ap7@@1" F,c,*X3;.ibA\ڐ4ȁ  _Tw(+*CvV;ԁ e @!f@Mtq?CAC#F P  .&D(>u"(31r+P/^BՀiO#4@-& f3J0Z߾4@1!g2:VJKT +50D,v `}gx@PDFKX Pp)Ǩs F0ް d,  >ֻY y] VV /]B=PL GP@ۿ<`d>n?a=bBwuC  o`99R虘(H `T06)A/ ΄ج$& #CBD:rh@541psc`~@}` Zxԭ:qTF_O{x-^gx8mKւ3 Lބ &x-. 7A Z3 ;2`Cj$?:ܚbho*_7F{pn ͵?!8|W s^5~P̊qcVP`w&ph8;>@#@t 4p>Xl lEZHbpGac30~bӞ>:^߰#@;rØ5m %Au_4́АM_V :o' UT#`a$!( $ O=ѼL jv(ᦋ>v>3@N@ {bgDe&ǑXL0n`/E2BfbhCByhDnj]zH&7av io'~j` 1!FĔfg|xF:a4·͎@cMiЄ3C'ZRmLXa% =ѷ-?ÊKPǡ7g}!Yg>`X.)Z`{]BQ8G[\'!Bo󀛁CUu?m P-96 qyV~<_f~cf`fM@" @t QhTPa&P-`Ʀq>@Ǐ P4  ڬOpׯ;@U+@ݡf# >Zh`Ah!{tX,@GLFZoFZIENDB`quickroute-linux-upstream-2.5/Graphics/headerLogo1.png000066400000000000000000000062071446222606700231640ustar00rootroot00000000000000PNG  IHDR*2*FI pHYs+gAMA|Q cHRMz%u0`:o_F IDATxb?HI~v R P,R/@@#Nb$%D) Cc`1a`- u s @D9@- es &: ;;3Q,@1hPT1g`f@_>{V3@g@ t295сUA0dD8?u8 R 7Lb85.@t(Ё@@|FVsf`7nߧ `r8&::+0'n`8AcC,(q3&009'Og8<*=t I+sC٠ 9 :` b ] t$0 "?w_>aXߣ% - a%r0}q 였!?1 UOrxh="2%ȭ< +%Y}zx:z@Lh A dfeg:?{H<4l!GP5 /ycUv`ff`aZf A5࢏= &4H!:y9qc0a#R`ⵠX@`dUcUh Ą oN(qhwTG@2ρi\$ ubV,p@! *Y2 @(f~ :IPuz^p@PCB2kABU9T١:Ãّ  /ΓSOcq,(W?sP:s@LH q~1qY H?^ .z@(.aH ׃;P6? ~ ` Ŀ06Q#4+&CŠf/0m1̡`(r"ȑ@ܧ#A yPW*#-!n%I9\s(0âAt A /`d:XIL`G3)XUܟOj  6glPa1Ap7@@1" F,c,*X3;.ibA\ڐ4ȁ  _Tw(+*CvV;ԁ e @!f@Mtq?CAC#F P  .&D(>u"(31r+P/^BՀiO#4@-& f3J0Z߾4@1!g2:VJKT +50D,v `}gx@PDFKX Pp)Ǩs F0ް d,  >ֻY y] VV /]B=PL GP@ۿ<`d>n?a=bBwuC  o`99R虘(H `T06)A/ ΄ج$& #CBD:rh@541psc`~@}` Zxԭ:qTF_O{x-^gx8mKւ3 Lބ &x-. 7A Z3 ;2`Cj$?:ܚbho*_7F{pn ͵?!8|W s^5~P̊qcVP`w&ph8;>@#@t 4p>Xl lEZHbpGac30~bӞ>:^߰#@;rØ5m %Au_4́АM_V :o' UT#`a$!( $ O=ѼL jv(ᦋ>v>3@N@ {bgDe&ǑXL0n`/E2BfbhCByhDnj]zH&7av io'~j` 1!FĔfg|xF:a4·͎@cMiЄ3C'ZRmLXa% =ѷ-?ÊKPǡ7g}!Yg>`X.)Z`{]BQ8G[\'!Bo󀛁CUu?m P-96 qyV~<_f~cf`fM@" @t QhTPa&P-`Ʀq>@Ǐ P4  ڬOpׯ;@U+@ݡf# >Zh`Ah!{tX,@GLFZoFZIENDB`quickroute-linux-upstream-2.5/Graphics/pointer.png000066400000000000000000000004411446222606700225040ustar00rootroot00000000000000PNG  IHDR7 pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb32`c0Ǯ P@L&v%Ą PJ ]b´U @1as9¢)\U "Ą"ȈbBB5#D7 0lE%AB 3!0!XIENDB`quickroute-linux-upstream-2.5/Graphics/toolbar icons.psd000066400000000000000000000236111446222606700235700ustar00rootroot000000000000008BPS8BIM%8BIM$) adobe:docid:photoshop:ace1e949-b721-11dc-a5f1-c70179fe83b6 8BIMHH8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIM5-8BIM8BIM8BIM8BIM@@8BIM8BIMO toolbar iconsnullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM8BIM8BIM 0JFIFHH Adobe_CMAdobed            "?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?z F l Ӌѷe.Uf3 u݉g{1jȧW;;鹟gǁNӶ!%|UmteѓE./X7Sq0]Wf 8=d=WzǕc8\]ws phԺ?(Fkg8ޚS8BIM!UAdobe PhotoshopAdobe Photoshop 7.08BIM"&MM*bj(1r2iHHAdobe Photoshop 7.02007:12:30 23:05:17(&HH $ B8BIMnorm+( Background8BIMluni Background8BIMlnsrbgnd8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp&8BIMnorm*(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp,({8BIMnorm*(Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp8BIMnorm((Layer 38BIMluniLayer 38BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp              8BIMPatt  quickroute-linux-upstream-2.5/Graphics/zoomIn.png000066400000000000000000000004521446222606700223010ustar00rootroot00000000000000PNG  IHDR7 pHYs  gAMA|Q cHRMz%u0`:o_FIDATxbPF@,0IdȊgU#bBF3  S?:F @t#hT @ PlA 3b: Ă4l E ( FlA aC#J7 SO@L`m'XIENDB`quickroute-linux-upstream-2.5/Makefile000066400000000000000000000044361446222606700202260ustar00rootroot00000000000000 .PHONY: clean all all_debug all: # mdtool build -c:Release --buildfile: QuickRoute.sln xvfb-run xbuild /p:Configuration=Release QuickRoute.sln all_debug: # mdtool build -c:Debug --buildfile: QuickRoute.sln xvfb-run xbuild /p:Configuration=Debug QuickRoute.sln clean: # mdtool build -t:Clean xbuild /t:Clean /p:Configuration=Debug QuickRoute.sln xbuild /t:Clean /p:Configuration=Release QuickRoute.sln rm -rf QuickRoute.UI/bin rm -rf QuickRoute.UI/obj install: @echo "install being called" @echo $: @echo $@ mkdir --parents ${DESTDIR}/usr/bin ${DESTDIR}/usr/lib/quickroute-gps cp scripts/quickroute-gps ${DESTDIR}/usr/bin cp QuickRoute.UI/bin/Release/QuickRoute.exe ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.exe.config ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/ExifLibrary.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/ICSharpCode.SharpZipLib.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/PowerCollections.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.BusinessEntities.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.Common.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.Controls.dll ${DESTDIR}/usr/lib/quickroute-gps #cp QuickRoute.UI/bin/Release/QuickRoute.GPSDeviceReaders.GarminUSBReader.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.GPSDeviceReaders.SerialPortDeviceReader.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.Publishers.DOMAPublisher.dll ${DESTDIR}/usr/lib/quickroute-gps cp QuickRoute.UI/bin/Release/QuickRoute.Resources.dll ${DESTDIR}/usr/lib/quickroute-gps mkdir --parents ${DESTDIR}/usr/share/pixmaps cp Graphics/QuickRoute_64x64.xpm ${DESTDIR}/usr/share/pixmaps ln -s -r ${DESTDIR}/usr/share/pixmaps/QuickRoute_64x64.xpm ${DESTDIR}/usr/share/pixmaps/quickroute-gps.xpm mkdir --parents ${DESTDIR}/usr/share/applications cp scripts/quickroute-gps.desktop ${DESTDIR}/usr/share/applications quickroute-linux-upstream-2.5/Publishers/000077500000000000000000000000001446222606700206775ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/000077500000000000000000000000001446222606700232755ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/DOMAPublisher.cs000066400000000000000000000313171446222606700262270ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using QuickRoute.Common; using QuickRoute.Publishers.DOMAPublisher.DOMA; using Category = QuickRoute.Common.Category; using MapInfo = QuickRoute.Common.MapInfo; namespace QuickRoute.Publishers.DOMAPublisher { public class DOMAPublisher : IMapPublisher { public string WebServiceUrl { get; set; } public string Username { get; set; } public string Password { get; set; } private string version; #region Interface methods public PublishResult Publish(MapInfo mapInfo) { if (version != null && version.CompareTo("3.0") >= 0) { return PublishWithPreUpload(mapInfo); } return PublishWithoutPreUpload(mapInfo); } public GetAllCategoriesResult GetAllCategories() { var service = new DOMAService(); service.Url = WebServiceUrl; var request = new GetAllCategoriesRequest { Username = Username, Password = Password }; var response = service.GetAllCategories(request); var result = new GetAllCategoriesResult { ErrorMessage = response.ErrorMessage, Success = response.Success, }; if (response.Success) { result.Categories = new List(); foreach (var category in response.Categories) { result.Categories.Add(TranslateCategory(category)); } } return result; } public GetAllMapsResult GetAllMaps() { var service = new DOMAService(); service.Url = WebServiceUrl; var request = new GetAllMapsRequest { Username = Username, Password = Password }; var response = service.GetAllMaps(request); var result = new GetAllMapsResult { ErrorMessage = response.ErrorMessage, Success = response.Success, }; if (response.Success) { result.Maps = new List(); foreach (var map in response.Maps) { result.Maps.Add(TranslateMapInfo(map)); } } return result; } public ConnectResult Connect() { var service = new DOMAService(); service.Url = WebServiceUrl; var request = new ConnectRequest { Username = Username, Password = Password }; var response = service.Connect(request); version = response.Version; return new ConnectResult { Success = response.Success, ErrorMessage = response.ErrorMessage, Version = response.Version }; } #endregion private PublishResult PublishWithoutPreUpload(MapInfo mapInfo) { var service = new DOMAService(); service.Url = WebServiceUrl; var request = new PublishMapRequest { Username = Username, Password = Password, MapInfo = TranslateMapInfo(mapInfo), }; try { request.MapInfo.BlankMapImageData = null; // this version of the webservice has not support for blank map images var response = service.PublishMap(request); return new PublishResult { Success = response.Success, ErrorMessage = response.ErrorMessage, URL = response.URL }; } catch (Exception ex) { return new PublishResult { Success = false, ErrorMessage = ex.Message }; } } private PublishResult PublishWithPreUpload(MapInfo mapInfo) { var service = new DOMAService(); service.Url = WebServiceUrl; var request = new PublishPreUploadedMapRequest { Username = Username, Password = Password, MapInfo = TranslateMapInfo(mapInfo), }; try { // use partial upload // map image FileUploadResult mapFileUploadResult = null; if (request.MapInfo.MapImageData != null) mapFileUploadResult = PartialFileUpload(request.MapInfo.MapImageData, request.MapInfo.MapImageFileExtension); // blank map image FileUploadResult blankMapFileUploadResult = null; if (request.MapInfo.BlankMapImageData != null) blankMapFileUploadResult = PartialFileUpload(request.MapInfo.BlankMapImageData, request.MapInfo.MapImageFileExtension); // thumbnail FileUploadResult thumbnailFileUploadResult = null; var thumbnailImageData = CreateThumbnailImageData(mapInfo); if (thumbnailImageData != null) thumbnailFileUploadResult = PartialFileUpload(thumbnailImageData, "jpg"); if (!(mapFileUploadResult != null && !mapFileUploadResult.Success) && !(blankMapFileUploadResult != null && !blankMapFileUploadResult.Success) && !(thumbnailFileUploadResult != null && !thumbnailFileUploadResult.Success)) { if (mapFileUploadResult != null) request.PreUploadedMapImageFileName = mapFileUploadResult.FileName; if (blankMapFileUploadResult != null) request.PreUploadedBlankMapImageFileName = blankMapFileUploadResult.FileName; if (thumbnailFileUploadResult != null) request.PreUploadedThumbnailImageFileName = thumbnailFileUploadResult.FileName; } // reset image data as it already has been uploaded request.MapInfo.MapImageData = null; request.MapInfo.BlankMapImageData = null; var response = service.PublishPreUploadedMap(request); return new PublishResult { Success = response.Success, ErrorMessage = response.ErrorMessage, URL = response.URL }; } catch (Exception ex) { return new PublishResult { Success = false, ErrorMessage = ex.Message }; } } private FileUploadResult PartialFileUpload(byte[] imageData, string extension) { const int chunkSize = 512 * 1024; // 512 KB var service = new DOMAService { Url = WebServiceUrl }; string fileName = new Random().Next(0, 100000000) + "." + extension; int position = 0; while (position < imageData.Length) { int length = Math.Min(chunkSize, imageData.Length - position); var buffer = new byte[length]; Array.Copy(imageData, position, buffer, 0, length); position += length; var uploadPartialFileRequest = new UploadPartialFileRequest { Username = Username, Password = Password, FileName = fileName, Data = buffer }; var uploadPartialFileResponse = service.UploadPartialFile(uploadPartialFileRequest); if (!uploadPartialFileResponse.Success) { return new FileUploadResult { ErrorMessage = uploadPartialFileResponse.ErrorMessage, Success = false }; } } return new FileUploadResult { Success = true, FileName = fileName }; } private static byte[] CreateThumbnailImageData(MapInfo mapInfo) //, ThumbnailProperties tp) { if (mapInfo.MapImageData == null && mapInfo.BlankMapImageData == null) return null; // get original image from byte array var ms = new MemoryStream(mapInfo.MapImageData ?? mapInfo.BlankMapImageData); var image = Image.FromStream(ms); ms.Close(); ms.Dispose(); // create blank thumbnail image // todo: get these values from webservice var thumbnailSize = new Size(400, 100); var thumbnailScale = 0.5; var thumbnailBitmap = new Bitmap(thumbnailSize.Width, thumbnailSize.Height); // the rectangle in the original image that corresponds to the thumbnail image var imageRectangle = new Rectangle((image.Width - thumbnailSize.Width) / 2, (image.Height - thumbnailSize.Height) / 2, Convert.ToInt32(thumbnailSize.Width / thumbnailScale), Convert.ToInt32(thumbnailSize.Height / thumbnailScale)); // perform some resizing if the image is not large enough if (imageRectangle.Width > image.Width) { imageRectangle.X = 0; imageRectangle.Width = image.Width; } if (imageRectangle.Height > image.Height) { imageRectangle.Y = 0; imageRectangle.Height = image.Height; } // calculate actual thumbnail rectangle and draw the image to the thumbnail var thumbnailRectangle = new Rectangle( Convert.ToInt32((thumbnailSize.Width - thumbnailScale * imageRectangle.Width) / 2), Convert.ToInt32((thumbnailSize.Height - thumbnailScale * imageRectangle.Height) / 2), Convert.ToInt32(thumbnailScale * imageRectangle.Width), Convert.ToInt32(thumbnailScale * imageRectangle.Height)); var thumbnailGraphics = Graphics.FromImage(thumbnailBitmap); thumbnailGraphics.SmoothingMode = SmoothingMode.AntiAlias; thumbnailGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic; using (var b = new SolidBrush(Color.White)) { thumbnailGraphics.FillRectangle(b, new Rectangle(new Point(0, 0), thumbnailSize)); } thumbnailGraphics.DrawImage(image, thumbnailRectangle, imageRectangle, GraphicsUnit.Pixel); thumbnailGraphics.Dispose(); image.Dispose(); // create byte array from image var thumbnailStream = new MemoryStream(); thumbnailBitmap.Save(thumbnailStream, GetJpegEncoder(), GetJpegEncoderParams(0.8)); thumbnailBitmap.Dispose(); var data = thumbnailStream.ToArray(); thumbnailStream.Dispose(); return data; } private static QuickRoute.Common.MapInfo TranslateMapInfo(DOMA.MapInfo mapInfo) { return new QuickRoute.Common.MapInfo { Comment = mapInfo.Comment, Country = mapInfo.Country, Date = mapInfo.Date, ID = mapInfo.ID, UserID = mapInfo.UserID, CategoryID = mapInfo.CategoryID, MapImageData = mapInfo.MapImageData, BlankMapImageData = mapInfo.BlankMapImageData, MapImageFileExtension = mapInfo.MapImageFileExtension, MapName = mapInfo.MapName, Name = mapInfo.Name, Organiser = mapInfo.Organiser, RelayLeg = mapInfo.RelayLeg, ResultListUrl = mapInfo.ResultListUrl, Discipline = mapInfo.Discipline }; } private static DOMA.MapInfo TranslateMapInfo(QuickRoute.Common.MapInfo mapInfo) { return new DOMA.MapInfo { Comment = mapInfo.Comment, Country = mapInfo.Country, Date = mapInfo.Date, ID = mapInfo.ID, UserID = mapInfo.UserID, CategoryID = mapInfo.CategoryID, MapImageData = mapInfo.MapImageData, BlankMapImageData = mapInfo.BlankMapImageData, MapImageFileExtension = mapInfo.MapImageFileExtension, MapName = mapInfo.MapName, Name = mapInfo.Name, Organiser = mapInfo.Organiser, RelayLeg = mapInfo.RelayLeg, ResultListUrl = mapInfo.ResultListUrl, Discipline = mapInfo.Discipline }; } private static QuickRoute.Common.Category TranslateCategory(DOMA.Category Category) { return new QuickRoute.Common.Category { ID = Category.ID, UserID = Category.UserID, Name = Category.Name, }; } private static DOMA.Category TranslateCategory(QuickRoute.Common.Category Category) { return new DOMA.Category { ID = Category.ID, UserID = Category.UserID, Name = Category.Name, }; } private static ImageCodecInfo GetJpegEncoder() { ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.MimeType == "image/jpeg") return codec; } return null; } private static EncoderParameters GetJpegEncoderParams(double quality) { var ep = new EncoderParameters(1); ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)(100 * quality)); return ep; } private class FileUploadResult { public bool Success { get; set; } public string ErrorMessage { get; set; } public string FileName { get; set; } } } } quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/DOMAPublisher.csproj000066400000000000000000000134261446222606700271230ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {B7D88639-3248-4309-A687-94DC11EC2946} Library Properties QuickRoute.Publishers.DOMAPublisher QuickRoute.Publishers.DOMAPublisher v4.5 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt 4 false bin\x86\Release\ TRACE true pdbonly x86 prompt 4 True True Settings.settings True True Reference.map SettingsSingleFileGenerator Settings.Designer.cs Reference.map Reference.map Reference.map Reference.map Reference.map MSDiscoCodeGenerator Reference.cs Reference.map {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E} QuickRoute.Common Dynamic Web References\DOMA\ http://localhost/domadev/webservice.php%3fwsdl Settings QuickRoute_Publishers_DOMAPublisher_DOMA_DOMAService quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Properties/000077500000000000000000000000001446222606700254315ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Properties/AssemblyInfo.cs000066400000000000000000000026471446222606700303640ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.DOMAPublisher")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.DOMAPublisher")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("529527c6-43cf-47e2-afef-4fceeaf4253b")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyVersion("2.4")] [assembly: AssemblyFileVersion("2.4")] quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Properties/Settings.Designer.cs000066400000000000000000000032771446222606700313300ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.Publishers.DOMAPublisher.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)] [global::System.Configuration.DefaultSettingValueAttribute("http://localhost/domadev/webservice.php")] public string QuickRoute_Publishers_DOMAPublisher_DOMA_DOMAService { get { return ((string)(this["QuickRoute_Publishers_DOMAPublisher_DOMA_DOMAService"])); } } } } quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Properties/Settings.settings000066400000000000000000000010261446222606700310120ustar00rootroot00000000000000 http://localhost/domadev/webservice.php quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/000077500000000000000000000000001446222606700260545ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA/000077500000000000000000000000001446222606700265745ustar00rootroot00000000000000ConnectResponse.datasource000066400000000000000000000012151446222606700337000ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA QuickRoute.Publishers.DOMAPublisher.DOMA.ConnectResponse, Web References.DOMA.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null GetAllCategoriesResponse.datasource000066400000000000000000000012371446222606700354710ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA QuickRoute.Publishers.DOMAPublisher.DOMA.GetAllCategoriesResponse, Web References.DOMA.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null GetAllMapsResponse.datasource000066400000000000000000000012231446222606700342770ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA QuickRoute.Publishers.DOMAPublisher.DOMA.GetAllMapsResponse, Web References.DOMA.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null PublishMapResponse.datasource000066400000000000000000000012231446222606700343520ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA QuickRoute.Publishers.DOMAPublisher.DOMA.PublishMapResponse, Web References.DOMA.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null PublishPreUploadedMapResponse.datasource000066400000000000000000000012511446222606700365000ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA QuickRoute.Publishers.DOMAPublisher.DOMA.PublishPreUploadedMapResponse, Web References.DOMA.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA/Reference.cs000066400000000000000000001260521446222606700310270ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.239. // #pragma warning disable 1591 namespace QuickRoute.Publishers.DOMAPublisher.DOMA { using System; using System.Web.Services; using System.Diagnostics; using System.Web.Services.Protocols; using System.ComponentModel; using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="DOMAServiceBinding", Namespace="http://www.matstroeng.se/doma")] [System.Xml.Serialization.SoapIncludeAttribute(typeof(Category))] public partial class DOMAService : System.Web.Services.Protocols.SoapHttpClientProtocol { private System.Threading.SendOrPostCallback PublishMapOperationCompleted; private System.Threading.SendOrPostCallback PublishPreUploadedMapOperationCompleted; private System.Threading.SendOrPostCallback UploadPartialFileOperationCompleted; private System.Threading.SendOrPostCallback GetAllMapsOperationCompleted; private System.Threading.SendOrPostCallback GetAllCategoriesOperationCompleted; private System.Threading.SendOrPostCallback ConnectOperationCompleted; private bool useDefaultCredentialsSetExplicitly; /// public DOMAService() { this.Url = global::QuickRoute.Publishers.DOMAPublisher.Properties.Settings.Default.QuickRoute_Publishers_DOMAPublisher_DOMA_DOMAService; if ((this.IsLocalFileSystemWebService(this.Url) == true)) { this.UseDefaultCredentials = true; this.useDefaultCredentialsSetExplicitly = false; } else { this.useDefaultCredentialsSetExplicitly = true; } } public new string Url { get { return base.Url; } set { if ((((this.IsLocalFileSystemWebService(base.Url) == true) && (this.useDefaultCredentialsSetExplicitly == false)) && (this.IsLocalFileSystemWebService(value) == false))) { base.UseDefaultCredentials = false; } base.Url = value; } } public new bool UseDefaultCredentials { get { return base.UseDefaultCredentials; } set { base.UseDefaultCredentials = value; this.useDefaultCredentialsSetExplicitly = true; } } /// public event PublishMapCompletedEventHandler PublishMapCompleted; /// public event PublishPreUploadedMapCompletedEventHandler PublishPreUploadedMapCompleted; /// public event UploadPartialFileCompletedEventHandler UploadPartialFileCompleted; /// public event GetAllMapsCompletedEventHandler GetAllMapsCompleted; /// public event GetAllCategoriesCompletedEventHandler GetAllCategoriesCompleted; /// public event ConnectCompletedEventHandler ConnectCompleted; /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/domadev/webservice.php/PublishMap", RequestNamespace="http://www.matstroeng.se/doma", ResponseNamespace="http://www.matstroeng.se/doma")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public PublishMapResponse PublishMap(PublishMapRequest request) { object[] results = this.Invoke("PublishMap", new object[] { request}); return ((PublishMapResponse)(results[0])); } /// public void PublishMapAsync(PublishMapRequest request) { this.PublishMapAsync(request, null); } /// public void PublishMapAsync(PublishMapRequest request, object userState) { if ((this.PublishMapOperationCompleted == null)) { this.PublishMapOperationCompleted = new System.Threading.SendOrPostCallback(this.OnPublishMapOperationCompleted); } this.InvokeAsync("PublishMap", new object[] { request}, this.PublishMapOperationCompleted, userState); } private void OnPublishMapOperationCompleted(object arg) { if ((this.PublishMapCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.PublishMapCompleted(this, new PublishMapCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/domadev/webservice.php/PublishPreUploadedMap", RequestNamespace="http://www.matstroeng.se/doma", ResponseNamespace="http://www.matstroeng.se/doma")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public PublishPreUploadedMapResponse PublishPreUploadedMap(PublishPreUploadedMapRequest request) { object[] results = this.Invoke("PublishPreUploadedMap", new object[] { request}); return ((PublishPreUploadedMapResponse)(results[0])); } /// public void PublishPreUploadedMapAsync(PublishPreUploadedMapRequest request) { this.PublishPreUploadedMapAsync(request, null); } /// public void PublishPreUploadedMapAsync(PublishPreUploadedMapRequest request, object userState) { if ((this.PublishPreUploadedMapOperationCompleted == null)) { this.PublishPreUploadedMapOperationCompleted = new System.Threading.SendOrPostCallback(this.OnPublishPreUploadedMapOperationCompleted); } this.InvokeAsync("PublishPreUploadedMap", new object[] { request}, this.PublishPreUploadedMapOperationCompleted, userState); } private void OnPublishPreUploadedMapOperationCompleted(object arg) { if ((this.PublishPreUploadedMapCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.PublishPreUploadedMapCompleted(this, new PublishPreUploadedMapCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/domadev/webservice.php/UploadPartialFile", RequestNamespace="http://www.matstroeng.se/doma", ResponseNamespace="http://www.matstroeng.se/doma")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public UploadPartialFileResponse UploadPartialFile(UploadPartialFileRequest request) { object[] results = this.Invoke("UploadPartialFile", new object[] { request}); return ((UploadPartialFileResponse)(results[0])); } /// public void UploadPartialFileAsync(UploadPartialFileRequest request) { this.UploadPartialFileAsync(request, null); } /// public void UploadPartialFileAsync(UploadPartialFileRequest request, object userState) { if ((this.UploadPartialFileOperationCompleted == null)) { this.UploadPartialFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUploadPartialFileOperationCompleted); } this.InvokeAsync("UploadPartialFile", new object[] { request}, this.UploadPartialFileOperationCompleted, userState); } private void OnUploadPartialFileOperationCompleted(object arg) { if ((this.UploadPartialFileCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.UploadPartialFileCompleted(this, new UploadPartialFileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/domadev/webservice.php/GetAllMaps", RequestNamespace="http://www.matstroeng.se/doma", ResponseNamespace="http://www.matstroeng.se/doma")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public GetAllMapsResponse GetAllMaps(GetAllMapsRequest request) { object[] results = this.Invoke("GetAllMaps", new object[] { request}); return ((GetAllMapsResponse)(results[0])); } /// public void GetAllMapsAsync(GetAllMapsRequest request) { this.GetAllMapsAsync(request, null); } /// public void GetAllMapsAsync(GetAllMapsRequest request, object userState) { if ((this.GetAllMapsOperationCompleted == null)) { this.GetAllMapsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAllMapsOperationCompleted); } this.InvokeAsync("GetAllMaps", new object[] { request}, this.GetAllMapsOperationCompleted, userState); } private void OnGetAllMapsOperationCompleted(object arg) { if ((this.GetAllMapsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetAllMapsCompleted(this, new GetAllMapsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/domadev/webservice.php/GetAllCategories", RequestNamespace="http://www.matstroeng.se/doma", ResponseNamespace="http://www.matstroeng.se/doma")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public GetAllCategoriesResponse GetAllCategories(GetAllCategoriesRequest request) { object[] results = this.Invoke("GetAllCategories", new object[] { request}); return ((GetAllCategoriesResponse)(results[0])); } /// public void GetAllCategoriesAsync(GetAllCategoriesRequest request) { this.GetAllCategoriesAsync(request, null); } /// public void GetAllCategoriesAsync(GetAllCategoriesRequest request, object userState) { if ((this.GetAllCategoriesOperationCompleted == null)) { this.GetAllCategoriesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetAllCategoriesOperationCompleted); } this.InvokeAsync("GetAllCategories", new object[] { request}, this.GetAllCategoriesOperationCompleted, userState); } private void OnGetAllCategoriesOperationCompleted(object arg) { if ((this.GetAllCategoriesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetAllCategoriesCompleted(this, new GetAllCategoriesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://localhost/domadev/webservice.php/Connect", RequestNamespace="http://www.matstroeng.se/doma", ResponseNamespace="http://www.matstroeng.se/doma")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public ConnectResponse Connect(ConnectRequest request) { object[] results = this.Invoke("Connect", new object[] { request}); return ((ConnectResponse)(results[0])); } /// public void ConnectAsync(ConnectRequest request) { this.ConnectAsync(request, null); } /// public void ConnectAsync(ConnectRequest request, object userState) { if ((this.ConnectOperationCompleted == null)) { this.ConnectOperationCompleted = new System.Threading.SendOrPostCallback(this.OnConnectOperationCompleted); } this.InvokeAsync("Connect", new object[] { request}, this.ConnectOperationCompleted, userState); } private void OnConnectOperationCompleted(object arg) { if ((this.ConnectCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.ConnectCompleted(this, new ConnectCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// public new void CancelAsync(object userState) { base.CancelAsync(userState); } private bool IsLocalFileSystemWebService(string url) { if (((url == null) || (url == string.Empty))) { return false; } System.Uri wsUri = new System.Uri(url); if (((wsUri.Port >= 1024) && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { return true; } return false; } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class PublishMapRequest { private string usernameField; private string passwordField; private MapInfo mapInfoField; /// public string Username { get { return this.usernameField; } set { this.usernameField = value; } } /// public string Password { get { return this.passwordField; } set { this.passwordField = value; } } /// public MapInfo MapInfo { get { return this.mapInfoField; } set { this.mapInfoField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class MapInfo { private int idField; private int userIDField; private int categoryIDField; private System.DateTime dateField; private string nameField; private string organiserField; private string countryField; private string disciplineField; private string relayLegField; private string mapNameField; private string resultListUrlField; private string commentField; private byte[] mapImageDataField; private string mapImageFileExtensionField; private byte[] blankMapImageDataField; /// public int ID { get { return this.idField; } set { this.idField = value; } } /// public int UserID { get { return this.userIDField; } set { this.userIDField = value; } } /// public int CategoryID { get { return this.categoryIDField; } set { this.categoryIDField = value; } } /// public System.DateTime Date { get { return this.dateField; } set { this.dateField = value; } } /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public string Organiser { get { return this.organiserField; } set { this.organiserField = value; } } /// public string Country { get { return this.countryField; } set { this.countryField = value; } } /// public string Discipline { get { return this.disciplineField; } set { this.disciplineField = value; } } /// public string RelayLeg { get { return this.relayLegField; } set { this.relayLegField = value; } } /// public string MapName { get { return this.mapNameField; } set { this.mapNameField = value; } } /// public string ResultListUrl { get { return this.resultListUrlField; } set { this.resultListUrlField = value; } } /// public string Comment { get { return this.commentField; } set { this.commentField = value; } } /// [System.Xml.Serialization.SoapElementAttribute(DataType="base64Binary")] public byte[] MapImageData { get { return this.mapImageDataField; } set { this.mapImageDataField = value; } } /// public string MapImageFileExtension { get { return this.mapImageFileExtensionField; } set { this.mapImageFileExtensionField = value; } } /// [System.Xml.Serialization.SoapElementAttribute(DataType="base64Binary")] public byte[] BlankMapImageData { get { return this.blankMapImageDataField; } set { this.blankMapImageDataField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class ConnectResponse { private bool successField; private string errorMessageField; private string versionField; /// public bool Success { get { return this.successField; } set { this.successField = value; } } /// public string ErrorMessage { get { return this.errorMessageField; } set { this.errorMessageField = value; } } /// public string Version { get { return this.versionField; } set { this.versionField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class ConnectRequest { private string usernameField; private string passwordField; /// public string Username { get { return this.usernameField; } set { this.usernameField = value; } } /// public string Password { get { return this.passwordField; } set { this.passwordField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class Category { private int idField; private int userIDField; private string nameField; /// public int ID { get { return this.idField; } set { this.idField = value; } } /// public int UserID { get { return this.userIDField; } set { this.userIDField = value; } } /// public string Name { get { return this.nameField; } set { this.nameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class GetAllCategoriesResponse { private bool successField; private string errorMessageField; private Category[] categoriesField; /// public bool Success { get { return this.successField; } set { this.successField = value; } } /// public string ErrorMessage { get { return this.errorMessageField; } set { this.errorMessageField = value; } } /// public Category[] Categories { get { return this.categoriesField; } set { this.categoriesField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class GetAllCategoriesRequest { private string usernameField; private string passwordField; /// public string Username { get { return this.usernameField; } set { this.usernameField = value; } } /// public string Password { get { return this.passwordField; } set { this.passwordField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class GetAllMapsResponse { private bool successField; private string errorMessageField; private MapInfo[] mapsField; /// public bool Success { get { return this.successField; } set { this.successField = value; } } /// public string ErrorMessage { get { return this.errorMessageField; } set { this.errorMessageField = value; } } /// public MapInfo[] Maps { get { return this.mapsField; } set { this.mapsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class GetAllMapsRequest { private string usernameField; private string passwordField; /// public string Username { get { return this.usernameField; } set { this.usernameField = value; } } /// public string Password { get { return this.passwordField; } set { this.passwordField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class UploadPartialFileResponse { private bool successField; private string errorMessageField; private string fileNameField; /// public bool Success { get { return this.successField; } set { this.successField = value; } } /// public string ErrorMessage { get { return this.errorMessageField; } set { this.errorMessageField = value; } } /// public string FileName { get { return this.fileNameField; } set { this.fileNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class UploadPartialFileRequest { private string usernameField; private string passwordField; private string fileNameField; private byte[] dataField; /// public string Username { get { return this.usernameField; } set { this.usernameField = value; } } /// public string Password { get { return this.passwordField; } set { this.passwordField = value; } } /// public string FileName { get { return this.fileNameField; } set { this.fileNameField = value; } } /// [System.Xml.Serialization.SoapElementAttribute(DataType="base64Binary")] public byte[] Data { get { return this.dataField; } set { this.dataField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class PublishPreUploadedMapResponse { private bool successField; private string errorMessageField; private string uRLField; /// public bool Success { get { return this.successField; } set { this.successField = value; } } /// public string ErrorMessage { get { return this.errorMessageField; } set { this.errorMessageField = value; } } /// public string URL { get { return this.uRLField; } set { this.uRLField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class PublishPreUploadedMapRequest { private string usernameField; private string passwordField; private MapInfo mapInfoField; private string preUploadedMapImageFileNameField; private string preUploadedBlankMapImageFileNameField; private string preUploadedThumbnailImageFileNameField; /// public string Username { get { return this.usernameField; } set { this.usernameField = value; } } /// public string Password { get { return this.passwordField; } set { this.passwordField = value; } } /// public MapInfo MapInfo { get { return this.mapInfoField; } set { this.mapInfoField = value; } } /// public string PreUploadedMapImageFileName { get { return this.preUploadedMapImageFileNameField; } set { this.preUploadedMapImageFileNameField = value; } } /// public string PreUploadedBlankMapImageFileName { get { return this.preUploadedBlankMapImageFileNameField; } set { this.preUploadedBlankMapImageFileNameField = value; } } /// public string PreUploadedThumbnailImageFileName { get { return this.preUploadedThumbnailImageFileNameField; } set { this.preUploadedThumbnailImageFileNameField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/doma")] public partial class PublishMapResponse { private bool successField; private string errorMessageField; private string uRLField; /// public bool Success { get { return this.successField; } set { this.successField = value; } } /// public string ErrorMessage { get { return this.errorMessageField; } set { this.errorMessageField = value; } } /// public string URL { get { return this.uRLField; } set { this.uRLField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void PublishMapCompletedEventHandler(object sender, PublishMapCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class PublishMapCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal PublishMapCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public PublishMapResponse Result { get { this.RaiseExceptionIfNecessary(); return ((PublishMapResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void PublishPreUploadedMapCompletedEventHandler(object sender, PublishPreUploadedMapCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class PublishPreUploadedMapCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal PublishPreUploadedMapCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public PublishPreUploadedMapResponse Result { get { this.RaiseExceptionIfNecessary(); return ((PublishPreUploadedMapResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void UploadPartialFileCompletedEventHandler(object sender, UploadPartialFileCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class UploadPartialFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal UploadPartialFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public UploadPartialFileResponse Result { get { this.RaiseExceptionIfNecessary(); return ((UploadPartialFileResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetAllMapsCompletedEventHandler(object sender, GetAllMapsCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetAllMapsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetAllMapsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public GetAllMapsResponse Result { get { this.RaiseExceptionIfNecessary(); return ((GetAllMapsResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetAllCategoriesCompletedEventHandler(object sender, GetAllCategoriesCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetAllCategoriesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetAllCategoriesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public GetAllCategoriesResponse Result { get { this.RaiseExceptionIfNecessary(); return ((GetAllCategoriesResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void ConnectCompletedEventHandler(object sender, ConnectCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class ConnectCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal ConnectCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public ConnectResponse Result { get { this.RaiseExceptionIfNecessary(); return ((ConnectResponse)(this.results[0])); } } } } #pragma warning restore 1591quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA/Reference.map000066400000000000000000000006161446222606700311740ustar00rootroot00000000000000 UploadPartialFileResponse.datasource000066400000000000000000000012411446222606700356470ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA QuickRoute.Publishers.DOMAPublisher.DOMA.UploadPartialFileResponse, Web References.DOMA.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/Web References/DOMA/webservice.wsdl000066400000000000000000000310671446222606700316340ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/Publishers/DOMAPublisher/app.config000066400000000000000000000042411446222606700252450ustar00rootroot00000000000000

http://localhost/domadev/webservice.php http://localhost/domadev/webservice.php http://www.matstroeng.se/domaDev/webservice.php quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/000077500000000000000000000000001446222606700241515ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/000077500000000000000000000000001446222606700255515ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/AddHandleAction.cs000066400000000000000000000015451446222606700310470ustar00rootroot00000000000000using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class AddHandleAction : IAction { private Handle handle; private Session session; public AddHandleAction(Handle handle, Session session) { this.handle = handle; this.session = session; } public Handle Handle { get { return handle; } set { handle = value; } } public Session Session { get { return session; } set { session = value; } } public void Execute() { if (!session.ContainsHandle(handle)) { session.AddHandle(handle); } session.UpdateHandle(handle); } public void Undo() { DeleteHandleAction delete = new DeleteHandleAction(handle, session); delete.Execute(); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/AddLapAction.cs000066400000000000000000000013351446222606700303650ustar00rootroot00000000000000using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class AddLapAction : IAction { private Lap lap; private Session session; public AddLapAction(Lap lap, Session session) { this.lap = lap; this.session = session; } public Lap Lap { get { return lap; } set { lap = value; } } public Session Session { get { return session; } set { session = value; } } public void Execute() { session.Laps.Add(lap); session.SetLapTimesToRoute(); } public void Undo() { session.Laps.Remove(lap); session.SetLapTimesToRoute(); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/AddTimeOffsetToSessionAction.cs000066400000000000000000000014311446222606700335620ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class AddTimeOffsetToSessionAction : IAction { private Session session; private TimeSpan timeOffset; public AddTimeOffsetToSessionAction(Session session, TimeSpan timeOffset) { this.session = session; this.timeOffset = timeOffset; } public TimeSpan TimeOffset { get { return timeOffset; } set { timeOffset = value; } } public Session Session { get { return session; } set { session = value; } } public void Execute() { session.AddTimeOffset(timeOffset); } public void Undo() { session.AddTimeOffset(-timeOffset); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/CutRouteAction.cs000066400000000000000000000053501446222606700310130ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class CutRouteAction : IAction { private Session session; private ParameterizedLocation parameterizedLocation; private CutType cutType; private Route.CutRouteData cutRouteData; private LapCollection.CutLapsData cutLapsData; private HandleCollection.CutHandlesData cutHandlesData; private DateTime? time; /// /// Use this constructor when cutting should be based on time (to avoid rounding errors). /// /// /// /// public CutRouteAction(Session session, ParameterizedLocation parameterizedLocation, CutType cutType) : this(session, parameterizedLocation, null, cutType) { } /// /// Use this constructor when cutting should be based on parameterized location. /// /// /// /// public CutRouteAction(Session session, DateTime time, CutType cutType) : this(session, session.Route.GetParameterizedLocationFromTime(time), time, cutType) { } private CutRouteAction(Session session, ParameterizedLocation parameterizedLocation, DateTime? time, CutType cutType) { this.session = session; this.parameterizedLocation = parameterizedLocation; this.cutType = cutType; this.time = time; } public Session Session { get { return session; } set { session = value; } } public ParameterizedLocation ParameterizedLocation { get { return parameterizedLocation; } set { parameterizedLocation = value; } } public CutType CutType { get { return cutType; } set { cutType = value; } } public DateTime? Time { get { return time; } set { time = value; } } public void Execute() { var cutTime = time.HasValue ? time.Value : session.Route.GetTimeFromParameterizedLocation(parameterizedLocation); cutRouteData = session.Route.Cut(parameterizedLocation, cutType); cutHandlesData = session.CutHandles(parameterizedLocation, cutType); cutLapsData = session.Laps.Cut(cutTime, cutType); session.SetLapTimesToRoute(); session.CreateAdjustedRoute(); } public void Undo() { session.Route.UnCut(cutRouteData); session.UnCutHandles(cutHandlesData); session.Laps.UnCut(cutLapsData); session.SetLapTimesToRoute(); session.CreateAdjustedRoute(); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/DeleteHandleAction.cs000066400000000000000000000017501446222606700315570ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class DeleteHandleAction : IAction { private Handle handle; private Session session; public DeleteHandleAction(Handle handle, Session session) { this.handle = handle; this.session = session; } public Handle Handle { get { return handle; } set { handle = value; } } public Session Session { get { return session; } set { session = value; } } #region IAction Members public void Execute() { int handleIndex = Math.Max(0, session.IndexOfHandle(handle) - 1); session.RemoveHandle(handle); Handle h = (session.Handles.Length == 0 ? null : session.Handles[handleIndex]); session.UpdateHandle(h); } public void Undo() { session.AddHandle(handle); session.UpdateHandle(handle); } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/DeleteLapAction.cs000066400000000000000000000013431446222606700310760ustar00rootroot00000000000000using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class DeleteLapAction : IAction { private Lap lap; private Session session; public DeleteLapAction(Lap lap, Session session) { this.lap = lap; this.session = session; } public Lap Lap { get { return lap; } set { lap = value; } } public Session Session { get { return session; } set { session = value; } } public void Execute() { session.Laps.Remove(lap); session.SetLapTimesToRoute(); } public void Undo() { session.Laps.Add(lap); session.SetLapTimesToRoute(); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/EditLapAction.cs000066400000000000000000000016521446222606700305640ustar00rootroot00000000000000using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class EditLapAction : IAction { private Lap lap; private Session session; private Lap oldLap; private Lap newLap; public EditLapAction(Lap lap, Lap oldLap, Session session) { this.lap = lap; this.session = session; this.oldLap = oldLap; this.newLap = (Lap)lap.Clone(); } public Lap Lap { get { return lap; } set { lap = value; } } public Session Session { get { return session; } set { session = value; } } public void Execute() { lap.Time = newLap.Time; lap.LapType = newLap.LapType; session.SetLapTimesToRoute(); } public void Undo() { lap.Time = oldLap.Time; lap.LapType = oldLap.LapType; session.SetLapTimesToRoute(); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/IAction.cs000066400000000000000000000007541446222606700274340ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities.Actions { /// /// Describes a user interface action that affects a session in some way. This is the base component for undo/redo handling. Actions are standalone objects that carry all /// information inside themselves. However, to support undo/redo, they need to be propagated to the main application where they are stored in a stack. /// public interface IAction { void Execute(); void Undo(); } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/MoveHandleAction.cs000066400000000000000000000022461446222606700312640ustar00rootroot00000000000000using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Actions { public class MoveHandleAction : IAction { private Handle handle; private Session session; private PointD oldLocation; private PointD newLocation; public MoveHandleAction(Handle handle, Session session, PointD oldLocation) { this.handle = handle; this.session = session; this.oldLocation = oldLocation; this.newLocation = handle.Location; } public Handle Handle { get { return handle; } set { handle = value; } } public Session Session { get { return session; } set { session = value; } } public PointD OldLocation { get { return oldLocation; } set { oldLocation = value; } } public PointD NewLocation { get { return newLocation; } set { newLocation = value; } } public void Execute() { handle.Location = newLocation; session.UpdateHandle(handle); } public void Undo() { handle.Location = oldLocation; session.UpdateHandle(handle); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/RotateMapAction.cs000066400000000000000000000012121446222606700311260ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.Actions { public class RotateMapAction : IAction { /// /// Angle in radians, counterclockwise direction /// public double Angle { get; set; } /// /// The document to rotate /// public Document Document { get; set; } public RotateMapAction(double angle, Document document) { Angle = angle; Document = document; } public void Execute() { } public void Undo() { } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Actions/TrimRouteAndAddLapsAction.cs000066400000000000000000000042231446222606700330450ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.Actions { public class TrimRouteAndAddLapsAction : IAction { public DateTime? StartTime { get; set; } public DateTime? EndTime { get; set; } public List Laps { get; set; } public Session Session { get; set; } private CutRouteAction startTimeCutAction; private CutRouteAction endTimeCutAction; private List addLapActions; private readonly TimeSpan offset; public TrimRouteAndAddLapsAction(DateTime? startTime, DateTime? endTime, List laps, Session session) { StartTime = startTime; EndTime = endTime; Laps = laps; Session = session; if (StartTime.HasValue && EndTime.HasValue) { if (EndTime.Value < Session.Route.FirstWaypoint.Time || StartTime.Value > Session.Route.LastWaypoint.Time) { offset = Session.Route.FirstWaypoint.Time - StartTime.Value; } } } public void Execute() { if (StartTime.HasValue) { startTimeCutAction = new CutRouteAction(Session, StartTime.Value + offset, CutType.Before); startTimeCutAction.Execute(); } if (EndTime.HasValue) { endTimeCutAction = new CutRouteAction(Session, EndTime.Value + offset, CutType.After); endTimeCutAction.Execute(); } addLapActions = new List(); foreach(Lap lap in Laps) { lap.Time += offset; if (lap.Time >= Session.Route.FirstWaypoint.Time && lap.Time <= Session.Route.LastWaypoint.Time) { var a = new AddLapAction(lap, Session); addLapActions.Add(a); a.Execute(); } } } public void Undo() { foreach (AddLapAction a in addLapActions) { a.Undo(); } if (endTimeCutAction != null) endTimeCutAction.Undo(); if (startTimeCutAction != null) startTimeCutAction.Undo(); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/AdjustedRoute.cs000066400000000000000000000263341446222606700272720ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.BusinessEntities { /// /// Class containing route transformed to the map coordinate system. /// public class AdjustedRoute { private List segments = new List(); public List Segments { get { return segments; } set { segments = value; } } public AdjustedRouteSegment FirstSegment { get { return segments.Count == 0 ? null : segments[0]; } } public AdjustedRouteSegment LastSegment { get { return segments.Count == 0 ? null : segments[segments.Count - 1]; } } public RectangleD GetBoundingRectangle(ParameterizedLocation pl0, ParameterizedLocation pl1) { PointD p0 = GetLocationFromParameterizedLocation(pl0); PointD p1 = GetLocationFromParameterizedLocation(pl1); if (p0 == null || p1 == null) return null; double minX = Math.Min(p0.X, p1.X); double maxX = Math.Max(p0.X, p1.X); double minY = Math.Min(p0.Y, p1.Y); double maxY = Math.Max(p0.Y, p1.Y); ParameterizedLocation pl = new ParameterizedLocation(pl0.SegmentIndex, Math.Ceiling(pl0.Value)); while (pl < pl1) { pl++; if ((int)pl.Value >= segments[pl.SegmentIndex].Waypoints.Count) pl = new ParameterizedLocation(pl.SegmentIndex + 1, 0); PointD p = segments[pl.SegmentIndex].Waypoints[(int)pl.Value].Location; if (p.X < minX) minX = p.X; if (p.X > maxX) maxX = p.X; if (p.Y < minY) minY = p.Y; if (p.Y > maxY) maxY = p.Y; } return new RectangleD(minX, minY, maxX - minX, maxY - minY); } public PointD GetLocationFromParameterizedLocation(ParameterizedLocation parameterizedLocation) { if (parameterizedLocation == null) return null; List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; if (parameterizedLocation.Value <= waypoints[0].ParameterizedLocation.Value) return waypoints[0].Location; if (parameterizedLocation.Value >= waypoints[waypoints.Count - 1].ParameterizedLocation.Value) return waypoints[waypoints.Count - 1].Location; for (var i = (int)parameterizedLocation.Value; i < waypoints.Count; i++) { if (parameterizedLocation.Value <= waypoints[i].ParameterizedLocation.Value) { PointD p0 = waypoints[i - 1].Location; PointD p1 = waypoints[i].Location; double t = (parameterizedLocation.Value - waypoints[i - 1].ParameterizedLocation.Value) / (waypoints[i].ParameterizedLocation.Value - waypoints[i - 1].ParameterizedLocation.Value); return new PointD(p0.X + t * (p1.X - p0.X), p0.Y + t * (p1.Y - p0.Y)); } } return waypoints[waypoints.Count - 1].Location; } public ParameterizedLocation GetClosestParameterizedLocation(PointD location, out double distance) { if (location == null) { distance = 0; return null; } double closestDistance = 0.0; ParameterizedLocation closestDistanceParameterizedLocation = new ParameterizedLocation(0, 0); bool closestDistanceSet = false; double limit = 2*32; for (int i = 0; i < segments.Count; i++) { List waypoints = segments[i].Waypoints; PointD p0 = waypoints[0].Location; for (int j = 1; j < waypoints.Count; j++) { PointD p1 = waypoints[j].Location; // long distance between p0 and p1? then we need to check more time-consuming ClosestDistancePointToLine even if p0 is far from location bool isLongLineSegment = (LinearAlgebraUtil.DistancePointToPoint(p0, p1) > limit); if (LinearAlgebraUtil.DistancePointToPoint(location, p1) < limit || isLongLineSegment) { double t; double tmpDistance = LinearAlgebraUtil.ClosestDistancePointToLine(location, p0, p1, out t); if (tmpDistance < closestDistance || !closestDistanceSet) { closestDistance = tmpDistance; closestDistanceParameterizedLocation = new ParameterizedLocation(i, waypoints[j - 1].ParameterizedLocation.Value + t * (waypoints[j].ParameterizedLocation.Value - waypoints[j - 1].ParameterizedLocation.Value)); closestDistanceSet = true; } } p0 = p1; } } distance = closestDistance; return (closestDistanceSet ? closestDistanceParameterizedLocation : null); } public bool IsStartOfSegment(ParameterizedLocation pl) { if (pl == null) return false; return (pl.Value == 0); } public bool IsEndOfSegment(ParameterizedLocation pl) { if (pl == null) return false; return (pl.Value == segments[pl.SegmentIndex].Waypoints.Count - 1); } public bool IsStartOfSegment(int segmentIndex, double waypointIndex) { return (waypointIndex == 0); } public bool IsEndOfSegment(int segmentIndex, double waypointIndex) { return (waypointIndex == segments[segmentIndex].Waypoints.Count - 1); } public ParameterizedLocation GetFirstParameterizedLocation() { return new ParameterizedLocation(0, 0); } public ParameterizedLocation GetLastParameterizedLocation() { return new ParameterizedLocation(segments.Count - 1, LastSegment.LastWaypoint.ParameterizedLocation.Value); } public double GetWaypointIndexFromParameterizedLocation(ParameterizedLocation pl) { if (pl == null) return 0; List waypoints = segments[pl.SegmentIndex].Waypoints; if (pl.Value <= waypoints[0].ParameterizedLocation.Value) return 0; if (pl.Value >= waypoints[waypoints.Count - 1].ParameterizedLocation.Value) return waypoints.Count - 1; for (int i = 1; i < waypoints.Count; i++) { if (pl.Value <= waypoints[i].ParameterizedLocation.Value) { double t = (pl.Value - waypoints[i - 1].ParameterizedLocation.Value) / (waypoints[i].ParameterizedLocation.Value - waypoints[i - 1].ParameterizedLocation.Value); return i - 1 + t; } } return waypoints.Count - 1; } public PointD GetDirectionVectorFromParameterizedLocation(ParameterizedLocation pl) { if (pl == null) return null; double wi = GetWaypointIndexFromParameterizedLocation(pl); if (wi == Math.Floor(wi)) { // exactly at a waypoint if (wi == 0) { // first waypoint AdjustedWaypoint wp0 = segments[pl.SegmentIndex].Waypoints[0]; AdjustedWaypoint wp1 = segments[pl.SegmentIndex].Waypoints[1]; return LinearAlgebraUtil.Normalize(wp1.Location - wp0.Location); } else if ((int)wi == segments[pl.SegmentIndex].Waypoints.Count - 1) { // last waypoint int lastWaypointIndex = segments[pl.SegmentIndex].Waypoints.Count - 1; AdjustedWaypoint wp0 = segments[pl.SegmentIndex].Waypoints[lastWaypointIndex - 1]; AdjustedWaypoint wp1 = segments[pl.SegmentIndex].Waypoints[lastWaypointIndex]; return LinearAlgebraUtil.Normalize(wp1.Location - wp0.Location); } else { AdjustedWaypoint wp0 = segments[pl.SegmentIndex].Waypoints[(int)wi - 1]; AdjustedWaypoint wp1 = segments[pl.SegmentIndex].Waypoints[(int)wi]; AdjustedWaypoint wp2 = segments[pl.SegmentIndex].Waypoints[(int)wi + 1]; return LinearAlgebraUtil.Normalize( LinearAlgebraUtil.Normalize(wp2.Location - wp1.Location) + LinearAlgebraUtil.Normalize(wp1.Location - wp0.Location) ); } } else { AdjustedWaypoint wp0 = segments[pl.SegmentIndex].Waypoints[(int)Math.Floor(wi)]; AdjustedWaypoint wp1 = segments[pl.SegmentIndex].Waypoints[(int)Math.Ceiling(wi)]; return LinearAlgebraUtil.Normalize(wp1.Location - wp0.Location); } } public PointD GetLocationFromWaypointIndex(int segmentIndex, double waypointIndex) { List waypoints = segments[segmentIndex].Waypoints; if (waypointIndex <= 0) return waypoints[0].Location; if (waypointIndex >= waypoints.Count - 1) return waypoints[waypoints.Count - 1].Location; PointD p0 = waypoints[(int)Math.Floor(waypointIndex)].Location; PointD p1 = waypoints[(int)Math.Floor(waypointIndex) + 1].Location; double t = waypointIndex - Math.Floor(waypointIndex); return p0 + t * (p1 - p0); } public AdjustedWaypoint CreateWaypointFromParameterizedLocation(ParameterizedLocation pl, AdjustedWaypoint.AdjustedWaypointType type) { return new AdjustedWaypoint( GetLocationFromParameterizedLocation(pl), pl, type); } public IList GetAllWaypoints() { var adjustedWaypoints = new List(); foreach (var segment in segments) { adjustedWaypoints.AddRange(segment.Waypoints); } return adjustedWaypoints; } } /// /// Class containing route segments transformed to the map coordinate system. /// public class AdjustedRouteSegment { private List waypoints = new List(); public List Waypoints { get { return waypoints; } set { waypoints = value; } } public AdjustedWaypoint FirstWaypoint { get { return waypoints.Count == 0 ? null : waypoints[0]; } } public AdjustedWaypoint LastWaypoint { get { return waypoints.Count == 0 ? null : waypoints[waypoints.Count - 1]; } } } /// /// Class containing coordinates in the map coordinate system. /// public class AdjustedWaypoint : IComparable { /// /// Location in non-zoomed map coordinates. /// public PointD Location { get; set; } public ParameterizedLocation ParameterizedLocation { get; set; } public AdjustedWaypointType Type { get; set; } public AdjustedWaypoint(PointD location, ParameterizedLocation parameterizedLocation) { Location = location; ParameterizedLocation = parameterizedLocation; } public AdjustedWaypoint(PointD location, ParameterizedLocation parameterizedLocation, AdjustedWaypointType type) { Location = location; ParameterizedLocation = parameterizedLocation; Type = type; } public AdjustedWaypoint() { } public int CompareTo(AdjustedWaypoint other) { int result = ParameterizedLocation.CompareTo(other.ParameterizedLocation); return (result != 0 ? result : Type.CompareTo(other.Type)); } public enum AdjustedWaypointType { Normal, Start, End, AlphaAdjustmentChange } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ApplicationSettings.cs000066400000000000000000000535601446222606700304750ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Globalization; using System.Drawing; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Windows.Forms; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.BusinessEntities.GlobalizedProperties; using QuickRoute.BusinessEntities.RouteProperties; namespace QuickRoute.BusinessEntities { [Serializable] public class ApplicationSettings : GlobalizedObject { private DocumentSettings defaultDocumentSettings = new DocumentSettings(); [Obsolete] private string initialFolder; private Size windowSize; private Point windowLocation; private FormWindowState windowState; private int histogramHeight = 120; private List recentDocumentFileNames = new List(); private CultureInfo uiCulture; private bool autoAdjustColorRangeInterval = true; private List publishMapSettings = new List(); private List recentMapImageFileNames = new List(); private List recentRouteFileNames = new List(); private KmlProperties exportKmlProperties = new KmlProperties(); private KmlMultipleFileExporterProperties exportKmlMultipleFileProperties = new KmlMultipleFileExporterProperties(); private bool rightPanelVisible = true; private bool bottomPanelVisible = true; private bool panelSettingsUpdated = true; // flag for handling the rightPanelVisible and bottomPanelVisible when upgrading private double exportImagePercentualImageSize = 1; private double exportImageQuality = 0.8; private List recentPersons = new List(); private List dontRemindAboutVersions = new List(); private Dictionary initialFolders = new Dictionary(); private ExportRouteDataSettings exportRouteDataSettings = new ExportRouteDataSettings(); private SelectableRoutePropertyTypeCollection lapPropertyTypes = new SelectableRoutePropertyTypeCollection(); private SelectableRoutePropertyTypeCollection momentaneousInfoPropertyTypes = new SelectableRoutePropertyTypeCollection(); private int externaLapDataSourceIndex = 0; public DocumentSettings DefaultDocumentSettings { get { return defaultDocumentSettings; } set { defaultDocumentSettings = value; } } public Size WindowSize { get { return windowSize; } set { windowSize = value; } } public Point WindowLocation { get { return windowLocation; } set { windowLocation = value; } } public FormWindowState WindowState { get { return windowState; } set { windowState = value; } } public int HistogramHeight { get { return histogramHeight; } set { histogramHeight = value; } } public CultureInfo UiCulture { get { return uiCulture; } set { uiCulture = value; } } public bool AutoAdjustColorRangeInterval { get { return autoAdjustColorRangeInterval; } set { autoAdjustColorRangeInterval = value; } } public List PublishMapSettings { get { return publishMapSettings; } set { publishMapSettings = value; } } public List RecentDocumentFileNames { get { return recentDocumentFileNames ?? new List(); } } public List RecentMapImageFileNames { get { return recentMapImageFileNames ?? new List(); } } public List RecentRouteFileNames { get { return recentRouteFileNames ?? new List(); } } public KmlProperties ExportKmlProperties { get { EnsureNotNull(ref exportKmlProperties); return exportKmlProperties; } set { exportKmlProperties = value; } } public KmlMultipleFileExporterProperties ExportKmlMultipleFileProperties { get { EnsureNotNull(ref exportKmlMultipleFileProperties); return exportKmlMultipleFileProperties; } set { exportKmlMultipleFileProperties = value; } } public bool RightPanelVisible { get { if (!panelSettingsUpdated) UpdatePanelSettings(); return rightPanelVisible; } set { rightPanelVisible = value; } } public bool BottomPanelVisible { get { if (!panelSettingsUpdated) UpdatePanelSettings(); return bottomPanelVisible; } set { bottomPanelVisible = value; } } private void UpdatePanelSettings() { panelSettingsUpdated = true; rightPanelVisible = true; bottomPanelVisible = true; } public double ExportImageQuality { get { return exportImageQuality; } set { exportImageQuality = value; } } public double ExportImagePercentualImageSize { get { return exportImagePercentualImageSize; } set { exportImagePercentualImageSize = value; } } public List RecentPersons { get { EnsureNotNull(ref recentPersons); return recentPersons; } set { recentPersons = value; } } public List DontRemindAboutVersions { get { EnsureNotNull(ref dontRemindAboutVersions); return dontRemindAboutVersions; } set { dontRemindAboutVersions = value; } } public Dictionary InitialFolders { get { EnsureNotNull(ref initialFolders); return initialFolders; } set { initialFolders = value; } } public ExportRouteDataSettings ExportRouteDataSettings { get { EnsureNotNull(ref exportRouteDataSettings); return exportRouteDataSettings; } set { exportRouteDataSettings = value; } } public static SelectableRoutePropertyTypeCollection AvailableLapPropertyTypes { get { return new SelectableRoutePropertyTypeCollection() { new SelectableRoutePropertyType(typeof (LapNumber), true), new SelectableRoutePropertyType(typeof (RouteProperties.ElapsedTime), true), new SelectableRoutePropertyType(typeof (StraightLineDistance), true), new SelectableRoutePropertyType(typeof (RouteDistance), true), new SelectableRoutePropertyType(typeof (AverageStraightLinePace), true), new SelectableRoutePropertyType(typeof (AverageRoutePace), true), new SelectableRoutePropertyType(typeof (RouteToStraightLine), true), new SelectableRoutePropertyType(typeof (AverageHeartRate), true), new SelectableRoutePropertyType(typeof (Ascent), true), new SelectableRoutePropertyType(typeof (Descent), true), new SelectableRoutePropertyType(typeof (ElapsedTimeFromStart), false), new SelectableRoutePropertyType(typeof (Time), false), new SelectableRoutePropertyType(typeof (CircleTimeAtStartOfSpan), false), new SelectableRoutePropertyType(typeof (CircleTimeAtEndOfSpan), false), new SelectableRoutePropertyType(typeof (StraightLineDistanceFromStart), false), new SelectableRoutePropertyType(typeof (RouteDistanceFromStart), false), new SelectableRoutePropertyType(typeof (RouteToStraightLineFromStart), false), new SelectableRoutePropertyType(typeof (AverageStraightLinePaceFromStart), false), new SelectableRoutePropertyType(typeof (AverageRoutePaceFromStart), false), new SelectableRoutePropertyType(typeof (Pace), false), new SelectableRoutePropertyType(typeof (AverageStraightLineSpeed), false), new SelectableRoutePropertyType(typeof (AverageStraightLineSpeedFromStart), false), new SelectableRoutePropertyType(typeof (AverageRouteSpeed), false), new SelectableRoutePropertyType(typeof (AverageRouteSpeedFromStart), false), new SelectableRoutePropertyType(typeof (Speed), false), new SelectableRoutePropertyType(typeof (AverageHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (MinHeartRate), false), new SelectableRoutePropertyType(typeof (MinHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (MaxHeartRate), false), new SelectableRoutePropertyType(typeof (MaxHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (RouteProperties.HeartRate), false), new SelectableRoutePropertyType(typeof (AltitudeDifference), false), new SelectableRoutePropertyType(typeof (AltitudeDifferenceFromStart), false), new SelectableRoutePropertyType(typeof (AscentFromStart), false), new SelectableRoutePropertyType(typeof (DescentFromStart), false), new SelectableRoutePropertyType(typeof (Inclination), false), new SelectableRoutePropertyType(typeof (AverageInclination), false), new SelectableRoutePropertyType(typeof (AverageInclinationFromStart), false), new SelectableRoutePropertyType(typeof (RouteProperties.Altitude), false), new SelectableRoutePropertyType(typeof (AverageDirectionDeviationToNextLap), false), new SelectableRoutePropertyType(typeof (AverageDirectionDeviationToNextLapFromStart), false), new SelectableRoutePropertyType(typeof (DirectionDeviationToNextLap), false), new SelectableRoutePropertyType(typeof (Direction), false), new SelectableRoutePropertyType(typeof (Location), false), new SelectableRoutePropertyType(typeof (MapReadingDurationInSpan), false), new SelectableRoutePropertyType(typeof (MapReadingDurationFromStart), false), new SelectableRoutePropertyType(typeof (MapReadingPercentage), false), new SelectableRoutePropertyType(typeof (MapReadingPercentageFromStart), false), new SelectableRoutePropertyType(typeof (NumberOfMapReadings), false), new SelectableRoutePropertyType(typeof (NumberOfMapReadingsFromStart), false), new SelectableRoutePropertyType(typeof (AverageMapReadingTime), false), new SelectableRoutePropertyType(typeof (AverageMapReadingTimeFromStart), false), new SelectableRoutePropertyType(typeof (AverageTimeBetweenMapReadings), false), new SelectableRoutePropertyType(typeof (AverageTimeBetweenMapReadingsFromStart), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenReadingMap), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenReadingMapFromStart), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenNotReadingMap), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenNotReadingMapFromStart), false), }; } } public static SelectableRoutePropertyTypeCollection AvailableMomentaneousInfoPropertyTypes { get { return new SelectableRoutePropertyTypeCollection() { new SelectableRoutePropertyType(typeof (LapNumber), true), new SelectableRoutePropertyType(typeof (Time), true), new SelectableRoutePropertyType(typeof (RouteProperties.ElapsedTime), true), new SelectableRoutePropertyType(typeof (ElapsedTimeFromStart), true), new SelectableRoutePropertyType(typeof (CircleTimeBackward), true), new SelectableRoutePropertyType(typeof (CircleTimeForward), true), new SelectableRoutePropertyType(typeof (StraightLineDistance), true), new SelectableRoutePropertyType(typeof (RouteDistance), true), new SelectableRoutePropertyType(typeof (RouteDistanceFromStart), true), new SelectableRoutePropertyType(typeof (Pace), true), new SelectableRoutePropertyType(typeof (Speed), true), new SelectableRoutePropertyType(typeof (RouteProperties.HeartRate), true), new SelectableRoutePropertyType(typeof (RouteProperties.Altitude), true), new SelectableRoutePropertyType(typeof (Inclination), true), new SelectableRoutePropertyType(typeof (AscentFromStart), true), new SelectableRoutePropertyType(typeof (DescentFromStart), true), new SelectableRoutePropertyType(typeof (DirectionDeviationToNextLap), true), new SelectableRoutePropertyType(typeof (Location), true), new SelectableRoutePropertyType(typeof (StraightLineDistanceFromStart), false), new SelectableRoutePropertyType(typeof (RouteToStraightLine), false), new SelectableRoutePropertyType(typeof (RouteToStraightLineFromStart), false), new SelectableRoutePropertyType(typeof (AverageStraightLinePace), false), new SelectableRoutePropertyType(typeof (AverageStraightLinePaceFromStart), false), new SelectableRoutePropertyType(typeof (AverageRoutePace), false), new SelectableRoutePropertyType(typeof (AverageRoutePaceFromStart), false), new SelectableRoutePropertyType(typeof (AverageStraightLineSpeed), false), new SelectableRoutePropertyType(typeof (AverageStraightLineSpeedFromStart), false), new SelectableRoutePropertyType(typeof (AverageRouteSpeed), false), new SelectableRoutePropertyType(typeof (AverageRouteSpeedFromStart), false), new SelectableRoutePropertyType(typeof (AverageHeartRate), false), new SelectableRoutePropertyType(typeof (AverageHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (MinHeartRate), false), new SelectableRoutePropertyType(typeof (MinHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (MaxHeartRate), false), new SelectableRoutePropertyType(typeof (MaxHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (AltitudeDifference), false), new SelectableRoutePropertyType(typeof (AltitudeDifferenceFromStart), false), new SelectableRoutePropertyType(typeof (Ascent), false), new SelectableRoutePropertyType(typeof (Descent), false), new SelectableRoutePropertyType(typeof (AverageInclination), false), new SelectableRoutePropertyType(typeof (AverageInclinationFromStart), false), new SelectableRoutePropertyType(typeof (AverageDirectionDeviationToNextLap), false), new SelectableRoutePropertyType(typeof (AverageDirectionDeviationToNextLapFromStart), false), new SelectableRoutePropertyType(typeof (Direction), false), new SelectableRoutePropertyType(typeof (RouteProperties.MapReadingState), false), new SelectableRoutePropertyType(typeof (MapReadingDuration), false), new SelectableRoutePropertyType(typeof (MapReadingDurationInSpan), false), new SelectableRoutePropertyType(typeof (MapReadingDurationFromStart), false), new SelectableRoutePropertyType(typeof (MapReadingPercentage), false), new SelectableRoutePropertyType(typeof (MapReadingPercentageFromStart), false), new SelectableRoutePropertyType(typeof (NumberOfMapReadings), false), new SelectableRoutePropertyType(typeof (NumberOfMapReadingsFromStart), false), new SelectableRoutePropertyType(typeof (AverageMapReadingTime), false), new SelectableRoutePropertyType(typeof (AverageMapReadingTimeFromStart), false), new SelectableRoutePropertyType(typeof (AverageTimeBetweenMapReadings), false), new SelectableRoutePropertyType(typeof (AverageTimeBetweenMapReadingsFromStart), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenReadingMap), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenReadingMapFromStart), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenNotReadingMap), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenNotReadingMapFromStart), false), new SelectableRoutePropertyType(typeof (PreviousMapReadingEnd), false), new SelectableRoutePropertyType(typeof (NextMapReadingStart), false), }; } } public SelectableRoutePropertyTypeCollection LapPropertyTypes { get { if (lapPropertyTypes == null || lapPropertyTypes.Count == 0) { lapPropertyTypes = AvailableLapPropertyTypes; } // a fix for double storage of lap property types var realLapPropertyTypes = new SelectableRoutePropertyTypeCollection(); foreach(var lpt in lapPropertyTypes) { var found = false; foreach(var lpt2 in realLapPropertyTypes) { if(lpt.RoutePropertyType == lpt2.RoutePropertyType) { found = true; break; } } if (!found) realLapPropertyTypes.Add(lpt); } lapPropertyTypes = realLapPropertyTypes; return lapPropertyTypes; } set { lapPropertyTypes = value; } } public SelectableRoutePropertyTypeCollection MomentaneousInfoPropertyTypes { get { if (momentaneousInfoPropertyTypes == null || momentaneousInfoPropertyTypes.Count == 0) { momentaneousInfoPropertyTypes = AvailableMomentaneousInfoPropertyTypes; } else if (momentaneousInfoPropertyTypes.Count < AvailableMomentaneousInfoPropertyTypes.Count) { // make sure new property types are propagated to the settings foreach (var mipt in AvailableMomentaneousInfoPropertyTypes) { if (!momentaneousInfoPropertyTypes.ContainsRoutePropertyType(mipt.RoutePropertyType)) { momentaneousInfoPropertyTypes.Add(mipt); } } } return momentaneousInfoPropertyTypes; } set { momentaneousInfoPropertyTypes = value; } } public int ExternaLapDataSourceIndex { get { return externaLapDataSourceIndex; } set { externaLapDataSourceIndex = value; } } public void AddRecentDocumentFileName(string fileName) { AddRecentFileName(fileName, ref recentDocumentFileNames, 0); } public void AddRecentDocumentFileName(string fileName, int maxNoOfItems) { AddRecentFileName(fileName, ref recentDocumentFileNames, maxNoOfItems); } public void AddRecentMapImageFileName(string fileName) { AddRecentFileName(fileName, ref recentMapImageFileNames, 0); } public void AddRecentMapImageFileName(string fileName, int maxNoOfItems) { AddRecentFileName(fileName, ref recentMapImageFileNames, maxNoOfItems); } public void AddRecentRouteFileName(string fileName) { AddRecentFileName(fileName, ref recentRouteFileNames, 0); } public void AddRecentRouteFileName(string fileName, int maxNoOfItems) { AddRecentFileName(fileName, ref recentRouteFileNames, maxNoOfItems); } public void AddRecentPerson(SessionPerson person) { if (person.Name != "" || person.Club != "") AddRecentPerson(person, ref recentPersons, 0); } private static void AddRecentFileName(string fileName, ref List fileNames, int maxNoOfItems) { if (fileNames == null) fileNames = new List(); fileNames.RemoveAll(s => s.ToLower() == fileName.ToLower()); fileNames.Insert(0, fileName); if (maxNoOfItems > 0 && fileNames.Count > maxNoOfItems) { fileNames.RemoveRange(maxNoOfItems, fileNames.Count - maxNoOfItems); } } private static void AddRecentPerson(SessionPerson person, ref List persons, int maxNoOfItems) { if (persons == null) persons = new List(); persons.RemoveAll(p => p.Name.ToLower() == person.Name.ToLower() && p.Club.ToLower() == person.Club.ToLower()); persons.Insert(0, person); if (maxNoOfItems > 0 && persons.Count > maxNoOfItems) { persons.RemoveRange(maxNoOfItems, persons.Count - maxNoOfItems); } } private static void EnsureNotNull(ref T item) where T : class, new() { if (item == null) item = new T(); } public ApplicationSettings Copy() { var ms = new MemoryStream(); var bf = new BinaryFormatter(); bf.Serialize(ms, this); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); return bf.Deserialize(ms) as ApplicationSettings; } [Serializable] public enum FileDialogType { OpenDocument, SaveDocument, ImportMapImage, ImportRoute, ExportImage, ExportFile } } [Serializable] public class PublishMapSettingsItem { public string WebServiceURL { get; set; } public string Username { get; set; } public string Password { get; set; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ColorRange.cs000066400000000000000000000047141446222606700265410ustar00rootroot00000000000000using System; using System.Runtime.Serialization; using System.Drawing; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities { [Serializable] public class ColorRange : GlobalizedObject, ISerializable { private Gradient gradient; private double startValue; private double endValue; public event EventHandler StartValueChanged; public event EventHandler EndValueChanged; public ColorRange(Gradient gradient, double startValue, double endValue) { this.gradient = gradient; this.startValue = startValue; this.endValue = endValue; } protected ColorRange(SerializationInfo info, StreamingContext context) { gradient = (Gradient)info.GetValue("gradient", typeof(Gradient)); startValue = info.GetDouble("startValue"); endValue = info.GetDouble("endValue"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("gradient", gradient, typeof(Gradient)); info.AddValue("startValue", startValue); info.AddValue("endValue", endValue); } public Gradient Gradient { get { return gradient; } set { gradient = value; } } public double StartValue { get { return startValue; } set { startValue = value; if (StartValueChanged != null) StartValueChanged(this, new EventArgs()); } } public double EndValue { get { return endValue; } set { endValue = value; if (EndValueChanged != null) EndValueChanged(this, new EventArgs()); } } public Color GetColor(double value) { return gradient.GetColor(GetLocationFromValue(value)); } public Color GetColor(double value, int noOfDiscreteSteps) { // get step var stepLength = (endValue - startValue)/noOfDiscreteSteps; var stepIndex = (int)Math.Floor((value - startValue)/stepLength); stepIndex = Math.Min(noOfDiscreteSteps - 1, stepIndex); stepIndex = Math.Max(0, stepIndex); var steppedValue = startValue + (stepIndex + 0.5)*stepLength; return gradient.GetColor(GetLocationFromValue(steppedValue)); } private double GetLocationFromValue(double value) { if (startValue == endValue) return 0.0; return (value - startValue) / (endValue - startValue); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ColorfulHistogram.cs000066400000000000000000000253411446222606700301500ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Numeric; using System.Drawing.Drawing2D; using System.Drawing.Text; namespace QuickRoute.BusinessEntities { public class ColorfulHistogram { private List histogramData = new List(new double[] { 1, 2, 3, 5, 9 }); private ColorRange colorRange = new ColorRange(new Gradient(Color.Red, Color.Blue), 0, 10); private double barSpacing = 0; private Pen barBorderPen = new Pen(Color.FromArgb(128, Color.Black), 0.5F); private double startValue = 0; private double endValue = 10; private double binWidth = 2; private ScaleCreatorBase xAxisScaleCreator; private NumericConverter xAxisNumericConverter; private Pen borderPen = new Pen(Color.Black, 1F); private Pen gridPen = new Pen(Color.FromArgb(128, Color.Gray), 1F); private Color fontColor = Color.Black; private Color histogramBackColor = Color.White; private string xAxisCaption; private string yAxisCaption; private bool includeOutOfRangeValues; private Font font = new Font("MS Sans Serif", 8.25F); private Color backColor = SystemColors.Control; private bool cumulative; #region Public properties ~ColorfulHistogram() { barBorderPen.Dispose(); borderPen.Dispose(); gridPen.Dispose(); font.Dispose(); } [CategoryAttribute("Data"), DescriptionAttribute("The histogram data expressed as a list of doubles.")] public List HistogramData { get { return histogramData; } set { histogramData = value; } } public ColorRange ColorRange { get { return colorRange; } set { colorRange = value; } } public double BarSpacing { get { return barSpacing; } set { barSpacing = value; } } public Pen BarBorderPen { get { return barBorderPen; } set { barBorderPen = value; } } public double StartValue { get { return startValue; } set { startValue = value; } } public double EndValue { get { return endValue; } set { endValue = value; } } public double BinWidth { get { return binWidth; } set { binWidth = value; } } public Pen BorderPen { get { return borderPen; } set { borderPen = value; } } public Pen GridPen { get { return gridPen; } set { gridPen = value; } } public Color FontColor { get { return fontColor; } set { fontColor = value; } } public Color HistogramBackColor { get { return histogramBackColor; } set { histogramBackColor = value; } } public string XAxisCaption { get { return xAxisCaption; } set { xAxisCaption = value; } } public string YAxisCaption { get { return yAxisCaption; } set { yAxisCaption = value; } } public bool IncludeOutOfRangeValues { get { return includeOutOfRangeValues; } set { includeOutOfRangeValues = value; } } public ScaleCreatorBase XAxisScaleCreator { get { return xAxisScaleCreator; } set { xAxisScaleCreator = value; } } public NumericConverter XAxisNumericConverter { get { return xAxisNumericConverter; } set { xAxisNumericConverter = value; } } public Font Font { get { return font; } set { font = value; } } public Color BackColor { get { return backColor; } set { backColor = value; } } public bool Cumulative { get { return cumulative; } set { cumulative = value; } } #endregion public void Draw(Graphics g, RectangleF drawingRectangle) { if (NoOfBins <= 0) return; int[] bins = CreateBins(); double maxBarValue = 0; g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.AntiAlias; // get max bar height for (int i = 0; i < NoOfBins; i++) { maxBarValue = Math.Max(maxBarValue, bins[i]); } if (maxBarValue == 0) return; // allow some extra space at top double spaceFactor = 1.1; double maxPercentage = Math.Min(1, spaceFactor * maxBarValue / histogramData.Count); DoubleScaleCreator yAxisScaleCreator = new DoubleScaleCreator(0, maxPercentage, 5, true); maxPercentage = yAxisScaleCreator.ScaleEndValue; // calculate max x axis label size SizeF maxXAxisLabelSize = SizeF.Empty; for (int i = 0; i < xAxisScaleCreator.NoOfMarkers; i++) { double value = xAxisScaleCreator.MarkerValue(i); string label = xAxisNumericConverter.ToString(value); SizeF labelSize = g.MeasureString(label, font); maxXAxisLabelSize.Width = Math.Max(maxXAxisLabelSize.Width, labelSize.Width); maxXAxisLabelSize.Height = Math.Max(maxXAxisLabelSize.Height, labelSize.Height); } // calculate max y axis label size SizeF maxYAxisLabelSize = SizeF.Empty; for (int i = 0; i < yAxisScaleCreator.NoOfMarkers; i++) { double value = yAxisScaleCreator.MarkerValue(i); string label = String.Format("{0:P0}", value); SizeF labelSize = g.MeasureString(label, font); maxYAxisLabelSize.Width = Math.Max(maxYAxisLabelSize.Width, labelSize.Width); maxYAxisLabelSize.Height = Math.Max(maxYAxisLabelSize.Height, labelSize.Height); } // calculate the graph rectangle SizeF xAxisCaptionSize = g.MeasureString(xAxisCaption, font); SizeF yAxisCaptionSize = g.MeasureString(yAxisCaption, font); float leftMargin = Math.Max(yAxisCaptionSize.Height + maxYAxisLabelSize.Width, maxXAxisLabelSize.Width / 2); RectangleF histogramRectangle = new RectangleF( (int)(drawingRectangle.Left + leftMargin), (int)(drawingRectangle.Top + maxYAxisLabelSize.Height / 2), Math.Max(1, (int)(drawingRectangle.Width - leftMargin - maxXAxisLabelSize.Width / 2 - 1)), Math.Max(1, (int)(drawingRectangle.Height - maxYAxisLabelSize.Height / 2 - maxXAxisLabelSize.Height - xAxisCaptionSize.Height - 1))); float barWidth = histogramRectangle.Width / (float)((endValue - startValue) / binWidth); // clear graphics g.Clear(BackColor); // draw the histogram background Brush b = new SolidBrush(histogramBackColor); g.FillRectangle(b, histogramRectangle); b.Dispose(); // draw the axis labels // x axis Brush fontBrush = new SolidBrush(fontColor); for (int i = 0; i < xAxisScaleCreator.NoOfMarkers; i++) { double value = xAxisScaleCreator.MarkerValue(i); int x = (int)histogramRectangle.Left + (int)((float)(value - startValue) / (float)(endValue - startValue) * histogramRectangle.Width); string label = xAxisNumericConverter.ToString(value); SizeF labelSize = g.MeasureString(label, font); g.DrawString(label, font, fontBrush, new PointF(x - labelSize.Width / 2, histogramRectangle.Bottom)); g.DrawLine(gridPen, new Point(x, (int)histogramRectangle.Top), new Point(x, (int)histogramRectangle.Bottom)); } // y axis for (int i = 0; i < yAxisScaleCreator.NoOfMarkers; i++) { double value = yAxisScaleCreator.MarkerValue(i); int y = (int)histogramRectangle.Bottom - (int)((float)(value / maxPercentage) * histogramRectangle.Height); string label = String.Format("{0:P0}", value); SizeF labelSize = g.MeasureString(label, font); g.DrawString(label, font, fontBrush, new PointF(histogramRectangle.Left - labelSize.Width, y - maxYAxisLabelSize.Height / 2)); g.DrawLine(gridPen, new Point((int)histogramRectangle.Left, y), new Point((int)histogramRectangle.Right, y)); } // draw the axis captions // x axis PointF xAxisCaptionLocation = new PointF( histogramRectangle.Left + (histogramRectangle.Width - xAxisCaptionSize.Width) / 2, histogramRectangle.Bottom + xAxisCaptionSize.Height); g.DrawString(xAxisCaption, Font, fontBrush, xAxisCaptionLocation); // y axis, rotated 90 degrees PointF yAxisCaptionLocation = new PointF( histogramRectangle.Left - 3 * yAxisCaptionSize.Height, histogramRectangle.Bottom - (histogramRectangle.Height - yAxisCaptionSize.Width) / 2); g.ResetTransform(); g.TranslateTransform(-yAxisCaptionLocation.X, -yAxisCaptionLocation.Y, MatrixOrder.Append); g.RotateTransform(-90F, MatrixOrder.Append); g.TranslateTransform(yAxisCaptionLocation.X, yAxisCaptionLocation.Y, MatrixOrder.Append); g.DrawString(yAxisCaption, Font, fontBrush, yAxisCaptionLocation); g.ResetTransform(); // draw the bars g.SetClip(histogramRectangle); for (int i = 0; i < NoOfBins; i++) { float barHeight = bins[i] / (float)histogramData.Count / (float)maxPercentage * histogramRectangle.Height; RectangleF barRectangle = new RectangleF( histogramRectangle.Left + i * barWidth, histogramRectangle.Top + histogramRectangle.Height - barHeight, barWidth, barHeight ); Color barColor = colorRange.GetColor(startValue + (i + 0.5) * binWidth); b = new SolidBrush(barColor); g.FillRectangle(b, barRectangle); b.Dispose(); if (barBorderPen != null) g.DrawRectangle(barBorderPen, barRectangle.X, barRectangle.Y, barRectangle.Width, barRectangle.Height); } g.ResetClip(); // draw the histogram border g.DrawRectangle(borderPen, histogramRectangle.X, histogramRectangle.Y, histogramRectangle.Width, histogramRectangle.Height); fontBrush.Dispose(); } private int NoOfBins { get { return (int)Math.Ceiling((endValue - startValue) / binWidth); } } private int[] CreateBins() { int[] bins = new int[NoOfBins]; foreach (double value in histogramData) { int binIndex = (int)((value - startValue) / binWidth); if (includeOutOfRangeValues || cumulative) { binIndex = Math.Max(Math.Min(binIndex, NoOfBins - 1), 0); } if (binIndex >= 0 && binIndex < NoOfBins) { bins[binIndex] += 1; } } if (cumulative) { int sum = 0; for (int i = 0; i < NoOfBins - 1; i++) { sum += bins[i]; bins[i] = sum; } } return bins; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Document.cs000066400000000000000000001025331446222606700262620ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing.Text; using System.Globalization; using System.Net; using System.Reflection; using System.Text; using System.Xml; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using QuickRoute.Common; namespace QuickRoute.BusinessEntities { /// /// The container object for a QuickRoute document, holding the map, the sessions, and the document settings. /// [Serializable] public class Document : ISerializable, IDisposable { private const int exportImageHeaderHeight = 64; private const int exportImageBorderWidth = 1; private Map map; private DocumentSettings settings; private SessionCollection sessions = new SessionCollection(); private LongLat projectionOrigin; private DocumentProperties properties; public event EventHandler MapChanged; #region Constructors /// /// Creates a new document using the specified map and document settings. No sessions are added. /// /// /// public Document(Map map, DocumentSettings settings) { Map = map; Settings = settings; } /// /// Creating a new document using the specified map, route, laps, and document settings, and adding one new session with the specified route and laps. /// /// /// /// /// public Document(Map map, Route route, LapCollection laps, DocumentSettings settings) : this(map, route, laps, null, settings) { } /// /// Creating a new document using the specified map, route, laps, initial transformation matrix and document settings, and adding one new session with the specified route and laps. /// /// /// /// /// /// public Document(Map map, Route route, LapCollection laps, GeneralMatrix initialTransformationMatrix, DocumentSettings settings) : this(map, route, laps, initialTransformationMatrix, null, settings) { } /// /// Creating a new document using the specified map, route, laps, initial transformation matrix, projection origin and document settings, and adding one new session with the specified route and laps. /// /// /// /// /// /// /// public Document(Map map, Route route, LapCollection laps, GeneralMatrix initialTransformationMatrix, LongLat projectionOrigin, DocumentSettings settings) { Map = map; sessions.Add(new Session(route, laps, map.Image.Size, initialTransformationMatrix, projectionOrigin, settings.DefaultSessionSettings)); this.settings = settings; UpdateDocumentToCurrentVersion(this); } protected Document(SerializationInfo info, StreamingContext context) { Map = (Map)(info.GetValue("map", typeof(Map))); settings = (DocumentSettings)(info.GetValue("settings", typeof(DocumentSettings))); sessions = (SessionCollection)(info.GetValue("sessions", typeof(SessionCollection))); projectionOrigin = (LongLat)(info.GetValue("projectionOrigin", typeof(LongLat))); // todo: how handle non-existing properties field? try { properties = (DocumentProperties)(info.GetValue("properties", typeof(DocumentProperties))); } catch (Exception) { } } #endregion #region ISerializable members void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("map", map, typeof(Map)); info.AddValue("settings", settings, typeof(DocumentSettings)); info.AddValue("sessions", sessions, typeof(List)); info.AddValue("projectionOrigin", projectionOrigin, typeof(LongLat)); info.AddValue("properties", properties, typeof(DocumentProperties)); } #endregion #region Public properties /// /// The document's map. /// public Map Map { get { return map; } set { map = value; if (MapChanged != null) MapChanged(this, new EventArgs()); } } /// /// The settings of the document. /// public DocumentSettings Settings { get { return settings; } set { settings = value; // apply to all sessions foreach (Session s in sessions) { s.Settings = settings.DefaultSessionSettings.Copy(); } } } /// /// The sessions included in the document. /// public SessionCollection Sessions { get { return sessions; } set { sessions = value; } } /// /// The longitude and latitude of the location that acts as the origin for the projection from 3D (earth) to 2D (map). /// public LongLat ProjectionOrigin { get { return projectionOrigin; } set { projectionOrigin = value; } } /// /// Saves the current document to a qrt file. /// /// The filename of the file. public void Save(string fileName) { FileFormat = QuickRouteFileFormat.Qrt; IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None); try { formatter.Serialize(stream, this); FileName = fileName; } finally { stream.Close(); } } public string FileName { get; set; } public DocumentProperties Properties { get { if(properties == null) { // create standard properties var dp = new DocumentProperties { Name = Path.GetFileNameWithoutExtension(FileName) }; if(dp.Name == null && Sessions.Count > 0 && Sessions[0].Route.FirstWaypoint != null) { var dt = Sessions[0].Route.FirstWaypoint.Time.ToLocalTime(); dp.Name = dt.ToLongDateString() + " " + dt.ToShortTimeString(); } return dp; } return properties; } set { properties = value; } } public QuickRouteFileFormat FileFormat { get; set; } #endregion #region Public methods public void Initialize() { foreach (var s in sessions) { s.Initialize(true); } } public Bitmap CreateMapImage(double zoom) { Size size = GetMapImageSize(zoom); Bitmap image = new Bitmap(size.Width, size.Height, PixelFormat.Format32bppPArgb); Graphics graphics = Graphics.FromImage(image); graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; var srcRect = new Rectangle(new Point(0, 0), Map.Image.Size); var dstRect = new Rectangle(new Point(0, 0), image.Size); graphics.DrawImage(Map.Image, dstRect, srcRect, GraphicsUnit.Pixel); graphics.Dispose(); return image; } public void DrawRoutes(IEnumerable sessionsToDraw, double zoom, Graphics graphics, Image mapImage, RouteDrawingMode mode, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, SessionSettings sessionSettings) { graphics.Clip = new Region(new Rectangle(0, 0, mapImage.Width, mapImage.Height)); // copy map as a background to route graphics.DrawImage(mapImage, new Point(0, 0)); // draw the routes foreach (var s in sessionsToDraw) { s.DrawRoute(zoom, graphics, mode, colorCodingAttribute, secondaryColorCodingAttribute, sessionSettings); } } public Size CalculateImageForExportSize(double zoomValue) { var size = GetMapImageSize(zoomValue); return new Size(size.Width + 2 * exportImageBorderWidth, size.Height + 3 * exportImageBorderWidth + exportImageHeaderHeight); } public Bitmap CreateMapAndRouteImage(bool showMap, double zoomValue, SessionCollection sessionsToDraw, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, RouteDrawingMode mode, SessionSettings sessionSettings) { Bitmap mapImage; if(showMap) { mapImage = CreateMapImage(zoomValue); } else { var size = GetMapImageSize(zoomValue); mapImage = new Bitmap(size.Width, size.Height, PixelFormat.Format32bppPArgb); } if (mode == RouteDrawingMode.None) return mapImage; var mapAndRouteImage = new Bitmap(mapImage.Width, mapImage.Height, PixelFormat.Format32bppPArgb); var mapAndRouteGraphics = Graphics.FromImage(mapAndRouteImage); mapAndRouteGraphics.SmoothingMode = SmoothingMode.AntiAlias; DrawRoutes(sessionsToDraw, zoomValue, mapAndRouteGraphics, mapImage, mode, colorCodingAttribute, secondaryColorCodingAttribute, sessionSettings); mapAndRouteGraphics.Dispose(); mapImage.Dispose(); return mapAndRouteImage; } // todo: skip showRouteLine parameter, use RouteDrawingMode instead public Bitmap CreateMapAndRouteImage(bool showRouteLine, double zoomValue, Session sessionToDraw, List legsToDraw, double frameWidth, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, RouteDrawingMode mode, SessionSettings sessionSettings) { RectangleD frame = GetFrame(zoomValue, sessionToDraw, legsToDraw, frameWidth, colorCodingAttribute, mode); var sc = new SessionCollection(); sc.Add(sessionToDraw); var wholeImage = CreateMapAndRouteImage(true, zoomValue, sc, colorCodingAttribute, secondaryColorCodingAttribute, mode, sessionSettings); AdjustFrameToImage(frame, wholeImage); var croppedImage = new Bitmap( Convert.ToInt32(Math.Ceiling(frame.Right) - Math.Floor(frame.Left)), Convert.ToInt32(Math.Ceiling(frame.Bottom) - Math.Floor(frame.Top))); var croppedImageGraphics = Graphics.FromImage(croppedImage); croppedImageGraphics.DrawImage( wholeImage, -Convert.ToInt32(Math.Floor(frame.Left)), -Convert.ToInt32(Math.Floor(frame.Top))); croppedImageGraphics.Dispose(); wholeImage.Dispose(); return croppedImage; } public LongLat[] GetImageCornersLongLat(Rectangle imageBounds, Rectangle mapBounds, double zoomValue) { var swPixel = new PointD(0, Map.Image.Height) + new PointD(imageBounds.Left - mapBounds.Left, imageBounds.Bottom - mapBounds.Bottom) / zoomValue; var nePixel = new PointD(Map.Image.Width, 0) + new PointD(imageBounds.Right - mapBounds.Right, imageBounds.Top - mapBounds.Top) / zoomValue; var sePixel = new PointD(nePixel.X, swPixel.Y); var nwPixel = new PointD(swPixel.X, nePixel.Y); var inverseAverageTransformationMatrix = Sessions.CalculateAverageTransformation().TransformationMatrix.Inverse(); return new[] { GetLongLatForMapImagePosition(swPixel, inverseAverageTransformationMatrix), GetLongLatForMapImagePosition(nwPixel, inverseAverageTransformationMatrix), GetLongLatForMapImagePosition(nePixel, inverseAverageTransformationMatrix), GetLongLatForMapImagePosition(sePixel, inverseAverageTransformationMatrix) }; } public LongLat[] GetMapCornersLongLat() { var swPixel = new PointD(0, Map.Image.Height); var nePixel = new PointD(Map.Image.Width, 0); var sePixel = new PointD(nePixel.X, swPixel.Y); var nwPixel = new PointD(swPixel.X, nePixel.Y); var inverseAverageTransformationMatrix = Sessions.CalculateAverageTransformation().TransformationMatrix.Inverse(); return new[] { GetLongLatForMapImagePosition(swPixel, inverseAverageTransformationMatrix), GetLongLatForMapImagePosition(nwPixel, inverseAverageTransformationMatrix), GetLongLatForMapImagePosition(nePixel, inverseAverageTransformationMatrix), GetLongLatForMapImagePosition(sePixel, inverseAverageTransformationMatrix) }; } #endregion #region Private methods private static void UpdateDocumentToCurrentVersion(Document doc) { var defaultRLS = SessionSettings.CreateDefaultRouteLineSettingsCollection(); // ensure MonochromeColor is non-invisible foreach (Session s in doc.sessions) { foreach (var rls in s.Settings.RouteLineSettingsCollection.Values) { if (rls.MonochromeColor == Color.FromArgb(0, 0, 0, 0)) { rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width; } } } // add some speed waypoint attribute settings, introduced in QR 2.1 if (!doc.Settings.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.Speed)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); doc.Settings.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.Speed, defaultCRISS[WaypointAttribute.Speed]); } if (!doc.Settings.LapHistogramSettings.ContainsKey(WaypointAttribute.Speed)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); doc.Settings.LapHistogramSettings.Add(WaypointAttribute.Speed, defaultLHS[WaypointAttribute.Speed]); } foreach (Session s in doc.sessions) { if (!s.Settings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.Speed)) { s.Settings.RouteLineSettingsCollection.Add(WaypointAttribute.Speed, defaultRLS[WaypointAttribute.Speed]); } } // add some direction waypoint attribute settings, introduced in QR 2.1-4 if (!doc.Settings.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); doc.Settings.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultCRISS[WaypointAttribute.DirectionDeviationToNextLap]); } if (!doc.Settings.LapHistogramSettings.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); doc.Settings.LapHistogramSettings.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultLHS[WaypointAttribute.DirectionDeviationToNextLap]); } foreach (Session s in doc.sessions) { if (!s.Settings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { s.Settings.RouteLineSettingsCollection.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultRLS[WaypointAttribute.DirectionDeviationToNextLap]); } } // add circle time radius, introduced in QR 2.4 foreach (var s in doc.sessions) { if (s.Settings.CircleTimeRadius == 0) s.Settings.CircleTimeRadius = 45; } // add map reading duration settings, introduced in QR 2.4 if (!doc.Settings.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); doc.Settings.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.MapReadingDuration, defaultCRISS[WaypointAttribute.MapReadingDuration]); } if (!doc.Settings.LapHistogramSettings.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); doc.Settings.LapHistogramSettings.Add(WaypointAttribute.MapReadingDuration, defaultLHS[WaypointAttribute.MapReadingDuration]); } if (!doc.Settings.DefaultSessionSettings.SmoothingIntervals.ContainsKey(WaypointAttribute.MapReadingDuration)) { doc.Settings.DefaultSessionSettings.SmoothingIntervals[WaypointAttribute.MapReadingDuration] = new Interval(0, 0); } foreach (Session s in doc.sessions) { if (!s.Settings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.MapReadingDuration)) { s.Settings.RouteLineSettingsCollection.Add(WaypointAttribute.MapReadingDuration, defaultRLS[WaypointAttribute.MapReadingDuration]); } } } private static Bitmap Base64StringToBitmap(string base64String) { byte[] b = Convert.FromBase64String(base64String); MemoryStream ms = new MemoryStream(b); Bitmap bmp = (Bitmap)Image.FromStream(ms); ms.Close(); return bmp; } private static string BitmapToBase64String(Image bmp) { string str; MemoryStream ms = new MemoryStream(); bmp.Save(ms, ImageFormat.Png); str = Convert.ToBase64String(ms.ToArray()); ms.Close(); return str; } private Size GetMapImageSize(double zoomValue) { return new Size((int)(zoomValue * Map.Image.Width), (int)(zoomValue * Map.Image.Height)); } /// /// Converts a map image pixel coordinate to a longitude and latitude coordinate /// /// Map pixel coordinate, referring to unzoomed map without any borders and image header /// public LongLat GetLongLatForMapImagePosition(PointD mapImagePosition, GeneralMatrix averageTransformationMatrixInverse) { var projectedPosition = LinearAlgebraUtil.Transform(mapImagePosition, averageTransformationMatrixInverse); return LongLat.Deproject(projectedPosition, ProjectionOrigin); } private static void AdjustFrameToImage(RectangleD frame, Image image) { if (frame.Left < 0) { frame.Width += frame.Left; frame.Left = 0; } if (frame.Top < 0) { frame.Height += frame.Top; frame.Top = 0; } if (frame.Right > image.Width) { frame.Width -= frame.Right - image.Width; } if (frame.Bottom > image.Height) { frame.Height -= frame.Bottom - image.Height; } } private static RectangleD GetFrame(double zoomValue, Session sessionToDraw, IList legsToDraw, double frameWidth, WaypointAttribute colorCodingAttribute, RouteDrawingMode mode) { var vertices = sessionToDraw.GetAdjustedWaypointLocations(legsToDraw); var rls = sessionToDraw.Settings.RouteLineSettingsCollection[colorCodingAttribute]; double lineRadius = 0; switch(mode) { case RouteDrawingMode.Simple: lineRadius = rls.MonochromeWidth/2; break; case RouteDrawingMode.Extended: lineRadius = (rls.Width + (rls.MaskVisible ? 2 * rls.MaskWidth : 0)) / 2; break; case RouteDrawingMode.None: lineRadius = 0; break; } double minX = zoomValue * (vertices[0].X - lineRadius); double maxX = zoomValue * (vertices[0].X + lineRadius); double minY = zoomValue * (vertices[0].Y - lineRadius); double maxY = zoomValue * (vertices[0].Y + lineRadius); for (int i = 0; i < vertices.Count; i++) { minX = Math.Min(minX, zoomValue * (vertices[i].X - lineRadius)); maxX = Math.Max(maxX, zoomValue * (vertices[i].X + lineRadius)); minY = Math.Min(minY, zoomValue * (vertices[i].Y - lineRadius)); maxY = Math.Max(maxY, zoomValue * (vertices[i].Y + lineRadius)); } double maxWidth = Math.Max(maxX - minX, maxY - minY); return new RectangleD(new PointD(minX - frameWidth * maxWidth, minY - frameWidth * maxWidth), new SizeD(maxX - minX + 2 * frameWidth * maxWidth, maxY - minY + 2 * frameWidth * maxWidth)); } public static string GetVersionString() { Version version = Assembly.GetExecutingAssembly().GetName(false).Version; return version.Major + "." + version.Minor + (version.Build > 0 ? "." + version.Build : ""); } #endregion #region Static methods public static Document Open(string fileName) { return Open(fileName, new DocumentSettings()); } public static Document Open(string fileName, DocumentSettings defaultSettings) { fileName = CommonUtil.GetDownloadedFileName(fileName); switch(GetFileFormat(fileName)) { case QuickRouteFileFormat.Qrt: return OpenFromQrt(fileName); case QuickRouteFileFormat.Jpeg: return OpenFromJpeg(fileName, defaultSettings); case QuickRouteFileFormat.Xml: return OpenFromXml(fileName, defaultSettings); } return null; } public static QuickRouteFileFormat GetFileFormat(string fileName) { // 1. check jpg var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read); if(stream.Length >= 11) { var jpegHeader1 = new byte[4]; var jpegHeader2 = new byte[5]; stream.Read(jpegHeader1, 0, 4); stream.Position = 6; stream.Read(jpegHeader2, 0, 5); if (ArraysAreEqual(jpegHeader1, new byte[] { 0xff, 0xd8, 0xff, 0xe0 }) && ArraysAreEqual(jpegHeader2, new byte[] {0x4a, 0x46, 0x49, 0x46, 0x00})) { stream.Close(); return QuickRouteFileFormat.Jpeg; } } // 2. check xml stream.Position = 0; var textReader = new StreamReader(stream); var startChars = new char[300]; textReader.Read(startChars, 0, 300); if(startChars.ToString().Contains("") && startChars.ToString().Contains("")) { textReader.Close(); return QuickRouteFileFormat.Xml; } // 3. check qrt if (stream.Length >= 16) { stream.Position = 0; var qrtHeader = new byte[16]; stream.Read(qrtHeader, 0, 16); if (ArraysAreEqual(qrtHeader, new byte[] { 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 })) { stream.Close(); return QuickRouteFileFormat.Qrt; } } stream.Close(); return QuickRouteFileFormat.Unknown; } public static Document OpenFromQrt(string fileName) { using(var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { return OpenFromQrt(fs, fileName); } } public static Document OpenFromQrt(Stream stream, string fileNameForDocument = null) { IFormatter formatter = new BinaryFormatter(); Document doc; try { doc = (Document)formatter.Deserialize(stream); doc.FileName = fileNameForDocument; } catch (Exception ex) { System.Console.WriteLine(ex.ToString()); throw ex; } finally { stream.Close(); } doc.FileFormat = QuickRouteFileFormat.Qrt; doc.Initialize(); UpdateDocumentToCurrentVersion(doc); return doc; } /// /// Opens a document stored in the old QuickRoute XML file format. This version can't save documents in this file format. /// /// The file name of the QuickRoute 1.0 xml document. /// The document settings to apply. /// public static Document OpenFromXml(string fileName, DocumentSettings settings) { XmlTextReader reader = null; RouteSegment rs = new RouteSegment(); HandleCollection handles = new HandleCollection(); Map map; try { reader = new XmlTextReader(fileName); reader.WhitespaceHandling = WhitespaceHandling.None; reader.ReadStartElement("QuickRoute"); reader.ReadStartElement("Route"); while (reader.Read() && reader.NodeType != XmlNodeType.EndElement) { while (reader.NodeType != XmlNodeType.Element) reader.Read(); Waypoint t = new Waypoint(); t.Time = DateTime.Parse(reader.GetAttribute("time")); t.LongLat = new LongLat(); t.LongLat.Longitude = double.Parse(reader.GetAttribute("longitude")); t.LongLat.Latitude = double.Parse(reader.GetAttribute("latitude")); t.Altitude = double.Parse(reader.GetAttribute("altitude")); t.HeartRate = int.Parse(reader.GetAttribute("heartRate")); rs.Waypoints.Add(t); } reader.ReadEndElement(); reader.ReadStartElement("Markers"); while (reader.Name == "Handle") { reader.Read(); Handle h = new Handle(); h.ParameterizedLocation = new ParameterizedLocation(0, double.Parse(reader.GetAttribute("value"))); reader.Read(); double x = double.Parse(reader.GetAttribute("x")); double y = double.Parse(reader.GetAttribute("y")); h.Location = new PointD(x, y); reader.Read(); h.TransformationMatrix = new GeneralMatrix(3, 3); h.MarkerDrawer = (new ApplicationSettings()).DefaultDocumentSettings.DefaultSessionSettings.MarkerDrawers[MarkerType.Handle]; for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { reader.Read(); h.TransformationMatrix.SetElement(row, col, double.Parse(reader.GetAttribute("value"))); } } reader.Read(); reader.ReadEndElement(); reader.ReadEndElement(); handles.Add(h); } reader.ReadEndElement(); map = new Map(Base64StringToBitmap(reader.ReadElementContentAsString())); } catch (Exception ex) { if (reader != null) reader.Close(); throw new Exception(ex.Message); } reader.Close(); List routeSegments = new List(); routeSegments.Add(rs); Document doc = new Document(map, new Route(routeSegments), new LapCollection(), null, settings); foreach (var h in handles) { doc.Sessions[0].AddHandle(h); } doc.FileFormat = QuickRouteFileFormat.Xml; doc.Initialize(); UpdateDocumentToCurrentVersion(doc); return doc; } /// /// Opens a document from a jpeg file with embedded QuickRoute Jpeg Extension Data. /// /// The file name of the jpeg file. /// The document settings to apply. /// A QuickRoute document if the jpeg file contains QuickRoute Jpeg Extension Data, otherwise null. public static Document OpenFromJpeg(string fileName, DocumentSettings settings) { var ed = QuickRouteJpegExtensionData.FromJpegFile(fileName); if (ed == null) return null; var mapAndBorderImage = (Bitmap)Image.FromFile(fileName); var mapImage = new Bitmap(ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height); using(var g = Graphics.FromImage(mapImage)) { g.DrawImage(mapAndBorderImage, new Rectangle(0, 0, ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height), ed.MapLocationAndSizeInPixels, GraphicsUnit.Pixel); } foreach(var pi in mapAndBorderImage.PropertyItems) { try { mapImage.SetPropertyItem(pi); } catch(NotImplementedException e) { // TODO: under mono System.Drawing.Image.SetPropertyItem() does not work QuickRoute.Common.LogUtil.MonoFixMe(e.Message); } } #if !__MonoCS__ var exif = new ExifWorks.ExifWorks(ref mapAndBorderImage); var qualityByteArray = exif.GetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] { 80 }); double quality = (double)qualityByteArray[0] / 100; #else double quality = 0.8; #endif var encodingInfo = new JpegEncodingInfo(quality); using (var ms = new MemoryStream()) { mapImage.Save(ms, encodingInfo.Encoder, encodingInfo.EncoderParams); var document = new Document(new Map(ms), settings) { Sessions = ed.Sessions }; if (document.Sessions.Count > 0) document.ProjectionOrigin = document.Sessions[0].ProjectionOrigin; document.FileName = fileName; document.FileFormat = QuickRouteFileFormat.Jpeg; document.Initialize(); mapAndBorderImage.Dispose(); mapImage.Dispose(); return document; } } private static bool ArraysAreEqual(byte[] array1, byte[] array2) { if (array1.Length != array2.Length) return false; for (var i = 0; i < array1.Length; i++) { if (array1[i] != array2[i]) return false; } return true; } #endregion #region Public enums public enum RouteDrawingMode { Simple, Extended, None } #endregion public void Dispose() { // todo: how does dispose work for fields? want to dispose map image, etc. } } [Serializable] public class DocumentProperties { public string Name { get; set; } } internal static class ExifUtil { public static byte[] GetExifGpsCoordinate(double coordinate) { var d = (uint)coordinate; var m = (uint)(60 * coordinate - 60 * d); var s = (uint)(1000000 * (3600 * coordinate - (3600 * d + 60 * m))); var result = new byte[24]; BitConverter.GetBytes(d).CopyTo(result, 0); BitConverter.GetBytes((uint)1).CopyTo(result, 4); BitConverter.GetBytes(m).CopyTo(result, 8); BitConverter.GetBytes((uint)1).CopyTo(result, 12); BitConverter.GetBytes(s).CopyTo(result, 16); BitConverter.GetBytes((uint)1000000).CopyTo(result, 20); return result; } public static byte[] GetExifGpsPosition(LongLat longLat) { var lng = BitConverter.GetBytes(Convert.ToInt32(longLat.Longitude * 3600000)); var lat = BitConverter.GetBytes(Convert.ToInt32(longLat.Latitude * 3600000)); //var x = BitConverter.GetBytes((int)int.MinValue + 1); var result = new byte[8]; lng.CopyTo(result, 0); lat.CopyTo(result, 4); return result; } } /// /// Class for storing an interval, used e g for smoothing when calculating speeds. /// [Serializable] public class Interval { private double start; private double end; public Interval(double start, double end) { if (end < start) throw new Exception("End value must be less than start value."); this.start = start; this.end = end; } /// /// Copy constructor. /// /// public Interval(Interval i) { start = i.start; end = i.end; } /// /// The start (relative to the origin) of the interval) /// public double Start { get { return start; } set { if (end < value) throw new Exception("Start value must be greater than end value."); start = value; } } /// /// The end (relative to the origin) of the interval) /// public double End { get { return end; } set { if (value < start) throw new Exception("End value must be less than start value."); end = value; } } /// /// Gets the length of the interval. /// public double Length { get { return end - start; } } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof (Interval)) return false; return Equals((Interval) obj); } public bool Equals(Interval obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj.start == start && obj.end == end; } public override int GetHashCode() { unchecked { return (start.GetHashCode()*397) ^ end.GetHashCode(); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/DocumentSettings.cs000066400000000000000000000115531446222606700300040ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities { /// /// Class containing various settings for a QuickRoute document. /// [Serializable] public class DocumentSettings : GlobalizedObject { private SessionSettings defaultSessionSettings = new SessionSettings(); private Dictionary colorRangeIntervalSliderSettings = CreateDefaultColorRangeIntervalSliderSettings(); private Dictionary lapHistogramSettings = CreateDefaultLapHistogramSettings(); public SessionSettings DefaultSessionSettings { get { return defaultSessionSettings; } set { defaultSessionSettings = value; } } public Dictionary ColorRangeIntervalSliderSettings { get { return colorRangeIntervalSliderSettings; } set { colorRangeIntervalSliderSettings = value; } } public Dictionary LapHistogramSettings { get { return lapHistogramSettings; } set { lapHistogramSettings = value; } } public static Dictionary CreateDefaultColorRangeIntervalSliderSettings() { Dictionary defaultColorRangeIntervalSliderSettings = new Dictionary(); defaultColorRangeIntervalSliderSettings.Add( WaypointAttribute.Pace, new ColorRangeIntervalSliderSettings(0.0 * 60, 10.0 * 60) ); defaultColorRangeIntervalSliderSettings.Add( WaypointAttribute.Speed, new ColorRangeIntervalSliderSettings(0.0, 20.0) ); defaultColorRangeIntervalSliderSettings.Add( WaypointAttribute.HeartRate, new ColorRangeIntervalSliderSettings(100, 200) ); defaultColorRangeIntervalSliderSettings.Add( WaypointAttribute.Altitude, new ColorRangeIntervalSliderSettings(0, 500) ); defaultColorRangeIntervalSliderSettings.Add( WaypointAttribute.DirectionDeviationToNextLap, new ColorRangeIntervalSliderSettings(0, 90) ); defaultColorRangeIntervalSliderSettings.Add( WaypointAttribute.MapReadingDuration, new ColorRangeIntervalSliderSettings(0, 10) ); return defaultColorRangeIntervalSliderSettings; } public static Dictionary CreateDefaultLapHistogramSettings() { Dictionary defaultLapHistogramSettings = new Dictionary(); defaultLapHistogramSettings.Add( WaypointAttribute.Pace, new LapHistogramSettings(10) ); defaultLapHistogramSettings.Add( WaypointAttribute.Speed, new LapHistogramSettings(0.5) ); defaultLapHistogramSettings.Add( WaypointAttribute.HeartRate, new LapHistogramSettings(2) ); defaultLapHistogramSettings.Add( WaypointAttribute.Altitude, new LapHistogramSettings(10) ); defaultLapHistogramSettings.Add( WaypointAttribute.DirectionDeviationToNextLap, new LapHistogramSettings(2) ); defaultLapHistogramSettings.Add( WaypointAttribute.MapReadingDuration, new LapHistogramSettings(1) ); return defaultLapHistogramSettings; } public DocumentSettings Copy() { MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, this); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); return bf.Deserialize(ms) as DocumentSettings; } } [Serializable] public class ColorRangeIntervalSliderSettings : GlobalizedObject { private double minValue; private double maxValue; public ColorRangeIntervalSliderSettings(double minValue, double maxValue) { this.minValue = minValue; this.maxValue = maxValue; } public double MinValue { get { return minValue; } set { minValue = value; } } public double MaxValue { get { return maxValue; } set { maxValue = value; } } } [Serializable] public class LapHistogramSettings : GlobalizedObject { private double binWidth; public LapHistogramSettings(double binWidth) { this.binWidth = binWidth; } public double BinWidth { get { return binWidth; } set { binWidth = value; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Exporters/000077500000000000000000000000001446222606700261445ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Exporters/GpxExporter.cs000066400000000000000000000146461446222606700307750ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; using QuickRoute.BusinessEntities.Importers.GPX.GPX11; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.Exporters { public class GpxExporter { private readonly Session session; private readonly Stream outputStream; public Session Session { get { return session; } } public Stream OutputStream { get { return outputStream; } } public GpxExporter(Session session, Stream outputStream) { this.session = session; this.outputStream = outputStream; } public void Export() { var writerSettings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true, IndentChars = " " }; var writer = XmlWriter.Create(OutputStream, writerSettings); var xmlSerializer = new XmlSerializer(typeof(gpx11Type)); var stNs = "urn:uuid:D0EB2ED5-49B6-44e3-B13C-CF15BE7DD7DD"; var mrNs = "http://www.matstroeng.se/quickroute/map-reading"; var ns = new XmlSerializerNamespaces(); ns.Add("st", stNs); if(Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) ns.Add("mr", mrNs); var xml = new XmlDocument(); var nfi = new NumberFormatInfo(); nfi.NumberDecimalSeparator = "."; var gpx11 = new gpx11Type(); gpx11.creator = "QuickRoute"; gpx11.trk = new trkType[] { new trkType() }; gpx11.extensions = new extensionsType(); var extensionElements = new List(); // TODO: add map-reading elements if exists XmlElement activityElement = xml.CreateElement("st", "activity", stNs); extensionElements.Add(activityElement); XmlElement heartRateTrackElement = xml.CreateElement("st", "heartRateTrack", stNs); activityElement.AppendChild(heartRateTrackElement); var trksegs = new List(); foreach (var rs in Session.Route.Segments) { var wpts = new List(); foreach (var w in rs.Waypoints) { var wpt = new wptType(); wpt.eleSpecified = (w.Altitude != null); if (wpt.eleSpecified) { wpt.ele = (decimal)w.Altitude; } wpt.lon = (decimal)w.LongLat.Longitude; wpt.lat = (decimal)w.LongLat.Latitude; wpt.time = w.Time.ToUniversalTime(); // use ToUniversalTime for backwards compatibility, QR <= v2.2 used local time internally wpt.timeSpecified = true; wpts.Add(wpt); if (w.HeartRate.HasValue) { // add heartrate var heartRateElement = xml.CreateElement("st", "heartRate", stNs); var timeAttribute = xml.CreateAttribute("time"); timeAttribute.Value = w.Time.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); // use ToUniversalTime for backwards compatibility, QR <= v2.2 used local time internally var bpmAttribute = xml.CreateAttribute("bpm"); bpmAttribute.Value = w.HeartRate.Value.ToString(nfi); heartRateElement.Attributes.Append(timeAttribute); heartRateElement.Attributes.Append(bpmAttribute); heartRateTrackElement.AppendChild(heartRateElement); } } var trkseg = new trksegType {trkpt = wpts.ToArray()}; trksegs.Add(trkseg); } gpx11.trk[0].trkseg = trksegs.ToArray(); // add laps as GPX st:split var splitsElement = xml.CreateElement("st", "splits", stNs); // first distances foreach (var lap in Session.Laps) { if (lap.LapType == LapType.Lap) { var splitElement = xml.CreateElement("st", "split", stNs); var distanceAttribute = xml.CreateAttribute("distance"); distanceAttribute.Value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, Session.Route.GetParameterizedLocationFromTime(lap.Time)).Value.ToString(nfi); splitElement.Attributes.Append(distanceAttribute); splitsElement.AppendChild(splitElement); } } // then times foreach (var lap in Session.Laps) { if (lap.LapType == LapType.Lap) { var splitElement = xml.CreateElement("st", "split", stNs); var timeAttribute = xml.CreateAttribute("time"); timeAttribute.Value = lap.Time.Subtract(Session.Route.FirstWaypoint.Time).TotalSeconds.ToString(nfi); splitElement.Attributes.Append(timeAttribute); splitsElement.AppendChild(splitElement); } } if (splitsElement.ChildNodes.Count > 0) activityElement.AppendChild(splitsElement); // add laps as GPX waypoint elements var lapWaypoints = new List(); foreach (var lap in Session.Laps) { if (lap.LapType == LapType.Lap) { var wpt = new wptType(); wpt.time = lap.Time; wpt.timeSpecified = true; var qrWaypoint = session.Route.CreateWaypointFromTime(lap.Time); wpt.lat = (decimal)qrWaypoint.LongLat.Latitude; wpt.lon = (decimal)qrWaypoint.LongLat.Longitude; if(qrWaypoint.Altitude.HasValue) { wpt.ele = (decimal)qrWaypoint.Altitude.Value; wpt.eleSpecified = true; } wpt.name = string.Format(Strings.LapX, lapWaypoints.Count + 1); lapWaypoints.Add(wpt); } } if(lapWaypoints.Count > 0) gpx11.wpt = lapWaypoints.ToArray(); // map reading if(Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { var mapReadingsList = Session.Route.GetMapReadingsList(); for(var i=0; i /// The bounding rectangle of the whole image /// public Rectangle ImageBounds { get { return Image == null ? Rectangle.Empty : new Rectangle(new Point(0, 0), Image.Size); } } /// /// The bounding rectangle of the map part of the image /// public Rectangle MapBounds { get; private set; } public Bitmap Image { get; private set; } private ImageFile im; private const int exportImageHeaderHeight = 64; private const int exportImageBorderWidth = 1; public ImageExporter(Document document) : this(document, document.Sessions, null) { } public ImageExporter(Document document, SessionCollection sessions) : this(document, sessions, null) { } public ImageExporter(Document document, Stream outputStream): this(document, document.Sessions, outputStream) { } public ImageExporter(Document document, SessionCollection sessions, Stream outputStream) { this.document = document; this.sessions = sessions; OutputStream = outputStream; // set default values for non-mandatory fields Properties = new ImageExporterProperties {SessionSettings = new SessionSettings()}; } public void Export() { CreateImage(); SetExifData(); SetQuickRouteExtensionData(); } private void CreateImage() { // todo: support for multiple sessions var sessionSettings = Properties.SessionSettings ?? Document.Sessions[0].Settings; var routeLineSettings = sessionSettings.RouteLineSettingsCollection[Properties.ColorCodingAttribute]; // create the base image var mapAndRouteImage = document.CreateMapAndRouteImage( Properties.ShowMap, Properties.PercentualSize, Sessions, Properties.ColorCodingAttribute, Properties.SecondaryColorCodingAttribute, Properties.RouteDrawingMode, Properties.SessionSettings ); // create a nice header with logo and color range var borderPen = new Pen(Color.FromArgb(255, 64, 64, 64)); var captionFont = new Font("Calibri", 18.6F, FontStyle.Regular, GraphicsUnit.Pixel); Brush captionBrush = new SolidBrush(Color.FromArgb(192, Color.White)); var versionFont = new Font("Calibri", 13.3F, FontStyle.Regular, GraphicsUnit.Pixel); Brush versionBrush = new SolidBrush(Color.FromArgb(128, Color.White)); var urlFont = new Font("Calibri", 13.3F, FontStyle.Regular, GraphicsUnit.Pixel); Brush urlBrush = new SolidBrush(Color.FromArgb(128, Color.White)); var colorRangeScaleFont = new Font("Calibri", 13.3F, FontStyle.Regular, GraphicsUnit.Pixel); Brush colorRangeScaleBrush = new SolidBrush(Color.FromArgb(192, Color.White)); // copy route image to a new image Image = new Bitmap(mapAndRouteImage.Width + 2 * exportImageBorderWidth, mapAndRouteImage.Height + exportImageHeaderHeight + 3 * exportImageBorderWidth); var g = Graphics.FromImage(Image); MapBounds = new Rectangle(exportImageBorderWidth, 2 * exportImageBorderWidth + exportImageHeaderHeight, mapAndRouteImage.Width, mapAndRouteImage.Height); g.DrawImageUnscaled(mapAndRouteImage, exportImageBorderWidth, 2 * exportImageBorderWidth + exportImageHeaderHeight); mapAndRouteImage.Dispose(); // draw the header // border g.DrawRectangle(borderPen, 0, 0, Image.Width - 1, Image.Height - 1); g.DrawLine(borderPen, 0, exportImageHeaderHeight + exportImageBorderWidth, Image.Width, exportImageHeaderHeight + exportImageBorderWidth); // black background g.FillRectangle(Brushes.Black, new Rectangle(exportImageBorderWidth, exportImageBorderWidth, Image.Width - 2 * exportImageBorderWidth, exportImageHeaderHeight)); // header gradient g.FillRectangle( new LinearGradientBrush(new Point(0, 0), new Point(0, 28), Color.FromArgb(255, 64, 64, 64), Color.FromArgb(255, 24, 24, 24)), new Rectangle(exportImageBorderWidth, exportImageBorderWidth, Image.Width - 2 * exportImageBorderWidth, 28)); // Q logo g.DrawImage(Images.HeaderLogo, exportImageBorderWidth + 16, exportImageBorderWidth + 6); // application name, version and url g.TextRenderingHint = TextRenderingHint.AntiAlias; g.SmoothingMode = SmoothingMode.AntiAlias; #if !__MonoCS__ g.DrawString(Strings.QuickRoute, captionFont, captionBrush, new PointF(exportImageBorderWidth + 74F, exportImageBorderWidth + 5F)); #else g.DrawString(Strings.QuickRoute+" Linux", captionFont, captionBrush, new PointF(exportImageBorderWidth + 74F, exportImageBorderWidth + 5F)); #endif g.DrawString( string.Format(Strings.Version, Document.GetVersionString()), versionFont, versionBrush, new PointF(exportImageBorderWidth + 76F, exportImageBorderWidth + 27F)); g.DrawString(Strings.WebsiteShortUrl, urlFont, urlBrush, new PointF(exportImageBorderWidth + 76F, exportImageBorderWidth + 41F)); if (Properties.RouteDrawingMode == Document.RouteDrawingMode.Extended && Properties.ColorRangeProperties != null) { DrawColorRange(g, colorRangeScaleFont, routeLineSettings, colorRangeScaleBrush); } // dispose objects borderPen.Dispose(); captionFont.Dispose(); captionBrush.Dispose(); versionFont.Dispose(); versionBrush.Dispose(); urlFont.Dispose(); urlBrush.Dispose(); colorRangeScaleFont.Dispose(); colorRangeScaleBrush.Dispose(); g.Dispose(); } private void DrawColorRange(Graphics graphics, Font colorRangeScaleFont, RouteLineSettings routeLineSettings, Brush colorRangeScaleBrush) { // draw the color range // calculate various sizes var sf = new StringFormat(); var colorRangeSize = new Size(Math.Max(100, Math.Min(300, Image.Width - 300)), 16); var colorRangeScaleLabelMaxSize = graphics.MeasureString(Properties.ColorRangeProperties.NumericConverter.ToString((double?)Properties.ColorRangeProperties.ScaleCreator.LastMarkerValue), colorRangeScaleFont); var colorRangeScaleUnitSize = graphics.MeasureString(" " + Properties.ColorRangeProperties.ScaleUnit, colorRangeScaleFont); var colorRangeRectangle = new Rectangle( new Point( Image.Width - exportImageBorderWidth - 16 - (int)colorRangeScaleUnitSize.Width - (int)colorRangeScaleLabelMaxSize.Width / 2 - colorRangeSize.Width, 20), colorRangeSize); // checkerboard background for color range Gradient.FillCheckerboardRectangle(graphics, colorRangeRectangle, 8); // color range routeLineSettings.ColorRange.Gradient.Draw(graphics, colorRangeRectangle, 0, 1, Gradient.Direction.Horizontal, routeLineSettings.AlphaAdjustment); // color range scale markers and labels var lastX = 0; for (var value = Properties.ColorRangeProperties.ScaleCreator.FirstMarkerValue; value <= Properties.ColorRangeProperties.ScaleCreator.LastMarkerValue; value += Properties.ColorRangeProperties.ScaleCreator.MarkerInterval) { var x = colorRangeRectangle.Left + (int) ((value - routeLineSettings.ColorRange.StartValue) / (routeLineSettings.ColorRange.EndValue - routeLineSettings.ColorRange.StartValue) * colorRangeRectangle.Width); var p = new Pen(Color.FromArgb(192, Color.Black)); graphics.DrawLine(p, x, colorRangeRectangle.Top, x, colorRangeRectangle.Bottom); p.Dispose(); // draw label string, but only if the space is sufficient if (value == Properties.ColorRangeProperties.ScaleCreator.FirstMarkerValue || x - lastX > colorRangeScaleLabelMaxSize.Width) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Near; graphics.DrawString(Properties.ColorRangeProperties.NumericConverter.ToString((double?)value), colorRangeScaleFont, colorRangeScaleBrush, x, colorRangeRectangle.Bottom + 2F, sf); lastX = x; } } // color range border graphics.DrawRectangle(Pens.Gray, new Rectangle(colorRangeRectangle.Left - 1, colorRangeRectangle.Top - 1, colorRangeRectangle.Width + 2, colorRangeRectangle.Height + 1)); // color range scale strings // caption sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Near; graphics.DrawString(Properties.ColorRangeProperties.ScaleCaption + " ", colorRangeScaleFont, colorRangeScaleBrush, colorRangeRectangle.Left - colorRangeScaleLabelMaxSize.Width / 2F, colorRangeRectangle.Bottom + 2F, sf); // unit sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Near; graphics.DrawString(" " + Properties.ColorRangeProperties.ScaleUnit, colorRangeScaleFont, colorRangeScaleBrush, colorRangeRectangle.Right + colorRangeScaleLabelMaxSize.Width / 2F, colorRangeRectangle.Bottom + 2F, sf); } private void SetExifData() { #if !__MonoCS__ // GPS version var image = Image; var exif = new ExifWorks.ExifWorks(ref image); // center coordinate var center = new LongLat(); foreach (var corner in Document.GetMapCornersLongLat()) { center += corner / 4; } var ver = new byte[] { 2, 2, 0, 0 }; var longitudeRef = new byte[] { Convert.ToByte(center.Longitude < 0 ? 'W' : 'E'), 0 }; var longitude = ExifUtil.GetExifGpsCoordinate(center.Longitude); var latitudeRef = new byte[] { Convert.ToByte(center.Latitude < 0 ? 'S' : 'N'), 0 }; var latitude = ExifUtil.GetExifGpsCoordinate(center.Latitude); try { exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsVer, ver, ExifWorks.ExifWorks.ExifDataTypes.UnsignedLong); exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitudeRef, longitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString); exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitude, longitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational); exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitudeRef, latitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString); exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitude, latitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational); if (Properties.EncodingInfo.Encoder.MimeType == "image/jpeg") { exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] {(byte)(100 * ((JpegEncodingInfo)Properties.EncodingInfo).Quality)}, ExifWorks.ExifWorks.ExifDataTypes.UnsignedByte); } exif.SetPropertyString((int)ExifWorks.ExifWorks.TagNames.SoftwareUsed, Strings.QuickRoute + " " + Document.GetVersionString()); } catch(NotImplementedException e) { // TODO: under mono System.Drawing.Image.SetPropertyItem() does not work QuickRoute.Common.LogUtil.MonoFixMe(e.Message); } #endif } private double NormalizeAngle(double angle) { while (angle > 360.0) { angle -= 360.0; } while (angle < 0.0) { angle += 360.0; } return angle; } /// /// Fills in \c this.OutputStream, by saving \c this.image to the stream first /// and then the route data as an extension to jpeg. /// private void SetQuickRouteExtensionData() { if (Properties.EncodingInfo.Encoder.MimeType == "image/jpeg") { using (var tmpStream = new MemoryStream()) { Image.Save(tmpStream, Properties.EncodingInfo.Encoder, Properties.EncodingInfo.EncoderParams); #if __MonoCS__ // center coordinate var center = new LongLat(); foreach (var corner in Document.GetMapCornersLongLat()) { center += corner / 4; } ImageFile im = ImageFile.FromStream (tmpStream); var ver = new byte[] { 2, 2, 0, 0 }; var longitudeRef = new byte[] { Convert.ToByte(center.Longitude < 0 ? 'W' : 'E'), 0 }; //var longitude = ExifUtil.GetExifGpsCoordinate(center.Longitude); var latitudeRef = new byte[] { Convert.ToByte(center.Latitude < 0 ? 'S' : 'N'), 0 }; //var latitude = ExifUtil.GetExifGpsCoordinate(center.Latitude); im.Properties.Add (ExifTag.GPSVersionID, BitConverter.ToUInt32 (ver, 0)); //exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsVer, ver, ExifWorks.ExifWorks.ExifDataTypes.UnsignedLong); im.Properties.Add (ExifTag.GPSLongitudeRef, System.Text.Encoding.UTF8.GetString (longitudeRef)); //exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitudeRef, longitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString); im.Properties.Add (ExifTag.GPSLongitude, NormalizeAngle(center.Longitude)); //exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLongitude, longitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational); im.Properties.Add (ExifTag.GPSLatitudeRef, System.Text.Encoding.UTF8.GetString (latitudeRef)); //exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitudeRef, latitudeRef, ExifWorks.ExifWorks.ExifDataTypes.AsciiString); im.Properties.Add (ExifTag.GPSLatitude, NormalizeAngle(center.Latitude)); //exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.GpsLatitude, latitude, ExifWorks.ExifWorks.ExifDataTypes.UnsignedRational); if (Properties.EncodingInfo.Encoder.MimeType == "image/jpeg") { //var qual = new byte[] { (byte)(100 * ((JpegEncodingInfo)Properties.EncodingInfo).Quality) }; im.Properties.Add(ExifTag.JPEGProc, (byte)(100 * ((JpegEncodingInfo)Properties.EncodingInfo).Quality)); //exif.SetProperty((int)ExifWorks.ExifWorks.TagNames.JPEGQuality, new byte[] {(byte)(100 * ((JpegEncodingInfo)Properties.EncodingInfo).Quality)}, ExifWorks.ExifWorks.ExifDataTypes.UnsignedByte); } im.Properties.Add(ExifTag.Software, Strings.QuickRoute + " Linux " + Document.GetVersionString()); //exif.SetPropertyString((int)ExifWorks.ExifWorks.TagNames.SoftwareUsed, Strings.QuickRoute + " " + Document.GetVersionString()); var tmpStream2 = new MemoryStream (); im.Save (tmpStream2); //MonoExifStream.addExif (Image, tmpStream, tmpStream2); #endif var ed = QuickRouteJpegExtensionData.FromImageExporter(this); ed.EmbedDataInImage(tmpStream2, OutputStream); } } else { Image.Save(OutputStream, Properties.EncodingInfo.Encoder, Properties.EncodingInfo.EncoderParams); } } } public class ImageExporterProperties { public SessionSettings SessionSettings { get; set; } public IImageEncodingInfo EncodingInfo { get; set; } public double PercentualSize { get; set; } public Document.RouteDrawingMode RouteDrawingMode { get; set; } public bool ShowMap { get; set; } public WaypointAttribute ColorCodingAttribute { get; set; } public WaypointAttribute? SecondaryColorCodingAttribute { get; set; } public ColorRangeProperties ColorRangeProperties { get; set; } public ImageExporterProperties() { EncodingInfo = new JpegEncodingInfo(0.8); PercentualSize = 1; RouteDrawingMode = Document.RouteDrawingMode.Extended; ShowMap = true; ColorCodingAttribute = WaypointAttribute.Pace; } } // todo: is this class really necessary? could be created on the fly public class ColorRangeProperties { public ScaleCreatorBase ScaleCreator { get; set; } public NumericConverter NumericConverter { get; set; } public string ScaleCaption { get; set; } public string ScaleUnit { get; set; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Exporters/KmlExporter.cs000066400000000000000000001625431446222606700307620ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using System.Xml; #if !__MonoCS__ using Ionic.Zip; #else using ICSharpCode.SharpZipLib.Zip; #endif using QuickRoute.BusinessEntities; using QuickRoute.Common; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.Exporters { /// /// Class for creating kml/kmz files from QuickRoute documents and sessions /// public class KmlExporter { private readonly List kmlExportDocuments; private readonly Stream outputStream; /// /// The stream to write the kml/kmz document to /// public Stream OutputStream { get { return outputStream; } } /// /// The properties used to create the kml/kmz file /// public KmlProperties KmlProperties { get; set; } private Dictionary GroundOverlays { get; set; } private ZipFile kmzFile; private string temporaryBasePath; private int iconStyleCount; private readonly Dictionary routeLineStyles = new Dictionary(); private readonly Dictionary markerStyles = new Dictionary(); /// /// Route line styles for each individual session when in monochrome route line style mode. If not set, the KmlProperties.RouteLineStyle value is used. /// public Dictionary RouteLineStyleForSessions { get; set; } /// /// Replay marker styles for each individual session when in monochrome replay marker style mode. If not set, the KmlProperties.ReplayMarkerStyle value is used. /// public Dictionary ReplayMarkerStyleForSessions { get; set; } /// /// The number of possible colors when route line or replay markers are color-coded /// public int NoOfColorCodedSteps { get; set; } private readonly Dictionary adaptedRoutes = new Dictionary(); // some constants private static readonly Size iconSize = new Size(16, 16); private static readonly Size replayMarkerIconSize = new Size(10, 10); private static readonly Pen replayMarkerBorderPen = new Pen(Color.FromArgb(64, Color.Black)); private const double replayMarkerSizeFactor = 3; private KmlExporter() { RouteLineStyleForSessions = new Dictionary(); ReplayMarkerStyleForSessions = new Dictionary(); NoOfColorCodedSteps = 32; } /// /// Creates an exporter where data is taken from one single QuickRoute document and its sessions /// /// The QuickRoute document to export /// The image exporter used to create the map image /// The stream to export to public KmlExporter(Document document, ImageExporter imageExporter, Stream outputStream) : this() { kmlExportDocuments = new List { new KmlExportDocument(document, imageExporter) }; this.outputStream = outputStream; } /// /// Creates an exporter where the map data is taken from one single QuickRoute document and the sessions are specified in a custom SessionCollection object /// /// The QuickRoute document that contains the map to export /// The image exporter used to create the map image /// The sessions to export /// The stream to export to public KmlExporter(Document document, ImageExporter imageExporter, SessionCollection sessions, Stream outputStream) : this() { kmlExportDocuments = new List { new KmlExportDocument(document, sessions, imageExporter) }; this.outputStream = outputStream; } /// /// Creates an exporter from the specified QuickRoute files. /// /// The file names of the QuickRoute files to export. The map image of the first file in the collection will be used as the map image. /// The proerties of the exporter used to create the map image /// The stream to export to public KmlExporter(IEnumerable documentFileNames, ImageExporterProperties imageExporterProperties, Stream outputStream) : this() { kmlExportDocuments = new List(); foreach (var fileName in documentFileNames) { kmlExportDocuments.Add(new KmlExportDocument(fileName, imageExporterProperties)); } this.outputStream = outputStream; } /// /// Exports data to a KMZ file. /// /// A temporary path where files creatred during the export will reside. This path should not exist before calling this method. The path is deleted when this method completes. public void ExportKmz(string tempBasePath) { LogUtil.LogDebug("Started"); // 1. create temp directories and the kmz file temporaryBasePath = tempBasePath; Directory.CreateDirectory(temporaryBasePath); Directory.CreateDirectory(Path.Combine(temporaryBasePath, @"files")); Directory.CreateDirectory(Path.Combine(temporaryBasePath, @"fileso")); #if !__MonoCS__ kmzFile = new ZipFile(); kmzFile.AddDirectoryByName("files"); #else kmzFile = new ZipFile(OutputStream); kmzFile.BeginUpdate(); kmzFile.AddDirectory("files"); #endif // 2. create ground overlay image streams for each document LogUtil.LogDebug("Creating overlays"); var groundOverlayCount = 0; GroundOverlays = new Dictionary(); foreach (var document in kmlExportDocuments) { if (KmlProperties.MapType != KmlExportMapType.None) { string ext = document.ImageExporter.Properties.EncodingInfo.Encoder.MimeType.Replace("image/", ""); var fileName = Path.Combine(temporaryBasePath, Path.Combine(@"fileso", groundOverlayCount + "." + ext)); // NOTE: this assumes that the mime type matches the file extension using (var imageStream = new FileStream(fileName, FileMode.Create)) { document.ImageExporter.OutputStream = imageStream; switch (KmlProperties.MapType) { case KmlExportMapType.Map: document.ImageExporter.Properties.RouteDrawingMode = Document.RouteDrawingMode.None; break; case KmlExportMapType.MapAndRoute: document.ImageExporter.Properties.RouteDrawingMode = Document.RouteDrawingMode.Extended; break; } document.ImageExporter.Export(); GroundOverlays.Add(document, new KmlGroundOverlay(fileName, KmlGroundOverlay.GroundOverlayType.File)); groundOverlayCount++; } } } // 3. generate kml document LogUtil.LogDebug("Generating kml document"); var tempKmlFileName = Path.Combine(temporaryBasePath, "doc.kml"); using (var kmlStream = new FileStream(tempKmlFileName, FileMode.Create)) { var writerSettings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true, IndentChars = " " }; using (var writer = XmlWriter.Create(kmlStream, writerSettings)) { if (writer != null) { CreateKml(writer); writer.Close(); #if !__MonoCS__ kmzFile.AddFile(tempKmlFileName, ""); #else kmzFile.Add (tempKmlFileName, "doc.kml"); #endif } } } #if !__MonoCS__ kmzFile.Save(OutputStream); kmzFile.Dispose(); #else kmzFile.CommitUpdate(); #endif // 4. delete temp directory and its content LogUtil.LogDebug("Deleting temp dir"); Directory.Delete(temporaryBasePath, true); LogUtil.LogDebug("Finished"); } private void CreateKml(XmlWriter writer) { var formatProvider = new NumberFormatInfo { NumberDecimalSeparator = "." }; var isSingleDocument = (kmlExportDocuments.Count == 1); writer.WriteStartDocument(); writer.WriteStartElement("kml"); if (!isSingleDocument) { CreateDocumentElement(Strings.QuickRouteKmlData, true, writer, formatProvider); CreateStyles(writer, formatProvider); } var documentCount = 0; var sessionCount = 0; foreach (var kmlExportDocument in kmlExportDocuments) { if (isSingleDocument) { CreateDocumentElement(kmlExportDocument.Document.Properties.Name, false, writer, formatProvider); CreateStyles(writer, formatProvider); } else { CreateFolderElement(kmlExportDocument.Document.Properties.Name, false, writer, formatProvider); } // GroundOverlay if (KmlProperties.MapType != KmlExportMapType.None) { CreateGroundOverlay(kmlExportDocument, documentCount, writer, formatProvider); } var isSingleSession = (kmlExportDocument.Sessions.Count == 1); var count = 0; var untitledCount = 0; foreach (var session in kmlExportDocument.Sessions) { LogUtil.LogDebug("Creating session " + count); // create folder, but only if there are multiple sessions if (!isSingleSession) { var sessionName = session.SessionInfo.Person.ToString(); if (sessionName == "") { sessionName = string.Format(Strings.UntitledX, untitledCount); } CreateFolderElement(session.SessionInfo.Person.ToString(), false, writer, formatProvider); writer.WriteElementString("styleUrl", "#si" + sessionCount); } // Route lines LogUtil.LogDebug("Creating route lines"); CreateRouteLines(session, kmlExportDocument, sessionCount, writer, formatProvider); // Route replay LogUtil.LogDebug("Creating replays"); CreateReplay(session, kmlExportDocument, sessionCount, writer, formatProvider); // add folder end tag, but only if there are multiple sessions if (!isSingleSession) { writer.WriteEndElement(); } count++; sessionCount++; } writer.WriteEndElement(); // Folder / Document documentCount++; } if (!isSingleDocument) writer.WriteEndElement(); // Document writer.WriteEndElement(); // kml writer.WriteEndDocument(); writer.Flush(); } private static void CreateFolderElement(string name, bool openChildren, XmlWriter writer, IFormatProvider formatProvider) { writer.WriteStartElement("Folder"); writer.WriteElementString("name", name); writer.WriteElementString("open", (openChildren ? "1" : "0")); } private static void CreateDocumentElement(string name, bool openChildren, XmlWriter writer, IFormatProvider formatProvider) { writer.WriteStartElement("Document"); writer.WriteElementString("name", name); writer.WriteElementString("open", (openChildren ? "1" : "0")); writer.WriteElementString("styleUrl", "#quickRouteIcon"); } #region Styles private void CreateStyles(XmlWriter writer, IFormatProvider formatProvider) { LogUtil.LogDebug("Creating styles"); CreateGeneralStyles(writer); CreateIconStyles(writer, formatProvider); CreateRouteLineStyles(writer, formatProvider); CreateReplayStyles(writer, formatProvider); } private void CreateGeneralStyles(XmlWriter writer) { if (KmlProperties.RouteType != KmlExportRouteType.None || KmlProperties.ReplayType != KmlExportReplayType.None) { writer.WriteStartElement("Style"); writer.WriteAttributeString("id", "hideChildren"); writer.WriteStartElement("ListStyle"); writer.WriteElementString("listItemType", "checkHideChildren"); writer.WriteEndElement(); writer.WriteEndElement(); } } private void CreateIconStyles(XmlWriter writer, IFormatProvider provider) { iconStyleCount = 0; CreateIconStyle(Images.HeaderLogo, "quickRouteIcon", true, writer, provider); var documentCount = 0; var sessionCount = 0; foreach (var document in kmlExportDocuments) { if (KmlProperties.MapType != KmlExportMapType.None) { // create map icon for the document using (var map = (Bitmap)Image.FromFile(GroundOverlays[document].Href)) { using (var thumbnail = CreateMapThumbnail(map, iconSize)) { CreateIconStyle(thumbnail, "oi" + documentCount, true, writer, provider); } } documentCount++; } // create icons for the sessions foreach (var session in document.Sessions) { var routeLineStyle = GetRouteLineStyleForSession(session); var replayMarkerStyle = GetReplayMarkerStyleForSession(session); if (document.Sessions.Count > 1) { // the session using (var thumbnail = CreateReplayMarkerThumbnail(routeLineStyle.Color, replayMarkerIconSize, iconSize)) { CreateIconStyle(thumbnail, "si" + sessionCount, true, writer, provider); } } if (KmlProperties.RouteType != KmlExportRouteType.None) { // the route using (var thumbnail = CreateRouteThumbnail(session.Route, iconSize, routeLineStyle.Color, 0.5)) { CreateIconStyle(thumbnail, "ri" + sessionCount, false, writer, provider); } } if (KmlProperties.ReplayType != KmlExportReplayType.None) { // the replay folder using (var thumbnail = CreateReplayThumbnail(routeLineStyle.Color, iconSize)) { CreateIconStyle(thumbnail, "rfi" + sessionCount, KmlProperties.HasReplayTails, writer, provider); } if (KmlProperties.HasReplayTails) { // the replay marker using (var thumbnail = CreateReplayMarkerThumbnail(replayMarkerStyle.Color, replayMarkerIconSize, iconSize)) { CreateIconStyle(thumbnail, "rmi" + sessionCount, false, writer, provider); } // the replay tails using (var thumbnail = CreateReplayTailThumbnail(iconSize, replayMarkerStyle.Color, 2)) { CreateIconStyle(thumbnail, "rti" + sessionCount, false, writer, provider); } } } sessionCount++; } } } private void CreateRouteLineStyles(XmlWriter writer, IFormatProvider formatProvider) { // create line styles // take replay tail into consideration if (KmlProperties.RouteType == KmlExportRouteType.Monochrome || (KmlProperties.HasReplayTails && KmlProperties.ReplayType == KmlExportReplayType.Monochrome)) { CreateMonochromeRouteLineStyles(); } if (KmlProperties.RouteType == KmlExportRouteType.ColorCoded || (KmlProperties.HasReplayTails && KmlProperties.ReplayType == KmlExportReplayType.ColorCoded)) { CreateColorCodedRouteLineStyles(); } // write them to xml stream foreach (var routeLineStyle in routeLineStyles.Keys) { writer.WriteStartElement("Style"); writer.WriteAttributeString("id", routeLineStyles[routeLineStyle]); writer.WriteStartElement("LineStyle"); writer.WriteElementString("color", routeLineStyle.GetColorAsString()); writer.WriteElementString("width", routeLineStyle.Width.ToString(formatProvider)); writer.WriteEndElement(); writer.WriteEndElement(); } } private void CreateMonochromeRouteLineStyles() { foreach (var kmlExportDocument in kmlExportDocuments) { foreach (var session in kmlExportDocument.Sessions) { var dummyId = GetLineStyleId(GetRouteLineStyleForSession(session)); // GetLineStyleId adds line style to collection } } } private void CreateColorCodedRouteLineStyles() { foreach (var kmlExportDocument in kmlExportDocuments) { foreach (var session in kmlExportDocument.Sessions) { var sessionSettings = kmlExportDocument.ImageExporter.Properties.SessionSettings ?? session.Settings; foreach (var segment in GetRouteForSession(session, kmlExportDocument).Segments) { foreach (var waypoint in segment.Waypoints) { var lineStyle = GetLineStyleFromWaypoint(waypoint, kmlExportDocument.ImageExporter, sessionSettings); var dummyId = GetLineStyleId(lineStyle); // GetLineStyleId adds line style to collection } } } } } private void CreateReplayStyles(XmlWriter writer, IFormatProvider formatProvider) { // create replay styles switch (KmlProperties.ReplayType) { case KmlExportReplayType.Monochrome: CreateMonochromeReplayStyles(); break; case KmlExportReplayType.ColorCoded: CreateColorCodedReplayStyles(); break; } // write them to xml stream foreach (var markerStyle in markerStyles.Keys) { var style = markerStyle; writer.WriteStartElement("Style"); writer.WriteAttributeString("id", markerStyles[markerStyle]); writer.WriteStartElement("IconStyle"); writer.WriteStartElement("Icon"); var fileName = Path.Combine(temporaryBasePath, Path.Combine (@"files", markerStyles[markerStyle] + ".png")); var href = "files/" + markerStyles[markerStyle] + ".png"; var bitmap = new Bitmap(Convert.ToInt32(style.Size), Convert.ToInt32(style.Size)); using (var g = Graphics.FromImage(bitmap)) { g.SmoothingMode = SmoothingMode.AntiAlias; using (var brush = new SolidBrush(style.Color)) { g.FillEllipse(brush, 0, 0, Convert.ToSingle(style.Size - 1), Convert.ToSingle(style.Size - 1)); g.DrawEllipse(replayMarkerBorderPen, 0, 0, Convert.ToSingle(style.Size - 1), Convert.ToSingle(style.Size - 1)); } } bitmap.Save(fileName, ImageFormat.Png); #if !__MonoCS__ kmzFile.AddFile(fileName, "files"); #else kmzFile.Add(fileName, "files/"+href); #endif writer.WriteElementString("href", href); writer.WriteEndElement(); // Icon writer.WriteElementString("scale", "0.3"); writer.WriteEndElement(); // IconStyle writer.WriteEndElement(); // Style } } private void CreateMonochromeReplayStyles() { foreach (var kmlExportDocument in kmlExportDocuments) { foreach (var session in kmlExportDocument.Sessions) { var dummyId = GetMarkerStyleId(GetReplayMarkerStyleForSession(session)); // GetMarkerStyleId adds marker style to collection } } } private void CreateColorCodedReplayStyles() { foreach (var kmlExportDocument in kmlExportDocuments) { foreach (var session in kmlExportDocument.Sessions) { var sessionSettings = kmlExportDocument.ImageExporter.Properties.SessionSettings ?? session.Settings; foreach (var segment in GetRouteForSession(session, kmlExportDocument).Segments) { foreach (var waypoint in segment.Waypoints) { var markerStyle = GetMarkerStyleFromWaypoint(waypoint, kmlExportDocument.ImageExporter, sessionSettings); var dummyId = GetMarkerStyleId(markerStyle); // GetMarkerStyleId adds marker style to collection } } } } } private KmlLineStyle GetLineStyleFromWaypoint(Waypoint waypoint, ImageExporter imageExporter, SessionSettings sessionSettings) { var attribute = imageExporter.Properties.ColorCodingAttribute; var rls = sessionSettings.RouteLineSettingsCollection[attribute]; return new KmlLineStyle() { Color = rls.ColorRange.GetColor(waypoint.Attributes[attribute].GetValueOrDefault(0), NoOfColorCodedSteps), Width = (rls.MaskVisible ? 2 * rls.MaskWidth : 0) + rls.Width }; } private KmlMarkerStyle GetMarkerStyleFromWaypoint(Waypoint waypoint, ImageExporter imageExporter, SessionSettings sessionSettings) { var attribute = imageExporter.Properties.ColorCodingAttribute; var rls = sessionSettings.RouteLineSettingsCollection[attribute]; return new KmlMarkerStyle() { Color = rls.ColorRange.GetColor(waypoint.Attributes[attribute].GetValueOrDefault(0), NoOfColorCodedSteps), Size = replayMarkerSizeFactor * ((rls.MaskVisible ? 2 * rls.MaskWidth : 0) + rls.Width) }; } private KmlLineStyle GetRouteLineStyleForSession(Session s) { if (RouteLineStyleForSessions.ContainsKey(s)) return RouteLineStyleForSessions[s]; return KmlProperties.RouteLineStyle; } private KmlMarkerStyle GetReplayMarkerStyleForSession(Session s) { if (ReplayMarkerStyleForSessions.ContainsKey(s)) return ReplayMarkerStyleForSessions[s]; return KmlProperties.ReplayMarkerStyle; } private string GetLineStyleId(KmlLineStyle style) { if (!routeLineStyles.ContainsKey(style)) routeLineStyles.Add(style, "l" + routeLineStyles.Count); return routeLineStyles[style]; } private string GetMarkerStyleId(KmlMarkerStyle style) { if (!markerStyles.ContainsKey(style)) markerStyles.Add(style, "m" + markerStyles.Count); return markerStyles[style]; } private Route GetRouteForSession(Session session, KmlExportDocument parentDocument) { if (KmlProperties.RouteAdaptionStyle != KmlRouteAdaptationStyle.NoAdaption && KmlProperties.MapType != KmlExportMapType.None) { if (!adaptedRoutes.ContainsKey(session)) { var baseSession = parentDocument == null || parentDocument.Sessions.Count == 0 || KmlProperties.RouteAdaptionStyle == KmlRouteAdaptationStyle.AdaptToSessionMapImage ? session : parentDocument.Sessions[0]; adaptedRoutes[session] = session.CreateRouteAdaptedToSingleTransformationMatrix(baseSession); } return adaptedRoutes[session]; } return session.Route; } #endregion #region Overlays private void CreateGroundOverlay(KmlExportDocument kmlExportDocument, int documentCount, XmlWriter writer, IFormatProvider formatProvider) { if (GroundOverlays[kmlExportDocument] == null) return; writer.WriteStartElement("GroundOverlay"); writer.WriteElementString("name", Strings.Map); writer.WriteElementString("styleUrl", "#oi" + documentCount); writer.WriteStartElement("Icon"); writer.WriteElementString("href", GetGroundOverlayUrl(kmlExportDocument)); writer.WriteEndElement(); var orthogonallyRotatedCorners = GetOrthogonallyRotatedCorners(kmlExportDocument); if (orthogonallyRotatedCorners != null) { writer.WriteStartElement("LatLonBox"); writer.WriteElementString("north", Math.Max(orthogonallyRotatedCorners[1].Latitude, orthogonallyRotatedCorners[2].Latitude).ToString(formatProvider)); writer.WriteElementString("south", Math.Min(orthogonallyRotatedCorners[0].Latitude, orthogonallyRotatedCorners[3].Latitude).ToString(formatProvider)); writer.WriteElementString("east", Math.Max(orthogonallyRotatedCorners[2].Longitude, orthogonallyRotatedCorners[3].Longitude).ToString(formatProvider)); writer.WriteElementString("west", Math.Min(orthogonallyRotatedCorners[0].Longitude, orthogonallyRotatedCorners[1].Longitude).ToString(formatProvider)); writer.WriteElementString("rotation", GetImageRotationD(kmlExportDocument).ToString(formatProvider)); writer.WriteEndElement(); } writer.WriteEndElement(); // GroundOverlay } private string GetGroundOverlayUrl(KmlExportDocument kmlExportDocument) { if (GroundOverlays.ContainsKey(kmlExportDocument)) { var go = GroundOverlays[kmlExportDocument]; switch (go.Type) { case KmlGroundOverlay.GroundOverlayType.Url: return go.Href; case KmlGroundOverlay.GroundOverlayType.File: var href = Path.GetFileName(go.Href); #if !__MonoCS__ kmzFile.AddFile(go.Href, ""); #else kmzFile.Add(go.Href, href); #endif return href; } } return null; } #endregion #region Lines private void CreateRouteLines(Session session, KmlExportDocument parentDocument, int sessionCount, XmlWriter writer, IFormatProvider formatProvider) { if (KmlProperties.RouteType == KmlExportRouteType.None) return; CreateFolderElement(Strings.Route, false, writer, formatProvider); writer.WriteElementString("styleUrl", "#ri" + sessionCount); switch (KmlProperties.RouteType) { case KmlExportRouteType.Monochrome: CreateMonochromeRouteLines(session, parentDocument, writer, formatProvider); break; case KmlExportRouteType.ColorCoded: CreateColorCodedRouteLines(session, parentDocument, writer, formatProvider); break; } writer.WriteEndElement(); } private void CreateMonochromeRouteLines(Session session, KmlExportDocument parentDocument, XmlWriter writer, IFormatProvider formatProvider) { foreach (var segment in GetRouteForSession(session, parentDocument).Segments) { CreateLineStringPlacemark(segment.Waypoints, GetRouteLineStyleForSession(session), writer, formatProvider); } } private void CreateColorCodedRouteLines(Session session, KmlExportDocument parentDocument, XmlWriter writer, IFormatProvider formatProvider) { var sessionSettings = parentDocument.ImageExporter.Properties.SessionSettings ?? session.Settings; foreach (var segment in GetRouteForSession(session, parentDocument).Segments) { var lineWaypoints = new List(); Waypoint previousWaypoint = null; KmlLineStyle previousLineStyle = null; foreach (var waypoint in segment.Waypoints) { if (previousWaypoint == null) { previousWaypoint = waypoint; lineWaypoints.Add(waypoint); continue; // skip first waypoint } // continue with this line or create new line with different color? previousLineStyle = GetLineStyleFromWaypoint(previousWaypoint, parentDocument.ImageExporter, sessionSettings); var lineStyle = GetLineStyleFromWaypoint(waypoint, parentDocument.ImageExporter, sessionSettings); if (lineStyle.Equals(previousLineStyle)) { // add line segment to current line lineWaypoints.Add(waypoint); } else { lineWaypoints.Add(waypoint); CreateLineStringPlacemark(lineWaypoints, previousLineStyle, writer, formatProvider); lineWaypoints = new List() { waypoint }; // create new line with this waypoint as start point } previousWaypoint = waypoint; } // add last line CreateLineStringPlacemark(lineWaypoints, previousLineStyle, writer, formatProvider); } } private void CreateLineStringPlacemark(IEnumerable waypoints, KmlLineStyle routeLineStyle, XmlWriter writer, IFormatProvider formatProvider) { CreateLineStringPlacemark(waypoints, routeLineStyle, null, null, writer, formatProvider); } private void CreateLineStringPlacemark(IEnumerable waypoints, KmlLineStyle routeLineStyle, DateTime? appearTime, DateTime? disappearTime, XmlWriter writer, IFormatProvider formatProvider) { writer.WriteStartElement("Placemark"); writer.WriteElementString("styleUrl", "#" + GetLineStyleId(routeLineStyle)); if (appearTime.HasValue || disappearTime.HasValue) { writer.WriteStartElement("TimeSpan"); if (appearTime.HasValue) writer.WriteElementString("begin", FormatTime(appearTime.Value.ToUniversalTime())); if (disappearTime.HasValue) writer.WriteElementString("end", FormatTime(disappearTime.Value.ToUniversalTime())); writer.WriteEndElement(); // TimeSpan } writer.WriteStartElement("LineString"); writer.WriteElementString("extrude", "1"); writer.WriteElementString("tessellate", "1"); writer.WriteStartElement("coordinates"); foreach (var waypoint in waypoints) { writer.WriteString(waypoint.LongLat.Longitude.ToString(formatProvider) + "," + waypoint.LongLat.Latitude.ToString(formatProvider) + " "); } writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); } #endregion #region Replay private void CreateReplay(Session session, KmlExportDocument parentDocument, int sessionCount, XmlWriter writer, IFormatProvider formatProvider) { if (KmlProperties.ReplayType == KmlExportReplayType.None) return; CreateFolderElement(Strings.Replay, false, writer, formatProvider); writer.WriteElementString("styleUrl", "#rfi" + sessionCount); // markers if (KmlProperties.HasReplayTails) { CreateFolderElement(Strings.ReplayPosition, false, writer, formatProvider); writer.WriteElementString("styleUrl", "#rmi" + sessionCount); } CreateReplayMarkers(session, parentDocument, writer, formatProvider); if (KmlProperties.HasReplayTails) writer.WriteEndElement(); // tail(s) foreach (var tail in KmlProperties.ReplayTails) { CreateFolderElement(Strings.ReplayTail, false, writer, formatProvider); writer.WriteElementString("styleUrl", "#rti" + sessionCount); CreateReplayTails(session, parentDocument, tail, writer, formatProvider); writer.WriteEndElement(); } writer.WriteEndElement(); } private void CreateReplayMarkers(Session session, KmlExportDocument parentDocument, XmlWriter writer, IFormatProvider formatProvider) { LogUtil.LogDebug(""); var sessionSettings = parentDocument.ImageExporter.Properties.SessionSettings ?? session.Settings; KmlMarkerStyle markerStyle = null; if (KmlProperties.ReplayType == KmlExportReplayType.Monochrome) { markerStyle = GetReplayMarkerStyleForSession(session); } var route = GetRouteForSession(session, parentDocument); foreach (var segment in route.Segments) { var waypoints = route.GetEquallySpacedWaypoints(segment.FirstWaypoint.Time, segment.LastWaypoint.Time, KmlProperties.ReplayTimeInterval); foreach (var waypoint in waypoints) { // when should the marker disappear? DateTime? markerDisappearTime = segment.LastWaypoint.Time; // default value if (waypoint.Time.Add(KmlProperties.ReplayTimeInterval) <= segment.LastWaypoint.Time) { // subtract a millisecond from the time to prevent double occurences of markers markerDisappearTime = waypoint.Time.Add(KmlProperties.ReplayTimeInterval).Subtract(new TimeSpan(TimeSpan.TicksPerMillisecond)); } // create the marker if (KmlProperties.ReplayType == KmlExportReplayType.ColorCoded) { markerStyle = GetMarkerStyleFromWaypoint(waypoint, parentDocument.ImageExporter, sessionSettings); } CreateReplayPlacemark(waypoint, markerStyle, waypoint.Time, markerDisappearTime, writer, formatProvider); } } } private void CreateReplayTails(Session session, KmlExportDocument parentDocument, KmlReplayTail templateTail, XmlWriter writer, IFormatProvider formatProvider) { LogUtil.LogDebug("start"); var sessionSettings = parentDocument.ImageExporter.Properties.SessionSettings ?? session.Settings; KmlLineStyle routeLineStyle = null; if (KmlProperties.ReplayType == KmlExportReplayType.Monochrome) { routeLineStyle = templateTail.RouteLineStyle ?? GetRouteLineStyleForSession(session); } var route = GetRouteForSession(session, parentDocument); foreach (var segment in route.Segments) { var waypoints = route.GetEquallySpacedWaypoints(segment.FirstWaypoint.Time, segment.LastWaypoint.Time, KmlProperties.ReplayTimeInterval); for (var i = 1; i < waypoints.Count; i++) { var lastWaypoint = waypoints[i - 1]; var waypoint = waypoints[i]; // create tail DateTime? lineAppearTime = null; DateTime? lineDisappearTime = null; if (templateTail.StartVisible.HasValue) { lineAppearTime = waypoint.Time.Add(templateTail.StartVisible.Value); if (lineAppearTime < segment.FirstWaypoint.Time.Add(templateTail.StartVisible.Value)) lineAppearTime = segment.FirstWaypoint.Time; if (lineAppearTime > segment.LastWaypoint.Time.Add(templateTail.StartVisible.Value)) lineAppearTime = segment.LastWaypoint.Time; } if (templateTail.EndVisible.HasValue) { // subtract a millisecond from the time to ensure tail disappears correctly lineDisappearTime = waypoint.Time.Add(templateTail.EndVisible.Value).Subtract(new TimeSpan(TimeSpan.TicksPerMillisecond)); if (lineDisappearTime < segment.FirstWaypoint.Time.Add(templateTail.EndVisible.Value)) lineDisappearTime = segment.FirstWaypoint.Time; if (lineDisappearTime > segment.LastWaypoint.Time.Add(templateTail.EndVisible.Value)) lineDisappearTime = segment.LastWaypoint.Time; } if (KmlProperties.ReplayType == KmlExportReplayType.ColorCoded) { routeLineStyle = GetLineStyleFromWaypoint(waypoint, parentDocument.ImageExporter, sessionSettings); } CreateLineStringPlacemark(new[] { lastWaypoint, waypoint }, routeLineStyle, lineAppearTime, lineDisappearTime, writer, formatProvider); } } LogUtil.LogDebug("end"); } private void CreateReplayPlacemark(Waypoint waypoint, KmlMarkerStyle style, XmlWriter writer, IFormatProvider formatProvider) { CreateReplayPlacemark(waypoint, style, null, null, writer, formatProvider); } private void CreateReplayPlacemark(Waypoint waypoint, KmlMarkerStyle style, DateTime? appearTime, DateTime? disappearTime, XmlWriter writer, IFormatProvider formatProvider) { writer.WriteStartElement("Placemark"); writer.WriteElementString("styleUrl", "#" + GetMarkerStyleId(style)); if (appearTime.HasValue || disappearTime.HasValue) { writer.WriteStartElement("TimeSpan"); if (appearTime.HasValue) writer.WriteElementString("begin", FormatTime(appearTime.Value.ToUniversalTime())); if (disappearTime.HasValue) writer.WriteElementString("end", FormatTime(disappearTime.Value.ToUniversalTime())); writer.WriteEndElement(); // TimeSpan } else { writer.WriteStartElement("TimeStamp"); writer.WriteElementString("when", FormatTime(waypoint.Time.ToUniversalTime())); writer.WriteEndElement(); // TimeStamp } writer.WriteStartElement("Point"); writer.WriteElementString("coordinates", waypoint.LongLat.Longitude.ToString(formatProvider) + "," + waypoint.LongLat.Latitude.ToString(formatProvider)); writer.WriteEndElement(); // Point writer.WriteEndElement(); // Placemark } #endregion #region Icons private void CreateIconStyle(Bitmap bitmap, string styleId, bool showChildren, XmlWriter writer, IFormatProvider provider) { writer.WriteStartElement("Style"); writer.WriteAttributeString("id", styleId); writer.WriteStartElement("ListStyle"); if (!showChildren) writer.WriteElementString("listItemType", "checkHideChildren"); writer.WriteStartElement("ItemIcon"); writer.WriteElementString("state", "open closed"); writer.WriteElementString("href", "files/i" + iconStyleCount + ".png"); SaveBitmapToKmz(bitmap, "files", "i" + iconStyleCount + ".png", ImageFormat.Png); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); iconStyleCount++; } private void SaveBitmapToKmz(Bitmap bitmap, string path, string fileName, ImageFormat imageFormat) { var fileNameOnDisk = temporaryBasePath + path + @"\" + fileName; bitmap.Save(fileNameOnDisk, imageFormat); #if !__MonoCS__ kmzFile.AddFile(fileNameOnDisk, path); #else kmzFile.Add(fileNameOnDisk, path + @"\" + fileName); #endif } private static Bitmap CreateMapThumbnail(Bitmap original, Size thumbnailSize) { var bmp = new Bitmap(thumbnailSize.Width, thumbnailSize.Height); using (var g = Graphics.FromImage(bmp)) { g.SmoothingMode = SmoothingMode.AntiAlias; g.InterpolationMode = InterpolationMode.HighQualityBicubic; var scale = Math.Min((double)thumbnailSize.Width / original.Size.Width, (double)thumbnailSize.Height / original.Size.Height); var projectionSize = new Size(Convert.ToInt32(scale * original.Size.Width), Convert.ToInt32(scale * original.Size.Height)); var destRect = new Rectangle( (thumbnailSize.Width - projectionSize.Width) / 2, (thumbnailSize.Height - projectionSize.Height) / 2, projectionSize.Width - 1, projectionSize.Height - 1); g.DrawImage(original, destRect, new Rectangle(0, 0, original.Size.Width - 1, original.Size.Height - 1), GraphicsUnit.Pixel); // draw border around map using (var pen = new Pen(Color.FromArgb(92, Color.Black))) { g.DrawRectangle(pen, destRect); } } return bmp; } private static Bitmap CreateRouteThumbnail(Route route, Size thumbnailSize, Color routeLineColor, double routeLineWidth) { var bitmap = new Bitmap(thumbnailSize.Width, thumbnailSize.Width); var projectionOrigin = route.CenterLongLat(); // get coordinates of lines double minX = 0, maxX = 0, minY = 0, maxY = 0; var lines = new List>(); foreach (var segment in route.Segments) { var vertices = new List(); foreach (var waypoint in segment.Waypoints) { var vertex = waypoint.LongLat.Project(projectionOrigin); vertices.Add(vertex); // calculate bounds if (lines.Count == 0 && vertices.Count == 0) { minX = vertex.X; minY = vertex.Y; maxX = vertex.X; maxY = vertex.Y; } else { minX = Math.Min(minX, vertex.X); minY = Math.Min(minY, vertex.Y); maxX = Math.Max(maxX, vertex.X); maxY = Math.Max(maxY, vertex.Y); } } lines.Add(vertices); } var scale = Math.Min((thumbnailSize.Width - 1) / (maxX == minX ? 0 : maxX - minX), (thumbnailSize.Height - 1) / (maxY == minY ? 0 : maxY - minY)); var offsetX = (thumbnailSize.Width - (maxX - minX) * scale) / 2; var offsetY = (thumbnailSize.Height - (maxY - minY) * scale) / 2; // map coordinates onto thumbnail var mappedLines = new List>(); foreach (var line in lines) { var mappedVertices = new List(); foreach (var vertex in line) { mappedVertices.Add((PointF)new PointD( offsetX + scale * (vertex.X - minX), (thumbnailSize.Height - 1) - (offsetY + scale * (vertex.Y - minY)))); } mappedLines.Add(mappedVertices); } using (var g = Graphics.FromImage(bitmap)) { g.SmoothingMode = SmoothingMode.AntiAlias; foreach (var mappedLine in mappedLines) { if(mappedLine.Count > 1) g.DrawLines(new Pen(routeLineColor, (float)routeLineWidth), mappedLine.ToArray()); } } return bitmap; } private static Bitmap CreateReplayThumbnail(Color color, Size thumbnailSize) { var bitmap = new Bitmap(thumbnailSize.Width, thumbnailSize.Width); using (var g = Graphics.FromImage(bitmap)) { g.SmoothingMode = SmoothingMode.AntiAlias; var brush = new SolidBrush(color); var fingerBrush = new SolidBrush(Color.White); var clockEllipse = new RectangleF(0.0f, 3.1f, 11.0f, 11.0f); var fingerPolygon = new[] { new PointF(3.5f, 4.9f), new PointF(5.5f, 4.9f), new PointF(5.5f, 8.3f), new PointF(8.0f, 10.4f), new PointF(7.1f, 11.6f), new PointF(4.0f, 9.0f) }; var arrowPolygon = new[] { new PointF(11.0f, 0.0f), new PointF(11.0f, 7.5f), new PointF(15.0f, 3.5f) }; g.FillEllipse(brush, clockEllipse); g.DrawEllipse(replayMarkerBorderPen, clockEllipse); g.FillPolygon(fingerBrush, fingerPolygon); g.FillPolygon(brush, arrowPolygon); g.DrawPolygon(replayMarkerBorderPen, arrowPolygon); brush.Dispose(); fingerBrush.Dispose(); } return bitmap; } private static Bitmap CreateReplayMarkerThumbnail(Color color, Size markerSize, Size thumbnailSize) { var bitmap = new Bitmap(thumbnailSize.Width, thumbnailSize.Width); using (var g = Graphics.FromImage(bitmap)) { g.SmoothingMode = SmoothingMode.AntiAlias; using (var brush = new SolidBrush(color)) { var rect = new Rectangle((thumbnailSize.Width - markerSize.Width) / 2, (thumbnailSize.Height - markerSize.Height) / 2, markerSize.Width, markerSize.Height); g.FillEllipse(brush, rect); g.DrawEllipse(replayMarkerBorderPen, rect); } } return bitmap; } private static Bitmap CreateReplayTailThumbnail(Size thumbnailSize, Color lineColor, double lineWidth) { var bitmap = new Bitmap(thumbnailSize.Width, thumbnailSize.Width); var tailPoints = new[] { new PointF(1.3f, 10.7f), new PointF(1.7f, 9.8f), new PointF(2.4f, 9.0f), new PointF(3.1f, 8.4f), new PointF(3.8f, 7.9f), new PointF(4.7f, 7.7f), new PointF(5.6f, 7.4f), new PointF(6.4f, 7.4f), new PointF(7.2f, 7.4f), new PointF(8.1f, 7.4f), new PointF(9.0f, 7.3f), new PointF(9.7f, 7.1f), new PointF(10.4f, 6.7f), new PointF(11.1f, 6.3f), new PointF(11.7f, 5.6f) }; using (var g = Graphics.FromImage(bitmap)) { g.SmoothingMode = SmoothingMode.AntiAlias; using (var pen = new Pen(lineColor, (float)lineWidth)) { g.DrawLines(pen, tailPoints); } var rect = new RectangleF(10.0f, 1.4f, 5f, 5f); using (var brush = new SolidBrush(lineColor)) { g.FillEllipse(brush, rect); g.DrawEllipse(replayMarkerBorderPen, rect); } } return bitmap; } #endregion /// /// Gets the corners of the map if the map has a rotation of 0, i e are aligned to the longitude and latitude axes. /// /// /// private static LongLat[] GetOrthogonallyRotatedCorners(KmlExportDocument kmlExportDocument) { var document = kmlExportDocument.Document; var corners = document.GetImageCornersLongLat(kmlExportDocument.ImageExporter.ImageBounds, kmlExportDocument.ImageExporter.MapBounds, kmlExportDocument.ImageExporter.Properties.PercentualSize); var rotationD = GetImageRotationD(kmlExportDocument); var rotationR = LinearAlgebraUtil.ToRadians(rotationD); if (corners != null) { // need to align map in north-south direction; rotate map around its center var center = (corners[0] / 4 + corners[1] / 4 + corners[2] / 4 + corners[3] / 4); var projectedCenter = center.Project(document.ProjectionOrigin); var projectedOrthogonallyRotatedCorners = new[] { LinearAlgebraUtil.Rotate(corners[0].Project(document.ProjectionOrigin), projectedCenter, rotationR), LinearAlgebraUtil.Rotate(corners[1].Project(document.ProjectionOrigin), projectedCenter, rotationR), LinearAlgebraUtil.Rotate(corners[2].Project(document.ProjectionOrigin), projectedCenter, rotationR), LinearAlgebraUtil.Rotate(corners[3].Project(document.ProjectionOrigin), projectedCenter, rotationR), }; var orthogonallyRotatedCorners = new[] { LongLat.Deproject(projectedOrthogonallyRotatedCorners[0], document.ProjectionOrigin), LongLat.Deproject(projectedOrthogonallyRotatedCorners[1], document.ProjectionOrigin), LongLat.Deproject(projectedOrthogonallyRotatedCorners[2], document.ProjectionOrigin), LongLat.Deproject(projectedOrthogonallyRotatedCorners[3], document.ProjectionOrigin), }; return orthogonallyRotatedCorners; } return null; } private static double GetImageRotationD(KmlExportDocument kmlExportDocument) { var document = kmlExportDocument.Document; var corners = document.GetImageCornersLongLat(kmlExportDocument.ImageExporter.ImageBounds, kmlExportDocument.ImageExporter.MapBounds, kmlExportDocument.ImageExporter.Properties.PercentualSize); var sw = corners[0].Project(document.ProjectionOrigin); var se = corners[3].Project(document.ProjectionOrigin); return LinearAlgebraUtil.GetAngleD(se - sw); } private static string FormatTime(DateTime time) { var firstPart = time.ToString("yyyy-MM-ddTHH:mm:ss"); return firstPart + time.ToString(".fffffff").TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray()) + "Z"; } } public class KmlGroundOverlay { private readonly string href; private readonly GroundOverlayType type; public KmlGroundOverlay(string href, GroundOverlayType type) { this.href = href; this.type = type; } public enum GroundOverlayType { File, Url } public GroundOverlayType Type { get { return type; } } public string Href { get { return href; } } } public class KmlExportDocument : IDisposable { private Document document; private SessionCollection sessions; private ImageExporter imageExporter; private readonly string fileName; private readonly KmlExportDocumentType type; private readonly ImageExporterProperties imageExporterProperties; public KmlExportDocument(string fileName, ImageExporterProperties imageExporterProperties) { this.fileName = fileName; this.imageExporterProperties = imageExporterProperties; this.type = KmlExportDocumentType.File; } public KmlExportDocument(Document document, ImageExporter imageExporter) { this.document = document; this.sessions = document.Sessions; this.imageExporter = imageExporter; this.type = KmlExportDocumentType.Document; } public KmlExportDocument(Document document, SessionCollection sessions, ImageExporter imageExporter) { this.document = document; this.sessions = sessions; this.imageExporter = imageExporter; this.type = KmlExportDocumentType.Document; } public Document Document { get { InitDocumentAndSessions(); return document; } } public SessionCollection Sessions { get { InitDocumentAndSessions(); return sessions; } } public ImageExporter ImageExporter { get { InitImageExporter(); return imageExporter; } } public void Dispose() { if (type == KmlExportDocumentType.File) { document = null; sessions = null; } } private void InitDocumentAndSessions() { if (type == KmlExportDocumentType.File && document == null) { document = Document.Open(fileName); if (document != null) { document.Initialize(); sessions = document.Sessions; } } } private void InitImageExporter() { if (imageExporter == null) { InitDocumentAndSessions(); imageExporter = new ImageExporter(Document, Sessions) { Properties = imageExporterProperties }; } } private enum KmlExportDocumentType { Document, File } } [Serializable] public class KmlProperties : ICloneable { public KmlExportMapType MapType { get; set; } public KmlExportRouteType RouteType { get; set; } public KmlExportReplayType ReplayType { get; set; } public KmlLineStyle RouteLineStyle { get; set; } public KmlMarkerStyle ReplayMarkerStyle { get; set; } public TimeSpan ReplayTimeInterval { get; set; } public List ReplayTails { get; set; } /// /// Gets or sets whether the route waypoint coordinates should be slightly transformed to exactly adapt to the map image rather than to the reality /// public KmlRouteAdaptationStyle RouteAdaptionStyle { get; set; } private const double replayMarkerSizeFactor = 3; public KmlProperties() { MapType = KmlExportMapType.MapAndRoute; RouteType = KmlExportRouteType.None; ReplayType = KmlExportReplayType.None; ReplayTimeInterval = new TimeSpan(0, 0, 5); RouteLineStyle = new KmlLineStyle(); ReplayMarkerStyle = new KmlMarkerStyle(); ReplayTails = new List() { new KmlReplayTail() { StartVisible = new TimeSpan(0), EndVisible = new TimeSpan(0, 0, 60) } }; } public bool HasReplayTails { get { return ReplayTails.Count > 0; } } public KmlProperties(RouteLineSettings rls) : this() { RouteLineStyle.Color = rls.MonochromeColor; RouteLineStyle.Width = rls.MonochromeWidth; ReplayMarkerStyle.Color = rls.MonochromeColor; ReplayMarkerStyle.Size = replayMarkerSizeFactor * rls.MonochromeWidth; } public object Clone() { var clone = new KmlProperties { MapType = MapType, RouteType = RouteType, ReplayType = ReplayType, RouteLineStyle = RouteLineStyle.Clone() as KmlLineStyle, ReplayMarkerStyle = ReplayMarkerStyle.Clone() as KmlMarkerStyle, ReplayTimeInterval = ReplayTimeInterval, ReplayTails = new List(), RouteAdaptionStyle = RouteAdaptionStyle }; foreach (var tail in ReplayTails) { clone.ReplayTails.Add(tail.Clone() as KmlReplayTail); } return clone; } } [Serializable] public class KmlLineStyle : ICloneable { public Color Color { get; set; } public double Width { get; set; } public KmlLineStyle() { Color = Color.FromArgb(160, Color.Red); Width = 4; } public string GetColorAsString() { return String.Format("{0:X2}", Color.A) + String.Format("{0:X2}", Color.B) + String.Format("{0:X2}", Color.G) + String.Format("{0:X2}", Color.R); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof(KmlLineStyle)) return false; return Equals((KmlLineStyle)obj); } public bool Equals(KmlLineStyle obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj.Color.Equals(Color) && obj.Width == Width; } public override int GetHashCode() { unchecked { return (Color.GetHashCode() * 397) ^ Width.GetHashCode(); } } public object Clone() { return MemberwiseClone(); } } [Serializable] public class KmlMarkerStyle : ICloneable { public Color Color { get; set; } public double Size { get; set; } public KmlMarkerStyle() { Color = Color.FromArgb(160, Color.Red); Size = 8; } public string GetColorAsString() { return String.Format("{0:X2}", Color.A) + String.Format("{0:X2}", Color.B) + String.Format("{0:X2}", Color.G) + String.Format("{0:X2}", Color.R); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof(KmlMarkerStyle)) return false; return Equals((KmlMarkerStyle)obj); } public bool Equals(KmlMarkerStyle obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return obj.Color.Equals(Color) && obj.Size == Size; } public object Clone() { return MemberwiseClone(); } public override int GetHashCode() { unchecked { return (Color.GetHashCode() * 397) ^ Size.GetHashCode(); } } } [Serializable] public class KmlReplayTail : ICloneable { /// /// Time relative to current time when the tail becomes visible, or null if always visible /// public TimeSpan? StartVisible { get; set; } /// /// Time relative to current time when the tail becomes hidden again, or null if always visible /// public TimeSpan? EndVisible { get; set; } public KmlLineStyle RouteLineStyle { get; set; } public object Clone() { var clone = new KmlReplayTail() { StartVisible = StartVisible, EndVisible = EndVisible }; if (RouteLineStyle != null) clone.RouteLineStyle = RouteLineStyle.Clone() as KmlLineStyle; return clone; } } [Serializable] public enum KmlExportMapType { None, Map, MapAndRoute } [Serializable] public enum KmlExportRouteType { None, Monochrome, ColorCoded } [Serializable] public enum KmlExportReplayType { None, Monochrome, ColorCoded } [Serializable] public enum KmlRouteAdaptationStyle { NoAdaption, AdaptToSessionMapImage, AdaptToDocumentMapImage } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Exporters/KmlMultipleFilesExporter.cs000066400000000000000000000232661446222606700334570ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.IO; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.Common; namespace QuickRoute.BusinessEntities.Exporters { public class KmlMultipleFilesExporter { public Document Document { get; private set; } public SessionCollection Sessions { get; private set; } public KmlProperties KmlProperties { get; private set; } public KmlMultipleFileExporterProperties MultipleFileExporterProperties { get; set; } public List InvalidFileNames { get; private set; } public KmlMultipleFilesExporter(IEnumerable fileNames, KmlMultipleFileExporterProperties multipleFileProperties) { MultipleFileExporterProperties = multipleFileProperties; KmlProperties = new KmlProperties() { MapType = KmlExportMapType.Map, RouteType = (multipleFileProperties.IncludeRoutes ? KmlExportRouteType.Monochrome : KmlExportRouteType.None), ReplayType = (multipleFileProperties.IncludeReplay ? KmlExportReplayType.Monochrome : KmlExportReplayType.None), ReplayTimeInterval = multipleFileProperties.ReplayTimeInterval, ReplayTails = multipleFileProperties.ReplayTails, RouteLineStyle = new KmlLineStyle() { Width = multipleFileProperties.RouteLineWidth }, ReplayMarkerStyle = new KmlMarkerStyle() { Size = 3 * multipleFileProperties.RouteLineWidth } }; var massStartTime = DateTime.MaxValue; var allMapsHaveTheSameSize = true; Sessions = new SessionCollection(); InvalidFileNames = new List(); foreach (var fileName in fileNames) { var d = Document.Open(fileName); if (d != null) { if (Document == null) { // first file name sets document Document = d; } if (d.Map.Image.Size != Document.Map.Image.Size) allMapsHaveTheSameSize = false; var s = d.Sessions[0]; if (multipleFileProperties.IncludeReplay && s.Route.FirstWaypoint.Time < massStartTime) massStartTime = s.Route.FirstWaypoint.Time; Sessions.Add(s); } else { InvalidFileNames.Add(fileName); } } // if all map images have the same size, then assume that the very same map image is used and adjust the route to the document map // otherwise, adjust the route to the individual session map // todo: make it possible to choose KmlRouteAdaptationStyle.NoAdjustment in the GUI KmlProperties.RouteAdaptionStyle = (allMapsHaveTheSameSize ? KmlRouteAdaptationStyle.AdaptToDocumentMapImage : KmlRouteAdaptationStyle.AdaptToSessionMapImage); if (multipleFileProperties.IncludeReplay && multipleFileProperties.MassStart) { // adjust to mass start foreach (var s in Sessions) { s.AddTimeOffset(massStartTime.Subtract(s.Route.FirstWaypoint.Time)); } // adjust routes to restart after each lap if necessary if (multipleFileProperties.ReplayRestartAfterEachLap) { var maxTimeDurations = GetMaxLapTimeDurations(Sessions); foreach (var s in Sessions) { Lap previousLap = null; var count = 0; // 1. Caclulate the durations and place in separate variable (since the session will be altered as time passes by) var durations = new List(); foreach (var lap in s.Laps) { if (previousLap != null && (lap.LapType == LapType.Lap || lap.LapType == LapType.Stop)) { durations.Add(lap.Time - previousLap.Time); count++; } previousLap = lap; } // 2. Add idle time previousLap = null; count = 0; foreach (var lap in s.Laps) { if (previousLap != null && (lap.LapType == LapType.Lap || lap.LapType == LapType.Stop)) { if (durations[count] < maxTimeDurations[count]) { var timeToAdd = maxTimeDurations[count] - durations[count]; s.InsertIdleTime(lap.Time, timeToAdd); } count++; } previousLap = lap; } } } } } public void SetRouteLineSettingsForSession(Session session, Color color) { var rls = session.Settings.RouteLineSettingsCollection[WaypointAttribute.Pace]; rls.MonochromeWidth = KmlProperties.RouteLineStyle.Width; rls.MonochromeColor = color; } public void Export(Stream stream) { // crrete kml exporter object var imageExporter = new ImageExporter(Document) { Properties = new ImageExporterProperties() }; var kmlExporter = new KmlExporter(Document, imageExporter, Sessions, stream) { KmlProperties = KmlProperties }; // set individual colors for the sessions var count = 0; foreach (var s in Sessions) { // create custom route line style for this session kmlExporter.RouteLineStyleForSessions[s] = new KmlLineStyle() { Color = MultipleFileExporterProperties.Colors[count % MultipleFileExporterProperties.Colors.Count], Width = KmlProperties.RouteLineStyle.Width }; if (MultipleFileExporterProperties.IncludeReplay) { // create custom replay marker style for this session kmlExporter.ReplayMarkerStyleForSessions[s] = new KmlMarkerStyle() { Color = MultipleFileExporterProperties.Colors[count % MultipleFileExporterProperties.Colors.Count], Size = KmlProperties.ReplayMarkerStyle.Size }; } count++; } // export kmlExporter.ExportKmz(CommonUtil.GetTempFileName() + @"\"); } private static List GetMaxLapTimeDurations(IEnumerable sessions) { var maxLapTimeDurations = new List(); foreach (var session in sessions) { var count = 0; Lap previousLap = null; foreach (var lap in session.Laps) { if (previousLap != null && (lap.LapType == LapType.Lap || lap.LapType == LapType.Stop)) { var duration = lap.Time - previousLap.Time; if (maxLapTimeDurations.Count <= count) { maxLapTimeDurations.Add(duration); } else if (maxLapTimeDurations[count] < duration) { maxLapTimeDurations[count] = duration; } count++; } previousLap = lap; } } return maxLapTimeDurations; } } [Serializable] public class KmlMultipleFileExporterProperties : ICloneable { public bool IncludeRoutes { get; set; } public bool IncludeReplay { get; set; } public bool MassStart { get; set; } public bool CompactRouteSegments { get; set; } public List Colors { get; set; } public TimeSpan ReplayTimeInterval { get; set; } public List ReplayTails { get; set; } public double RouteLineWidth { get; set; } /// /// Gets or sets whether a replay with mass start should restart the masstart after each lap. /// public bool ReplayRestartAfterEachLap { get; set; } public KmlMultipleFileExporterProperties() { IncludeRoutes = true; MassStart = true; CompactRouteSegments = true; Colors = new List { Color.FromArgb(160, Color.Red), Color.FromArgb(160, Color.Blue), Color.FromArgb(160, Color.DarkGreen), Color.FromArgb(160, Color.Purple), Color.FromArgb(160, Color.DarkOrange), Color.FromArgb(160, Color.Cyan), Color.FromArgb(160, Color.Lime), Color.FromArgb(160, Color.Chocolate) }; ReplayTimeInterval = new TimeSpan(0, 0, 5); ReplayTails = new List { new KmlReplayTail() { StartVisible = new TimeSpan(0), EndVisible = new TimeSpan(0, 0, 60) } }; RouteLineWidth = 6; } public bool HasReplayTails { get { return ReplayTails.Count > 0; } } public object Clone() { var clone = new KmlMultipleFileExporterProperties { IncludeRoutes = IncludeRoutes, IncludeReplay = IncludeReplay, MassStart = MassStart, CompactRouteSegments = CompactRouteSegments, Colors = new List(Colors), ReplayTimeInterval = ReplayTimeInterval, RouteLineWidth = RouteLineWidth, ReplayTails = new List(), ReplayRestartAfterEachLap = ReplayRestartAfterEachLap }; foreach (var tail in ReplayTails) { clone.ReplayTails.Add(tail.Clone() as KmlReplayTail); } return clone; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Exporters/RouteDataExporter.cs000066400000000000000000000270361446222606700321240ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Text; using System.Xml; using QuickRoute.BusinessEntities.RouteProperties; namespace QuickRoute.BusinessEntities.Exporters { /// /// Creates an xml file with the route property data of all route segments in a session. /// public class RouteDataExporter { private readonly Session session; private readonly Stream outputStream; public Session Session { get { return session; } } public Stream OutputStream { get { return outputStream; } } public ExportRouteDataSettings Settings { get; set; } public RouteDataExporter(Session session, Stream outputStream) { this.session = session; this.outputStream = outputStream; Settings = new ExportRouteDataSettings(); } public void Export() { var writerSettings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true, IndentChars = " " }; var writer = XmlWriter.Create(OutputStream, writerSettings); var formatter = new Formatter(); var cacheManager = new RoutePropertyCacheManager(); if (writer != null) { writer.WriteStartDocument(); writer.WriteStartElement("Route"); int segmentCount = 0; foreach (var segment in Session.Route.Segments) { writer.WriteStartElement("Segment"); var waypoints = Session.Route.GetEquallySpacedWaypoints(segment.FirstWaypoint.Time, segment.LastWaypoint.Time, Settings.SamplingInterval, Settings.ZeroTime); var lastPl = new ParameterizedLocation(segmentCount, 0); foreach (var waypoint in waypoints) { writer.WriteStartElement("Sample"); var pl = Session.Route.GetParameterizedLocationFromTime(waypoint.Time, lastPl, ParameterizedLocation.Direction.Forward); var locations = new RouteLocations(pl); foreach (var lpType in Settings.RoutePropertyTypes) { if (lpType.Selected) { RetrieveExternalPropertyDelegate dlg = new ExternalRoutePropertyRetriever(Session.Settings).RetrieveExternalProperty; var lp = Activator.CreateInstance(lpType.RoutePropertyType, Session, locations, dlg) as RouteProperty; if (lp != null) { lp.CacheManager = cacheManager; if (lp.ContainsValue) { var attributeName = GetCamelCaseString(lpType.RoutePropertyType.Name); var attributeValue = lp.ToString(formatter); writer.WriteAttributeString(attributeName, attributeValue); } } } } writer.WriteEndElement(); lastPl = pl; } writer.WriteEndElement(); segmentCount++; } writer.WriteEndElement(); writer.Close(); } } private static string GetCamelCaseString(string s) { if (string.IsNullOrEmpty(s)) return s; return s.Substring(0, 1).ToLower() + s.Substring(1); } private class Formatter : IFormatProvider, ICustomFormatter { private static readonly IFormatProvider nfi = new NumberFormatInfo { NumberDecimalSeparator = "." }; public string Format(string format, object arg, IFormatProvider formatProvider) { if (arg is double? && !((double?)arg).HasValue) return "-"; if (arg is double || arg is double?) { return ((double)arg).ToString(nfi); } if (arg is DateTime) { var dt = (DateTime)arg; var timeString = dt.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); return timeString.Replace("Z", dt.ToString(".fffffff").TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray()) + "Z"); } if (arg is TimeSpan) { var ts = (TimeSpan)arg; return Format(format, ts.TotalSeconds, formatProvider); } // format everything else normally if (arg is IFormattable) { return ((IFormattable)arg).ToString(format, formatProvider); } return arg.ToString(); } public object GetFormat(Type formatType) { return (formatType == typeof(ICustomFormatter)) ? this : null; } } } [Serializable] public class ExportRouteDataSettings { public ExportRouteDataSettings() { ZeroTime = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc); SamplingInterval = new TimeSpan(0, 0, 1); } private static SelectableRoutePropertyTypeCollection AvailableRoutePropertyTypes { get { return new SelectableRoutePropertyTypeCollection() { new SelectableRoutePropertyType(typeof (Time), true), new SelectableRoutePropertyType(typeof (Longitude), true), new SelectableRoutePropertyType(typeof (Latitude), true), new SelectableRoutePropertyType(typeof (ElapsedTimeFromStart), true), new SelectableRoutePropertyType(typeof (CircleTimeBackward), true), new SelectableRoutePropertyType(typeof (CircleTimeForward), true), new SelectableRoutePropertyType(typeof (RouteDistanceFromStart), true), new SelectableRoutePropertyType(typeof (Pace), true), new SelectableRoutePropertyType(typeof (Speed), true), new SelectableRoutePropertyType(typeof (RouteProperties.HeartRate), true), new SelectableRoutePropertyType(typeof (RouteProperties.Altitude), true), new SelectableRoutePropertyType(typeof (DirectionDeviationToNextLap), true), new SelectableRoutePropertyType(typeof (Direction), true), new SelectableRoutePropertyType(typeof (Inclination), true), new SelectableRoutePropertyType(typeof (AscentFromStart), true), new SelectableRoutePropertyType(typeof (DescentFromStart), true), new SelectableRoutePropertyType(typeof (ImageX), true), new SelectableRoutePropertyType(typeof (ImageY), true), new SelectableRoutePropertyType(typeof (LapNumber), false), new SelectableRoutePropertyType(typeof (RouteProperties.ElapsedTime), false), new SelectableRoutePropertyType(typeof (RouteDistance), false), new SelectableRoutePropertyType(typeof (StraightLineDistance), false), new SelectableRoutePropertyType(typeof (StraightLineDistanceFromStart), false), new SelectableRoutePropertyType(typeof (RouteToStraightLine), false), new SelectableRoutePropertyType(typeof (RouteToStraightLineFromStart), false), new SelectableRoutePropertyType(typeof (AverageStraightLinePace), false), new SelectableRoutePropertyType(typeof (AverageStraightLinePaceFromStart), false), new SelectableRoutePropertyType(typeof (AverageRoutePace), false), new SelectableRoutePropertyType(typeof (AverageRoutePaceFromStart), false), new SelectableRoutePropertyType(typeof (AverageStraightLineSpeed), false), new SelectableRoutePropertyType(typeof (AverageStraightLineSpeedFromStart), false), new SelectableRoutePropertyType(typeof (AverageRouteSpeed), false), new SelectableRoutePropertyType(typeof (AverageRouteSpeedFromStart), false), new SelectableRoutePropertyType(typeof (AverageHeartRate), false), new SelectableRoutePropertyType(typeof (AverageHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (MinHeartRate), false), new SelectableRoutePropertyType(typeof (MinHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (MaxHeartRate), false), new SelectableRoutePropertyType(typeof (MaxHeartRateFromStart), false), new SelectableRoutePropertyType(typeof (AltitudeDifference), false), new SelectableRoutePropertyType(typeof (AltitudeDifferenceFromStart), false), new SelectableRoutePropertyType(typeof (Ascent), false), new SelectableRoutePropertyType(typeof (Descent), false), new SelectableRoutePropertyType(typeof (AverageInclination), false), new SelectableRoutePropertyType(typeof (AverageInclinationFromStart), false), new SelectableRoutePropertyType(typeof (AverageDirectionDeviationToNextLap), false), new SelectableRoutePropertyType(typeof (AverageDirectionDeviationToNextLapFromStart), false), new SelectableRoutePropertyType(typeof (Location), false), new SelectableRoutePropertyType(typeof (RouteProperties.MapReadingState), false), new SelectableRoutePropertyType(typeof (MapReadingDuration), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenReadingMap), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenReadingMapFromStart), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenNotReadingMap), false), new SelectableRoutePropertyType(typeof (AveragePaceWhenNotReadingMapFromStart), false), new SelectableRoutePropertyType(typeof (PreviousMapReadingEnd), false), new SelectableRoutePropertyType(typeof (NextMapReadingStart), false), }; } } private SelectableRoutePropertyTypeCollection routePropertyTypes; /// /// The time (eg midnight) that will be used as a reference time for the sampling interval. /// public DateTime ZeroTime { get; set; } /// /// The time between each pixel coordinate in the file /// public TimeSpan SamplingInterval { get; set; } [Obsolete("Replaced by RoutePropertyTypes, left for not breaking the serialization contract.")] public RouteDataExportAttributes IncludedAttributes { get; set; } /// /// The route property types that should be included when exporting data. /// public SelectableRoutePropertyTypeCollection RoutePropertyTypes { get { if (routePropertyTypes == null) { routePropertyTypes = AvailableRoutePropertyTypes; } else if (routePropertyTypes.Count < AvailableRoutePropertyTypes.Count) { // make sure new property types are propagated to the settings foreach (var rpt in AvailableRoutePropertyTypes) { if (!routePropertyTypes.ContainsRoutePropertyType(rpt.RoutePropertyType)) { routePropertyTypes.Add(rpt); } } } return routePropertyTypes; } set { routePropertyTypes = value; } } } [Flags] [Serializable] [Obsolete] public enum RouteDataExportAttributes { None = 0, Time = 1, Longitude = 2, Latitude = 4, PixelX = 8, PixelY = 16, ElapsedTime = 32, Distance = 64, Pace = 128, Speed = 256, DirectionDeviation = 512, Altitude = 1024, HeartRate = 2048 } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/000077500000000000000000000000001446222606700305265ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/Category.cs000066400000000000000000000002131446222606700326260ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities.ExternalLapDataSources { public class Category { public string Name { get; set; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/CzechSplits/000077500000000000000000000000001446222606700327615ustar00rootroot00000000000000CzechSplitsLapDataSource.cs000066400000000000000000000052341446222606700401000ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/CzechSplitsusing System; using System.Collections.Generic; using QuickRoute.BusinessEntities.CzechSplitsWebService; namespace QuickRoute.BusinessEntities.ExternalLapDataSources.CzechSplits { public class CzechSplitsLapDataSource : IExternalLapDataSource { private ResultsDBService service = new ResultsDBService(); public IEnumerable GetEvents(DateTime startDate, DateTime endDate, string country) { var response = service.GetEvents(new GetEvents() { startDate = startDate, endDate = endDate, country = country }); var translatedEvents = new List(); foreach (var e in response.GetEventsResult ?? new CzechSplitsWebService.Event[0]) { translatedEvents.Add(TranslateEvent(e)); } return translatedEvents; } public IEnumerable GetCategories(string eventId) { var response = service.GetCategories(new GetCategories() { databaseId = eventId }); var translatedCategories = new List(); foreach (var c in response.GetCategoriesResult ?? new CzechSplitsWebService.Category[0]) { translatedCategories.Add(TranslateCategory(c)); } return translatedCategories; } public IEnumerable GetRunnersAndSplits(string eventId, int categoryIndex) { var response = service.GetRunnersAndSplits(new GetRunnersAndSplits() { databaseId = eventId, categoryIndex = categoryIndex}); var translatedRunners = new List(); foreach (var r in response.GetRunnersAndSplitsResult ?? new CzechSplitsWebService.Runner[0]) { translatedRunners.Add(TranslateRunner(r)); } return translatedRunners; } private static Event TranslateEvent(CzechSplitsWebService.Event e) { return new Event() { DatabaseId = e.DatabaseId.ToString(), Name = e.Name, Organiser = e.Organiser, StartDate = e.StartDate }; } private static Category TranslateCategory(CzechSplitsWebService.Category c) { return new Category() { Name = c.Name }; } private static Runner TranslateRunner(CzechSplitsWebService.Runner r) { var splits = new List(); foreach(var s in r.Splits) { splits.Add(s.dateTime1); } return new Runner() { Name = r.Name, Club = r.Club, Splits = splits, StartTime = r.StartTime, FinishTime = r.FinishTime, }; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/Event.cs000066400000000000000000000004351446222606700321400ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.ExternalLapDataSources { public class Event { public string DatabaseId { get; set; } public string Name { get; set; } public string Organiser { get; set; } public DateTime StartDate { get; set; } } }ExternalLapDataSourceFactory.cs000066400000000000000000000013111446222606700365140ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSourcesusing System.Collections.Generic; using QuickRoute.BusinessEntities.ExternalLapDataSources.CzechSplits; using QuickRoute.BusinessEntities.ExternalLapDataSources.WinSplits; namespace QuickRoute.BusinessEntities.ExternalLapDataSources { public static class ExternalLapDataSourceFactory { public static IEnumerable> GetExternalLapDataSources() { return new[] { new KeyValuePair("WinSplits", new WinSplitsLapDataSource()), new KeyValuePair("CzechSplits", new CzechSplitsLapDataSource()) }; } } } IExternalLapDataSource.cs000066400000000000000000000006171446222606700353050ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSourcesusing System; using System.Collections.Generic; namespace QuickRoute.BusinessEntities.ExternalLapDataSources { public interface IExternalLapDataSource { IEnumerable GetEvents(DateTime startDate, DateTime endDate, string country); IEnumerable GetCategories(string eventId); IEnumerable GetRunnersAndSplits(string eventId, int categoryIndex); } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/Runner.cs000066400000000000000000000006201446222606700323240ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.ExternalLapDataSources { public class Runner { public string Name { get; set; } public string Club { get; set; } public DateTime? StartTime { get; set; } public DateTime? FinishTime { get; set; } public IEnumerable Splits { get; set; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/WinSplits/000077500000000000000000000000001446222606700324625ustar00rootroot00000000000000WinSplitsLapDataSource.cs000066400000000000000000000043671446222606700373100ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalLapDataSources/WinSplitsusing System; using System.Collections.Generic; using QuickRoute.BusinessEntities.WinSplitsWebService; namespace QuickRoute.BusinessEntities.ExternalLapDataSources.WinSplits { public class WinSplitsLapDataSource : IExternalLapDataSource { private readonly WebServices service = new WebServices(); public IEnumerable GetEvents(DateTime startDate, DateTime endDate, string country) { var events = service.GetEvents(startDate, endDate, country); var translatedEvents = new List(); foreach(var e in events) { translatedEvents.Add(TranslateEvent(e)); } return translatedEvents; } public IEnumerable GetCategories(string eventId) { var categories = service.GetCategories(int.Parse(eventId)); var translatedCategories = new List(); foreach (var c in categories) { translatedCategories.Add(TranslateCategory(c)); } return translatedCategories; } public IEnumerable GetRunnersAndSplits(string eventId, int categoryIndex) { var runners = service.GetRunnersAndSplits(int.Parse(eventId), (short)categoryIndex); var translatedRunners = new List(); foreach (var r in runners) { translatedRunners.Add(TranslateRunner(r)); } return translatedRunners; } private static Event TranslateEvent(WinSplitsWebService.Event e) { return new Event() { DatabaseId = e.DatabaseId.ToString(), Name = e.Name, Organiser = e.Organiser, StartDate = e.StartDate }; } private static Category TranslateCategory(WinSplitsWebService.Category c) { return new Category() { Name = c.Name }; } private static Runner TranslateRunner(WinSplitsWebService.Runner r) { return new Runner() { Name = r.Name, Club = r.Club, Splits = new List(r.Splits), StartTime = r.StartTime, FinishTime = r.FinishTime, }; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ExternalRoutePropertyRetriever.cs000066400000000000000000000011311446222606700327320ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities { public class ExternalRoutePropertyRetriever { public SessionSettings SessionSettings { get; private set; } public ExternalRoutePropertyRetriever(SessionSettings sessionSettings) { SessionSettings = sessionSettings; } public double RetrieveExternalProperty(string name) { switch(name.ToLower()) { case "circletimeradius": return SessionSettings.CircleTimeRadius; } return 0; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/000077500000000000000000000000001446222606700252375ustar00rootroot00000000000000ExportImageSizeAndQualitySelector.Designer.cs000066400000000000000000000154411446222606700360270ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Formsnamespace QuickRoute.BusinessEntities.Forms { partial class ExportImageSizeAndQualitySelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExportImageSizeAndQualitySelector)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.imageQualityLabel = new System.Windows.Forms.Label(); this.sizeLabel = new System.Windows.Forms.Label(); this.panel1 = new System.Windows.Forms.Panel(); this.sizeInPixels = new System.Windows.Forms.Label(); this.percentualSizeComboBox = new System.Windows.Forms.ComboBox(); this.imageQualityComboBox = new System.Windows.Forms.ComboBox(); this.tableLayoutPanel1.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // tableLayoutPanel1 // resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.Controls.Add(this.imageQualityLabel, 0, 1); this.tableLayoutPanel1.Controls.Add(this.sizeLabel, 0, 0); this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 0); this.tableLayoutPanel1.Controls.Add(this.imageQualityComboBox, 1, 1); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // imageQualityLabel // resources.ApplyResources(this.imageQualityLabel, "imageQualityLabel"); this.imageQualityLabel.Name = "imageQualityLabel"; // // sizeLabel // resources.ApplyResources(this.sizeLabel, "sizeLabel"); this.sizeLabel.Name = "sizeLabel"; // // panel1 // resources.ApplyResources(this.panel1, "panel1"); this.panel1.Controls.Add(this.sizeInPixels); this.panel1.Controls.Add(this.percentualSizeComboBox); this.panel1.Name = "panel1"; // // sizeInPixels // resources.ApplyResources(this.sizeInPixels, "sizeInPixels"); this.sizeInPixels.Name = "sizeInPixels"; // // percentualSizeComboBox // resources.ApplyResources(this.percentualSizeComboBox, "percentualSizeComboBox"); this.percentualSizeComboBox.FormattingEnabled = true; this.percentualSizeComboBox.Items.AddRange(new object[] { resources.GetString("percentualSizeComboBox.Items"), resources.GetString("percentualSizeComboBox.Items1"), resources.GetString("percentualSizeComboBox.Items2"), resources.GetString("percentualSizeComboBox.Items3"), resources.GetString("percentualSizeComboBox.Items4"), resources.GetString("percentualSizeComboBox.Items5")}); this.percentualSizeComboBox.Name = "percentualSizeComboBox"; this.percentualSizeComboBox.TextChanged += new System.EventHandler(this.percentualSizeComboBox_TextChanged); this.percentualSizeComboBox.Leave += new System.EventHandler(this.percentualSizeComboBox_Leave); // // imageQualityComboBox // resources.ApplyResources(this.imageQualityComboBox, "imageQualityComboBox"); this.imageQualityComboBox.FormattingEnabled = true; this.imageQualityComboBox.Items.AddRange(new object[] { resources.GetString("imageQualityComboBox.Items"), resources.GetString("imageQualityComboBox.Items1"), resources.GetString("imageQualityComboBox.Items2"), resources.GetString("imageQualityComboBox.Items3"), resources.GetString("imageQualityComboBox.Items4"), resources.GetString("imageQualityComboBox.Items5"), resources.GetString("imageQualityComboBox.Items6"), resources.GetString("imageQualityComboBox.Items7"), resources.GetString("imageQualityComboBox.Items8"), resources.GetString("imageQualityComboBox.Items9")}); this.imageQualityComboBox.Name = "imageQualityComboBox"; this.imageQualityComboBox.Leave += new System.EventHandler(this.imageQualityComboBox_Leave); // // ExportImageSizeAndQualitySelector // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ExportImageSizeAndQualitySelector"; this.ShowIcon = false; this.ShowInTaskbar = false; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); this.ResumeLayout(false); } #endregion protected System.Windows.Forms.Button ok; protected System.Windows.Forms.Button cancel; protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; protected System.Windows.Forms.Label sizeLabel; protected System.Windows.Forms.ComboBox percentualSizeComboBox; protected System.Windows.Forms.Panel panel1; protected System.Windows.Forms.Label sizeInPixels; protected System.Windows.Forms.Label imageQualityLabel; protected System.Windows.Forms.ComboBox imageQualityComboBox; } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.cs000066400000000000000000000061751446222606700343530ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Forms { public partial class ExportImageSizeAndQualitySelector : Form { private const double minImageQuality = 0.1; private const double maxImageQuality = 1; private const double minImagePercentualSize = 0.5; private const double maxImagePercentualSize = 2; private SizeCalculatorDelegate sizeCalculator; public SizeCalculatorDelegate SizeCalculator { get { return sizeCalculator; } set { sizeCalculator = value; CalculateSize(); } } public double PercentualImageSize { get { double size; if(!double.TryParse(percentualSizeComboBox.Text.Replace("%", ""), out size)) { size = 100; } return Math.Min(maxImagePercentualSize, Math.Max(minImagePercentualSize, size / 100)); } set { percentualSizeComboBox.Text = string.Format("{0:p0}", value); } } public Size ImageSize { get { if (SizeCalculator != null) { return SizeCalculator(PercentualImageSize); } return new Size(); } } public double ImageQuality { get { double quality; if (!double.TryParse(imageQualityComboBox.Text.Replace("%", ""), out quality)) { quality = 80; } return Math.Min(maxImageQuality, Math.Max(minImageQuality, quality / 100)); } set { imageQualityComboBox.Text = string.Format("{0:p0}", value); } } public ExportImageSizeAndQualitySelector() { InitializeComponent(); percentualSizeComboBox.Text = string.Format("{0:p0}", PercentualImageSize); imageQualityComboBox.Text = string.Format("{0:p0}", ImageQuality); } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void percentualSizeComboBox_TextChanged(object sender, EventArgs e) { CalculateSize(); } private void CalculateSize() { if (SizeCalculator != null) { Size newSize = SizeCalculator(PercentualImageSize); sizeInPixels.Text = string.Format(Resources.Strings.SizeInPixels, newSize.Width, newSize.Height); } else { sizeInPixels.Text = ""; } } private void percentualSizeComboBox_Leave(object sender, EventArgs e) { percentualSizeComboBox.Text = string.Format("{0:p0}", PercentualImageSize); } private void imageQualityComboBox_Leave(object sender, EventArgs e) { imageQualityComboBox.Text = string.Format("{0:p0}", ImageQuality); } } }ExportImageSizeAndQualitySelector.da.resx000066400000000000000000000152511446222606700352260ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd 66, 13 Billed&kvalitet 71, 13 Billed&størrelse 77, 0 77, 40 Billedegenskaber ExportImageSizeAndQualitySelector.de.resx000066400000000000000000000156041446222606700352340ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen 58, 13 Bild&qualität 51, 13 Bild&größe 91, 13 1000 x 1000 Pixel 64, 0 64, 40 Bildeigenschaften ExportImageSizeAndQualitySelector.fi.resx000066400000000000000000000207441446222606700352430ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta 64, 13 Kuvan &laatu 65, 13 Kuvan &koko 104, 13 1000 x 1000 pikseliä 50% 75% 100% 125% 150% 200% 71, 0 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 71, 40 Kuvan ominaisuudet ExportImageSizeAndQualitySelector.fr.resx000066400000000000000000000141321446222606700352460ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Propriétés de l'image &Qualité de l'image Taille de l'ima&ge Annuler ExportImageSizeAndQualitySelector.it.resx000066400000000000000000000162161446222606700352600ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 85, 84 166, 84 Cancella 87, 13 &Qualità immagine 109, 13 &Dimensione immagine 115, 0 115, 40 229, 66 253, 119 Proprietà dell'immagine ExportImageSizeAndQualitySelector.lt.resx000066400000000000000000000157341446222606700352670ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Atšaukti 77, 13 Vaizdo &kokybė 66, 13 Vaizdo &dydis 104, 13 1000 x 1000 pikselių 83, 0 83, 40 Vaizdo savybės ExportImageSizeAndQualitySelector.no.resx000066400000000000000000000152221446222606700352540ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 64, 13 Bilde&kvalitet 69, 13 Bilde&størrelse 99, 13 1000 x 1000 piksler Bildeegenskaper ExportImageSizeAndQualitySelector.resx000066400000000000000000000465121446222606700346470ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 150 % 200 % 70 % 75 % 100 % 125 % 30 % System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 Bottom, Right 75, 23 tableLayoutPanel1 panel1 75, 23 True percentualSizeComboBox 90 % ExportImageSizeAndQualitySelector OK 50 % $this ok Top, Left, Right 57, 13 112, 37 Top, Bottom, Left, Right 187, 66 0 0 CenterParent 124, 84 1000 x 1000 pixels imageQualityLabel 3 75, 0 sizeLabel 0, 3 3 2 10 % System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 50 % 2 6, 13 1 0 0 sizeInPixels 0, 0, 3, 0 20 % Image &size cancel True 0 panel1 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="imageQualityLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="sizeLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel1" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="imageQualityComboBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,Absolute,20" /></TableLayoutSettings> 1 tableLayoutPanel1 100 % System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 Image &quality 60 % 1 112, 21 69, 13 0, 3, 3, 0 0 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 211, 119 tableLayoutPanel1 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True 112, 21 40 % imageQualityComboBox 75, 40 tableLayoutPanel1 12, 12 43, 84 Image properties 1 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 0, 40 95, 13 0, 0 True NoControl 2 $this System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 3, 0, 0, 0 1 0, 24 80 % System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 Bottom, Right 0, 3, 3, 0 True ExportImageSizeAndQualitySelector.ru.resx000066400000000000000000000143331446222606700352700ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Свойства изображения &Качество &Размер Отмена 1000 x 1000 пикселей ExportImageSizeAndQualitySelector.sv.resx000066400000000000000000000163461446222606700353000ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 58, 13 Bild&kvalitet 55, 13 Bild&storlek 93, 13 1000 x 1000 pixlar 123, 21 64, 0 123, 37 64, 40 123, 21 Bildegenskaper quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.Designer.cs000066400000000000000000000146721446222606700341170ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities.Forms { partial class ExportImageSizeSelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExportImageSizeSelector)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.sizeLabel = new System.Windows.Forms.Label(); this.panel1 = new System.Windows.Forms.Panel(); this.sizeInPixels = new System.Windows.Forms.Label(); this.percentualSizeComboBox = new System.Windows.Forms.ComboBox(); this.tableLayoutPanel1.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // tableLayoutPanel1 // this.tableLayoutPanel1.AccessibleDescription = null; this.tableLayoutPanel1.AccessibleName = null; resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.BackgroundImage = null; this.tableLayoutPanel1.Controls.Add(this.sizeLabel, 0, 0); this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 0); this.tableLayoutPanel1.Font = null; this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // sizeLabel // this.sizeLabel.AccessibleDescription = null; this.sizeLabel.AccessibleName = null; resources.ApplyResources(this.sizeLabel, "sizeLabel"); this.sizeLabel.Font = null; this.sizeLabel.Name = "sizeLabel"; // // panel1 // this.panel1.AccessibleDescription = null; this.panel1.AccessibleName = null; resources.ApplyResources(this.panel1, "panel1"); this.panel1.BackgroundImage = null; this.panel1.Controls.Add(this.sizeInPixels); this.panel1.Controls.Add(this.percentualSizeComboBox); this.panel1.Font = null; this.panel1.Name = "panel1"; // // sizeInPixels // this.sizeInPixels.AccessibleDescription = null; this.sizeInPixels.AccessibleName = null; resources.ApplyResources(this.sizeInPixels, "sizeInPixels"); this.sizeInPixels.Font = null; this.sizeInPixels.Name = "sizeInPixels"; // // percentualSizeComboBox // this.percentualSizeComboBox.AccessibleDescription = null; this.percentualSizeComboBox.AccessibleName = null; resources.ApplyResources(this.percentualSizeComboBox, "percentualSizeComboBox"); this.percentualSizeComboBox.BackgroundImage = null; this.percentualSizeComboBox.Font = null; this.percentualSizeComboBox.FormattingEnabled = true; this.percentualSizeComboBox.Items.AddRange(new object[] { resources.GetString("percentualSizeComboBox.Items"), resources.GetString("percentualSizeComboBox.Items1"), resources.GetString("percentualSizeComboBox.Items2"), resources.GetString("percentualSizeComboBox.Items3"), resources.GetString("percentualSizeComboBox.Items4"), resources.GetString("percentualSizeComboBox.Items5")}); this.percentualSizeComboBox.Name = "percentualSizeComboBox"; this.percentualSizeComboBox.Leave += new System.EventHandler(this.percentualSizeComboBox_Leave); this.percentualSizeComboBox.TextChanged += new System.EventHandler(this.percentualSizeComboBox_TextChanged); // // ExportImageSizeSelector // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Font = null; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ExportImageSizeSelector"; this.ShowIcon = false; this.ShowInTaskbar = false; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); this.ResumeLayout(false); } #endregion protected System.Windows.Forms.Button ok; protected System.Windows.Forms.Button cancel; protected System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; protected System.Windows.Forms.Label sizeLabel; protected System.Windows.Forms.ComboBox percentualSizeComboBox; protected System.Windows.Forms.Panel panel1; protected System.Windows.Forms.Label sizeInPixels; } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.cs000066400000000000000000000045601446222606700323530ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Forms { public partial class ExportImageSizeSelector : Form { private const double minImagePercentualSize = 0.5; private const double maxImagePercentualSize = 2; private SizeCalculatorDelegate sizeCalculator; public SizeCalculatorDelegate SizeCalculator { get { return sizeCalculator; } set { sizeCalculator = value; CalculateSize(); } } public double PercentualImageSize { get { double size; if(!double.TryParse(percentualSizeComboBox.Text.Replace("%", ""), out size)) { size = 100; } return Math.Min(maxImagePercentualSize, Math.Max(minImagePercentualSize, size / 100)); } set { percentualSizeComboBox.Text = string.Format("{0:p0}", value); } } public Size ImageSize { get { if (SizeCalculator != null) { return SizeCalculator(PercentualImageSize); } return new Size(); } } public ExportImageSizeSelector() { InitializeComponent(); percentualSizeComboBox.Text = string.Format("{0:p0}", PercentualImageSize); } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void percentualSizeComboBox_TextChanged(object sender, EventArgs e) { CalculateSize(); } private void CalculateSize() { if (SizeCalculator != null) { Size newSize = SizeCalculator(PercentualImageSize); sizeInPixels.Text = string.Format(Resources.Strings.SizeInPixels, newSize.Width, newSize.Height); } else { sizeInPixels.Text = ""; } } private void percentualSizeComboBox_Leave(object sender, EventArgs e) { percentualSizeComboBox.Text = string.Format("{0:p0}", PercentualImageSize); } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.da.resx000066400000000000000000000137341446222606700333150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Billedegenskaber Afbryd Billed&størrelse quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.de.resx000066400000000000000000000162101446222606700333110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen 51, 13 Bild&größe 91, 13 1000 x 1000 Pixel 50% 75% 100% 125% 150% 200% 54, 0 Bildeigenschaften quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.fi.resx000066400000000000000000000152611446222606700333240ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 200% 75% 100% 125% Image properties 50% Peruuta Kuvan &koko 150% 1000 x 1000 pikseliä quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.fr.resx000066400000000000000000000137451446222606700333420ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Propriétés de l'image Annuler Taille de l'ima&ge quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.it.resx000066400000000000000000000154371446222606700333470ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 71, 58 152, 58 Cancella 109, 13 &Dimensione immagine 112, 0 215, 40 239, 93 Proprietà dell'immagine quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.lt.resx000066400000000000000000000142321446222606700333420ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Vaizdo savybės Gerai Atšaukti Vaizdo &dydis 1000 x 1000 pikselių quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.no.resx000066400000000000000000000150341446222606700333400ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 69, 13 Bilde&størrelse 99, 13 1000 x 1000 piksler 72, 0 Bildeegenskaper quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.resx000066400000000000000000000375151446222606700327350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 panel1 43, 58 1 0 panel1 0 200 % Bottom, Right sizeInPixels 75 % 100 % 125 % panel1 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 CenterParent 0, 0 211, 93 Top, Bottom, Left, Right ok True 0 Top, Left, Right Image properties 0 $this 6, 13 Bottom, Right tableLayoutPanel1 OK 0 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 3 0 187, 40 1 ExportImageSizeSelector 2 True System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0, 3, 3, 0 sizeLabel 60, 0 $this percentualSizeComboBox System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 75, 23 tableLayoutPanel1 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 50 % 75, 23 102, 37 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="sizeLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel1" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0" /></TableLayoutSettings> cancel Cancel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 0, 0, 0 0, 24 12, 12 1 1 1 1 95, 13 0, 0, 3, 0 124, 58 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 57, 13 True Image &size tableLayoutPanel1 150 % 1000 x 1000 pixels 99, 21 True quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.ru.resx000066400000000000000000000146121446222606700333530ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK 50 % Отмена &Размер 150 % 1000 x 1000 пикселей Свойства изображения quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.sv.resx000066400000000000000000000150231446222606700333520ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 55, 13 Bild&storlek 58, 0 93, 13 1000 x 1000 pixlar Bildegenskaper quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/General.cs000066400000000000000000001257301446222606700260650ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities { [Serializable] public class PointD { private double x; private double y; public PointD() { } public PointD(double x, double y) { this.x = x; this.y = y; } public double X { get { return x; } set { x = value; } } public double Y { get { return y; } set { y = value; } } public override string ToString() { return X + ", " + Y; } public static PointD operator -(PointD p0, PointD p1) { return new PointD(p0.X - p1.X, p0.Y - p1.Y); } public static PointD operator +(PointD p0, PointD p1) { return new PointD(p0.X + p1.X, p0.Y + p1.Y); } public static PointD operator *(double t, PointD p) { return new PointD(t * p.X, t * p.Y); } public static PointD operator *(PointD p, double t) { return new PointD(t * p.X, t * p.Y); } public static PointD operator /(PointD p, double t) { return new PointD(p.X / t, p.Y / t); } public static explicit operator PointF(PointD p) { return new PointF((float)p.X, (float)p.Y); } public static explicit operator PointD(Point p) { return new PointD(p.X, p.Y); } public static implicit operator PointD(PointF p) { return new PointD(p.X, p.Y); } } [Serializable] public class SizeD { private double width; private double height; public SizeD(double width, double height) { this.width = width; this.height = height; } public double Width { get { return width; } set { width = value; } } public double Height { get { return height; } set { height = value; } } } [Serializable] public class RectangleD { private double left; private double top; private double width; private double height; public RectangleD(double left, double top, double width, double height) { this.left = left; this.top = top; this.width = width; this.height = height; } public RectangleD(PointD location, SizeD size) { left = location.X; top = location.Y; width = size.Width; height = size.Height; } public double Left { get { return left; } set { left = value; } } public double Top { get { return top; } set { top = value; } } public double Right { get { return left + width; } } public double Bottom { get { return top + height; } } public double Width { get { return width; } set { if (value < 0) { left += value; width = Math.Abs(value); } else { width = value; } } } public double Height { get { return height; } set { if (value < 0) { top += value; height = Math.Abs(value); } else { height = value; } } } public SizeD Size { get { return new SizeD(width, height); } set { Width = value.Width; Height = value.Height; } } public PointD Center { get { return new PointD(left + width / 2, top + height / 2); } } public PointD UpperLeft { get { return new PointD(left, top); } } public PointD LowerLeft { get { return new PointD(left, top + height); } } public PointD UpperRight { get { return new PointD(left + width, top); } } public PointD LowerRight { get { return new PointD(left + width, top + height); } } public bool Contains(PointD p) { return p.X >= left && p.X <= Right && p.Y >= top && p.Y <= Bottom; } } /// /// Class for storing longitude/latitude coordinates. /// [Serializable] public class LongLat { private double longitude; private double latitude; public double Longitude { get { return longitude; } set { longitude = ((value + 180.0) % 360.0) - 180.0; } } public double Latitude { get { return latitude; } set { latitude = ((value + 90.0) % 180.0) - 90.0; } } public LongLat() { longitude = 0.0; latitude = 0.0; } public LongLat(double longitude, double latitude) { Longitude = longitude; Latitude = latitude; } public static LongLat operator -(LongLat p0, LongLat p1) { return new LongLat(p0.Longitude - p1.Longitude, p0.Latitude - p1.Latitude); } public static LongLat operator +(LongLat p0, LongLat p1) { return new LongLat(p0.Longitude + p1.Longitude, p0.Latitude + p1.Latitude); } public static LongLat operator *(double t, LongLat p) { return new LongLat(t * p.Longitude, t * p.Latitude); } public static LongLat operator *(LongLat p, double t) { return new LongLat(t * p.Longitude, t * p.Latitude); } public static LongLat operator /(LongLat p, double t) { return new LongLat(p.Longitude / t, p.Latitude / t); } public override int GetHashCode() { return base.GetHashCode(); } public override bool Equals(object obj) { return Equals(obj as LongLat); } public bool Equals(LongLat other) { if (other == null) return false; return (longitude == other.Longitude && latitude == other.Latitude); } /// /// Gets the 3D coordinates relative to the center of the earth. /// /// public GeneralMatrix To3DPoint() { // use spherical coordinates: rho, phi, theta const double rho = 6378200; // earth radius in metres double sinPhi = Math.Sin(0.5 * Math.PI + latitude / 180.0 * Math.PI); double cosPhi = Math.Cos(0.5 * Math.PI + latitude / 180.0 * Math.PI); double sinTheta = Math.Sin(longitude / 180.0 * Math.PI); double cosTheta = Math.Cos(longitude / 180.0 * Math.PI); GeneralMatrix p = new GeneralMatrix(3, 1); p.SetElement(0, 0, rho * sinPhi * cosTheta); p.SetElement(1, 0, rho * sinPhi * sinTheta); p.SetElement(2, 0, rho * cosPhi); return p; } public override string ToString() { return ToString(new LongLatFormatter("N", "S", "E", "W", true, 0)); } public string ToString(LongLatFormatter formatter) { double lon = Math.Abs(longitude); double lat = Math.Abs(latitude); string secondFormat = "00" + (formatter.SecondDecimalPlaces > 0 ? "." + new string('0', formatter.SecondDecimalPlaces) : ""); return Math.Floor(lat) + " " + Math.Floor(60 * (lat - Math.Floor(lat))).ToString("00") + "' " + (formatter.SecondsVisible ? Math.Floor((3600 * (lat - Math.Floor(lat))) % 60).ToString(secondFormat) + "\" " : "") + (latitude < 0 ? formatter.S : formatter.N) + " " + Math.Floor(lon) + " " + Math.Floor(60 * (lon - Math.Floor(lon))).ToString("00") + "' " + (formatter.SecondsVisible ? Math.Floor((3600 * (lon - Math.Floor(lon))) % 60).ToString(secondFormat) + "\" " : "") + (longitude < 0 ? formatter.W : formatter.E); } /// /// Applies an ortographic projection to the coordinate. /// http://en.wikipedia.org/wiki/Orthographic_projection_%28cartography%29 /// /// The origin longitude/latitude coordinate of the projection /// A point that gives the distance in meters from the projection origin public PointD Project(LongLat projectionOrigin) { const double rho = 6378200; // earth radius in metres double lambda0 = projectionOrigin.Longitude * Math.PI / 180.0; double phi0 = projectionOrigin.Latitude * Math.PI / 180.0; double lambda = longitude * Math.PI / 180.0; double phi = latitude * Math.PI / 180.0; return new PointD(rho * Math.Cos(phi) * Math.Sin(lambda - lambda0), rho * (Math.Cos(phi0) * Math.Sin(phi) - Math.Sin(phi0) * Math.Cos(phi) * Math.Cos(lambda - lambda0))); } public static LongLat Deproject(PointD coordinate, LongLat projectionOrigin) { if (LinearAlgebraUtil.DistancePointToPoint(coordinate, new PointD(0, 0)) < 0.0000001) return new LongLat(projectionOrigin.Longitude, projectionOrigin.Latitude); const double r = 6378200; // earth radius in metres var longLat = new LongLat(); var rho = Math.Sqrt(coordinate.X * coordinate.X + coordinate.Y * coordinate.Y); var c = Math.Asin(rho / r); var lambda0 = projectionOrigin.Longitude * Math.PI / 180.0; var phi1 = projectionOrigin.Latitude * Math.PI / 180.0; longLat.Latitude = Math.Asin(Math.Cos(c) * Math.Sin(phi1) + (coordinate.Y * Math.Sin(c) * Math.Cos(phi1) / rho)) / Math.PI * 180.0; longLat.Longitude = (lambda0 + Math.Atan(coordinate.X * Math.Sin(c) / (rho * Math.Cos(phi1) * Math.Cos(c) - coordinate.Y * Math.Sin(phi1) * Math.Sin(c)))) / Math.PI * 180.0; return longLat; } } public class LongLatFormatter { public LongLatFormatter(string n, string s, string e, string w, bool secondsVisible, int secondDecimalPlaces) { this.N = n; this.S = s; this.E = e; this.W = w; this.SecondsVisible = secondsVisible; this.SecondDecimalPlaces = secondDecimalPlaces; } public string N { get; set; } public string S { get; set; } public string E { get; set; } public string W { get; set; } public bool SecondsVisible { get; set; } public int SecondDecimalPlaces { get; set; } } /// /// Container class for transformation matrix and a projection origin, i e the data needed to transform from longlat space to pixel space. /// public class Transformation { public GeneralMatrix TransformationMatrix { get; set; } public LongLat ProjectionOrigin { get; set; } public Transformation() { } public Transformation(LongLatBox longLatBox, Size imageSize) { // calculate projection origin ProjectionOrigin = new LongLat((longLatBox.East + longLatBox.West) / 2, (longLatBox.North + longLatBox.South) / 2); // get image corners from kml file var imageCornerLongLats = longLatBox.GetRotatedBoxCornerLongLats(); // project them on flat surface var projectedImageCorners = new Dictionary(); projectedImageCorners[Corner.NorthWest] = imageCornerLongLats[Corner.NorthWest].Project(ProjectionOrigin); projectedImageCorners[Corner.SouthEast] = imageCornerLongLats[Corner.SouthEast].Project(ProjectionOrigin); // calculate transformation matrix TransformationMatrix = LinearAlgebraUtil.CalculateTransformationMatrix( projectedImageCorners[Corner.NorthWest], new PointD(0, 0), projectedImageCorners[Corner.SouthEast], new PointD(imageSize.Width - 1, imageSize.Height - 1), null, true); } public Transformation(GeneralMatrix transformationMatrix, LongLat projectionOrigin) { TransformationMatrix = transformationMatrix; ProjectionOrigin = projectionOrigin; } } public class LongLatBox { public double North { get; set; } public double South { get; set; } public double West { get; set; } public double East { get; set; } public double Rotation { get; set; } public Dictionary GetRotatedBoxCornerLongLats() { var rotation = -Rotation; var corners = new Dictionary(); corners[Corner.NorthEast] = new LongLat(East, North); corners[Corner.NorthWest] = new LongLat(West, North); corners[Corner.SouthWest] = new LongLat(West, South); corners[Corner.SouthEast] = new LongLat(East, South); var projectionOrigin = new LongLat((East + West) / 2, (North + South) / 2); var projectedMapCenter = projectionOrigin.Project(projectionOrigin); var projectedCorners = new Dictionary(); projectedCorners[Corner.NorthEast] = corners[Corner.NorthEast].Project(projectionOrigin); projectedCorners[Corner.NorthWest] = corners[Corner.NorthWest].Project(projectionOrigin); projectedCorners[Corner.SouthWest] = corners[Corner.SouthWest].Project(projectionOrigin); projectedCorners[Corner.SouthEast] = corners[Corner.SouthEast].Project(projectionOrigin); var projectedRotatedCorners = new Dictionary(); projectedRotatedCorners[Corner.NorthEast] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.NorthEast], projectedMapCenter, rotation); projectedRotatedCorners[Corner.NorthWest] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.NorthWest], projectedMapCenter, rotation); projectedRotatedCorners[Corner.SouthWest] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.SouthWest], projectedMapCenter, rotation); projectedRotatedCorners[Corner.SouthEast] = LinearAlgebraUtil.Rotate(projectedCorners[Corner.SouthEast], projectedMapCenter, rotation); var rotatedCorners = new Dictionary(); rotatedCorners[Corner.NorthWest] = LongLat.Deproject(projectedRotatedCorners[Corner.NorthWest], projectionOrigin); rotatedCorners[Corner.NorthEast] = LongLat.Deproject(projectedRotatedCorners[Corner.NorthEast], projectionOrigin); rotatedCorners[Corner.SouthWest] = LongLat.Deproject(projectedRotatedCorners[Corner.SouthWest], projectionOrigin); rotatedCorners[Corner.SouthEast] = LongLat.Deproject(projectedRotatedCorners[Corner.SouthEast], projectionOrigin); return rotatedCorners; } } public enum Corner { NorthWest, NorthEast, SouthWest, SouthEast } public class AlphaAdjustmentChange : IComparable { private ParameterizedLocation parameterizedLocation; private double alphaAdjustment; public AlphaAdjustmentChange(ParameterizedLocation parameterizedLocation, double alphaAdjustment) { this.parameterizedLocation = parameterizedLocation; this.alphaAdjustment = alphaAdjustment; } public ParameterizedLocation ParameterizedLocation { get { return parameterizedLocation; } set { parameterizedLocation = value; } } public double AlphaAdjustment { get { return alphaAdjustment; } set { alphaAdjustment = Math.Max(-1, Math.Min(1, value)); } } #region IComparable Members public int CompareTo(AlphaAdjustmentChange other) { return parameterizedLocation.CompareTo(other.ParameterizedLocation); } #endregion } public static class ConvertUtil { public static GeneralMatrix To3x1Matrix(PointD pointD) { GeneralMatrix m = new GeneralMatrix(3, 1); m.SetElement(0, 0, pointD.X); m.SetElement(1, 0, pointD.Y); m.SetElement(2, 0, 1); return m; } public static GeneralMatrix To3x1Matrix(LongLat longLat) { GeneralMatrix m = new GeneralMatrix(3, 1); m.SetElement(0, 0, longLat.Longitude); m.SetElement(1, 0, longLat.Latitude); m.SetElement(2, 0, 1); return m; } public static PointF ToPointF(GeneralMatrix _3x1Matrix) { return new PointF((float)_3x1Matrix.GetElement(0, 0), (float)_3x1Matrix.GetElement(1, 0)); } public static PointD ToPointD(GeneralMatrix _3x1Matrix) { return new PointD(_3x1Matrix.GetElement(0, 0), _3x1Matrix.GetElement(1, 0)); } /// /// Converts a speed (km/h) to a pace (min/km). /// /// The speed in kilometres per hour. /// public static TimeSpan ToPace(double speed) { return speed == 0 ? new TimeSpan(0) : new TimeSpan((long)(3600.0 / speed * TimeSpan.TicksPerSecond)); } /// /// Converts a pace (min/km) to a speed (km/h). /// /// The pace in minutes per kilometre. /// public static double ToSpeed(TimeSpan pace) { return pace.TotalSeconds == 0 ? 0 : 3600.0 / pace.TotalSeconds; } } public static class LinearAlgebraUtil { public static double ClosestDistancePointToLine(PointD p, PointD l0, PointD l1, out double lineParameter) { PointD p1; double t; double tmpDist; double closestDistance; // Check endpoints closestDistance = DistancePointToPoint(l0, p); lineParameter = 0.0; tmpDist = DistancePointToPoint(l1, p); if (tmpDist < closestDistance) { closestDistance = tmpDist; lineParameter = 1.0; } // Check normal line if (l0.X == l1.X) { p1 = new PointD(p.X + 1.0, p.Y); } else if (l0.Y == l1.Y) { p1 = new PointD(p.X, p.Y + 1.0); } else { p1 = new PointD(p.X + 1.0, p.Y - (l1.X - l0.X) / (l1.Y - l0.Y)); } LinesIntersect(l0, l1, p, p1, out t); if (t >= 0.0 && t <= 1.0) { tmpDist = DistancePointToPoint(new PointD(l0.X + t * (l1.X - l0.X), l0.Y + t * (l1.Y - l0.Y)), p); if (tmpDist < closestDistance) { closestDistance = tmpDist; lineParameter = t; } } return closestDistance; } /// /// Distance in longitude/latitude units, not meters /// /// /// /// public static double DistancePointToPoint(LongLat p0, LongLat p1) { return Math.Sqrt((p1.Longitude - p0.Longitude) * (p1.Longitude - p0.Longitude) + (p1.Latitude - p0.Latitude) * (p1.Latitude - p0.Latitude)); } public static double DistancePointToPoint(PointD p0, PointD p1) { return Math.Sqrt((p1.X - p0.X) * (p1.X - p0.X) + (p1.Y - p0.Y) * (p1.Y - p0.Y)); } public static double DistancePointToPoint(PointF p0, PointF p1) { return Math.Sqrt((p1.X - p0.X) * (p1.X - p0.X) + (p1.Y - p0.Y) * (p1.Y - p0.Y)); } public static double DistancePointToPoint(GeneralMatrix p0, GeneralMatrix p1) { if (p0.ColumnDimension != 1 || p1.ColumnDimension != 1 || p0.RowDimension != p1.RowDimension) throw new Exception("The matrices should have one column and equal number of rows."); double sum = 0.0; for (int i = 0; i < p0.RowDimension; i++) sum += (p1.GetElement(i, 0) - p0.GetElement(i, 0)) * (p1.GetElement(i, 0) - p0.GetElement(i, 0)); return Math.Sqrt(sum); } public static bool LinesIntersect(PointD l0p0, PointD l0p1, PointD l1p0, PointD l1p1, out double parameter) { double a; double b; parameter = 0.0; // Check if any line has zero length if ((l0p0.X == l0p1.X && l0p0.Y == l0p1.Y) || (l1p0.X == l1p1.X && l1p0.Y == l1p1.Y)) return false; // Check if lines are parallell if (l0p1.X == l0p0.X && l1p1.X == l1p0.X) return false; if (!((l0p1.X == l0p0.X && l1p1.X != l1p0.X) || (l0p1.X != l0p0.X && l1p1.X == l1p0.X))) { if ((l0p1.Y - l0p0.Y) / (l0p1.X - l0p0.X) == (l1p1.Y - l1p0.Y) / (l1p1.X - l1p0.X)) return false; } b = ((l0p0.X - l1p0.X) * (l0p1.Y - l0p0.Y) + (l1p0.Y - l0p0.Y) * (l0p1.X - l0p0.X)) / ((l1p1.X - l1p0.X) * (l0p1.Y - l0p0.Y) - (l1p1.Y - l1p0.Y) * (l0p1.X - l0p0.X)); if (l0p1.X == l0p0.X) { a = (l1p0.Y - l0p0.Y + b * (l1p1.Y - l1p0.Y)) / (l0p1.Y - l0p0.Y); } else { a = (l1p0.X - l0p0.X + b * (l1p1.X - l1p0.X)) / (l0p1.X - l0p0.X); } parameter = a; return (a >= 0.0 && a <= 1.0 && b >= 0.0 && b <= 1.0); } public static bool LineInfiniteLineIntersect(PointD l0p0, PointD l0p1, PointD l1p, PointD l1d, out double parameter) { double a; double b; parameter = 0.0; PointD l1p1 = l1p + Normalize(l1d); // Check if the first line has zero length if ((l0p0.X == l0p1.X && l0p0.Y == l0p1.Y)) return false; // Check if lines are parallell if (l0p1.X == l0p0.X && l1p1.X == l1p.X) return false; if (!((l0p1.X == l0p0.X && l1p1.X != l1p.X) || (l0p1.X != l0p0.X && l1p1.X == l1p.X))) { if ((l0p1.Y - l0p0.Y) / (l0p1.X - l0p0.X) == (l1p1.Y - l1p.Y) / (l1p1.X - l1p.X)) return false; } b = ((l0p0.X - l1p.X) * (l0p1.Y - l0p0.Y) + (l1p.Y - l0p0.Y) * (l0p1.X - l0p0.X)) / ((l1p1.X - l1p.X) * (l0p1.Y - l0p0.Y) - (l1p1.Y - l1p.Y) * (l0p1.X - l0p0.X)); if (l0p1.X == l0p0.X) { a = (l1p.Y - l0p0.Y + b * (l1p1.Y - l1p.Y)) / (l0p1.Y - l0p0.Y); } else { a = (l1p.X - l0p0.X + b * (l1p1.X - l1p.X)) / (l0p1.X - l0p0.X); } parameter = a; return (a >= 0.0 && a <= 1.0); } public static PointD InfiniteLinesIntersectionPoint(PointD l0p, PointD l0d, PointD l1p, PointD l1d) { double b; PointD l0p1 = l0p + Normalize(l0d); PointD l1p1 = l1p + Normalize(l1d); // Check if lines are parallell if (l0p1.X == l0p.X && l1p1.X == l1p.X) return l0p; if (!((l0p1.X == l0p.X && l1p1.X != l1p.X) || (l0p1.X != l0p.X && l1p1.X == l1p.X))) { if ((l0p1.Y - l0p.Y) / (l0p1.X - l0p.X) == (l1p1.Y - l1p.Y) / (l1p1.X - l1p.X)) return l0p; } b = ((l0p.X - l1p.X) * (l0p1.Y - l0p.Y) + (l1p.Y - l0p.Y) * (l0p1.X - l0p.X)) / ((l1p1.X - l1p.X) * (l0p1.Y - l0p.Y) - (l1p1.Y - l1p.Y) * (l0p1.X - l0p.X)); return l1p + b * l1d; } /// /// Speed in metres per second /// /// longitude and latitude for first point /// longitude and latitude for second point /// time for first point /// time for first point /// public static double CalculateSpeed(LongLat longLat0, LongLat longLat1, DateTime t0, DateTime t1) { double distance = DistancePointToPointLongLat(longLat0, longLat1); TimeSpan timeSpan = t1.Subtract(t0); double speed = distance / timeSpan.TotalSeconds; return speed; } /// /// Distance in metres between two points expressed as longitude/latitude /// /// longitude and latitude for first point /// longitude and latitude for second point /// public static double DistancePointToPointLongLat(LongLat longLat0, LongLat longLat1) { // use spherical coordinates: rho, phi, theta const double rho = 6378200; // earth radius in metres double sinPhi0 = Math.Sin(0.5 * Math.PI + longLat0.Latitude / 180.0 * Math.PI); double cosPhi0 = Math.Cos(0.5 * Math.PI + longLat0.Latitude / 180.0 * Math.PI); double sinTheta0 = Math.Sin(longLat0.Longitude / 180.0 * Math.PI); double cosTheta0 = Math.Cos(longLat0.Longitude / 180.0 * Math.PI); double sinPhi1 = Math.Sin(0.5 * Math.PI + longLat1.Latitude / 180.0 * Math.PI); double cosPhi1 = Math.Cos(0.5 * Math.PI + longLat1.Latitude / 180.0 * Math.PI); double sinTheta1 = Math.Sin(longLat1.Longitude / 180.0 * Math.PI); double cosTheta1 = Math.Cos(longLat1.Longitude / 180.0 * Math.PI); var p0 = new GeneralMatrix(3, 1); p0.SetElement(0, 0, rho * sinPhi0 * cosTheta0); p0.SetElement(1, 0, rho * sinPhi0 * sinTheta0); p0.SetElement(2, 0, rho * cosPhi0); var p1 = new GeneralMatrix(3, 1); p1.SetElement(0, 0, rho * sinPhi1 * cosTheta1); p1.SetElement(1, 0, rho * sinPhi1 * sinTheta1); p1.SetElement(2, 0, rho * cosPhi1); double distance = DistancePointToPoint(p0, p1); return distance; } public static PointD Transform(PointD p, GeneralMatrix transformationMatrix) { return ConvertUtil.ToPointD(transformationMatrix * ConvertUtil.To3x1Matrix(p)); } /// /// /// /// First point on route, in projected (metric) coordinates relative to projection origin /// First point on map, in pixels /// Second point on route, in projected (metric) coordinates relative to projection origin /// Second point on map, in pixels /// Matrix to use if calculation fails due to singular matrix /// If true, assumes orthogonal map and calculates scale and rotation. If false, calculates different scale in x and y directions and no rotation. /// public static GeneralMatrix CalculateTransformationMatrix(PointD p0, PointD q0, PointD p1, PointD q1, GeneralMatrix fallbackMatrix, bool useRotation) { try { if (useRotation) { // note that we need to mirror y pixel value in x axis double angleDifferece = GetAngleR(p1 - p0, new PointD(q1.X, -q1.Y) - new PointD(q0.X, -q0.Y)); double lengthQ = DistancePointToPoint(q0, q1); double lengthP = DistancePointToPoint(p0, p1); double scaleFactor = lengthP == 0 ? 0 : lengthQ / lengthP; double cos = Math.Cos(angleDifferece); double sin = Math.Sin(angleDifferece); // translation to origo in metric space var a = new GeneralMatrix(3, 3); a.SetElement(0, 0, 1); a.SetElement(0, 1, 0); a.SetElement(0, 2, -p0.X); a.SetElement(1, 0, 0); a.SetElement(1, 1, 1); a.SetElement(1, 2, -p0.Y); a.SetElement(2, 0, 0); a.SetElement(2, 1, 0); a.SetElement(2, 2, 1); // rotation var b = new GeneralMatrix(3, 3); b.SetElement(0, 0, cos); b.SetElement(0, 1, -sin); b.SetElement(0, 2, 0); b.SetElement(1, 0, sin); b.SetElement(1, 1, cos); b.SetElement(1, 2, 0); b.SetElement(2, 0, 0); b.SetElement(2, 1, 0); b.SetElement(2, 2, 1); // scaling, note that we need to mirror y scale around x axis var c = new GeneralMatrix(3, 3); c.SetElement(0, 0, scaleFactor); c.SetElement(0, 1, 0); c.SetElement(0, 2, 0); c.SetElement(1, 0, 0); c.SetElement(1, 1, -scaleFactor); c.SetElement(1, 2, 0); c.SetElement(2, 0, 0); c.SetElement(2, 1, 0); c.SetElement(2, 2, 1); // translation from origo to pixel space var d = new GeneralMatrix(3, 3); d.SetElement(0, 0, 1); d.SetElement(0, 1, 0); d.SetElement(0, 2, q0.X); d.SetElement(1, 0, 0); d.SetElement(1, 1, 1); d.SetElement(1, 2, q0.Y); d.SetElement(2, 0, 0); d.SetElement(2, 1, 0); d.SetElement(2, 2, 1); return d * c * b * a; } else // useRotation == false { var m1 = new GeneralMatrix(2, 2); m1.SetElement(0, 0, p0.X); m1.SetElement(0, 1, 1); m1.SetElement(1, 0, p1.X); m1.SetElement(1, 1, 1); var v1 = new GeneralMatrix(2, 1); v1.SetElement(0, 0, q0.X); v1.SetElement(1, 0, q1.X); var t1 = m1.Inverse() * v1; var m2 = new GeneralMatrix(2, 2); m2.SetElement(0, 0, p0.Y); m2.SetElement(0, 1, 1); m2.SetElement(1, 0, p1.Y); m2.SetElement(1, 1, 1); var v2 = new GeneralMatrix(2, 1); v2.SetElement(0, 0, q0.Y); v2.SetElement(1, 0, q1.Y); var t2 = m2.Inverse() * v2; var t = new GeneralMatrix(3, 3); t.SetElement(0, 0, t1.GetElement(0, 0)); t.SetElement(0, 1, 0); t.SetElement(0, 2, t1.GetElement(1, 0)); t.SetElement(1, 0, 0); t.SetElement(1, 1, t2.GetElement(0, 0)); t.SetElement(1, 2, t2.GetElement(1, 0)); t.SetElement(2, 0, 0); t.SetElement(2, 1, 0); t.SetElement(2, 2, 1); return t; } } catch (Exception) { return (GeneralMatrix)fallbackMatrix.Clone(); } } /// /// /// /// First point on route /// First point on map /// Second point on route /// Second point on map /// Third point on route /// Third point on map /// Matrix to use if calculation fails due to singular matrix /// public static GeneralMatrix CalculateTransformationMatrix(PointD p0, PointD q0, PointD p1, PointD q1, PointD p2, PointD q2, GeneralMatrix fallbackMatrix) { try { var m = new GeneralMatrix(3, 3); m.SetElement(0, 0, p0.X); m.SetElement(0, 1, p0.Y); m.SetElement(0, 2, 1.0); m.SetElement(1, 0, p1.X); m.SetElement(1, 1, p1.Y); m.SetElement(1, 2, 1.0); m.SetElement(2, 0, p2.X); m.SetElement(2, 1, p2.Y); m.SetElement(2, 2, 1.0); var v1 = new GeneralMatrix(3, 1); v1.SetElement(0, 0, q0.X); v1.SetElement(1, 0, q1.X); v1.SetElement(2, 0, q2.X); var t1 = m.Inverse() * v1; var v2 = new GeneralMatrix(3, 1); v2.SetElement(0, 0, q0.Y); v2.SetElement(1, 0, q1.Y); v2.SetElement(2, 0, q2.Y); var t2 = m.Inverse() * v2; var v3 = new GeneralMatrix(3, 1); v3.SetElement(0, 0, 1.0); v3.SetElement(1, 0, 1.0); v3.SetElement(2, 0, 1.0); var t3 = m.Inverse() * v3; var t = new GeneralMatrix(3, 3); t.SetElement(0, 0, t1.GetElement(0, 0)); t.SetElement(0, 1, t1.GetElement(1, 0)); t.SetElement(0, 2, t1.GetElement(2, 0)); t.SetElement(1, 0, t2.GetElement(0, 0)); t.SetElement(1, 1, t2.GetElement(1, 0)); t.SetElement(1, 2, t2.GetElement(2, 0)); t.SetElement(2, 0, t3.GetElement(0, 0)); t.SetElement(2, 1, t3.GetElement(1, 0)); t.SetElement(2, 2, t3.GetElement(2, 0)); return t; } catch (Exception) { return (GeneralMatrix)fallbackMatrix.Clone(); } } public static PointD Normalize(PointD vector) { if (vector.X == 0.0 && vector.Y == 0.0) return new PointD(0.0, 0.0); double length = Math.Sqrt(vector.X * vector.X + vector.Y * vector.Y); return new PointD(vector.X / length, vector.Y / length); } public static PointD GetNormalVector(PointD vector) { if (vector.X == 0.0 && vector.Y == 0.0) return new PointD(0.0, 0.0); PointD normalizedVector = Normalize(vector); return new PointD(-normalizedVector.Y, normalizedVector.X); } /// /// Gets angle in radians (-PI <= a <= PI) of vector relative to x axis. /// /// /// public static double GetAngleR(PointD v) { PointD normalizedV = Normalize(v); double dp = DotProduct(normalizedV, new PointD(1, 0)); if (dp > 1.0) dp = 1.0; else if (dp < -1.0) dp = -1.0; double angle; if (v.Y < 0) angle = 2 * Math.PI - Math.Acos(dp); else angle = Math.Acos(dp); if (angle > Math.PI) angle -= 2 * Math.PI; return angle; } /// /// Gets angle in radians (-PI <= a <= PI) between two vectors. /// /// /// /// public static double GetAngleR(PointD v0, PointD v1) { double a0 = GetAngleR(v0); double a1 = GetAngleR(v1) + 2 * Math.PI; double diff = (a1 - a0) % (2 * Math.PI); if (diff > Math.PI) diff -= 2 * Math.PI; return diff; } /// /// Gets angle in degrees (-180 <= a <= 180) of vector relative to x axis. /// /// /// public static double GetAngleD(PointD v) { return ToDegrees(GetAngleR(v)); } /// /// Gets angle in degrees (-180 <= a <= 180) between two vectors. /// /// /// /// public static double GetAngleD(PointD v0, PointD v1) { return ToDegrees(GetAngleR(v0, v1)); } public static double GetVectorDirectionR(PointD vectorStartPoint, PointD vectorEndPoint) { return ((GetAngleR(vectorEndPoint - vectorStartPoint) + Math.PI) % (2 * Math.PI)) - Math.PI; } public static double DotProduct(PointD v0, PointD v1) { return v0.X * v1.X + v0.Y * v1.Y; } public static double GetUnitLengthFromTransformationMatrix(GeneralMatrix transformationMatrix) { double v0 = transformationMatrix.GetElement(0, 0); double v1 = transformationMatrix.GetElement(1, 0); return Math.Sqrt(v0 * v0 + v1 * v1); } /// /// Returns an angle in degrees, E180CW style /// /// Angle in ExxxCW style /// public static double AnglifyD(double angleD) { return AnglifyD(angleD, AngleStyle.E180CCW); } /// /// Returns an angle in degrees /// /// Angle in ExxxCW style /// /// public static double AnglifyD(double degreeAngle, AngleStyle style) { switch (style) { case AngleStyle.E180CCW: degreeAngle = degreeAngle % 360; if (degreeAngle < -180) { degreeAngle += 360; } else if (degreeAngle >= 180) { degreeAngle -= 360; } break; default: degreeAngle = AnglifyD(degreeAngle, AngleStyle.E180CCW); degreeAngle = 90 - degreeAngle; if (degreeAngle < 0) { degreeAngle += 360; } break; } return degreeAngle; } /// /// Returns an angle in degrees /// /// /// /// public static double AnglifyD(PointD vector, AngleStyle style) { return AnglifyD(ToDegrees(GetAngleR(vector)), style); } /// /// Angles in radians /// /// /// /// public static double CombineAnglesR(double angleR0, double angleR1) { return CombineAnglesR(angleR0, 0.5, angleR1, 0.5); } /// /// Angles in radians /// /// /// /// /// /// public static double CombineAnglesR(double angleR0, double weight0, double angleR1, double weight1) { PointD v0 = weight0 * new PointD(Math.Cos(angleR0), Math.Sin(angleR0)); PointD v1 = weight1 * new PointD(Math.Cos(angleR1), Math.Sin(angleR1)); return GetAngleR(v0 + v1); } /// /// Angles in degrees /// /// /// /// public static double CombineAnglesD(double angleD0, double angleD1) { return CombineAnglesD(angleD0, 0.5, angleD1, 0.5); } /// /// Angles in radians /// /// /// /// /// /// public static double CombineAnglesD(double angleD0, double weight0, double angleD1, double weight1) { PointD v0 = weight0 * new PointD(Math.Cos(ToRadians(angleD0)), Math.Sin(ToRadians(angleD0))); PointD v1 = weight1 * new PointD(Math.Cos(ToRadians(angleD1)), Math.Sin(ToRadians(angleD1))); return ToDegrees(GetAngleR(v0 + v1)); } public static double GetAngleDifferenceD(double angle0, double angle1) { double difference = angle0 - angle1; if (difference >= 180) difference = 360 - difference; else if (difference < -180) difference = difference + 360; return difference; } public static double ToDegrees(double angleInRadians) { return angleInRadians * 180 / Math.PI; } public static double ToRadians(double angleInDegrees) { return angleInDegrees * Math.PI / 180; } public static PointD CreateNormalizedVectorFromAngleR(double angleR) { return new PointD(Math.Cos(angleR), Math.Sin(angleR)); } public static PointD CreateNormalizedVectorFromAngleD(double angleD) { return CreateNormalizedVectorFromAngleR(ToRadians(angleD)); } public static PointD Rotate(PointD point, PointD rotationCenter, double angleInRadians) { var rotated = new GeneralMatrix(new[] { 1, 0, 0, 0, 1, 0, rotationCenter.X, rotationCenter.Y, 1 }, 3) * new GeneralMatrix(new[] { Math.Cos(angleInRadians), -Math.Sin(angleInRadians), 0, Math.Sin(angleInRadians), Math.Cos(angleInRadians), 0, 0, 0, 1 }, 3) * new GeneralMatrix(new[] { 1, 0, 0, 0, 1, 0, -rotationCenter.X, -rotationCenter.Y, 1 }, 3) * ConvertUtil.To3x1Matrix(point); return new PointD(rotated.GetElement(0, 0), rotated.GetElement(1, 0)); } } public static class StatisticsUtil { public static double GetStandardDeviation(List values) { double n = values.Count; if (n == 0) return 0; double sum = 0; double squareSum = 0; foreach (var v in values) { sum += v; squareSum += v * v; } double squared = squareSum / n - (sum / n) * (sum / n); if (squared < 0) squared = 0; return Math.Sqrt(squared); } public static double GetStandardDeviation(List items) { if (items.Count == 0) return 0; double sum = 0; double squareSum = 0; double weightSum = 0; foreach (var item in items) { sum += item.WeightedValue; squareSum += item.Weight * item.Value * item.Value; weightSum += item.Weight; } double squared = squareSum / weightSum - (sum / weightSum) * (sum / weightSum); if (squared < 0) squared = 0; return Math.Sqrt(squared); } public class WeightedItem { public WeightedItem(double weight, double value) { Value = value; Weight = weight; } public double Weight { get; set; } public double Value { get; set; } public double WeightedValue { get { return Weight * Value; } } } } public static class FileFormatManager { public static List GetQuickRouteFileExtensions() { return new List(new[] { ".qrt", ".jpg", ".jpeg" }); } } [Serializable] public enum QuickRouteFileFormat { Qrt, Xml, Jpeg, Unknown } public enum RouteHandleType { Adjustment = 0, MouseHover = 1 } public enum WaypointAttribute { Pace, HeartRate, Altitude, Speed, DirectionDeviationToNextLap, ElapsedTime, Distance, Inclination, Direction, Longitude, Latitude, PixelX, PixelY, MapReadingState, MapReadingDuration, PreviousMapReadingEnd, NextMapReadingStart } public struct WaypointAttributeString { private WaypointAttribute? waypointAttribute; private readonly string name; private readonly string unit; public WaypointAttributeString(WaypointAttribute? waypointAttribute) { this.waypointAttribute = waypointAttribute; switch (waypointAttribute) { case null: name = Strings.NoSecondaryColorCoding; unit = ""; break; case BusinessEntities.WaypointAttribute.Pace: name = Strings.Pace; unit = Strings.Unit_Pace; break; case BusinessEntities.WaypointAttribute.Speed: name = Strings.Speed; unit = Strings.Unit_Speed; break; case BusinessEntities.WaypointAttribute.HeartRate: name = Strings.HeartRate; unit = Strings.Unit_HeartRate; break; case BusinessEntities.WaypointAttribute.Altitude: name = Strings.Altitude; unit = Strings.Unit_Altitude; break; case BusinessEntities.WaypointAttribute.DirectionDeviationToNextLap: name = Strings.Direction; unit = Strings.Unit_Direction; break; case BusinessEntities.WaypointAttribute.MapReadingDuration: name = Strings.MapReadingDuration; unit = Strings.Unit_Time; break; default: name = ""; unit = ""; break; } } public WaypointAttribute? WaypointAttribute { get { return waypointAttribute; } set { waypointAttribute = value; } } public override string ToString() { return Name; } public string Name { get { return name; } } public string Unit { get { return unit; } } } public enum MarkerType { Start, Lap, Stop, MouseHover, Handle, ActiveHandle, MovingActiveHandle } public enum CutType { Before, After } public enum AngleStyle { N360CW, E180CCW } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/GeneralMatrix.cs000066400000000000000000003122561446222606700272530ustar00rootroot00000000000000using System; using System.Runtime.InteropServices; using System.Runtime.Serialization; namespace QuickRoute.BusinessEntities { #region Internal Maths utility internal class Maths { /// /// sqrt(a^2 + b^2) without under/overflow. /// /// /// /// public static double Hypot(double a, double b) { double r; if (Math.Abs(a) > Math.Abs(b)) { r = b / a; r = Math.Abs(a) * Math.Sqrt(1 + r * r); } else if (b != 0) { r = a / b; r = Math.Abs(b) * Math.Sqrt(1 + r * r); } else { r = 0.0; } return r; } } #endregion // Internal Maths utility /// .NET GeneralMatrix class. /// /// The .NET GeneralMatrix Class provides the fundamental operations of numerical /// linear algebra. Various constructors create Matrices from two dimensional /// arrays of double precision floating point numbers. Various "gets" and /// "sets" provide access to submatrices and matrix elements. Several methods /// implement basic matrix arithmetic, including matrix addition and /// multiplication, matrix norms, and element-by-element array operations. /// Methods for reading and printing matrices are also included. All the /// operations in this version of the GeneralMatrix Class involve real matrices. /// Complex matrices may be handled in a future version. /// /// Five fundamental matrix decompositions, which consist of pairs or triples /// of matrices, permutation vectors, and the like, produce results in five /// decomposition classes. These decompositions are accessed by the GeneralMatrix /// class to compute solutions of simultaneous linear equations, determinants, /// inverses and other matrix functions. The five decompositions are: ///

    ///
  • Cholesky Decomposition of symmetric, positive definite matrices. ///
  • LU Decomposition of rectangular matrices. ///
  • QR Decomposition of rectangular matrices. ///
  • Singular Value Decomposition of rectangular matrices. ///
  • Eigenvalue Decomposition of both symmetric and nonsymmetric square matrices. ///
///
///
Example of use:
///

///

Solve a linear system A x = b and compute the residual norm, ||b - A x||. ///

  /// double[][] vals = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}};
  /// GeneralMatrix A = new GeneralMatrix(vals);
  /// GeneralMatrix b = GeneralMatrix.Random(3,1);
  /// GeneralMatrix x = A.Solve(b);
  /// GeneralMatrix r = A.Multiply(x).Subtract(b);
  /// double rnorm = r.NormInf();
  /// 
///
///
/// /// The MathWorks, Inc. and the National Institute of Standards and Technology. /// /// 5 August 1998 /// [Serializable] public class GeneralMatrix : System.ICloneable, System.Runtime.Serialization.ISerializable, System.IDisposable { #region Class variables /// Array for internal storage of elements. /// @serial internal array storage. /// private double[][] a; /// Row and column dimensions. /// @serial row dimension. /// @serial column dimension. /// private int m, n; #endregion // Class variables #region Constructors /// Construct an m-by-n matrix of zeros. /// Number of rows. /// /// Number of colums. /// public GeneralMatrix(int m, int n) { this.m = m; this.n = n; a = new double[m][]; for (int i = 0; i < m; i++) { a[i] = new double[n]; } } /// Construct an m-by-n constant matrix. /// Number of rows. /// /// Number of colums. /// /// Fill the matrix with this scalar value. /// public GeneralMatrix(int m, int n, double s) { this.m = m; this.n = n; a = new double[m][]; for (int i = 0; i < m; i++) { a[i] = new double[n]; } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = s; } } } /// Construct a matrix from a 2-D array. /// Two-dimensional array of doubles. /// /// All rows must have the same length /// /// /// public GeneralMatrix(double[][] A) { m = A.Length; n = A[0].Length; for (int i = 0; i < m; i++) { if (A[i].Length != n) { throw new System.ArgumentException("All rows must have the same length."); } } this.a = A; } /// Construct a matrix quickly without checking arguments. /// Two-dimensional array of doubles. /// /// Number of rows. /// /// Number of colums. /// public GeneralMatrix(double[][] A, int m, int n) { this.a = A; this.m = m; this.n = n; } /// Construct a matrix from a one-dimensional packed array /// One-dimensional array of doubles, packed by columns (ala Fortran). /// /// Number of rows. /// /// Array length must be a multiple of m. /// public GeneralMatrix(double[] vals, int m) { this.m = m; n = (m != 0 ? vals.Length / m : 0); if (m * n != vals.Length) { throw new System.ArgumentException("Array length must be a multiple of m."); } a = new double[m][]; for (int i = 0; i < m; i++) { a[i] = new double[n]; } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = vals[i + j * m]; } } } /// /// Deserialization consructor. /// /// /// protected GeneralMatrix(SerializationInfo info, StreamingContext context) { this.m = info.GetInt32("m"); this.n = info.GetInt32("n"); this.a = (double[][])info.GetValue("a", typeof(double[][])); /* A = new double[m][]; for (int i = 0; i < m; i++) { A[i] = new double[n]; } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { A[i][j] = info.GetDouble("a" + i.ToString() +"," + j.ToString()); } } */ } #endregion // Constructors #region Public Properties /// Access the internal two-dimensional array. /// Pointer to the two-dimensional array of matrix elements. /// virtual public double[][] Array { get { return a; } } /// Copy the internal two-dimensional array. /// Two-dimensional array copy of matrix elements. /// virtual public double[][] ArrayCopy { get { double[][] C = new double[m][]; for (int i = 0; i < m; i++) { C[i] = new double[n]; } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = a[i][j]; } } return C; } } /// Make a one-dimensional column packed copy of the internal array. /// Matrix elements packed in a one-dimensional array by columns. /// virtual public double[] ColumnPackedCopy { get { double[] vals = new double[m * n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { vals[i + j * m] = a[i][j]; } } return vals; } } /// Make a one-dimensional row packed copy of the internal array. /// Matrix elements packed in a one-dimensional array by rows. /// virtual public double[] RowPackedCopy { get { double[] vals = new double[m * n]; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { vals[i * n + j] = a[i][j]; } } return vals; } } /// Get row dimension. /// m, the number of rows. /// virtual public int RowDimension { get { return m; } } /// Get column dimension. /// n, the number of columns. /// virtual public int ColumnDimension { get { return n; } } #endregion // Public Properties #region Public Methods /// Construct a matrix from a copy of a 2-D array. /// Two-dimensional array of doubles. /// /// All rows must have the same length /// public static GeneralMatrix Create(double[][] A) { int m = A.Length; int n = A[0].Length; GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { if (A[i].Length != n) { throw new System.ArgumentException("All rows must have the same length."); } for (int j = 0; j < n; j++) { C[i][j] = A[i][j]; } } return X; } /// Make a deep copy of a matrix public virtual GeneralMatrix Copy() { GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = a[i][j]; } } return X; } /// Get a single element. /// Row index. /// /// Column index. /// /// A(i,j) /// /// /// public virtual double GetElement(int i, int j) { return a[i][j]; } /// Get a submatrix. /// Initial row index /// /// Final row index /// /// Initial column index /// /// Final column index /// /// A(i0:i1,j0:j1) /// /// Submatrix indices /// public virtual GeneralMatrix GetMatrix(int i0, int i1, int j0, int j1) { GeneralMatrix X = new GeneralMatrix(i1 - i0 + 1, j1 - j0 + 1); double[][] B = X.Array; try { for (int i = i0; i <= i1; i++) { for (int j = j0; j <= j1; j++) { B[i - i0][j - j0] = a[i][j]; } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } return X; } /// Get a submatrix. /// Array of row indices. /// /// Array of column indices. /// /// A(r(:),c(:)) /// /// Submatrix indices /// public virtual GeneralMatrix GetMatrix(int[] r, int[] c) { GeneralMatrix X = new GeneralMatrix(r.Length, c.Length); double[][] B = X.Array; try { for (int i = 0; i < r.Length; i++) { for (int j = 0; j < c.Length; j++) { B[i][j] = a[r[i]][c[j]]; } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } return X; } /// Get a submatrix. /// Initial row index /// /// Final row index /// /// Array of column indices. /// /// A(i0:i1,c(:)) /// /// Submatrix indices /// public virtual GeneralMatrix GetMatrix(int i0, int i1, int[] c) { GeneralMatrix X = new GeneralMatrix(i1 - i0 + 1, c.Length); double[][] B = X.Array; try { for (int i = i0; i <= i1; i++) { for (int j = 0; j < c.Length; j++) { B[i - i0][j] = a[i][c[j]]; } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } return X; } /// Get a submatrix. /// Array of row indices. /// /// Initial column index /// /// Final column index /// /// A(r(:),j0:j1) /// /// Submatrix indices /// public virtual GeneralMatrix GetMatrix(int[] r, int j0, int j1) { GeneralMatrix X = new GeneralMatrix(r.Length, j1 - j0 + 1); double[][] B = X.Array; try { for (int i = 0; i < r.Length; i++) { for (int j = j0; j <= j1; j++) { B[i][j - j0] = a[r[i]][j]; } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } return X; } /// Set a single element. /// Row index. /// /// Column index. /// /// A(i,j). /// /// /// public virtual void SetElement(int i, int j, double s) { a[i][j] = s; } /// Set a submatrix. /// Initial row index /// /// Final row index /// /// Initial column index /// /// Final column index /// /// A(i0:i1,j0:j1) /// /// Submatrix indices /// public virtual void SetMatrix(int i0, int i1, int j0, int j1, GeneralMatrix X) { try { for (int i = i0; i <= i1; i++) { for (int j = j0; j <= j1; j++) { a[i][j] = X.GetElement(i - i0, j - j0); } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } } /// Set a submatrix. /// Array of row indices. /// /// Array of column indices. /// /// A(r(:),c(:)) /// /// Submatrix indices /// public virtual void SetMatrix(int[] r, int[] c, GeneralMatrix X) { try { for (int i = 0; i < r.Length; i++) { for (int j = 0; j < c.Length; j++) { a[r[i]][c[j]] = X.GetElement(i, j); } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } } /// Set a submatrix. /// Array of row indices. /// /// Initial column index /// /// Final column index /// /// A(r(:),j0:j1) /// /// Submatrix indices /// public virtual void SetMatrix(int[] r, int j0, int j1, GeneralMatrix X) { try { for (int i = 0; i < r.Length; i++) { for (int j = j0; j <= j1; j++) { a[r[i]][j] = X.GetElement(i, j - j0); } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } } /// Set a submatrix. /// Initial row index /// /// Final row index /// /// Array of column indices. /// /// A(i0:i1,c(:)) /// /// Submatrix indices /// public virtual void SetMatrix(int i0, int i1, int[] c, GeneralMatrix X) { try { for (int i = i0; i <= i1; i++) { for (int j = 0; j < c.Length; j++) { a[i][c[j]] = X.GetElement(i - i0, j); } } } catch (System.IndexOutOfRangeException e) { throw new System.IndexOutOfRangeException("Submatrix indices", e); } } /// Matrix transpose. /// A' /// public virtual GeneralMatrix Transpose() { GeneralMatrix X = new GeneralMatrix(n, m); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[j][i] = a[i][j]; } } return X; } /// One norm /// maximum column sum. /// public virtual double Norm1() { double f = 0; for (int j = 0; j < n; j++) { double s = 0; for (int i = 0; i < m; i++) { s += System.Math.Abs(a[i][j]); } f = System.Math.Max(f, s); } return f; } /// Two norm /// maximum singular value. /// public virtual double Norm2() { return (new SingularValueDecomposition(this).Norm2()); } /// Infinity norm /// maximum row sum. /// public virtual double NormInf() { double f = 0; for (int i = 0; i < m; i++) { double s = 0; for (int j = 0; j < n; j++) { s += System.Math.Abs(a[i][j]); } f = System.Math.Max(f, s); } return f; } /// Frobenius norm /// sqrt of sum of squares of all elements. /// public virtual double NormF() { double f = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { f = Maths.Hypot(f, a[i][j]); } } return f; } /// Unary minus /// -A /// public virtual GeneralMatrix UnaryMinus() { GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = -a[i][j]; } } return X; } /// C = A + B /// another matrix /// /// A + B /// public virtual GeneralMatrix Add(GeneralMatrix B) { CheckMatrixDimensions(B); GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = a[i][j] + B.a[i][j]; } } return X; } /// A = A + B /// another matrix /// /// A + B /// public virtual GeneralMatrix AddEquals(GeneralMatrix B) { CheckMatrixDimensions(B); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = a[i][j] + B.a[i][j]; } } return this; } /// C = A - B /// another matrix /// /// A - B /// public virtual GeneralMatrix Subtract(GeneralMatrix B) { CheckMatrixDimensions(B); GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = a[i][j] - B.a[i][j]; } } return X; } /// A = A - B /// another matrix /// /// A - B /// public virtual GeneralMatrix SubtractEquals(GeneralMatrix B) { CheckMatrixDimensions(B); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = a[i][j] - B.a[i][j]; } } return this; } /// Element-by-element multiplication, C = A.*B /// another matrix /// /// A.*B /// public virtual GeneralMatrix ArrayMultiply(GeneralMatrix B) { CheckMatrixDimensions(B); GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = a[i][j] * B.a[i][j]; } } return X; } /// Element-by-element multiplication in place, A = A.*B /// another matrix /// /// A.*B /// public virtual GeneralMatrix ArrayMultiplyEquals(GeneralMatrix B) { CheckMatrixDimensions(B); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = a[i][j] * B.a[i][j]; } } return this; } /// Element-by-element right division, C = A./B /// another matrix /// /// A./B /// public virtual GeneralMatrix ArrayRightDivide(GeneralMatrix B) { CheckMatrixDimensions(B); GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = a[i][j] / B.a[i][j]; } } return X; } /// Element-by-element right division in place, A = A./B /// another matrix /// /// A./B /// public virtual GeneralMatrix ArrayRightDivideEquals(GeneralMatrix B) { CheckMatrixDimensions(B); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = a[i][j] / B.a[i][j]; } } return this; } /// Element-by-element left division, C = A.\B /// another matrix /// /// A.\B /// public virtual GeneralMatrix ArrayLeftDivide(GeneralMatrix B) { CheckMatrixDimensions(B); GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = B.a[i][j] / a[i][j]; } } return X; } /// Element-by-element left division in place, A = A.\B /// another matrix /// /// A.\B /// public virtual GeneralMatrix ArrayLeftDivideEquals(GeneralMatrix B) { CheckMatrixDimensions(B); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = B.a[i][j] / a[i][j]; } } return this; } /// Multiply a matrix by a scalar, C = s*A /// scalar /// /// s*A /// public virtual GeneralMatrix Multiply(double s) { GeneralMatrix X = new GeneralMatrix(m, n); double[][] C = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { C[i][j] = s * a[i][j]; } } return X; } /// Multiply a matrix by a scalar in place, A = s*A /// scalar /// /// replace A by s*A /// public virtual GeneralMatrix MultiplyEquals(double s) { for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { a[i][j] = s * a[i][j]; } } return this; } /// Linear algebraic matrix multiplication, A * B /// another matrix /// /// Matrix product, A * B /// /// Matrix inner dimensions must agree. /// public virtual GeneralMatrix Multiply(GeneralMatrix B) { if (B.m != n) { throw new System.ArgumentException("GeneralMatrix inner dimensions must agree."); } GeneralMatrix X = new GeneralMatrix(m, B.n); double[][] C = X.Array; double[] Bcolj = new double[n]; for (int j = 0; j < B.n; j++) { for (int k = 0; k < n; k++) { Bcolj[k] = B.a[k][j]; } for (int i = 0; i < m; i++) { double[] Arowi = a[i]; double s = 0; for (int k = 0; k < n; k++) { s += Arowi[k] * Bcolj[k]; } C[i][j] = s; } } return X; } #region Operator Overloading /// /// Addition of matrices /// /// /// /// public static GeneralMatrix operator +(GeneralMatrix m1, GeneralMatrix m2) { return m1.Add(m2); } /// /// Subtraction of matrices /// /// /// /// public static GeneralMatrix operator -(GeneralMatrix m1, GeneralMatrix m2) { return m1.Subtract(m2); } /// /// Multiplication of matrices /// /// /// /// public static GeneralMatrix operator *(GeneralMatrix m1, GeneralMatrix m2) { return m1.Multiply(m2); } #endregion //Operator Overloading /// LU Decomposition /// LUDecomposition /// /// /// public virtual LUDecomposition LUD() { return new LUDecomposition(this); } /// QR Decomposition /// QRDecomposition /// /// /// public virtual QRDecomposition QRD() { return new QRDecomposition(this); } /// Cholesky Decomposition /// CholeskyDecomposition /// /// /// public virtual CholeskyDecomposition chol() { return new CholeskyDecomposition(this); } /// Singular Value Decomposition /// SingularValueDecomposition /// /// /// public virtual SingularValueDecomposition SVD() { return new SingularValueDecomposition(this); } /// Eigenvalue Decomposition /// EigenvalueDecomposition /// /// /// public virtual EigenvalueDecomposition Eigen() { return new EigenvalueDecomposition(this); } /// Solve A*X = B /// right hand side /// /// solution if A is square, least squares solution otherwise /// public virtual GeneralMatrix Solve(GeneralMatrix B) { return (m == n ? (new LUDecomposition(this)).Solve(B) : (new QRDecomposition(this)).Solve(B)); } /// Solve X*A = B, which is also A'*X' = B' /// right hand side /// /// solution if A is square, least squares solution otherwise. /// public virtual GeneralMatrix SolveTranspose(GeneralMatrix B) { return Transpose().Solve(B.Transpose()); } /// Matrix inverse or pseudoinverse /// inverse(A) if A is square, pseudoinverse otherwise. /// public virtual GeneralMatrix Inverse() { return Solve(Identity(m, m)); } /// GeneralMatrix determinant /// determinant /// public virtual double Determinant() { return new LUDecomposition(this).Determinant(); } /// GeneralMatrix rank /// effective numerical rank, obtained from SVD. /// public virtual int Rank() { return new SingularValueDecomposition(this).Rank(); } /// Matrix condition (2 norm) /// ratio of largest to smallest singular value. /// public virtual double Condition() { return new SingularValueDecomposition(this).Condition(); } /// Matrix trace. /// sum of the diagonal elements. /// public virtual double Trace() { double t = 0; for (int i = 0; i < System.Math.Min(m, n); i++) { t += a[i][i]; } return t; } /// Generate matrix with random elements /// Number of rows. /// /// Number of colums. /// /// An m-by-n matrix with uniformly distributed random elements. /// public static GeneralMatrix Random(int m, int n) { System.Random random = new System.Random(); GeneralMatrix A = new GeneralMatrix(m, n); double[][] X = A.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { X[i][j] = random.NextDouble(); } } return A; } /// Generate identity matrix /// Number of rows. /// /// Number of colums. /// /// An m-by-n matrix with ones on the diagonal and zeros elsewhere. /// public static GeneralMatrix Identity(int m, int n) { GeneralMatrix A = new GeneralMatrix(m, n); double[][] X = A.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { X[i][j] = (i == j ? 1.0 : 0.0); } } return A; } #endregion // Public Methods #region Private Methods /// Check if size(A) == size(B) * private void CheckMatrixDimensions(GeneralMatrix B) { if (B.m != m || B.n != n) { throw new System.ArgumentException("GeneralMatrix dimensions must agree."); } } #endregion // Private Methods #region Implement IDisposable /// /// Do not make this method virtual. /// A derived class should not be able to override this method. /// public void Dispose() { Dispose(true); } /// /// Dispose(bool disposing) executes in two distinct scenarios. /// If disposing equals true, the method has been called directly /// or indirectly by a user's code. Managed and unmanaged resources /// can be disposed. /// If disposing equals false, the method has been called by the /// runtime from inside the finalizer and you should not reference /// other objects. Only unmanaged resources can be disposed. /// /// private void Dispose(bool disposing) { // This object will be cleaned up by the Dispose method. // Therefore, you should call GC.SupressFinalize to // take this object off the finalization queue // and prevent finalization code for this object // from executing a second time. if (disposing) GC.SuppressFinalize(this); } /// /// This destructor will run only if the Dispose method /// does not get called. /// It gives your base class the opportunity to finalize. /// Do not provide destructors in types derived from this class. /// ~GeneralMatrix() { // Do not re-create Dispose clean-up code here. // Calling Dispose(false) is optimal in terms of // readability and maintainability. Dispose(false); } #endregion // Implement IDisposable /// Clone the GeneralMatrix object. public System.Object Clone() { return this.Copy(); } /// /// A method called when serializing this class /// /// /// void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("m", m); info.AddValue("n", n); info.AddValue("a", a); } } /// LU Decomposition. /// For an m-by-n matrix A with m >= n, the LU decomposition is an m-by-n /// unit lower triangular matrix L, an n-by-n upper triangular matrix U, /// and a permutation vector piv of length m so that A(piv,:) = L*U. /// If m < n, then L is m-by-m and U is m-by-n. /// The LU decompostion with pivoting always exists, even if the matrix is /// singular, so the constructor will never fail. The primary use of the /// LU decomposition is in the solution of square systems of simultaneous /// linear equations. This will fail if IsNonSingular() returns false. /// [Serializable] public class LUDecomposition : System.Runtime.Serialization.ISerializable { #region Class variables /// Array for internal storage of decomposition. /// @serial internal array storage. /// private double[][] lu; /// Row and column dimensions, and pivot sign. /// @serial column dimension. /// @serial row dimension. /// @serial pivot sign. /// private int m, n, pivsign; /// Internal storage of pivot vector. /// @serial pivot vector. /// private int[] piv; #endregion // Class variables #region Constructor /// LU Decomposition /// Rectangular matrix /// /// Structure to access L, U and piv. /// public LUDecomposition(GeneralMatrix A) { // Use a "left-looking", dot-product, Crout/Doolittle algorithm. lu = A.ArrayCopy; m = A.RowDimension; n = A.ColumnDimension; piv = new int[m]; for (int i = 0; i < m; i++) { piv[i] = i; } pivsign = 1; double[] LUrowi; double[] LUcolj = new double[m]; // Outer loop. for (int j = 0; j < n; j++) { // Make a copy of the j-th column to localize references. for (int i = 0; i < m; i++) { LUcolj[i] = lu[i][j]; } // Apply previous transformations. for (int i = 0; i < m; i++) { LUrowi = lu[i]; // Most of the time is spent in the following dot product. int kmax = System.Math.Min(i, j); double s = 0.0; for (int k = 0; k < kmax; k++) { s += LUrowi[k] * LUcolj[k]; } LUrowi[j] = LUcolj[i] -= s; } // Find pivot and exchange if necessary. int p = j; for (int i = j + 1; i < m; i++) { if (System.Math.Abs(LUcolj[i]) > System.Math.Abs(LUcolj[p])) { p = i; } } if (p != j) { for (int k = 0; k < n; k++) { double t = lu[p][k]; lu[p][k] = lu[j][k]; lu[j][k] = t; } int k2 = piv[p]; piv[p] = piv[j]; piv[j] = k2; pivsign = -pivsign; } // Compute multipliers. if (j < m & lu[j][j] != 0.0) { for (int i = j + 1; i < m; i++) { lu[i][j] /= lu[j][j]; } } } } #endregion // Constructor #region Public Properties /// Is the matrix nonsingular? /// true if U, and hence A, is nonsingular. /// virtual public bool IsNonSingular { get { for (int j = 0; j < n; j++) { if (lu[j][j] == 0) return false; } return true; } } /// Return lower triangular factor /// L /// virtual public GeneralMatrix L { get { GeneralMatrix X = new GeneralMatrix(m, n); double[][] L = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i > j) { L[i][j] = lu[i][j]; } else if (i == j) { L[i][j] = 1.0; } else { L[i][j] = 0.0; } } } return X; } } /// Return upper triangular factor /// U /// virtual public GeneralMatrix U { get { GeneralMatrix X = new GeneralMatrix(n, n); double[][] U = X.Array; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i <= j) { U[i][j] = lu[i][j]; } else { U[i][j] = 0.0; } } } return X; } } /// Return pivot permutation vector /// piv /// virtual public int[] Pivot { get { int[] p = new int[m]; for (int i = 0; i < m; i++) { p[i] = piv[i]; } return p; } } /// Return pivot permutation vector as a one-dimensional double array /// (double) piv /// virtual public double[] DoublePivot { get { double[] vals = new double[m]; for (int i = 0; i < m; i++) { vals[i] = (double)piv[i]; } return vals; } } #endregion // Public Properties #region Public Methods /// Determinant /// det(A) /// /// Matrix must be square /// public virtual double Determinant() { if (m != n) { throw new System.ArgumentException("Matrix must be square."); } double d = (double)pivsign; for (int j = 0; j < n; j++) { d *= lu[j][j]; } return d; } /// Solve A*X = B /// A Matrix with as many rows as A and any number of columns. /// /// X so that L*U*X = B(piv,:) /// /// Matrix row dimensions must agree. /// /// Matrix is singular. /// public virtual GeneralMatrix Solve(GeneralMatrix B) { if (B.RowDimension != m) { throw new System.ArgumentException("Matrix row dimensions must agree."); } if (!this.IsNonSingular) { throw new System.SystemException("Matrix is singular."); } // Copy right hand side with pivoting int nx = B.ColumnDimension; GeneralMatrix Xmat = B.GetMatrix(piv, 0, nx - 1); double[][] X = Xmat.Array; // Solve L*Y = B(piv,:) for (int k = 0; k < n; k++) { for (int i = k + 1; i < n; i++) { for (int j = 0; j < nx; j++) { X[i][j] -= X[k][j] * lu[i][k]; } } } // Solve U*X = Y; for (int k = n - 1; k >= 0; k--) { for (int j = 0; j < nx; j++) { X[k][j] /= lu[k][k]; } for (int i = 0; i < k; i++) { for (int j = 0; j < nx; j++) { X[i][j] -= X[k][j] * lu[i][k]; } } } return Xmat; } #endregion // Public Methods // A method called when serializing this class. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { } } /// QR Decomposition. /// For an m-by-n matrix A with m >= n, the QR decomposition is an m-by-n /// orthogonal matrix Q and an n-by-n upper triangular matrix R so that /// A = Q*R. /// /// The QR decompostion always exists, even if the matrix does not have /// full rank, so the constructor will never fail. The primary use of the /// QR decomposition is in the least squares solution of nonsquare systems /// of simultaneous linear equations. This will fail if IsFullRank() /// returns false. /// [Serializable] public class QRDecomposition : System.Runtime.Serialization.ISerializable { #region Class variables /// Array for internal storage of decomposition. /// @serial internal array storage. /// private double[][] qr; /// Row and column dimensions. /// @serial column dimension. /// @serial row dimension. /// private int m, n; /// Array for internal storage of diagonal of R. /// @serial diagonal of R. /// private double[] rDiag; #endregion // Class variables #region Constructor /// QR Decomposition, computed by Householder reflections. /// Rectangular matrix /// /// Structure to access R and the Householder vectors and compute Q. /// public QRDecomposition(GeneralMatrix A) { // Initialize. qr = A.ArrayCopy; m = A.RowDimension; n = A.ColumnDimension; rDiag = new double[n]; // Main loop. for (int k = 0; k < n; k++) { // Compute 2-norm of k-th column without under/overflow. double nrm = 0; for (int i = k; i < m; i++) { nrm = Maths.Hypot(nrm, qr[i][k]); } if (nrm != 0.0) { // Form k-th Householder vector. if (qr[k][k] < 0) { nrm = -nrm; } for (int i = k; i < m; i++) { qr[i][k] /= nrm; } qr[k][k] += 1.0; // Apply transformation to remaining columns. for (int j = k + 1; j < n; j++) { double s = 0.0; for (int i = k; i < m; i++) { s += qr[i][k] * qr[i][j]; } s = (-s) / qr[k][k]; for (int i = k; i < m; i++) { qr[i][j] += s * qr[i][k]; } } } rDiag[k] = -nrm; } } #endregion // Constructor #region Public Properties /// Is the matrix full rank? /// true if R, and hence A, has full rank. /// virtual public bool FullRank { get { for (int j = 0; j < n; j++) { if (rDiag[j] == 0) return false; } return true; } } /// Return the Householder vectors /// Lower trapezoidal matrix whose columns define the reflections /// virtual public GeneralMatrix H { get { GeneralMatrix X = new GeneralMatrix(m, n); double[][] H = X.Array; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i >= j) { H[i][j] = qr[i][j]; } else { H[i][j] = 0.0; } } } return X; } } /// Return the upper triangular factor /// R /// virtual public GeneralMatrix R { get { GeneralMatrix X = new GeneralMatrix(n, n); double[][] R = X.Array; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i < j) { R[i][j] = qr[i][j]; } else if (i == j) { R[i][j] = rDiag[i]; } else { R[i][j] = 0.0; } } } return X; } } /// Generate and return the (economy-sized) orthogonal factor /// Q /// virtual public GeneralMatrix Q { get { GeneralMatrix X = new GeneralMatrix(m, n); double[][] Q = X.Array; for (int k = n - 1; k >= 0; k--) { for (int i = 0; i < m; i++) { Q[i][k] = 0.0; } Q[k][k] = 1.0; for (int j = k; j < n; j++) { if (qr[k][k] != 0) { double s = 0.0; for (int i = k; i < m; i++) { s += qr[i][k] * Q[i][j]; } s = (-s) / qr[k][k]; for (int i = k; i < m; i++) { Q[i][j] += s * qr[i][k]; } } } } return X; } } #endregion // Public Properties #region Public Methods /// Least squares solution of A*X = B /// A Matrix with as many rows as A and any number of columns. /// /// X that minimizes the two norm of Q*R*X-B. /// /// Matrix row dimensions must agree. /// /// Matrix is rank deficient. /// public virtual GeneralMatrix Solve(GeneralMatrix B) { if (B.RowDimension != m) { throw new System.ArgumentException("GeneralMatrix row dimensions must agree."); } if (!this.FullRank) { throw new System.SystemException("Matrix is rank deficient."); } // Copy right hand side int nx = B.ColumnDimension; double[][] X = B.ArrayCopy; // Compute Y = transpose(Q)*B for (int k = 0; k < n; k++) { for (int j = 0; j < nx; j++) { double s = 0.0; for (int i = k; i < m; i++) { s += qr[i][k] * X[i][j]; } s = (-s) / qr[k][k]; for (int i = k; i < m; i++) { X[i][j] += s * qr[i][k]; } } } // Solve R*X = Y; for (int k = n - 1; k >= 0; k--) { for (int j = 0; j < nx; j++) { X[k][j] /= rDiag[k]; } for (int i = 0; i < k; i++) { for (int j = 0; j < nx; j++) { X[i][j] -= X[k][j] * qr[i][k]; } } } return (new GeneralMatrix(X, n, nx).GetMatrix(0, n - 1, 0, nx - 1)); } #endregion // Public Methods // A method called when serializing this class. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { } } /// Cholesky Decomposition. /// For a symmetric, positive definite matrix A, the Cholesky decomposition /// is an lower triangular matrix L so that A = L*L'. /// If the matrix is not symmetric or positive definite, the constructor /// returns a partial decomposition and sets an internal flag that may /// be queried by the isSPD() method. /// [Serializable] public class CholeskyDecomposition : System.Runtime.Serialization.ISerializable { #region Class variables /// Array for internal storage of decomposition. /// @serial internal array storage. /// private double[][] l; /// Row and column dimension (square matrix). /// @serial matrix dimension. /// private int n; /// Symmetric and positive definite flag. /// @serial is symmetric and positive definite flag. /// private bool isspd; #endregion // Class variables #region Constructor /// Cholesky algorithm for symmetric and positive definite matrix. /// Square, symmetric matrix. /// /// Structure to access L and isspd flag. /// public CholeskyDecomposition(GeneralMatrix Arg) { // Initialize. double[][] A = Arg.Array; n = Arg.RowDimension; l = new double[n][]; for (int i = 0; i < n; i++) { l[i] = new double[n]; } isspd = (Arg.ColumnDimension == n); // Main loop. for (int j = 0; j < n; j++) { double[] Lrowj = l[j]; double d = 0.0; for (int k = 0; k < j; k++) { double[] Lrowk = l[k]; double s = 0.0; for (int i = 0; i < k; i++) { s += Lrowk[i] * Lrowj[i]; } Lrowj[k] = s = (A[j][k] - s) / l[k][k]; d = d + s * s; isspd = isspd & (A[k][j] == A[j][k]); } d = A[j][j] - d; isspd = isspd & (d > 0.0); l[j][j] = System.Math.Sqrt(System.Math.Max(d, 0.0)); for (int k = j + 1; k < n; k++) { l[j][k] = 0.0; } } } #endregion // Constructor #region Public Properties /// Is the matrix symmetric and positive definite? /// true if A is symmetric and positive definite. /// virtual public bool SPD { get { return isspd; } } #endregion // Public Properties #region Public Methods /// Return triangular factor. /// L /// public virtual GeneralMatrix GetL() { return new GeneralMatrix(l, n, n); } /// Solve A*X = B /// A Matrix with as many rows as A and any number of columns. /// /// X so that L*L'*X = B /// /// Matrix row dimensions must agree. /// /// Matrix is not symmetric positive definite. /// public virtual GeneralMatrix Solve(GeneralMatrix B) { if (B.RowDimension != n) { throw new System.ArgumentException("Matrix row dimensions must agree."); } if (!isspd) { throw new System.SystemException("Matrix is not symmetric positive definite."); } // Copy right hand side. double[][] X = B.ArrayCopy; int nx = B.ColumnDimension; // Solve L*Y = B; for (int k = 0; k < n; k++) { for (int i = k + 1; i < n; i++) { for (int j = 0; j < nx; j++) { X[i][j] -= X[k][j] * l[i][k]; } } for (int j = 0; j < nx; j++) { X[k][j] /= l[k][k]; } } // Solve L'*X = Y; for (int k = n - 1; k >= 0; k--) { for (int j = 0; j < nx; j++) { X[k][j] /= l[k][k]; } for (int i = 0; i < k; i++) { for (int j = 0; j < nx; j++) { X[i][j] -= X[k][j] * l[k][i]; } } } return new GeneralMatrix(X, n, nx); } #endregion // Public Methods // A method called when serializing this class. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { } } /// Eigenvalues and eigenvectors of a real matrix. /// If A is symmetric, then A = V*D*V' where the eigenvalue matrix D is /// diagonal and the eigenvector matrix V is orthogonal. /// I.e. A = V.Multiply(D.Multiply(V.Transpose())) and /// V.Multiply(V.Transpose()) equals the identity matrix. /// If A is not symmetric, then the eigenvalue matrix D is block diagonal /// with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, /// lambda + i*mu, in 2-by-2 blocks, [lambda, mu; -mu, lambda]. The /// columns of V represent the eigenvectors in the sense that A*V = V*D, /// i.e. A.Multiply(V) equals V.Multiply(D). The matrix V may be badly /// conditioned, or even singular, so the validity of the equation /// A = V*D*Inverse(V) depends upon V.cond(). /// /// [Serializable] public class EigenvalueDecomposition : System.Runtime.Serialization.ISerializable { #region Class variables /// Row and column dimension (square matrix). /// @serial matrix dimension. /// private int n; /// Symmetry flag. /// @serial internal symmetry flag. /// private bool issymmetric; /// Arrays for internal storage of eigenvalues. /// @serial internal storage of eigenvalues. /// private double[] d, e; /// Array for internal storage of eigenvectors. /// @serial internal storage of eigenvectors. /// private double[][] v; /// Array for internal storage of nonsymmetric Hessenberg form. /// @serial internal storage of nonsymmetric Hessenberg form. /// private double[][] H; /// Working storage for nonsymmetric algorithm. /// @serial working storage for nonsymmetric algorithm. /// private double[] ort; #endregion // Class variables #region Private Methods // Symmetric Householder reduction to tridiagonal form. private void tred2() { // This is derived from the Algol procedures tred2 by // Bowdler, Martin, Reinsch, and Wilkinson, Handbook for // Auto. Comp., Vol.ii-Linear Algebra, and the corresponding // Fortran subroutine in EISPACK. for (int j = 0; j < n; j++) { d[j] = v[n - 1][j]; } // Householder reduction to tridiagonal form. for (int i = n - 1; i > 0; i--) { // Scale to avoid under/overflow. double scale = 0.0; double h = 0.0; for (int k = 0; k < i; k++) { scale = scale + System.Math.Abs(d[k]); } if (scale == 0.0) { e[i] = d[i - 1]; for (int j = 0; j < i; j++) { d[j] = v[i - 1][j]; v[i][j] = 0.0; v[j][i] = 0.0; } } else { // Generate Householder vector. for (int k = 0; k < i; k++) { d[k] /= scale; h += d[k] * d[k]; } double f = d[i - 1]; double g = System.Math.Sqrt(h); if (f > 0) { g = -g; } e[i] = scale * g; h = h - f * g; d[i - 1] = f - g; for (int j = 0; j < i; j++) { e[j] = 0.0; } // Apply similarity transformation to remaining columns. for (int j = 0; j < i; j++) { f = d[j]; v[j][i] = f; g = e[j] + v[j][j] * f; for (int k = j + 1; k <= i - 1; k++) { g += v[k][j] * d[k]; e[k] += v[k][j] * f; } e[j] = g; } f = 0.0; for (int j = 0; j < i; j++) { e[j] /= h; f += e[j] * d[j]; } double hh = f / (h + h); for (int j = 0; j < i; j++) { e[j] -= hh * d[j]; } for (int j = 0; j < i; j++) { f = d[j]; g = e[j]; for (int k = j; k <= i - 1; k++) { v[k][j] -= (f * e[k] + g * d[k]); } d[j] = v[i - 1][j]; v[i][j] = 0.0; } } d[i] = h; } // Accumulate transformations. for (int i = 0; i < n - 1; i++) { v[n - 1][i] = v[i][i]; v[i][i] = 1.0; double h = d[i + 1]; if (h != 0.0) { for (int k = 0; k <= i; k++) { d[k] = v[k][i + 1] / h; } for (int j = 0; j <= i; j++) { double g = 0.0; for (int k = 0; k <= i; k++) { g += v[k][i + 1] * v[k][j]; } for (int k = 0; k <= i; k++) { v[k][j] -= g * d[k]; } } } for (int k = 0; k <= i; k++) { v[k][i + 1] = 0.0; } } for (int j = 0; j < n; j++) { d[j] = v[n - 1][j]; v[n - 1][j] = 0.0; } v[n - 1][n - 1] = 1.0; e[0] = 0.0; } // Symmetric tridiagonal QL algorithm. private void tql2() { // This is derived from the Algol procedures tql2, by // Bowdler, Martin, Reinsch, and Wilkinson, Handbook for // Auto. Comp., Vol.ii-Linear Algebra, and the corresponding // Fortran subroutine in EISPACK. for (int i = 1; i < n; i++) { e[i - 1] = e[i]; } e[n - 1] = 0.0; double f = 0.0; double tst1 = 0.0; double eps = System.Math.Pow(2.0, -52.0); for (int l = 0; l < n; l++) { // Find small subdiagonal element tst1 = System.Math.Max(tst1, System.Math.Abs(d[l]) + System.Math.Abs(e[l])); int m = l; while (m < n) { if (System.Math.Abs(e[m]) <= eps * tst1) { break; } m++; } // If m == l, d[l] is an eigenvalue, // otherwise, iterate. if (m > l) { int iter = 0; do { iter = iter + 1; // (Could check iteration count here.) // Compute implicit shift double g = d[l]; double p = (d[l + 1] - g) / (2.0 * e[l]); double r = Maths.Hypot(p, 1.0); if (p < 0) { r = -r; } d[l] = e[l] / (p + r); d[l + 1] = e[l] * (p + r); double dl1 = d[l + 1]; double h = g - d[l]; for (int i = l + 2; i < n; i++) { d[i] -= h; } f = f + h; // Implicit QL transformation. p = d[m]; double c = 1.0; double c2 = c; double c3 = c; double el1 = e[l + 1]; double s = 0.0; double s2 = 0.0; for (int i = m - 1; i >= l; i--) { c3 = c2; c2 = c; s2 = s; g = c * e[i]; h = c * p; r = Maths.Hypot(p, e[i]); e[i + 1] = s * r; s = e[i] / r; c = p / r; p = c * d[i] - s * g; d[i + 1] = h + s * (c * g + s * d[i]); // Accumulate transformation. for (int k = 0; k < n; k++) { h = v[k][i + 1]; v[k][i + 1] = s * v[k][i] + c * h; v[k][i] = c * v[k][i] - s * h; } } p = (-s) * s2 * c3 * el1 * e[l] / dl1; e[l] = s * p; d[l] = c * p; // Check for convergence. } while (System.Math.Abs(e[l]) > eps * tst1); } d[l] = d[l] + f; e[l] = 0.0; } // Sort eigenvalues and corresponding vectors. for (int i = 0; i < n - 1; i++) { int k = i; double p = d[i]; for (int j = i + 1; j < n; j++) { if (d[j] < p) { k = j; p = d[j]; } } if (k != i) { d[k] = d[i]; d[i] = p; for (int j = 0; j < n; j++) { p = v[j][i]; v[j][i] = v[j][k]; v[j][k] = p; } } } } // Nonsymmetric reduction to Hessenberg form. private void orthes() { // This is derived from the Algol procedures orthes and ortran, // by Martin and Wilkinson, Handbook for Auto. Comp., // Vol.ii-Linear Algebra, and the corresponding // Fortran subroutines in EISPACK. int low = 0; int high = n - 1; for (int m = low + 1; m <= high - 1; m++) { // Scale column. double scale = 0.0; for (int i = m; i <= high; i++) { scale = scale + System.Math.Abs(H[i][m - 1]); } if (scale != 0.0) { // Compute Householder transformation. double h = 0.0; for (int i = high; i >= m; i--) { ort[i] = H[i][m - 1] / scale; h += ort[i] * ort[i]; } double g = System.Math.Sqrt(h); if (ort[m] > 0) { g = -g; } h = h - ort[m] * g; ort[m] = ort[m] - g; // Apply Householder similarity transformation // H = (I-u*u'/h)*H*(I-u*u')/h) for (int j = m; j < n; j++) { double f = 0.0; for (int i = high; i >= m; i--) { f += ort[i] * H[i][j]; } f = f / h; for (int i = m; i <= high; i++) { H[i][j] -= f * ort[i]; } } for (int i = 0; i <= high; i++) { double f = 0.0; for (int j = high; j >= m; j--) { f += ort[j] * H[i][j]; } f = f / h; for (int j = m; j <= high; j++) { H[i][j] -= f * ort[j]; } } ort[m] = scale * ort[m]; H[m][m - 1] = scale * g; } } // Accumulate transformations (Algol's ortran). for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { v[i][j] = (i == j ? 1.0 : 0.0); } } for (int m = high - 1; m >= low + 1; m--) { if (H[m][m - 1] != 0.0) { for (int i = m + 1; i <= high; i++) { ort[i] = H[i][m - 1]; } for (int j = m; j <= high; j++) { double g = 0.0; for (int i = m; i <= high; i++) { g += ort[i] * v[i][j]; } // Double division avoids possible underflow g = (g / ort[m]) / H[m][m - 1]; for (int i = m; i <= high; i++) { v[i][j] += g * ort[i]; } } } } } // Complex scalar division. [NonSerialized()] private double cdivr, cdivi; private void cdiv(double xr, double xi, double yr, double yi) { double r, d; if (System.Math.Abs(yr) > System.Math.Abs(yi)) { r = yi / yr; d = yr + r * yi; cdivr = (xr + r * xi) / d; cdivi = (xi - r * xr) / d; } else { r = yr / yi; d = yi + r * yr; cdivr = (r * xr + xi) / d; cdivi = (r * xi - xr) / d; } } // Nonsymmetric reduction from Hessenberg to real Schur form. private void hqr2() { // This is derived from the Algol procedure hqr2, // by Martin and Wilkinson, Handbook for Auto. Comp., // Vol.ii-Linear Algebra, and the corresponding // Fortran subroutine in EISPACK. // Initialize int nn = this.n; int n = nn - 1; int low = 0; int high = nn - 1; double eps = System.Math.Pow(2.0, -52.0); double exshift = 0.0; double p = 0, q = 0, r = 0, s = 0, z = 0, t, w, x, y; // Store roots isolated by balanc and compute matrix norm double norm = 0.0; for (int i = 0; i < nn; i++) { if (i < low | i > high) { d[i] = H[i][i]; e[i] = 0.0; } for (int j = System.Math.Max(i - 1, 0); j < nn; j++) { norm = norm + System.Math.Abs(H[i][j]); } } // Outer loop over eigenvalue index int iter = 0; while (n >= low) { // Look for single small sub-diagonal element int l = n; while (l > low) { s = System.Math.Abs(H[l - 1][l - 1]) + System.Math.Abs(H[l][l]); if (s == 0.0) { s = norm; } if (System.Math.Abs(H[l][l - 1]) < eps * s) { break; } l--; } // Check for convergence // One root found if (l == n) { H[n][n] = H[n][n] + exshift; d[n] = H[n][n]; e[n] = 0.0; n--; iter = 0; // Two roots found } else if (l == n - 1) { w = H[n][n - 1] * H[n - 1][n]; p = (H[n - 1][n - 1] - H[n][n]) / 2.0; q = p * p + w; z = System.Math.Sqrt(System.Math.Abs(q)); H[n][n] = H[n][n] + exshift; H[n - 1][n - 1] = H[n - 1][n - 1] + exshift; x = H[n][n]; // Real pair if (q >= 0) { if (p >= 0) { z = p + z; } else { z = p - z; } d[n - 1] = x + z; d[n] = d[n - 1]; if (z != 0.0) { d[n] = x - w / z; } e[n - 1] = 0.0; e[n] = 0.0; x = H[n][n - 1]; s = System.Math.Abs(x) + System.Math.Abs(z); p = x / s; q = z / s; r = System.Math.Sqrt(p * p + q * q); p = p / r; q = q / r; // Row modification for (int j = n - 1; j < nn; j++) { z = H[n - 1][j]; H[n - 1][j] = q * z + p * H[n][j]; H[n][j] = q * H[n][j] - p * z; } // Column modification for (int i = 0; i <= n; i++) { z = H[i][n - 1]; H[i][n - 1] = q * z + p * H[i][n]; H[i][n] = q * H[i][n] - p * z; } // Accumulate transformations for (int i = low; i <= high; i++) { z = v[i][n - 1]; v[i][n - 1] = q * z + p * v[i][n]; v[i][n] = q * v[i][n] - p * z; } // Complex pair } else { d[n - 1] = x + p; d[n] = x + p; e[n - 1] = z; e[n] = -z; } n = n - 2; iter = 0; // No convergence yet } else { // Form shift x = H[n][n]; y = 0.0; w = 0.0; if (l < n) { y = H[n - 1][n - 1]; w = H[n][n - 1] * H[n - 1][n]; } // Wilkinson's original ad hoc shift if (iter == 10) { exshift += x; for (int i = low; i <= n; i++) { H[i][i] -= x; } s = System.Math.Abs(H[n][n - 1]) + System.Math.Abs(H[n - 1][n - 2]); x = y = 0.75 * s; w = (-0.4375) * s * s; } // MATLAB's new ad hoc shift if (iter == 30) { s = (y - x) / 2.0; s = s * s + w; if (s > 0) { s = System.Math.Sqrt(s); if (y < x) { s = -s; } s = x - w / ((y - x) / 2.0 + s); for (int i = low; i <= n; i++) { H[i][i] -= s; } exshift += s; x = y = w = 0.964; } } iter = iter + 1; // (Could check iteration count here.) // Look for two consecutive small sub-diagonal elements int m = n - 2; while (m >= l) { z = H[m][m]; r = x - z; s = y - z; p = (r * s - w) / H[m + 1][m] + H[m][m + 1]; q = H[m + 1][m + 1] - z - r - s; r = H[m + 2][m + 1]; s = System.Math.Abs(p) + System.Math.Abs(q) + System.Math.Abs(r); p = p / s; q = q / s; r = r / s; if (m == l) { break; } if (System.Math.Abs(H[m][m - 1]) * (System.Math.Abs(q) + System.Math.Abs(r)) < eps * (System.Math.Abs(p) * (System.Math.Abs(H[m - 1][m - 1]) + System.Math.Abs(z) + System.Math.Abs(H[m + 1][m + 1])))) { break; } m--; } for (int i = m + 2; i <= n; i++) { H[i][i - 2] = 0.0; if (i > m + 2) { H[i][i - 3] = 0.0; } } // Double QR step involving rows l:n and columns m:n for (int k = m; k <= n - 1; k++) { bool notlast = (k != n - 1); if (k != m) { p = H[k][k - 1]; q = H[k + 1][k - 1]; r = (notlast ? H[k + 2][k - 1] : 0.0); x = System.Math.Abs(p) + System.Math.Abs(q) + System.Math.Abs(r); if (x != 0.0) { p = p / x; q = q / x; r = r / x; } } if (x == 0.0) { break; } s = System.Math.Sqrt(p * p + q * q + r * r); if (p < 0) { s = -s; } if (s != 0) { if (k != m) { H[k][k - 1] = (-s) * x; } else if (l != m) { H[k][k - 1] = -H[k][k - 1]; } p = p + s; x = p / s; y = q / s; z = r / s; q = q / p; r = r / p; // Row modification for (int j = k; j < nn; j++) { p = H[k][j] + q * H[k + 1][j]; if (notlast) { p = p + r * H[k + 2][j]; H[k + 2][j] = H[k + 2][j] - p * z; } H[k][j] = H[k][j] - p * x; H[k + 1][j] = H[k + 1][j] - p * y; } // Column modification for (int i = 0; i <= System.Math.Min(n, k + 3); i++) { p = x * H[i][k] + y * H[i][k + 1]; if (notlast) { p = p + z * H[i][k + 2]; H[i][k + 2] = H[i][k + 2] - p * r; } H[i][k] = H[i][k] - p; H[i][k + 1] = H[i][k + 1] - p * q; } // Accumulate transformations for (int i = low; i <= high; i++) { p = x * v[i][k] + y * v[i][k + 1]; if (notlast) { p = p + z * v[i][k + 2]; v[i][k + 2] = v[i][k + 2] - p * r; } v[i][k] = v[i][k] - p; v[i][k + 1] = v[i][k + 1] - p * q; } } // (s != 0) } // k loop } // check convergence } // while (n >= low) // Backsubstitute to find vectors of upper triangular form if (norm == 0.0) { return; } for (n = nn - 1; n >= 0; n--) { p = d[n]; q = e[n]; // Real vector if (q == 0) { int l = n; H[n][n] = 1.0; for (int i = n - 1; i >= 0; i--) { w = H[i][i] - p; r = 0.0; for (int j = l; j <= n; j++) { r = r + H[i][j] * H[j][n]; } if (e[i] < 0.0) { z = w; s = r; } else { l = i; if (e[i] == 0.0) { if (w != 0.0) { H[i][n] = (-r) / w; } else { H[i][n] = (-r) / (eps * norm); } // Solve real equations } else { x = H[i][i + 1]; y = H[i + 1][i]; q = (d[i] - p) * (d[i] - p) + e[i] * e[i]; t = (x * s - z * r) / q; H[i][n] = t; if (System.Math.Abs(x) > System.Math.Abs(z)) { H[i + 1][n] = (-r - w * t) / x; } else { H[i + 1][n] = (-s - y * t) / z; } } // Overflow control t = System.Math.Abs(H[i][n]); if ((eps * t) * t > 1) { for (int j = i; j <= n; j++) { H[j][n] = H[j][n] / t; } } } } // Complex vector } else if (q < 0) { int l = n - 1; // Last vector component imaginary so matrix is triangular if (System.Math.Abs(H[n][n - 1]) > System.Math.Abs(H[n - 1][n])) { H[n - 1][n - 1] = q / H[n][n - 1]; H[n - 1][n] = (-(H[n][n] - p)) / H[n][n - 1]; } else { cdiv(0.0, -H[n - 1][n], H[n - 1][n - 1] - p, q); H[n - 1][n - 1] = cdivr; H[n - 1][n] = cdivi; } H[n][n - 1] = 0.0; H[n][n] = 1.0; for (int i = n - 2; i >= 0; i--) { double ra, sa, vr, vi; ra = 0.0; sa = 0.0; for (int j = l; j <= n; j++) { ra = ra + H[i][j] * H[j][n - 1]; sa = sa + H[i][j] * H[j][n]; } w = H[i][i] - p; if (e[i] < 0.0) { z = w; r = ra; s = sa; } else { l = i; if (e[i] == 0) { cdiv(-ra, -sa, w, q); H[i][n - 1] = cdivr; H[i][n] = cdivi; } else { // Solve complex equations x = H[i][i + 1]; y = H[i + 1][i]; vr = (d[i] - p) * (d[i] - p) + e[i] * e[i] - q * q; vi = (d[i] - p) * 2.0 * q; if (vr == 0.0 & vi == 0.0) { vr = eps * norm * (System.Math.Abs(w) + System.Math.Abs(q) + System.Math.Abs(x) + System.Math.Abs(y) + System.Math.Abs(z)); } cdiv(x * r - z * ra + q * sa, x * s - z * sa - q * ra, vr, vi); H[i][n - 1] = cdivr; H[i][n] = cdivi; if (System.Math.Abs(x) > (System.Math.Abs(z) + System.Math.Abs(q))) { H[i + 1][n - 1] = (-ra - w * H[i][n - 1] + q * H[i][n]) / x; H[i + 1][n] = (-sa - w * H[i][n] - q * H[i][n - 1]) / x; } else { cdiv(-r - y * H[i][n - 1], -s - y * H[i][n], z, q); H[i + 1][n - 1] = cdivr; H[i + 1][n] = cdivi; } } // Overflow control t = System.Math.Max(System.Math.Abs(H[i][n - 1]), System.Math.Abs(H[i][n])); if ((eps * t) * t > 1) { for (int j = i; j <= n; j++) { H[j][n - 1] = H[j][n - 1] / t; H[j][n] = H[j][n] / t; } } } } } } // Vectors of isolated roots for (int i = 0; i < nn; i++) { if (i < low | i > high) { for (int j = i; j < nn; j++) { v[i][j] = H[i][j]; } } } // Back transformation to get eigenvectors of original matrix for (int j = nn - 1; j >= low; j--) { for (int i = low; i <= high; i++) { z = 0.0; for (int k = low; k <= System.Math.Min(j, high); k++) { z = z + v[i][k] * H[k][j]; } v[i][j] = z; } } } #endregion // Private Methods #region Constructor /// Check for symmetry, then construct the eigenvalue decomposition /// Square matrix /// /// Structure to access D and V. /// public EigenvalueDecomposition(GeneralMatrix Arg) { double[][] A = Arg.Array; n = Arg.ColumnDimension; v = new double[n][]; for (int i = 0; i < n; i++) { v[i] = new double[n]; } d = new double[n]; e = new double[n]; issymmetric = true; for (int j = 0; (j < n) & issymmetric; j++) { for (int i = 0; (i < n) & issymmetric; i++) { issymmetric = (A[i][j] == A[j][i]); } } if (issymmetric) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { v[i][j] = A[i][j]; } } // Tridiagonalize. tred2(); // Diagonalize. tql2(); } else { H = new double[n][]; for (int i2 = 0; i2 < n; i2++) { H[i2] = new double[n]; } ort = new double[n]; for (int j = 0; j < n; j++) { for (int i = 0; i < n; i++) { H[i][j] = A[i][j]; } } // Reduce to Hessenberg form. orthes(); // Reduce Hessenberg to real Schur form. hqr2(); } } #endregion // Constructor #region Public Properties /// Return the real parts of the eigenvalues /// real(diag(D)) /// virtual public double[] RealEigenvalues { get { return d; } } /// Return the imaginary parts of the eigenvalues /// imag(diag(D)) /// virtual public double[] ImagEigenvalues { get { return e; } } /// Return the block diagonal eigenvalue matrix /// D /// virtual public GeneralMatrix D { get { GeneralMatrix X = new GeneralMatrix(n, n); double[][] D = X.Array; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { D[i][j] = 0.0; } D[i][i] = d[i]; if (e[i] > 0) { D[i][i + 1] = e[i]; } else if (e[i] < 0) { D[i][i - 1] = e[i]; } } return X; } } #endregion // Public Properties #region Public Methods /// Return the eigenvector matrix /// V /// public virtual GeneralMatrix GetV() { return new GeneralMatrix(v, n, n); } #endregion // Public Methods // A method called when serializing this class. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { } } /// Singular Value Decomposition. ///

/// For an m-by-n matrix A with m >= n, the singular value decomposition is /// an m-by-n orthogonal matrix U, an n-by-n diagonal matrix S, and /// an n-by-n orthogonal matrix V so that A = U*S*V'. ///

/// The singular values, sigma[k] = S[k][k], are ordered so that /// sigma[0] >= sigma[1] >= ... >= sigma[n-1]. ///

/// The singular value decompostion always exists, so the constructor will /// never fail. The matrix condition number and the effective numerical /// rank can be computed from this decomposition. ///

[Serializable] public class SingularValueDecomposition : System.Runtime.Serialization.ISerializable { #region Class variables /// Arrays for internal storage of U and V. /// @serial internal storage of U. /// @serial internal storage of V. /// private double[][] u, v; /// Array for internal storage of singular values. /// @serial internal storage of singular values. /// private double[] s; /// Row and column dimensions. /// @serial row dimension. /// @serial column dimension. /// private int m, n; #endregion //Class variables #region Constructor /// Construct the singular value decomposition /// Rectangular matrix /// /// Structure to access U, S and V. /// public SingularValueDecomposition(GeneralMatrix Arg) { // Derived from LINPACK code. // Initialize. double[][] A = Arg.ArrayCopy; m = Arg.RowDimension; n = Arg.ColumnDimension; int nu = System.Math.Min(m, n); s = new double[System.Math.Min(m + 1, n)]; u = new double[m][]; for (int i = 0; i < m; i++) { u[i] = new double[nu]; } v = new double[n][]; for (int i2 = 0; i2 < n; i2++) { v[i2] = new double[n]; } double[] e = new double[n]; double[] work = new double[m]; bool wantu = true; bool wantv = true; // Reduce A to bidiagonal form, storing the diagonal elements // in s and the super-diagonal elements in e. int nct = System.Math.Min(m - 1, n); int nrt = System.Math.Max(0, System.Math.Min(n - 2, m)); for (int k = 0; k < System.Math.Max(nct, nrt); k++) { if (k < nct) { // Compute the transformation for the k-th column and // place the k-th diagonal in s[k]. // Compute 2-norm of k-th column without under/overflow. s[k] = 0; for (int i = k; i < m; i++) { s[k] = Maths.Hypot(s[k], A[i][k]); } if (s[k] != 0.0) { if (A[k][k] < 0.0) { s[k] = -s[k]; } for (int i = k; i < m; i++) { A[i][k] /= s[k]; } A[k][k] += 1.0; } s[k] = -s[k]; } for (int j = k + 1; j < n; j++) { if ((k < nct) & (s[k] != 0.0)) { // Apply the transformation. double t = 0; for (int i = k; i < m; i++) { t += A[i][k] * A[i][j]; } t = (-t) / A[k][k]; for (int i = k; i < m; i++) { A[i][j] += t * A[i][k]; } } // Place the k-th row of A into e for the // subsequent calculation of the row transformation. e[j] = A[k][j]; } if (wantu & (k < nct)) { // Place the transformation in U for subsequent back // multiplication. for (int i = k; i < m; i++) { u[i][k] = A[i][k]; } } if (k < nrt) { // Compute the k-th row transformation and place the // k-th super-diagonal in e[k]. // Compute 2-norm without under/overflow. e[k] = 0; for (int i = k + 1; i < n; i++) { e[k] = Maths.Hypot(e[k], e[i]); } if (e[k] != 0.0) { if (e[k + 1] < 0.0) { e[k] = -e[k]; } for (int i = k + 1; i < n; i++) { e[i] /= e[k]; } e[k + 1] += 1.0; } e[k] = -e[k]; if ((k + 1 < m) & (e[k] != 0.0)) { // Apply the transformation. for (int i = k + 1; i < m; i++) { work[i] = 0.0; } for (int j = k + 1; j < n; j++) { for (int i = k + 1; i < m; i++) { work[i] += e[j] * A[i][j]; } } for (int j = k + 1; j < n; j++) { double t = (-e[j]) / e[k + 1]; for (int i = k + 1; i < m; i++) { A[i][j] += t * work[i]; } } } if (wantv) { // Place the transformation in V for subsequent // back multiplication. for (int i = k + 1; i < n; i++) { v[i][k] = e[i]; } } } } // Set up the final bidiagonal matrix or order p. int p = System.Math.Min(n, m + 1); if (nct < n) { s[nct] = A[nct][nct]; } if (m < p) { s[p - 1] = 0.0; } if (nrt + 1 < p) { e[nrt] = A[nrt][p - 1]; } e[p - 1] = 0.0; // If required, generate U. if (wantu) { for (int j = nct; j < nu; j++) { for (int i = 0; i < m; i++) { u[i][j] = 0.0; } u[j][j] = 1.0; } for (int k = nct - 1; k >= 0; k--) { if (s[k] != 0.0) { for (int j = k + 1; j < nu; j++) { double t = 0; for (int i = k; i < m; i++) { t += u[i][k] * u[i][j]; } t = (-t) / u[k][k]; for (int i = k; i < m; i++) { u[i][j] += t * u[i][k]; } } for (int i = k; i < m; i++) { u[i][k] = -u[i][k]; } u[k][k] = 1.0 + u[k][k]; for (int i = 0; i < k - 1; i++) { u[i][k] = 0.0; } } else { for (int i = 0; i < m; i++) { u[i][k] = 0.0; } u[k][k] = 1.0; } } } // If required, generate V. if (wantv) { for (int k = n - 1; k >= 0; k--) { if ((k < nrt) & (e[k] != 0.0)) { for (int j = k + 1; j < nu; j++) { double t = 0; for (int i = k + 1; i < n; i++) { t += v[i][k] * v[i][j]; } t = (-t) / v[k + 1][k]; for (int i = k + 1; i < n; i++) { v[i][j] += t * v[i][k]; } } } for (int i = 0; i < n; i++) { v[i][k] = 0.0; } v[k][k] = 1.0; } } // Main iteration loop for the singular values. int pp = p - 1; int iter = 0; double eps = System.Math.Pow(2.0, -52.0); while (p > 0) { int k, kase; // Here is where a test for too many iterations would go. // This section of the program inspects for // negligible elements in the s and e arrays. On // completion the variables kase and k are set as follows. // kase = 1 if s(p) and e[k-1] are negligible and k

= -1; k--) { if (k == -1) { break; } if (System.Math.Abs(e[k]) <= eps * (System.Math.Abs(s[k]) + System.Math.Abs(s[k + 1]))) { e[k] = 0.0; break; } } if (k == p - 2) { kase = 4; } else { int ks; for (ks = p - 1; ks >= k; ks--) { if (ks == k) { break; } double t = (ks != p ? System.Math.Abs(e[ks]) : 0.0) + (ks != k + 1 ? System.Math.Abs(e[ks - 1]) : 0.0); if (System.Math.Abs(s[ks]) <= eps * t) { s[ks] = 0.0; break; } } if (ks == k) { kase = 3; } else if (ks == p - 1) { kase = 1; } else { kase = 2; k = ks; } } k++; // Perform the task indicated by kase. switch (kase) { // Deflate negligible s(p). case 1: { double f = e[p - 2]; e[p - 2] = 0.0; for (int j = p - 2; j >= k; j--) { double t = Maths.Hypot(s[j], f); double cs = s[j] / t; double sn = f / t; s[j] = t; if (j != k) { f = (-sn) * e[j - 1]; e[j - 1] = cs * e[j - 1]; } if (wantv) { for (int i = 0; i < n; i++) { t = cs * v[i][j] + sn * v[i][p - 1]; v[i][p - 1] = (-sn) * v[i][j] + cs * v[i][p - 1]; v[i][j] = t; } } } } break; // Split at negligible s(k). case 2: { double f = e[k - 1]; e[k - 1] = 0.0; for (int j = k; j < p; j++) { double t = Maths.Hypot(s[j], f); double cs = s[j] / t; double sn = f / t; s[j] = t; f = (-sn) * e[j]; e[j] = cs * e[j]; if (wantu) { for (int i = 0; i < m; i++) { t = cs * u[i][j] + sn * u[i][k - 1]; u[i][k - 1] = (-sn) * u[i][j] + cs * u[i][k - 1]; u[i][j] = t; } } } } break; // Perform one qr step. case 3: { // Calculate the shift. double scale = System.Math.Max(System.Math.Max(System.Math.Max(System.Math.Max(System.Math.Abs(s[p - 1]), System.Math.Abs(s[p - 2])), System.Math.Abs(e[p - 2])), System.Math.Abs(s[k])), System.Math.Abs(e[k])); double sp = s[p - 1] / scale; double spm1 = s[p - 2] / scale; double epm1 = e[p - 2] / scale; double sk = s[k] / scale; double ek = e[k] / scale; double b = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2.0; double c = (sp * epm1) * (sp * epm1); double shift = 0.0; if ((b != 0.0) | (c != 0.0)) { shift = System.Math.Sqrt(b * b + c); if (b < 0.0) { shift = -shift; } shift = c / (b + shift); } double f = (sk + sp) * (sk - sp) + shift; double g = sk * ek; // Chase zeros. for (int j = k; j < p - 1; j++) { double t = Maths.Hypot(f, g); double cs = f / t; double sn = g / t; if (j != k) { e[j - 1] = t; } f = cs * s[j] + sn * e[j]; e[j] = cs * e[j] - sn * s[j]; g = sn * s[j + 1]; s[j + 1] = cs * s[j + 1]; if (wantv) { for (int i = 0; i < n; i++) { t = cs * v[i][j] + sn * v[i][j + 1]; v[i][j + 1] = (-sn) * v[i][j] + cs * v[i][j + 1]; v[i][j] = t; } } t = Maths.Hypot(f, g); cs = f / t; sn = g / t; s[j] = t; f = cs * e[j] + sn * s[j + 1]; s[j + 1] = (-sn) * e[j] + cs * s[j + 1]; g = sn * e[j + 1]; e[j + 1] = cs * e[j + 1]; if (wantu && (j < m - 1)) { for (int i = 0; i < m; i++) { t = cs * u[i][j] + sn * u[i][j + 1]; u[i][j + 1] = (-sn) * u[i][j] + cs * u[i][j + 1]; u[i][j] = t; } } } e[p - 2] = f; iter = iter + 1; } break; // Convergence. case 4: { // Make the singular values positive. if (s[k] <= 0.0) { s[k] = (s[k] < 0.0 ? -s[k] : 0.0); if (wantv) { for (int i = 0; i <= pp; i++) { v[i][k] = -v[i][k]; } } } // Order the singular values. while (k < pp) { if (s[k] >= s[k + 1]) { break; } double t = s[k]; s[k] = s[k + 1]; s[k + 1] = t; if (wantv && (k < n - 1)) { for (int i = 0; i < n; i++) { t = v[i][k + 1]; v[i][k + 1] = v[i][k]; v[i][k] = t; } } if (wantu && (k < m - 1)) { for (int i = 0; i < m; i++) { t = u[i][k + 1]; u[i][k + 1] = u[i][k]; u[i][k] = t; } } k++; } iter = 0; p--; } break; } } } #endregion //Constructor #region Public Properties ///

Return the one-dimensional array of singular values /// diagonal of S. /// virtual public double[] SingularValues { get { return s; } } /// Return the diagonal matrix of singular values /// S /// virtual public GeneralMatrix S { get { GeneralMatrix X = new GeneralMatrix(n, n); double[][] S = X.Array; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { S[i][j] = 0.0; } S[i][i] = this.s[i]; } return X; } } #endregion // Public Properties #region Public Methods /// Return the left singular vectors /// U /// public virtual GeneralMatrix GetU() { return new GeneralMatrix(u, m, System.Math.Min(m + 1, n)); } /// Return the right singular vectors /// V /// public virtual GeneralMatrix GetV() { return new GeneralMatrix(v, n, n); } /// Two norm /// max(S) /// public virtual double Norm2() { return s[0]; } /// Two norm condition number /// max(S)/min(S) /// public virtual double Condition() { return s[0] / s[System.Math.Min(m, n) - 1]; } /// Effective numerical matrix rank /// Number of nonnegligible singular values. /// public virtual int Rank() { double eps = System.Math.Pow(2.0, -52.0); double tol = System.Math.Max(m, n) * s[0] * eps; int r = 0; for (int i = 0; i < s.Length; i++) { if (s[i] > tol) { r++; } } return r; } #endregion //Public Methods // A method called when serializing this class. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/GlobalizedProperties/000077500000000000000000000000001446222606700303025ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/GlobalizedProperties/Attributes.cs000066400000000000000000000016131446222606700327600ustar00rootroot00000000000000using System; using System.Globalization; using System.Resources; using System.Reflection; namespace QuickRoute.BusinessEntities.GlobalizedProperties { [AttributeUsage(AttributeTargets.Property, AllowMultiple=false, Inherited=true)] public class GlobalizedPropertyAttribute : Attribute { private String resourceName = ""; private String resourceDescription = ""; private String resourceTable = ""; public GlobalizedPropertyAttribute(String name) { resourceName = name; } public String Name { get { return resourceName; } set { resourceName = value; } } public String Description { get { return resourceDescription; } set { resourceDescription = value; } } public String Table { get { return resourceTable; } set { resourceTable = value; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/GlobalizedProperties/Descriptors.cs000066400000000000000000000205501446222606700331340ustar00rootroot00000000000000// using System; using System.ComponentModel; using System.Globalization; using System.Resources; using System.Reflection; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities.GlobalizedProperties { /// /// GlobalizedPropertyDescriptor enhances the base class bay obtaining the display name for a property /// from the resource. /// public class GlobalizedPropertyDescriptor : PropertyDescriptor { private PropertyDescriptor basePropertyDescriptor; private String localizedName = ""; private String localizedDescription = ""; public GlobalizedPropertyDescriptor(PropertyDescriptor basePropertyDescriptor) : base(basePropertyDescriptor) { this.basePropertyDescriptor = basePropertyDescriptor; } public override bool CanResetValue(object component) { return basePropertyDescriptor.CanResetValue(component); } public override Type ComponentType { get { return basePropertyDescriptor.ComponentType; } } public override string DisplayName { get { // First lookup the property if GlobalizedPropertyAttribute instances are available. // If yes, then try to get resource table name and display name id from that attribute. string tableName = ""; string displayName = ""; foreach( Attribute oAttrib in this.basePropertyDescriptor.Attributes ) { if( oAttrib.GetType().Equals(typeof(GlobalizedPropertyAttribute)) ) { displayName = ((GlobalizedPropertyAttribute)oAttrib).Name; tableName = ((GlobalizedPropertyAttribute)oAttrib).Table; } } // If no resource table specified by attribute, then build it itself by using namespace and class name. if( tableName.Length == 0 ) tableName = basePropertyDescriptor.ComponentType.Namespace + "." + basePropertyDescriptor.ComponentType.Name; // If no display name id is specified by attribute, then construct it by using default display name (usually the property name) if( displayName.Length == 0 ) displayName = this.basePropertyDescriptor.DisplayName; // Now use table name and display name id to access the resources. ResourceManager rm = new ResourceManager(tableName,basePropertyDescriptor.ComponentType.Assembly); // Get the string from the resources. // If this fails, then use default display name (usually the property name) string s = rm.GetString(displayName); this.localizedName = (s!=null)? s : this.basePropertyDescriptor.DisplayName; return this.localizedName; } } public override string Description { get { // First lookup the property if there are GlobalizedPropertyAttribute instances // are available. // If yes, try to get resource table name and display name id from that attribute. string tableName = ""; string displayName = ""; foreach( Attribute oAttrib in this.basePropertyDescriptor.Attributes ) { if( oAttrib.GetType().Equals(typeof(GlobalizedPropertyAttribute)) ) { displayName = ((GlobalizedPropertyAttribute)oAttrib).Description; tableName = ((GlobalizedPropertyAttribute)oAttrib).Table; } } // If no resource table specified by attribute, then build it itself by using namespace and class name. if( tableName.Length == 0 ) tableName = basePropertyDescriptor.ComponentType.Namespace + "." + basePropertyDescriptor.ComponentType.Name; // If no display name id is specified by attribute, then construct it by using default display name (usually the property name) if( displayName.Length == 0 ) displayName = this.basePropertyDescriptor.DisplayName + "Description"; // Now use table name and display name id to access the resources. ResourceManager rm = new ResourceManager(tableName,basePropertyDescriptor.ComponentType.Assembly); // Get the string from the resources. // If this fails, then use default empty string indictating 'no description' string s = rm.GetString(displayName); this.localizedDescription = (s!=null)? s : ""; return this.localizedDescription; } } public override object GetValue(object component) { return this.basePropertyDescriptor.GetValue(component); } public override bool IsReadOnly { get { return this.basePropertyDescriptor.IsReadOnly; } } public override string Name { get { return this.basePropertyDescriptor.Name; } } public override Type PropertyType { get { return this.basePropertyDescriptor.PropertyType; } } public override void ResetValue(object component) { this.basePropertyDescriptor.ResetValue(component); } public override bool ShouldSerializeValue(object component) { return this.basePropertyDescriptor.ShouldSerializeValue(component); } public override void SetValue(object component, object value) { this.basePropertyDescriptor.SetValue(component, value); } } /// /// GlobalizedObject implements ICustomTypeDescriptor to enable /// required functionality to describe a type (class).

/// The main task of this class is to instantiate our own property descriptor /// of type GlobalizedPropertyDescriptor. ///
[Serializable] public class GlobalizedObject : ICustomTypeDescriptor { [NonSerialized] private PropertyDescriptorCollection globalizedProps; public String GetClassName() { return TypeDescriptor.GetClassName(this,true); } public AttributeCollection GetAttributes() { return TypeDescriptor.GetAttributes(this,true); } public String GetComponentName() { return TypeDescriptor.GetComponentName(this, true); } public TypeConverter GetConverter() { return TypeDescriptor.GetConverter(this, true); } public EventDescriptor GetDefaultEvent() { return TypeDescriptor.GetDefaultEvent(this, true); } public PropertyDescriptor GetDefaultProperty() { return TypeDescriptor.GetDefaultProperty(this, true); } public object GetEditor(Type editorBaseType) { return TypeDescriptor.GetEditor(this, editorBaseType, true); } public EventDescriptorCollection GetEvents(Attribute[] attributes) { return TypeDescriptor.GetEvents(this, attributes, true); } public EventDescriptorCollection GetEvents() { return TypeDescriptor.GetEvents(this, true); } /// /// Called to get the properties of a type. /// /// /// public PropertyDescriptorCollection GetProperties(Attribute[] attributes) { if ( globalizedProps == null) { // Get the collection of properties PropertyDescriptorCollection baseProps = TypeDescriptor.GetProperties(this, attributes, true); globalizedProps = new PropertyDescriptorCollection(null); // For each property use a property descriptor of our own that is able to be globalized foreach( PropertyDescriptor oProp in baseProps ) { globalizedProps.Add(new GlobalizedPropertyDescriptor(oProp)); } } return globalizedProps; } public PropertyDescriptorCollection GetProperties() { // Only do once if ( globalizedProps == null) { // Get the collection of properties PropertyDescriptorCollection baseProps = TypeDescriptor.GetProperties(this, true); globalizedProps = new PropertyDescriptorCollection(null); // For each property use a property descriptor of our own that is able to be globalized foreach( PropertyDescriptor oProp in baseProps ) { globalizedProps.Add(new GlobalizedPropertyDescriptor(oProp)); } } return globalizedProps; } public object GetPropertyOwner(PropertyDescriptor pd) { return this; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Gradient.cs000066400000000000000000000343151446222606700262430ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Drawing; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities { /// /// Class representing a gradient, i e a list of colors and their locations. /// [Serializable] public class Gradient : GlobalizedObject, ISerializable { private string name; private string fileName; private List colorEntries = new List(); public Gradient() : this(Color.White, Color.Black) { } /// /// Creating a new gradient based on the specified color entries. /// /// First parameter: first color, second parameter: location of first color, third parameter: second color, fourth parameter: location of second color, and so forth. Locations are in the interval (0, 1), inclusive. public Gradient(params object[] colorEntryParamArray) { if (colorEntryParamArray == null) { throw new Exception("Param array length must be greater than zero."); } else { if (colorEntryParamArray.Length % 2 != 0) throw new Exception("Param array length must be an even number."); for (int i = 0; i < colorEntryParamArray.Length / 2; i++) { colorEntries.Add(new GradientColorEntry((Color)colorEntryParamArray[2 * i], (double)colorEntryParamArray[2 * i + 1])); } } CreateSortedColorEntries(); } /// /// Creating a new gradient based on the specified start and end color, and the specified color entries. /// /// /// /// First parameter: first middle color, second parameter: location of first middle color, third parameter: second middle color, fourth parameter: location of second middle color, and so forth. Locations are in the interval (0, 1), inclusive. public Gradient(Color startColor, Color endColor, params object[] colorEntryParamArray) { colorEntries.Add(new GradientColorEntry(startColor, 0)); colorEntries.Add(new GradientColorEntry(endColor, 1)); if (colorEntryParamArray != null) { if (colorEntryParamArray.Length % 2 != 0) throw new Exception("Param array length must be an even number."); for (int i = 0; i < colorEntryParamArray.Length / 2; i++) { colorEntries.Add(new GradientColorEntry((Color)colorEntryParamArray[2 * i], (double)colorEntryParamArray[2 * i + 1])); } } CreateSortedColorEntries(); } protected Gradient(SerializationInfo info, StreamingContext context) { int[] colors = (int[])(info.GetValue("colors", typeof(int[]))); double[] locations = (double[])(info.GetValue("locations", typeof(double[]))); for (int i = 0; i < colors.Length; i++) { colorEntries.Add(new GradientColorEntry(Color.FromArgb(colors[i]), locations[i])); } name = info.GetString("name"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { int[] colors = new int[colorEntries.Count]; double[] locations = new double[colorEntries.Count]; for (int i = 0; i < colorEntries.Count; i++) { colors[i] = colorEntries[i].Color.ToArgb(); locations[i] = colorEntries[i].Location; } info.AddValue("colors", colors, typeof(int[])); info.AddValue("locations", locations, typeof(double[])); info.AddValue("name", name); } /// /// Inserts a color at the given location. /// /// The color to insert. /// Location expressed as a value in the interval (0, 1), inclusive. public void AddColor(Color color, double location) { if (location < 0.0 || location > 1.0) throw new Exception("Location out of range, must be between 0 and 1"); colorEntries.Add(new GradientColorEntry(color, location)); CreateSortedColorEntries(); } /// /// Draws a gradient on the specified graphics object, in the specified rectangle, using the specified start and end locations (in the (0, 1) interval) and the specified direction. /// /// The graphics object to draw on. /// The rectangle object that should be filled. /// The start color location. /// The end color location. /// The direction of the gradient, horizontal or vertical. public void Draw(Graphics g, Rectangle rect, double startLocation, double endLocation, Direction direction) { Draw(g, rect, startLocation, endLocation, direction, 0); } /// /// Draws a gradient on the specified graphics object, in the specified rectangle, using the specified start and end locations (in the (0, 1) interval) and the specified direction. /// /// The graphics object to draw on. /// The rectangle object that should be filled. /// The start color location. /// The end color location. /// The direction of the gradient, horizontal or vertical. /// Value that determines the transparency of the gradient. -1 is fully opaque, 0 is normal, 1 is fully transparent. public void Draw(Graphics g, Rectangle rect, double startLocation, double endLocation, Direction direction, double alphaAdjustment) { switch (direction) { case Direction.Horizontal: for (int x = rect.Left; x <= rect.Right; x++) { double location = startLocation + (x - rect.Left) / (double)(rect.Right - rect.Left) * (endLocation - startLocation); Brush b = new SolidBrush(GraphicsUtil.AlphaAdjustColor(GetColor(location), alphaAdjustment)); g.FillRectangle(b, x, rect.Top, 1, rect.Height); b.Dispose(); } break; case Direction.Vertical: for (int y = rect.Top; y <= rect.Bottom; y++) { double location = startLocation + (y - rect.Top) / (double)(rect.Bottom - rect.Top) * (endLocation - startLocation); Brush b = new SolidBrush(GraphicsUtil.AlphaAdjustColor(GetColor(location), alphaAdjustment)); g.FillRectangle(b, rect.Left, y, rect.Width, 1); b.Dispose(); } break; case Direction.ReverseHorizontal: for (int x = rect.Left; x <= rect.Right; x++) { double location = endLocation - (x - rect.Left) / (double)(rect.Right - rect.Left) * (endLocation - startLocation); Brush b = new SolidBrush(GraphicsUtil.AlphaAdjustColor(GetColor(location), alphaAdjustment)); g.FillRectangle(b, x, rect.Top, 1, rect.Height); b.Dispose(); } break; case Direction.ReverseVertical: for (int y = rect.Top; y <= rect.Bottom; y++) { double location = endLocation - (y - rect.Top) / (double)(rect.Bottom - rect.Top) * (endLocation - startLocation); Brush b = new SolidBrush(GraphicsUtil.AlphaAdjustColor(GetColor(location), alphaAdjustment)); g.FillRectangle(b, rect.Left, y, rect.Width, 1); b.Dispose(); } break; } } /// /// Gets the color of the specified location. /// /// A location in the (0, 1) interval, inclusive. /// public Color GetColor(double location) { List sortedColorEntries = CreateSortedColorEntries(); if (sortedColorEntries.Count > 0) { if (location <= sortedColorEntries[0].Location) return sortedColorEntries[0].Color; if (location >= sortedColorEntries[sortedColorEntries.Count - 1].Location) return sortedColorEntries[sortedColorEntries.Count - 1].Color; for (int i = 1; i < sortedColorEntries.Count; i++) { if (location <= sortedColorEntries[i].Location) { double t = (sortedColorEntries[i].Location == sortedColorEntries[i - 1].Location ? 0.0 : (location - sortedColorEntries[i - 1].Location)/ (sortedColorEntries[i].Location - sortedColorEntries[i - 1].Location)); Color c0 = sortedColorEntries[i - 1].Color; Color c1 = sortedColorEntries[i].Color; return Color.FromArgb( c0.A + (int) (t*(c1.A - c0.A)), c0.R + (int) (t*(c1.R - c0.R)), c0.G + (int) (t*(c1.G - c0.G)), c0.B + (int) (t*(c1.B - c0.B))); } } } return Color.Black; } /// /// The (possible unsorted) list of color entries. /// public List ColorEntries { get { return colorEntries; } set { colorEntries = value; CreateSortedColorEntries(); } } private List CreateSortedColorEntries() { List sortedColorEntries = new List(); foreach (GradientColorEntry colorEntry in colorEntries) { sortedColorEntries.Add(colorEntry); } sortedColorEntries.Sort(); return sortedColorEntries; } /// /// The name of the gradient. /// public string Name { get { return name; } set { name = value; } } /// /// The name of the file where the gradient is stored. /// public string FileName { get { return fileName; } set { fileName = value; } } /// /// Checks whether obj is a gradient with the same name, colors and locations as this gradient. /// /// /// public override bool Equals(object obj) { if (!(obj.GetType() == typeof(Gradient))) return false; Gradient other = obj as Gradient; if (other == null || name != other.Name) return false; for (int i = 0; i < colorEntries.Count; i++) { if (colorEntries[i].Color != other.ColorEntries[i].Color || colorEntries[i].Location != other.ColorEntries[i].Location) return false; } return true; } public override int GetHashCode() { return base.GetHashCode(); } public static void FillCheckerboardRectangle(Graphics g, Rectangle rect, int checkerboardBoxSize) { int x = rect.Left; int y = rect.Top; int brushIndex = 0; int rowIndex = 0; Brush[] checkerboardBrushes = new Brush[] { Brushes.LightGray, Brushes.White }; while (y <= rect.Bottom) { while (x <= rect.Right) { g.FillRectangle(checkerboardBrushes[brushIndex], x, y, Math.Min(checkerboardBoxSize, rect.Right - x), Math.Min(checkerboardBoxSize, rect.Bottom - y)); x += checkerboardBoxSize; brushIndex = (brushIndex + 1) % 2; } x = rect.Left; rowIndex += 1; brushIndex = rowIndex % 2; y += checkerboardBoxSize; } } public void Save(string saveAsFileName) { IFormatter formatter = new BinaryFormatter(); try { Stream stream = new FileStream(saveAsFileName, FileMode.Create, FileAccess.Write, FileShare.None); try { formatter.Serialize(stream, this); } catch(Exception) { } stream.Close(); } catch(Exception) { } } public static Gradient Load(string fileName) { IFormatter formatter = new BinaryFormatter(); try { Stream stream = new FileStream(fileName, FileMode.Open); try { Gradient g = (Gradient)formatter.Deserialize(stream); stream.Close(); g.FileName = fileName; return g; } catch (Exception) { stream.Close(); return null; } } catch(Exception) { return null; } } /// /// Drawing direction of the gradient. /// public enum Direction { Horizontal, Vertical, ReverseHorizontal, ReverseVertical } } /// /// A color-location pair that describes an entry in a gradient color list. /// [Serializable] public class GradientColorEntry : IComparable { private int colorArgb; [NonSerialized] private Color color; private double location; public GradientColorEntry(Color color, double location) { this.color = color; this.colorArgb = color.ToArgb(); this.location = location; } /// /// The color. /// public Color Color { get { return color; } set { color = value; colorArgb = color.ToArgb(); } } /// /// The location, in the (0, 1) interval, inclusive. /// public double Location { get { return location; } set { location = value; } } /// /// Comprison of color entries based on their locations. /// /// /// public int CompareTo(GradientColorEntry other) { return Math.Sign(location - other.Location); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Graphics.cs000066400000000000000000000113501446222606700262400ustar00rootroot00000000000000using System; using System.Drawing; namespace QuickRoute.BusinessEntities { public enum PenStyles { PS_SOLID = 0, PS_DASH = 1, PS_DOT = 2, PS_DASHDOT = 3, PS_DASHDOTDOT = 4 } public static class RubberBandRectangle { // These values come from the larger set of defines in WinGDI.h, // but are all that are needed for this application. If this class // is expanded for more generic rectangle drawing, they should be // replaced by enums from those sets of defones. private const int NULL_BRUSH = 5; private const int R2_XORPEN = 7; private const int BLACK_PEN = 0; public static void DrawXORRectangle( Graphics grp, int X1, int Y1, int X2, int Y2, PenStyles PenStyle ) { // Extract the Win32 HDC from the Graphics object supplied. IntPtr hdc = grp.GetHdc(); // Create a pen with a dotted style to draw the border of the // rectangle. IntPtr gdiPen = CreatePen( PenStyle, 1, BLACK_PEN ); // Set the ROP cdrawint mode to XOR. SetROP2( hdc, R2_XORPEN ); // Select the pen into the device context. IntPtr oldPen = SelectObject( hdc, gdiPen ); // Create a stock NULL_BRUSH brush and select it into the device // context so that the rectangle isn't filled. IntPtr oldBrush = SelectObject( hdc, GetStockObject( NULL_BRUSH ) ); // Now XOR the hollow rectangle on the Graphics object with // a dotted outline. Rectangle( hdc, X1, Y1, X2, Y2 ); // Put the old stuff back where it was. SelectObject( hdc, oldBrush ); // no need to delete a stock object SelectObject( hdc, oldPen ); DeleteObject( gdiPen ); // but we do need to delete the pen // Return the device context to Windows. grp.ReleaseHdc( hdc ); } // Use Interop to call the corresponding Win32 GDI functions [System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll" )] private static extern int SetROP2( IntPtr hdc, // Handle to a Win32 device context int enDrawMode // Drawing mode ); [System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll" )] private static extern IntPtr CreatePen( PenStyles enPenStyle, // Pen style from enum PenStyles int nWidth, // Width of pen int crColor // Color of pen ); [System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll" )] private static extern bool DeleteObject( IntPtr hObject // Win32 GDI handle to object to delete ); [System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll" )] private static extern IntPtr SelectObject( IntPtr hdc, // Win32 GDI device context IntPtr hObject // Win32 GDI handle to object to select ); [System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll" )] private static extern void Rectangle( IntPtr hdc, // Handle to a Win32 device context int X1, // x-coordinate of top left corner int Y1, // y-cordinate of top left corner int X2, // x-coordinate of bottom right corner int Y2 // y-coordinate of bottm right corner ); [System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll" )] private static extern IntPtr GetStockObject( int brStyle // Selected from the WinGDI.h BrushStyles enum ); // C# version of Win32 RGB macro private static int RGB( int R, int G, int B ) { return ( R | (G<<8) | (B<<16) ); } } public static class GraphicsUtil { public static Color AlphaAdjustColor(Color color, double alphaAdjustment) { alphaAdjustment = Math.Max(-1, Math.Min(1, alphaAdjustment)); int alpha; if (alphaAdjustment < 0) { alpha = (int)((1 + alphaAdjustment) * (double)color.A); } else { alpha = (int)((double)color.A + (double)(255 - color.A) * alphaAdjustment); } return Color.FromArgb(alpha, color); } public static double CombineAlphaAdjustments(double aa1, double aa2) { if(aa2 < 0) { return aa1 - (aa2 + 1) * (aa1 + 1); } return aa1 + (1 - aa2)*(1 - aa1); } public static Color CombineColors(params Color[] colors) { int a = 0, r = 0, g = 0, b = 0; foreach(var color in colors) { a += color.A; r += color.R; g += color.G; b += color.B; } return Color.FromArgb( (int)Math.Round((double)a / colors.Length), (int)Math.Round((double)r / colors.Length), (int)Math.Round((double)g / colors.Length), (int)Math.Round((double)b / colors.Length)); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Handle.cs000066400000000000000000000112701446222606700256740ustar00rootroot00000000000000using System; using System.Runtime.Serialization; namespace QuickRoute.BusinessEntities { /// /// Class holding information of the handles used for adjusting the route to the map. /// [Serializable] public class Handle : IComparable { private GeneralMatrix transformationMatrix; private ParameterizedLocation parameterizedLocation; private PointD location; private IMarkerDrawer markerDrawer; private HandleType type; /// /// The exact time this handle is bound to (used to prevent rounding errors when e g cutting a route) /// [NonSerialized] private DateTime? time; public Handle() { } /// /// Creates a handle based on parameterized location. /// /// /// /// /// public Handle(ParameterizedLocation parameterizedLocation, PointD location, GeneralMatrix transformationMatrix, IMarkerDrawer markerDrawer) : this(parameterizedLocation, location, transformationMatrix, markerDrawer, HandleType.Handle) { } /// /// Creates a handle based on parameterized location. /// /// /// /// /// /// public Handle(ParameterizedLocation parameterizedLocation, PointD location, GeneralMatrix transformationMatrix, IMarkerDrawer markerDrawer, HandleType type) : this(parameterizedLocation, null, location, transformationMatrix, markerDrawer, HandleType.Handle) { } /// /// Creates a handle based on parameterized location and time (used to prevent rounding errors when e g cutting a route). /// /// /// /// /// /// public Handle(ParameterizedLocation parameterizedLocation, DateTime? time, PointD location, GeneralMatrix transformationMatrix, IMarkerDrawer markerDrawer) : this(parameterizedLocation, time, location, transformationMatrix, markerDrawer, HandleType.Handle) { } /// /// Creates a handle based on parameterized location and time (used to prevent rounding errors when e g cutting a route). /// /// /// /// /// /// /// public Handle(ParameterizedLocation parameterizedLocation, DateTime? time, PointD location, GeneralMatrix transformationMatrix, IMarkerDrawer markerDrawer, HandleType type) { ParameterizedLocation = parameterizedLocation; Time = time; Location = location; TransformationMatrix = transformationMatrix; MarkerDrawer = markerDrawer; Type = type; } public GeneralMatrix TransformationMatrix { get { return transformationMatrix; } set { transformationMatrix = value; } } /// /// The parameterized location of this handle. /// public ParameterizedLocation ParameterizedLocation { get { return parameterizedLocation; } set { parameterizedLocation = value; } } /// /// Location of the handle in original map coordinates. /// public PointD Location { get { return location; } set { location = value; } } /// /// The marker drawer that is used when drawing the handle marker. /// public IMarkerDrawer MarkerDrawer { get { return markerDrawer; } set { markerDrawer = value; } } public HandleType Type { get { return type; } set { type = value; } } public DateTime? Time { get { return time; } set { time = value; } } #region IComparable Members public int CompareTo(Handle other) { return ParameterizedLocation.CompareTo(other.ParameterizedLocation); } #endregion public enum HandleType { StartHandle = -1, Handle, EndHandle } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/HandleCollection.cs000066400000000000000000000102611446222606700277070ustar00rootroot00000000000000using System; using System.Collections; using System.Collections.Generic; using Wintellect.PowerCollections; namespace QuickRoute.BusinessEntities { [Serializable] public class HandleCollection : ICollection { private OrderedBag handles = new OrderedBag(); public Handle this[int index] { get { return handles[index]; } set { Handle h = handles[index]; h = value; } } #region ICollection Members public void Add(Handle item) { handles.Add(item); } public void Clear() { handles.Clear(); } public bool Contains(Handle item) { return handles.Contains(item); } public void CopyTo(Handle[] array, int arrayIndex) { handles.CopyTo(array, arrayIndex); } public int Count { get { return handles.Count; } } public bool IsReadOnly { get { return false; } } public bool Remove(Handle item) { return handles.Remove(item); } #endregion #region IEnumerable Members public IEnumerator GetEnumerator() { return handles.GetEnumerator(); } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return handles.GetEnumerator(); } #endregion public int IndexOf(Handle handle) { for (int i = 0; i < this.Count; i++) { if(this[i].Equals(handle)) return i; } return -1; } public CutHandlesData Cut(ParameterizedLocation parameterizedLocation, CutType cutType) { CutHandlesData cutHandlesData = new CutHandlesData(); cutHandlesData.CutParamaterizedLocation = parameterizedLocation; cutHandlesData.CutType = cutType; switch (cutType) { case CutType.Before: foreach (Handle h in this) { if (h.ParameterizedLocation < parameterizedLocation) { cutHandlesData.CutHandles.Add(h); } } foreach (Handle h in cutHandlesData.CutHandles) { Remove(h); } foreach (Handle h in this) { h.ParameterizedLocation -= parameterizedLocation; } break; case CutType.After: foreach (Handle h in this) { if (h.ParameterizedLocation > parameterizedLocation) { cutHandlesData.CutHandles.Add(h); } } foreach (Handle h in cutHandlesData.CutHandles) { Remove(h); } break; } return cutHandlesData; } public void UnCut(CutHandlesData cutHandlesData) { switch (cutHandlesData.CutType) { case CutType.Before: foreach (Handle h in this) { if (h.ParameterizedLocation.SegmentIndex == 0) { h.ParameterizedLocation.Value += cutHandlesData.CutParamaterizedLocation.Value; } h.ParameterizedLocation.SegmentIndex += cutHandlesData.CutParamaterizedLocation.SegmentIndex; } foreach (Handle h in cutHandlesData.CutHandles) { Add(h); } break; case CutType.After: foreach (Handle h in cutHandlesData.CutHandles) { Add(h); } break; } } public class CutHandlesData { private List cutHandles = new List(); private ParameterizedLocation cutParamaterizedLocation; private CutType cutType; public List CutHandles { get { return cutHandles; } set { cutHandles = value; } } public ParameterizedLocation CutParamaterizedLocation { get { return cutParamaterizedLocation; } set { cutParamaterizedLocation = value; } } public CutType CutType { get { return cutType; } set { cutType = value; } } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ImageFilePropertySelectors.cs000066400000000000000000000111361446222606700317550ustar00rootroot00000000000000using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using ExportImageSizeSelector=QuickRoute.BusinessEntities.Forms.ExportImageSizeSelector; namespace QuickRoute.BusinessEntities { public delegate Size SizeCalculatorDelegate(double percentualSize); public class JpegEncodingInfo : IImageEncodingInfo { private readonly double quality; public JpegEncodingInfo(double quality) { this.quality = quality; } public ImageCodecInfo Encoder { get { var codecs = ImageCodecInfo.GetImageEncoders(); foreach (var codec in codecs) { if (codec.MimeType == "image/jpeg") return codec; } return null; } } public EncoderParameters EncoderParams { get { var ep = new EncoderParameters(1); ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)(100 * quality)); return ep; } } public double Quality { get { return quality; } } } public class PngEncodingInfo : IImageEncodingInfo { public ImageCodecInfo Encoder { get { var codecs = ImageCodecInfo.GetImageEncoders(); foreach (var codec in codecs) { if (codec.MimeType == "image/png") return codec; } return null; } } public EncoderParameters EncoderParams { get { return null; } } } public class TiffEncodingInfo : IImageEncodingInfo { public ImageCodecInfo Encoder { get { var codecs = ImageCodecInfo.GetImageEncoders(); foreach (var codec in codecs) { if (codec.MimeType == "image/tiff") return codec; } return null; } } public EncoderParameters EncoderParams { get { return null; } } } public interface IImageEncodingInfo { ImageCodecInfo Encoder { get; } EncoderParameters EncoderParams { get; } } public class JpegPropertySelector : IMapImageFileExporterDialog { private readonly Forms.ExportImageSizeAndQualitySelector dlg = new Forms.ExportImageSizeAndQualitySelector(); public double PercentualImageSize { get { return dlg.PercentualImageSize; } set { dlg.PercentualImageSize = value; } } public SizeCalculatorDelegate SizeCalculator { get; set; } public IImageEncodingInfo EncodingInfo { get { return new JpegEncodingInfo(Quality); } } public double Quality { get { return dlg.ImageQuality; } set { dlg.ImageQuality = value; } } public DialogResult ShowPropertyDialog() { dlg.SizeCalculator = SizeCalculator; DialogResult result = dlg.ShowDialog(); return result; } } public class PngPropertySelector : IMapImageFileExporterDialog { private readonly ExportImageSizeSelector dlg = new ExportImageSizeSelector(); public double PercentualImageSize { get { return dlg.PercentualImageSize; } set { dlg.PercentualImageSize = value; } } public SizeCalculatorDelegate SizeCalculator { get; set; } public IImageEncodingInfo EncodingInfo { get { return new PngEncodingInfo(); } } public DialogResult ShowPropertyDialog() { dlg.SizeCalculator = SizeCalculator; DialogResult result = dlg.ShowDialog(); return result; } } public class TiffPropertySelector : IMapImageFileExporterDialog { private readonly ExportImageSizeSelector dlg = new ExportImageSizeSelector(); public double PercentualImageSize { get { return dlg.PercentualImageSize; } set { dlg.PercentualImageSize = value; } } public SizeCalculatorDelegate SizeCalculator { get; set; } public IImageEncodingInfo EncodingInfo { get { return new TiffEncodingInfo(); } } public DialogResult ShowPropertyDialog() { dlg.SizeCalculator = SizeCalculator; DialogResult result = dlg.ShowDialog(); return result; } } public interface IMapImageFileExporterDialog : IMapImageFileExporter { DialogResult ShowPropertyDialog(); } public interface IMapImageFileExporter { IImageEncodingInfo EncodingInfo { get; } double PercentualImageSize { get; set; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/000077500000000000000000000000001446222606700261355ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/FIT/000077500000000000000000000000001446222606700265575ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/FIT/FITImporter.cs000066400000000000000000000377301446222606700312640ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.Serialization; using System.IO; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Importers.GPX.GPX11; using QuickRoute.BusinessEntities.Importers.Polar; using QuickRoute.BusinessEntities.Importers.Polar.ProTrainer; namespace QuickRoute.BusinessEntities.Importers.FIT { public class FITImporter : IRouteFileImporter { public ImportResult ImportResult { get; set; } public string FileName { get; set; } public DateTime CreationTime { get; set; } /// FIT file creation time public DateTime FirstTime { get; set; } /// time of first event/activity in FIT file public DateTime LastTime { get; set; } /// time of last event/activity in FIT file #region IRouteImporter Members public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion public DialogResult ShowPreImportDialogs() { return DialogResult.OK; } public void Import() { ImportResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); try { using (var stream = new FileStream(FileName, FileMode.Open, FileAccess.Read)) { using (var reader = new BinaryReader(stream)) { var header = new Header(reader); var data = new Data(reader, header.DataSize); CreationTime = FITUtil.ToDateTime(data.creatTimestamp); FirstTime = FITUtil.ToDateTime(data.firstTimestamp); LastTime = FITUtil.ToDateTime(data.lastTimestamp); // route var routeSegment = new RouteSegment(); foreach(var w in data.Waypoints) { if(routeSegment.Waypoints.Count == 0 || routeSegment.LastWaypoint.Time < w.Time) { routeSegment.Waypoints.Add(new Waypoint(w.Time, new LongLat(w.Longitude, w.Latitude), w.Altitude, w.HeartRate, null)); } } ImportResult.Route = new Route(new List() { routeSegment }); // laps if (routeSegment.Waypoints.Count > 1) { ImportResult.Laps = new LapCollection(); ImportResult.Laps.Add(new Lap(routeSegment.FirstWaypoint.Time, LapType.Start)); foreach (var l in data.Laps) { if (l.Time > routeSegment.FirstWaypoint.Time && l.Time < routeSegment.LastWaypoint.Time) ImportResult.Laps.Add(new Lap(l.Time, LapType.Lap)); } ImportResult.Laps.Add(new Lap(routeSegment.LastWaypoint.Time, LapType.Stop)); } ImportResult.Succeeded = true; } } } catch (Exception ex) { ImportResult.Exception = ex; } if (EndWork != null) EndWork(this, new EventArgs()); } private class Data { private const double positionFactor = (double)180 / 0x7FFFFFFF; private const Int32 invalidInt32 = 0x7FFFFFFF; private const UInt16 invalidUInt16 = 0xFFFF; private const byte invalidByte = 0xFF; public UInt32 creatTimestamp = 0; public UInt32 firstTimestamp = 0; public UInt32 lastTimestamp = 0; public List Waypoints { get; private set; } public List Laps { get; private set; } public Data(BinaryReader reader, UInt32 dataSize) { Waypoints = new List(); Laps = new List(); var TStamps = new List(); var bytes = reader.ReadBytes((int)dataSize); using (var stream = new MemoryStream(bytes)) { using (var dataReader = new BinaryReader(stream)) { var recordHeader = new RecordHeader(dataReader); if (!recordHeader.IsDefinitionMessage) { throw new Exception("First record is not a definition message."); } var def = new DefinitionMessage(dataReader); if (def.GlobalMessageNumber != (ushort) MesgNum.file_id) throw new Exception("First record's global message number is not file_id."); recordHeader = new RecordHeader(dataReader); if (recordHeader.IsDefinitionMessage) throw new Exception("Encountered a definition message, but expected a data message."); var d = new DataMessage(dataReader, def); var fileType = d.GetByte(0); if (fileType != 4) throw new Exception("Not a FIT activity file."); var creationTimestamp = d.GetUInt32(4); if (creationTimestamp == null) creationTimestamp = FITUtil.AddCompressedTimestamp(creatTimestamp, recordHeader.TimeOffset); creatTimestamp = creationTimestamp.Value; var messageTypeTranslator = new Dictionary(); lastTimestamp = 0; while (dataReader.BaseStream.Position < dataReader.BaseStream.Length) { recordHeader = new RecordHeader(dataReader); if (recordHeader.IsDefinitionMessage) { def = new DefinitionMessage(dataReader); FITUtil.AddOrReplace(messageTypeTranslator, recordHeader.LocalMessageType, def); } else { DefinitionMessage currentDef = messageTypeTranslator[recordHeader.LocalMessageType]; d = new DataMessage(dataReader, currentDef); var timestamp = d.GetUInt32(253); if (timestamp == null) timestamp = FITUtil.AddCompressedTimestamp(lastTimestamp, recordHeader.TimeOffset); DateTime time = FITUtil.ToDateTime(timestamp.Value); var gmn = currentDef.GlobalMessageNumber; if (gmn == (byte) MesgNum.record) // 20 { var lat = d.GetInt32(0); var lng = d.GetInt32(1); var alt = d.GetUInt16(2); var hr = d.GetByte(3); if (lng != null && lng != invalidInt32 && lat != null && lat != invalidInt32) { Waypoints.Add(new FITWaypoint() { Time = time, Latitude = positionFactor * lat.Value, Longitude = positionFactor * lng.Value, Altitude = alt == null || alt == invalidUInt16 ? (double?)null : (double)alt.Value / 5 - 500, HeartRate = hr == null || hr == invalidByte ? null : hr }); } } else if (gmn == (byte)MesgNum.lap) // 19 { Laps.Add(new FITLap() { Time = time }); } else if (gmn == (byte)MesgNum.waypoint) // 29 { var lat = d.GetInt32(1); var lng = d.GetInt32(2); // 3 not used var alt = d.GetUInt16(4); if (lng != null && lng != invalidInt32 && lat != null && lat != invalidInt32) { Waypoints.Add(new FITWaypoint() { Time = time, Latitude = positionFactor * lat.Value, Longitude = positionFactor * lng.Value, Altitude = alt == null || alt == invalidUInt16 ? (double?)null : (double)alt.Value / 5 - 500, HeartRate = null }); } } else if (gmn == 22) { } lastTimestamp = timestamp.Value; TStamps.Add(timestamp.Value); } } } } TStamps.RemoveAll(ZeroPredicate); TStamps.Sort(); if(TStamps.Count<1) return; firstTimestamp = TStamps[0]; lastTimestamp = TStamps[TStamps.Count-1]; } private static bool ZeroPredicate(uint u) { return u == 0; } } private class RecordHeader { public bool IsDefinitionMessage { get; set; } public bool IsNormalHeader { get; set; } public byte LocalMessageType { get; set; } public byte TimeOffset { get; set; } public RecordHeader(BinaryReader reader) { var b = reader.ReadByte(); IsDefinitionMessage = ((b >> 6) & 1) == 1; IsNormalHeader = ((b >> 7) & 1) == 0; if (IsNormalHeader) { LocalMessageType = (byte)(b & 0xF); } else { LocalMessageType = (byte)((b >> 5) & 0x3); TimeOffset = (byte)(b & 0x1F); } } } private class Field { public byte FieldDefinitionNumber { get; set; } public byte Size { get; set; } public byte BaseType { get; set; } public int Position { get; set; } } private class DefinitionMessage { public byte Architecture { get; set; } public UInt16 GlobalMessageNumber { get; set; } public Field[] Fields { get; set; } public int DataLength { get; set; } public DefinitionMessage(BinaryReader dataReader) { dataReader.ReadByte(); // reserved Architecture = dataReader.ReadByte(); GlobalMessageNumber = FITUtil.ChangeEndianness(dataReader.ReadUInt16(), Architecture); var numberOfFields = dataReader.ReadByte(); Fields = new Field[numberOfFields]; for (var i = 0; i < numberOfFields; i++) { Fields[i] = new Field() { FieldDefinitionNumber = dataReader.ReadByte(), Size = dataReader.ReadByte(), BaseType = dataReader.ReadByte(), Position = DataLength }; DataLength += Fields[i].Size; } } } private class DataMessage { private readonly DefinitionMessage definitionMessage; private readonly byte[] data; public DataMessage(BinaryReader dataReader, DefinitionMessage definitionMessage) { this.definitionMessage = definitionMessage; data = dataReader.ReadBytes(definitionMessage.DataLength); } public byte? GetByte(int fieldDefinitionNumber) { var field = GetFieldByFieldDefinitionNumber(fieldDefinitionNumber); return field == null ? (byte?)null : data[field.Position]; } public UInt16? GetUInt16(int fieldDefinitionNumber) { var field = GetFieldByFieldDefinitionNumber(fieldDefinitionNumber); return field == null ? (UInt16?)null : FITUtil.ChangeEndianness(BitConverter.ToUInt16(data, field.Position), definitionMessage.Architecture); } public UInt32? GetUInt32(int fieldDefinitionNumber) { var field = GetFieldByFieldDefinitionNumber(fieldDefinitionNumber); return field == null ? (UInt32?)null : FITUtil.ChangeEndianness(BitConverter.ToUInt32(data, field.Position), definitionMessage.Architecture); } public Int32? GetInt32(int fieldDefinitionNumber) { var field = GetFieldByFieldDefinitionNumber(fieldDefinitionNumber); return field == null ? (Int32?)null : FITUtil.ChangeEndianness(BitConverter.ToInt32(data, field.Position), definitionMessage.Architecture); } private Field GetFieldByFieldDefinitionNumber(int fieldDefinitionNumber) { foreach (var f in definitionMessage.Fields) { if (f.FieldDefinitionNumber == fieldDefinitionNumber) return f; } return null; } } private class Header { public Header(BinaryReader reader) { Size = reader.ReadByte(); var headerBytes = reader.ReadBytes(Size - 1); var crc = CalculateCrc(0, Size); for (var i = 0; i < 11; i++) { crc = CalculateCrc(crc, headerBytes[i]); } using (var headerStream = new MemoryStream(headerBytes)) { using (var headerReader = new BinaryReader(headerStream)) { ProtocolVersion = headerReader.ReadByte(); ProfileVersion = headerReader.ReadUInt16(); DataSize = headerReader.ReadUInt32(); DataType = Encoding.ASCII.GetString(headerReader.ReadBytes(4)); if (headerReader.BaseStream.Position < headerBytes.Length) { Crc = headerReader.ReadUInt16(); } } } CrcIsValid = Crc == 0 /* sometimes crc is set to zero in header */ || Crc == crc; } public byte Size { get; set; } public byte ProtocolVersion { get; set; } public UInt16 ProfileVersion { get; set; } public UInt32 DataSize { get; set; } public string DataType { get; set; } public UInt16 Crc { get; set; } public bool CrcIsValid { get; private set; } private readonly UInt16[] crcTable = new UInt16[] { 0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401, 0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400 }; private UInt16 CalculateCrc(UInt16 crc, byte b) { // compute checksum of lower four bits of byte var tmp = crcTable[crc & 0xF]; crc = (UInt16)((crc >> 4) & 0x0FFF); crc = (UInt16)(crc ^ tmp ^ crcTable[b & 0xF]); // now compute checksum of upper four bits of byte tmp = crcTable[crc & 0xF]; crc = (UInt16)((crc >> 4) & 0x0FFF); crc = (UInt16)(crc ^ tmp ^ crcTable[(b >> 4) & 0xF]); return crc; } } private class FITWaypoint { public DateTime Time { get; set; } public double Latitude { get; set; } public double Longitude { get; set; } public int? HeartRate { get; set; } public double? Altitude { get; set; } } private class FITLap { public DateTime Time { get; set; } } private enum MesgNum : ushort { file_id = 0, capabilities = 1, device_settings = 2, user_profile = 3, hrm_profile = 4, sdm_profile = 5, bike_profile = 6, zones_target = 7, hr_zone = 8, power_zone = 9, met_zone = 10, sport = 12, goal = 15, session = 18, lap = 19, record = 20, @event = 21, device_info = 23, workout = 26, workout_step = 27, waypoint = 29, weight_scale = 30, course = 31, course_point = 32, totals = 33, activity = 34, software = 35, file_capabilities = 37, mesg_capabilities = 38, field_capabilities = 39, file_creator = 49, blood_pressure = 51, hrv = 78, pad = 105 } private enum File : byte { device = 1, settings = 2, sport = 3, activity = 4, workout = 5, course = 6, weight = 9, totals = 10, goals = 11, blood_pressure = 14, activity_summary = 20, } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/FIT/FITUtil.cs000066400000000000000000000037511446222606700303740ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.BusinessEntities.Importers.FIT { public static class FITUtil { public static UInt16 ChangeEndianness(UInt16 value, byte architecture) { if (architecture == 0) return value; var input = BitConverter.GetBytes(value); var output = new byte[input.Length]; for (var i = 0; i < input.Length; i++) { output[input.Length - 1 - i] = input[i]; } return BitConverter.ToUInt16(output, 0); } public static UInt32 ChangeEndianness(UInt32 value, byte architecture) { if (architecture == 0) return value; var input = BitConverter.GetBytes(value); var output = new byte[input.Length]; for (var i = 0; i < input.Length; i++) { output[input.Length - 1 - i] = input[i]; } return BitConverter.ToUInt32(output, 0); } public static Int32 ChangeEndianness(Int32 value, byte architecture) { if (architecture == 0) return value; var input = BitConverter.GetBytes(value); var output = new byte[input.Length]; for (var i = 0; i < input.Length; i++) { output[input.Length - 1 - i] = input[i]; } return BitConverter.ToInt32(output, 0); } public static void AddOrReplace(IDictionary source, TKey key, TValue value) { if(source.ContainsKey(key)) { source[key] = value; } else { source.Add(key, value); } } public static DateTime ToDateTime(UInt32 timestamp) { return new DateTime(1989, 12, 31, 00, 00, 00, DateTimeKind.Utc).AddSeconds(timestamp); } public static UInt32 AddCompressedTimestamp(UInt32 timestamp, byte offset) { if(offset > (timestamp & 0x0000001F)) { return (timestamp & 0xFFFFFFE0) + offset; } return (timestamp & 0xFFFFFFE0) + offset + 0x20; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/FRWD/000077500000000000000000000000001446222606700266775ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/FRWD/FRWDImporter.cs000066400000000000000000000101021446222606700315040ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.IO; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Importers.FRWD { public class FRWDImporter : IRouteFileImporter { public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; private ImportResult importResult; public ImportResult ImportResult { get { return importResult; } set { importResult = value; } } public string FileName { get; set; } public DialogResult ShowPreImportDialogs() { return DialogResult.OK; } public void Import() { importResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); StreamReader reader = new StreamReader(FileName); RouteSegment rs = new RouteSegment(); LapCollection laps = new LapCollection(); int i; string[] atoms; string line; for (i = 0; i < 3; i++) reader.ReadLine(); // start time atoms = reader.ReadLine().Split("\t".ToCharArray()); DateTime startTime = DateTime.MinValue; int firstColonPosition = atoms[1].IndexOf(":"); int lastColonPosition = atoms[1].LastIndexOf(":"); int length = lastColonPosition + 2 - firstColonPosition + 2 + 1; if (length > 0) { if(DateTime.TryParse(atoms[1].Substring(firstColonPosition - 2, lastColonPosition + 2 - firstColonPosition + 2 + 1), out startTime)) { startTime = startTime.ToUniversalTime(); } } // go to start of coordinates i = 0; while (i < 5 && !reader.EndOfStream) { line = reader.ReadLine(); if (line == "") i++; } reader.ReadLine(); reader.ReadLine(); // read all coordinates while (!reader.EndOfStream) { line = reader.ReadLine(); if (line == "") break; atoms = line.Split("\t".ToCharArray()); Waypoint w = new Waypoint(); w.Time = startTime.AddSeconds(Convert.ToInt32(atoms[0])); w.LongLat = new LongLat(ParseFRWDLongLatString(atoms[5]), ParseFRWDLongLatString(atoms[4])); double altitude; double.TryParse(LocalizeDecimalString(atoms[6]), out altitude); w.Altitude = altitude; double heartRate; double.TryParse(LocalizeDecimalString(atoms[9]), out heartRate); w.HeartRate = heartRate; rs.Waypoints.Add(w); if (atoms[1] != "") { // lap Lap lap = new Lap(); lap.LapType = LapType.Lap; lap.Time = w.Time; laps.Add(lap); } } if (laps.Count > 0) laps[0].LapType = LapType.Start; if (laps.Count > 1) laps[laps.Count - 1].LapType = LapType.Stop; importResult.Laps = laps; List routeSegments = new List(); if(rs.Waypoints.Count > 0) { routeSegments.Add(rs); importResult.Route = new Route(routeSegments); importResult.Succeeded = true; } else { importResult.Succeeded = false; importResult.Error = ImportError.NoWaypoints; } reader.Close(); if (EndWork != null) EndWork(this, new EventArgs()); } private static double ParseFRWDLongLatString(string s) { double value; double.TryParse(LocalizeDecimalString(s), out value); bool isNegative = (value < 0); value = Math.Abs(value); return (isNegative ? -1 : 1) * (Math.Floor(value / 100) + (value % 100) / 60); } private static string LocalizeDecimalString(string s) { s = s.Replace(",", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator); s = s.Replace(".", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator); return s; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/FileFormat.cs000066400000000000000000000016751446222606700305250ustar00rootroot00000000000000using System.Collections.Generic; namespace QuickRoute.BusinessEntities.Importers { public class FileFormat { private string fileFilter; public FileFormat(string fileFilter) { this.fileFilter = fileFilter; } public string FileFilter { get { return fileFilter; } set { fileFilter = value; } } public string[] Extensions { get { int pos = fileFilter.LastIndexOf("|"); string[] extensionsArray = fileFilter.Substring(pos + 1).Split(";".ToCharArray()); List extensions = new List(); foreach (string e in extensionsArray) { extensions.Add(e.TrimStart("*".ToCharArray())); } return extensions.ToArray(); } } public override string ToString() { int pos = fileFilter.LastIndexOf("|"); return fileFilter.Substring(0, pos); } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPSDevice.cs000066400000000000000000000013241446222606700302350ustar00rootroot00000000000000using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.Importers { public class GPSDevice { private IGPSDeviceImporter importer; public GPSDevice(IGPSDeviceImporter importer) { this.importer = importer; } public IGPSDeviceImporter Importer { get { return importer; } set { importer = value; } } public override string ToString() { if (importer == null) { return base.ToString(); } if (!importer.IsConnected && importer.CachedDataExists) { return string.Format("{0} ({1})", importer.DeviceName, Strings.NotConnected); } return importer.DeviceName; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/000077500000000000000000000000001446222606700265735ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX10/000077500000000000000000000000001446222606700273725ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX10/gpx1.0.cs000066400000000000000000001144771446222606700307540ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:2.0.50727.1433 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ using System.Xml.Serialization; namespace QuickRoute.BusinessEntities.Importers.GPX.GPX10 { // // This source code was auto-generated by xsd, Version=2.0.50727.1432. // /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.topografix.com/GPX/1/0")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.topografix.com/GPX/1/0", IsNullable = false)] public partial class gpx10Type { private string nameField; private string descField; private string authorField; private string emailField; private string urlField; private string urlnameField; private System.DateTime timeField; private bool timeFieldSpecified; private string keywordsField; private boundsType boundsField; private gpxWpt[] wptField; private gpxRte[] rteField; private gpxTrk[] trkField; private System.Xml.XmlElement[] anyField; private string versionField; private string creatorField; public gpx10Type() { this.versionField = "1.0"; } /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string author { get { return this.authorField; } set { this.authorField = value; } } /// public string email { get { return this.emailField; } set { this.emailField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string url { get { return this.urlField; } set { this.urlField = value; } } /// public string urlname { get { return this.urlnameField; } set { this.urlnameField = value; } } /// public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool timeSpecified { get { return this.timeFieldSpecified; } set { this.timeFieldSpecified = value; } } /// public string keywords { get { return this.keywordsField; } set { this.keywordsField = value; } } /// public boundsType bounds { get { return this.boundsField; } set { this.boundsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("wpt")] public gpxWpt[] wpt { get { return this.wptField; } set { this.wptField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("rte")] public gpxRte[] rte { get { return this.rteField; } set { this.rteField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("trk")] public gpxTrk[] trk { get { return this.trkField; } set { this.trkField = value; } } /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string version { get { return this.versionField; } set { this.versionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string creator { get { return this.creatorField; } set { this.creatorField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/0")] public partial class boundsType { private decimal minlatField; private decimal minlonField; private decimal maxlatField; private decimal maxlonField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal minlat { get { return this.minlatField; } set { this.minlatField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal minlon { get { return this.minlonField; } set { this.minlonField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal maxlat { get { return this.maxlatField; } set { this.maxlatField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal maxlon { get { return this.maxlonField; } set { this.maxlonField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.topografix.com/GPX/1/0")] public partial class gpxWpt { private decimal eleField; private bool eleFieldSpecified; private System.DateTime timeField; private bool timeFieldSpecified; private decimal magvarField; private bool magvarFieldSpecified; private decimal geoidheightField; private bool geoidheightFieldSpecified; private string nameField; private string cmtField; private string descField; private string srcField; private string urlField; private string urlnameField; private string symField; private string typeField; private fixType fixField; private bool fixFieldSpecified; private string satField; private decimal hdopField; private bool hdopFieldSpecified; private decimal vdopField; private bool vdopFieldSpecified; private decimal pdopField; private bool pdopFieldSpecified; private decimal ageofdgpsdataField; private bool ageofdgpsdataFieldSpecified; private string dgpsidField; private System.Xml.XmlElement[] anyField; private decimal latField; private decimal lonField; /// public decimal ele { get { return this.eleField; } set { this.eleField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool eleSpecified { get { return this.eleFieldSpecified; } set { this.eleFieldSpecified = value; } } /// public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool timeSpecified { get { return this.timeFieldSpecified; } set { this.timeFieldSpecified = value; } } /// public decimal magvar { get { return this.magvarField; } set { this.magvarField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool magvarSpecified { get { return this.magvarFieldSpecified; } set { this.magvarFieldSpecified = value; } } /// public decimal geoidheight { get { return this.geoidheightField; } set { this.geoidheightField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool geoidheightSpecified { get { return this.geoidheightFieldSpecified; } set { this.geoidheightFieldSpecified = value; } } /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string url { get { return this.urlField; } set { this.urlField = value; } } /// public string urlname { get { return this.urlnameField; } set { this.urlnameField = value; } } /// public string sym { get { return this.symField; } set { this.symField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// public fixType fix { get { return this.fixField; } set { this.fixField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool fixSpecified { get { return this.fixFieldSpecified; } set { this.fixFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string sat { get { return this.satField; } set { this.satField = value; } } /// public decimal hdop { get { return this.hdopField; } set { this.hdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool hdopSpecified { get { return this.hdopFieldSpecified; } set { this.hdopFieldSpecified = value; } } /// public decimal vdop { get { return this.vdopField; } set { this.vdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool vdopSpecified { get { return this.vdopFieldSpecified; } set { this.vdopFieldSpecified = value; } } /// public decimal pdop { get { return this.pdopField; } set { this.pdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool pdopSpecified { get { return this.pdopFieldSpecified; } set { this.pdopFieldSpecified = value; } } /// public decimal ageofdgpsdata { get { return this.ageofdgpsdataField; } set { this.ageofdgpsdataField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ageofdgpsdataSpecified { get { return this.ageofdgpsdataFieldSpecified; } set { this.ageofdgpsdataFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "integer")] public string dgpsid { get { return this.dgpsidField; } set { this.dgpsidField = value; } } /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lat { get { return this.latField; } set { this.latField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lon { get { return this.lonField; } set { this.lonField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/0")] public enum fixType { /// none, /// [System.Xml.Serialization.XmlEnumAttribute("2d")] Item2d, /// [System.Xml.Serialization.XmlEnumAttribute("3d")] Item3d, /// dgps, /// pps, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.topografix.com/GPX/1/0")] public partial class gpxRte { private string nameField; private string cmtField; private string descField; private string srcField; private string urlField; private string urlnameField; private string numberField; private System.Xml.XmlElement[] anyField; private gpxRteRtept[] rteptField; /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string url { get { return this.urlField; } set { this.urlField = value; } } /// public string urlname { get { return this.urlnameField; } set { this.urlnameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string number { get { return this.numberField; } set { this.numberField = value; } } /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("rtept")] public gpxRteRtept[] rtept { get { return this.rteptField; } set { this.rteptField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.topografix.com/GPX/1/0")] public partial class gpxRteRtept { private decimal eleField; private bool eleFieldSpecified; private System.DateTime timeField; private bool timeFieldSpecified; private decimal magvarField; private bool magvarFieldSpecified; private decimal geoidheightField; private bool geoidheightFieldSpecified; private string nameField; private string cmtField; private string descField; private string srcField; private string urlField; private string urlnameField; private string symField; private string typeField; private fixType fixField; private bool fixFieldSpecified; private string satField; private decimal hdopField; private bool hdopFieldSpecified; private decimal vdopField; private bool vdopFieldSpecified; private decimal pdopField; private bool pdopFieldSpecified; private decimal ageofdgpsdataField; private bool ageofdgpsdataFieldSpecified; private string dgpsidField; private System.Xml.XmlElement[] anyField; private decimal latField; private decimal lonField; /// public decimal ele { get { return this.eleField; } set { this.eleField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool eleSpecified { get { return this.eleFieldSpecified; } set { this.eleFieldSpecified = value; } } /// public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool timeSpecified { get { return this.timeFieldSpecified; } set { this.timeFieldSpecified = value; } } /// public decimal magvar { get { return this.magvarField; } set { this.magvarField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool magvarSpecified { get { return this.magvarFieldSpecified; } set { this.magvarFieldSpecified = value; } } /// public decimal geoidheight { get { return this.geoidheightField; } set { this.geoidheightField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool geoidheightSpecified { get { return this.geoidheightFieldSpecified; } set { this.geoidheightFieldSpecified = value; } } /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string url { get { return this.urlField; } set { this.urlField = value; } } /// public string urlname { get { return this.urlnameField; } set { this.urlnameField = value; } } /// public string sym { get { return this.symField; } set { this.symField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// public fixType fix { get { return this.fixField; } set { this.fixField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool fixSpecified { get { return this.fixFieldSpecified; } set { this.fixFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string sat { get { return this.satField; } set { this.satField = value; } } /// public decimal hdop { get { return this.hdopField; } set { this.hdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool hdopSpecified { get { return this.hdopFieldSpecified; } set { this.hdopFieldSpecified = value; } } /// public decimal vdop { get { return this.vdopField; } set { this.vdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool vdopSpecified { get { return this.vdopFieldSpecified; } set { this.vdopFieldSpecified = value; } } /// public decimal pdop { get { return this.pdopField; } set { this.pdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool pdopSpecified { get { return this.pdopFieldSpecified; } set { this.pdopFieldSpecified = value; } } /// public decimal ageofdgpsdata { get { return this.ageofdgpsdataField; } set { this.ageofdgpsdataField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ageofdgpsdataSpecified { get { return this.ageofdgpsdataFieldSpecified; } set { this.ageofdgpsdataFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "integer")] public string dgpsid { get { return this.dgpsidField; } set { this.dgpsidField = value; } } /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lat { get { return this.latField; } set { this.latField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lon { get { return this.lonField; } set { this.lonField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.topografix.com/GPX/1/0")] public partial class gpxTrk { private string nameField; private string cmtField; private string descField; private string srcField; private string urlField; private string urlnameField; private string numberField; private System.Xml.XmlElement[] anyField; private gpxTrkTrksegTrkpt[][] trksegField; /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string url { get { return this.urlField; } set { this.urlField = value; } } /// public string urlname { get { return this.urlnameField; } set { this.urlnameField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string number { get { return this.numberField; } set { this.numberField = value; } } /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } /// [System.Xml.Serialization.XmlArrayItemAttribute("trkpt", typeof(gpxTrkTrksegTrkpt), IsNullable = false)] public gpxTrkTrksegTrkpt[][] trkseg { get { return this.trksegField; } set { this.trksegField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.topografix.com/GPX/1/0")] public partial class gpxTrkTrksegTrkpt { private decimal eleField; private bool eleFieldSpecified; private System.DateTime timeField; private bool timeFieldSpecified; private decimal courseField; private bool courseFieldSpecified; private decimal speedField; private bool speedFieldSpecified; private decimal magvarField; private bool magvarFieldSpecified; private decimal geoidheightField; private bool geoidheightFieldSpecified; private string nameField; private string cmtField; private string descField; private string srcField; private string urlField; private string urlnameField; private string symField; private string typeField; private fixType fixField; private bool fixFieldSpecified; private string satField; private decimal hdopField; private bool hdopFieldSpecified; private decimal vdopField; private bool vdopFieldSpecified; private decimal pdopField; private bool pdopFieldSpecified; private decimal ageofdgpsdataField; private bool ageofdgpsdataFieldSpecified; private string dgpsidField; private System.Xml.XmlElement[] anyField; private decimal latField; private decimal lonField; /// public decimal ele { get { return this.eleField; } set { this.eleField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool eleSpecified { get { return this.eleFieldSpecified; } set { this.eleFieldSpecified = value; } } /// public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool timeSpecified { get { return this.timeFieldSpecified; } set { this.timeFieldSpecified = value; } } /// public decimal course { get { return this.courseField; } set { this.courseField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool courseSpecified { get { return this.courseFieldSpecified; } set { this.courseFieldSpecified = value; } } /// public decimal speed { get { return this.speedField; } set { this.speedField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool speedSpecified { get { return this.speedFieldSpecified; } set { this.speedFieldSpecified = value; } } /// public decimal magvar { get { return this.magvarField; } set { this.magvarField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool magvarSpecified { get { return this.magvarFieldSpecified; } set { this.magvarFieldSpecified = value; } } /// public decimal geoidheight { get { return this.geoidheightField; } set { this.geoidheightField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool geoidheightSpecified { get { return this.geoidheightFieldSpecified; } set { this.geoidheightFieldSpecified = value; } } /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string url { get { return this.urlField; } set { this.urlField = value; } } /// public string urlname { get { return this.urlnameField; } set { this.urlnameField = value; } } /// public string sym { get { return this.symField; } set { this.symField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// public fixType fix { get { return this.fixField; } set { this.fixField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool fixSpecified { get { return this.fixFieldSpecified; } set { this.fixFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string sat { get { return this.satField; } set { this.satField = value; } } /// public decimal hdop { get { return this.hdopField; } set { this.hdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool hdopSpecified { get { return this.hdopFieldSpecified; } set { this.hdopFieldSpecified = value; } } /// public decimal vdop { get { return this.vdopField; } set { this.vdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool vdopSpecified { get { return this.vdopFieldSpecified; } set { this.vdopFieldSpecified = value; } } /// public decimal pdop { get { return this.pdopField; } set { this.pdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool pdopSpecified { get { return this.pdopFieldSpecified; } set { this.pdopFieldSpecified = value; } } /// public decimal ageofdgpsdata { get { return this.ageofdgpsdataField; } set { this.ageofdgpsdataField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ageofdgpsdataSpecified { get { return this.ageofdgpsdataFieldSpecified; } set { this.ageofdgpsdataFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "integer")] public string dgpsid { get { return this.dgpsidField; } set { this.dgpsidField = value; } } /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lat { get { return this.latField; } set { this.latField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lon { get { return this.lonField; } set { this.lonField = value; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX10/gpx1.0.xsd000066400000000000000000000304341446222606700311330ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX11/000077500000000000000000000000001446222606700273735ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX11/gpx1.1.cs000066400000000000000000000652571446222606700307570ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:2.0.50727.1433 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ using System.Xml.Serialization; namespace QuickRoute.BusinessEntities.Importers.GPX.GPX11 { // // This source code was auto-generated by xsd, Version=2.0.50727.42. // /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] [System.Xml.Serialization.XmlRootAttribute("gpx", Namespace = "http://www.topografix.com/GPX/1/1", IsNullable = false)] public partial class gpx11Type { private metadataType metadataField; private wptType[] wptField; private rteType[] rteField; private trkType[] trkField; private extensionsType extensionsField; private string versionField; private string creatorField; public gpx11Type() { this.versionField = "1.1"; } /// public metadataType metadata { get { return this.metadataField; } set { this.metadataField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("wpt")] public wptType[] wpt { get { return this.wptField; } set { this.wptField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("rte")] public rteType[] rte { get { return this.rteField; } set { this.rteField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("trk")] public trkType[] trk { get { return this.trkField; } set { this.trkField = value; } } /// public extensionsType extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string version { get { return this.versionField; } set { this.versionField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string creator { get { return this.creatorField; } set { this.creatorField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class metadataType { private string nameField; private string descField; private personType authorField; private copyrightType copyrightField; private linkType[] linkField; private System.DateTime timeField; private bool timeFieldSpecified; private string keywordsField; private boundsType boundsField; private extensionsType extensionsField; /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public personType author { get { return this.authorField; } set { this.authorField = value; } } /// public copyrightType copyright { get { return this.copyrightField; } set { this.copyrightField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("link")] public linkType[] link { get { return this.linkField; } set { this.linkField = value; } } /// public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool timeSpecified { get { return this.timeFieldSpecified; } set { this.timeFieldSpecified = value; } } /// public string keywords { get { return this.keywordsField; } set { this.keywordsField = value; } } /// public boundsType bounds { get { return this.boundsField; } set { this.boundsField = value; } } /// public extensionsType extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class personType { private string nameField; private emailType emailField; private linkType linkField; /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public emailType email { get { return this.emailField; } set { this.emailField = value; } } /// public linkType link { get { return this.linkField; } set { this.linkField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class emailType { private string idField; private string domainField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public string id { get { return this.idField; } set { this.idField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string domain { get { return this.domainField; } set { this.domainField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class trksegType { private wptType[] trkptField; private extensionsType extensionsField; /// [System.Xml.Serialization.XmlElementAttribute("trkpt")] public wptType[] trkpt { get { return this.trkptField; } set { this.trkptField = value; } } /// public extensionsType extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class wptType { private decimal eleField; private bool eleFieldSpecified; private System.DateTime timeField; private bool timeFieldSpecified; private decimal magvarField; private bool magvarFieldSpecified; private decimal geoidheightField; private bool geoidheightFieldSpecified; private string nameField; private string cmtField; private string descField; private string srcField; private linkType[] linkField; private string symField; private string typeField; private fixType fixField; private bool fixFieldSpecified; private string satField; private decimal hdopField; private bool hdopFieldSpecified; private decimal vdopField; private bool vdopFieldSpecified; private decimal pdopField; private bool pdopFieldSpecified; private decimal ageofdgpsdataField; private bool ageofdgpsdataFieldSpecified; private string dgpsidField; private extensionsType extensionsField; private decimal latField; private decimal lonField; /// public decimal ele { get { return this.eleField; } set { this.eleField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool eleSpecified { get { return this.eleFieldSpecified; } set { this.eleFieldSpecified = value; } } /// public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool timeSpecified { get { return this.timeFieldSpecified; } set { this.timeFieldSpecified = value; } } /// public decimal magvar { get { return this.magvarField; } set { this.magvarField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool magvarSpecified { get { return this.magvarFieldSpecified; } set { this.magvarFieldSpecified = value; } } /// public decimal geoidheight { get { return this.geoidheightField; } set { this.geoidheightField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool geoidheightSpecified { get { return this.geoidheightFieldSpecified; } set { this.geoidheightFieldSpecified = value; } } /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("link")] public linkType[] link { get { return this.linkField; } set { this.linkField = value; } } /// public string sym { get { return this.symField; } set { this.symField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// public fixType fix { get { return this.fixField; } set { this.fixField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool fixSpecified { get { return this.fixFieldSpecified; } set { this.fixFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string sat { get { return this.satField; } set { this.satField = value; } } /// public decimal hdop { get { return this.hdopField; } set { this.hdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool hdopSpecified { get { return this.hdopFieldSpecified; } set { this.hdopFieldSpecified = value; } } /// public decimal vdop { get { return this.vdopField; } set { this.vdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool vdopSpecified { get { return this.vdopFieldSpecified; } set { this.vdopFieldSpecified = value; } } /// public decimal pdop { get { return this.pdopField; } set { this.pdopField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool pdopSpecified { get { return this.pdopFieldSpecified; } set { this.pdopFieldSpecified = value; } } /// public decimal ageofdgpsdata { get { return this.ageofdgpsdataField; } set { this.ageofdgpsdataField = value; } } /// [System.Xml.Serialization.XmlIgnoreAttribute()] public bool ageofdgpsdataSpecified { get { return this.ageofdgpsdataFieldSpecified; } set { this.ageofdgpsdataFieldSpecified = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "integer")] public string dgpsid { get { return this.dgpsidField; } set { this.dgpsidField = value; } } /// public extensionsType extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lat { get { return this.latField; } set { this.latField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal lon { get { return this.lonField; } set { this.lonField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class linkType { private string textField; private string typeField; private string hrefField; /// public string text { get { return this.textField; } set { this.textField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute(DataType = "anyURI")] public string href { get { return this.hrefField; } set { this.hrefField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public enum fixType { /// none, /// [System.Xml.Serialization.XmlEnumAttribute("2d")] Item2d, /// [System.Xml.Serialization.XmlEnumAttribute("3d")] Item3d, /// dgps, /// pps, } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class extensionsType { private System.Xml.XmlElement[] anyField; /// [System.Xml.Serialization.XmlAnyElementAttribute()] public System.Xml.XmlElement[] Any { get { return this.anyField; } set { this.anyField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class trkType { private string nameField; private string cmtField; private string descField; private string srcField; private linkType[] linkField; private string numberField; private string typeField; private extensionsType extensionsField; private trksegType[] trksegField; /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("link")] public linkType[] link { get { return this.linkField; } set { this.linkField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string number { get { return this.numberField; } set { this.numberField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// public extensionsType extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("trkseg")] public trksegType[] trkseg { get { return this.trksegField; } set { this.trksegField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class rteType { private string nameField; private string cmtField; private string descField; private string srcField; private linkType[] linkField; private string numberField; private string typeField; private extensionsType extensionsField; private wptType[] rteptField; /// public string name { get { return this.nameField; } set { this.nameField = value; } } /// public string cmt { get { return this.cmtField; } set { this.cmtField = value; } } /// public string desc { get { return this.descField; } set { this.descField = value; } } /// public string src { get { return this.srcField; } set { this.srcField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("link")] public linkType[] link { get { return this.linkField; } set { this.linkField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "nonNegativeInteger")] public string number { get { return this.numberField; } set { this.numberField = value; } } /// public string type { get { return this.typeField; } set { this.typeField = value; } } /// public extensionsType extensions { get { return this.extensionsField; } set { this.extensionsField = value; } } /// [System.Xml.Serialization.XmlElementAttribute("rtept")] public wptType[] rtept { get { return this.rteptField; } set { this.rteptField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class boundsType { private decimal minlatField; private decimal minlonField; private decimal maxlatField; private decimal maxlonField; /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal minlat { get { return this.minlatField; } set { this.minlatField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal minlon { get { return this.minlonField; } set { this.minlonField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal maxlat { get { return this.maxlatField; } set { this.maxlatField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public decimal maxlon { get { return this.maxlonField; } set { this.maxlonField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.topografix.com/GPX/1/1")] public partial class copyrightType { private string yearField; private string licenseField; private string authorField; /// [System.Xml.Serialization.XmlElementAttribute(DataType = "gYear")] public string year { get { return this.yearField; } set { this.yearField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(DataType = "anyURI")] public string license { get { return this.licenseField; } set { this.licenseField = value; } } /// [System.Xml.Serialization.XmlAttributeAttribute()] public string author { get { return this.authorField; } set { this.authorField = value; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX11/gpx1.1.xsd000066400000000000000000000637431446222606700311460ustar00rootroot00000000000000 GPX schema version 1.1 - For more information on GPX and this schema, visit http://www.topografix.com/gpx.asp GPX uses the following conventions: all coordinates are relative to the WGS84 datum. All measurements are in metric units. GPX is the root element in the XML file. GPX documents contain a metadata header, followed by waypoints, routes, and tracks. You can add your own elements to the extensions section of the GPX document. Metadata about the file. A list of waypoints. A list of routes. A list of tracks. You can add extend GPX by adding your own elements from another schema here. You must include the version number in your GPX document. You must include the name or URL of the software that created your GPX document. This allows others to inform the creator of a GPX instance document that fails to validate. Information about the GPX file, author, and copyright restrictions goes in the metadata section. Providing rich, meaningful information about your GPX files allows others to search for and use your GPS data. The name of the GPX file. A description of the contents of the GPX file. The person or organization who created the GPX file. Copyright and license information governing use of the file. URLs associated with the location described in the file. The creation date of the file. Keywords associated with the file. Search engines or databases can use this information to classify the data. Minimum and maximum coordinates which describe the extent of the coordinates in the file. You can add extend GPX by adding your own elements from another schema here. wpt represents a waypoint, point of interest, or named feature on a map. Elevation (in meters) of the point. Creation/modification timestamp for element. Date and time in are in Univeral Coordinated Time (UTC), not local time! Conforms to ISO 8601 specification for date/time representation. Fractional seconds are allowed for millisecond timing in tracklogs. Magnetic variation (in degrees) at the point Height (in meters) of geoid (mean sea level) above WGS84 earth ellipsoid. As defined in NMEA GGA message. The GPS name of the waypoint. This field will be transferred to and from the GPS. GPX does not place restrictions on the length of this field or the characters contained in it. It is up to the receiving application to validate the field before sending it to the GPS. GPS waypoint comment. Sent to GPS as comment. A text description of the element. Holds additional information about the element intended for the user, not the GPS. Source of data. Included to give user some idea of reliability and accuracy of data. "Garmin eTrex", "USGS quad Boston North", e.g. Link to additional information about the waypoint. Text of GPS symbol name. For interchange with other programs, use the exact spelling of the symbol as displayed on the GPS. If the GPS abbreviates words, spell them out. Type (classification) of the waypoint. Type of GPX fix. Number of satellites used to calculate the GPX fix. Horizontal dilution of precision. Vertical dilution of precision. Position dilution of precision. Number of seconds since last DGPS update. ID of DGPS station used in differential correction. You can add extend GPX by adding your own elements from another schema here. The latitude of the point. Decimal degrees, WGS84 datum. The latitude of the point. Decimal degrees, WGS84 datum. rte represents route - an ordered list of waypoints representing a series of turn points leading to a destination. GPS name of route. GPS comment for route. Text description of route for user. Not sent to GPS. Source of data. Included to give user some idea of reliability and accuracy of data. Links to external information about the route. GPS route number. Type (classification) of route. You can add extend GPX by adding your own elements from another schema here. A list of route points. trk represents a track - an ordered list of points describing a path. GPS name of track. GPS comment for track. User description of track. Source of data. Included to give user some idea of reliability and accuracy of data. Links to external information about track. GPS track number. Type (classification) of track. You can add extend GPX by adding your own elements from another schema here. A Track Segment holds a list of Track Points which are logically connected in order. To represent a single GPS track where GPS reception was lost, or the GPS receiver was turned off, start a new Track Segment for each continuous span of track data. You can add extend GPX by adding your own elements from another schema here. You can add extend GPX by adding your own elements from another schema here. A Track Segment holds a list of Track Points which are logically connected in order. To represent a single GPS track where GPS reception was lost, or the GPS receiver was turned off, start a new Track Segment for each continuous span of track data. A Track Point holds the coordinates, elevation, timestamp, and metadata for a single point in a track. You can add extend GPX by adding your own elements from another schema here. Information about the copyright holder and any license governing use of this file. By linking to an appropriate license, you may place your data into the public domain or grant additional usage rights. Year of copyright. Link to external file containing license text. Copyright holder (TopoSoft, Inc.) A link to an external resource (Web page, digital photo, video clip, etc) with additional information. Text of hyperlink. Mime type of content (image/jpeg) URL of hyperlink. An email address. Broken into two parts (id and domain) to help prevent email harvesting. id half of email address (billgates2004) domain half of email address (hotmail.com) A person or organization. Name of person or organization. Email address. Link to Web site or other external information about person. A geographic point with optional elevation and time. Available for use by other schemas. The elevation (in meters) of the point. The time that the point was recorded. The latitude of the point. Decimal degrees, WGS84 datum. The latitude of the point. Decimal degrees, WGS84 datum. An ordered sequence of points. (for polygons or polylines, e.g.) Ordered list of geographic points. Two lat/lon pairs defining the extent of an element. The minimum latitude. The minimum longitude. The maximum latitude. The maximum longitude. The latitude of the point. Decimal degrees, WGS84 datum. The longitude of the point. Decimal degrees, WGS84 datum. Used for bearing, heading, course. Units are decimal degrees, true (not magnetic). Type of GPS fix. none means GPS had no fix. To signify "the fix info is unknown, leave out fixType entirely. pps = military signal used Represents a differential GPS station. quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPX11/gpx1.1.xsx000066400000000000000000000003231446222606700311530ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPXImporter.cs000066400000000000000000000364011446222606700313060ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Globalization; using System.Windows.Forms; using System.Xml; using System.Xml.Serialization; using System.IO; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Importers.GPX.GPX11; using QuickRoute.BusinessEntities.Importers.Polar; using QuickRoute.BusinessEntities.Importers.Polar.ProTrainer; namespace QuickRoute.BusinessEntities.Importers.GPX { public class GPXImporter : IRouteFileImporter { private string fileName; private ImportResult importResult; private const string garminTrackPointExtensionsURI = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1"; public ImportResult ImportResult { get { return importResult; } set { importResult = value; } } public string FileName { get { return fileName; } set { fileName = value; } } public DialogResult ShowPreImportDialogs() { return DialogResult.OK; } public void Import() { // A) The GPX 1.0 class generates an error when trying to run the ImportGPX10 method. // // B) Some GPX 1.0 files out there seem to contain elements, which they should not. // A) and B) made me decide to just replace the schema namespace in GPX 1.0 files from // xmlns="http://www.topografix.com/GPX/1/0" // to // xmlns="http://www.topografix.com/GPX/1/1" // and use GPX 1.1 import instead. //if (GPXUtil.GetGPXVersion(fileName) == GPXVersion.GPX10) //{ // ImportGPX10(); //} //else //{ ImportGPX11(); //} } /* private void ImportGPX10() { if (BeginWork != null) BeginWork(this, new EventArgs()); NumberFormatInfo nfi = new NumberFormatInfo(); nfi.NumberDecimalSeparator = "."; XmlTextReader sr = new XmlTextReader(fileName); XmlSerializer xSerializer = new XmlSerializer(typeof(gpx10Type)); gpx10Type gpx = (gpx10Type)xSerializer.Deserialize(sr); sr.Close(); XmlNamespaceManager nsManager = new XmlNamespaceManager(sr.NameTable); nsManager.AddNamespace("st", "urn:uuid:D0EB2ED5-49B6-44e3-B13C-CF15BE7DD7DD"); importResult = new ImportResult(); // route List routeSegments = new List(); foreach (gpxTrk trk in gpx.trk) { for (int i = trk.trkseg.GetLowerBound(0); i <= trk.trkseg.GetUpperBound(0); i++) { RouteSegment routeSegment = new RouteSegment(); for (int j = trk.trkseg.GetLowerBound(1); j <= trk.trkseg.GetUpperBound(1); j++) { gpxTrkTrksegTrkpt wpt = trk.trkseg[i][j]; double lat = (double)wpt.lat; double lon = (double)wpt.lon; DateTime time = wpt.time; double? heartRate = null; double? altitude = null; routeSegment.Waypoints.Add(new Waypoint(time, new LongLat(lon, lat), altitude, heartRate)); } routeSegments.Add(routeSegment); } } importResult.Route = new Route(routeSegments); // laps LapCollection laps = new LapCollection(); importResult.Laps = laps; if (EndWork != null) EndWork(this, new EventArgs()); } */ private void ImportGPX11() { ImportResult = new ImportResult(); var isGPX10 = (GPXUtil.GetGPXVersion(fileName) == GPXVersion.GPX10); string gpx10convertedFileName = null; string polarConvertedFileName = null; var originalFileName = fileName; if (BeginWork != null) BeginWork(this, new EventArgs()); // check if the file is in gpx 1.0 format and convert it to gpx 1.1 if necessary if (isGPX10) { gpx10convertedFileName = Path.GetTempFileName(); GPXUtil.ConvertGPX10ToGPX11(fileName, gpx10convertedFileName); fileName = gpx10convertedFileName; } // check if the file is an invalid Polar ProTrainer file and correct if necessary if (PolarProTrainerUtil.IsPolarProTrainerGPXFile(fileName)) { polarConvertedFileName = Path.GetTempFileName(); PolarProTrainerUtil.CorrectPolarProTrainerGPXFile(fileName, polarConvertedFileName); fileName = polarConvertedFileName; } var nfi = new NumberFormatInfo { NumberDecimalSeparator = "." }; var sr = new XmlTextReader(fileName); var xSerializer = new XmlSerializer(typeof(gpx11Type)); var gpx11 = (gpx11Type)xSerializer.Deserialize(sr); sr.Close(); var nsManager = new XmlNamespaceManager(sr.NameTable); // add namespace for split times and heart rates (from SportsTracks software) nsManager.AddNamespace("st", "urn:uuid:D0EB2ED5-49B6-44e3-B13C-CF15BE7DD7DD"); // add namespace for map reading information (QuickRoute native) nsManager.AddNamespace("mr", "http://www.matstroeng.se/quickroute/map-reading"); // pre-store heart rates in dictionary (if present) var heartRates = new Dictionary(); // pre-store map-readings in map reading collection (if present) var mapReadings = new List(); if (gpx11.extensions != null && gpx11.extensions.Any != null) { foreach (var element in gpx11.extensions.Any) { if (element.Name == "st:activity") { var nodes = element.SelectNodes("st:heartRateTrack/st:heartRate[@time and @bpm]", nsManager); if (nodes != null) { foreach (XmlNode node in nodes) { DateTime time; double bpm; if (DateTime.TryParse(node.Attributes["time"].Value, out time) && double.TryParse(node.Attributes["bpm"].Value, NumberStyles.Any, nfi, out bpm)) { time = time.ToUniversalTime(); if(!heartRates.ContainsKey(time)) heartRates.Add(time, bpm); } } } } if(element.Name == "mr:map-reading") { DateTime start, end; if (DateTime.TryParse(element.Attributes["start"].Value, out start) && DateTime.TryParse(element.Attributes["end"].Value, out end)) { mapReadings.Add(start.ToUniversalTime()); mapReadings.Add(end.ToUniversalTime()); } } } } mapReadings = FilterMapReadings(mapReadings); // QuickRoute route var noOfWaypoints = 0; var noOfWaypointsWithTimes = 0; var routeSegments = new List(); // first use GPX track if (gpx11.trk != null) { foreach (var trk in gpx11.trk) { // Garmin Training Center exports each lap as a separate trkseg with end time of trkseg n equal to start time of trkseg n+1 // handle this issue foreach (var trkseg in trk.trkseg) { var routeSegment = new RouteSegment(); wptType lastWpt = null; if (trkseg.trkpt != null) { foreach (var wpt in trkseg.trkpt) { if (lastWpt == null || wpt.time != lastWpt.time) { if (wpt.extensions != null && wpt.extensions.Any[0].LocalName == "timerPaused") { // new route segment ahead if (routeSegment.Waypoints.Count > 0) routeSegments.Add(routeSegment); routeSegment = new RouteSegment(); } else { var lat = (double)wpt.lat; var lon = (double)wpt.lon; double? heartRate = null; double? altitude = null; // check for heartrate in SportsTracks extensions if (heartRates.ContainsKey(wpt.time)) heartRate = heartRates[wpt.time]; // check for heartrate in Garmin Trackpoint Extensions heartRate = GetGarminHeartRateFromWaypoint(wpt) ?? heartRate; if (wpt.eleSpecified) { altitude = (double?)wpt.ele; } if (wpt.timeSpecified) { routeSegment.Waypoints.Add(new Waypoint(wpt.time, new LongLat(lon, lat), altitude, heartRate, null)); noOfWaypointsWithTimes++; lastWpt = wpt; } } noOfWaypoints++; } } } if (routeSegment.Waypoints.Count > 0) routeSegments.Add(routeSegment); } } } // if no GPX track - use GPX route if (noOfWaypointsWithTimes == 0 && gpx11.rte != null) { foreach (var route in gpx11.rte) { var routeSegment = new RouteSegment(); foreach (var rtept in route.rtept) { if (rtept.extensions != null && rtept.extensions.Any[0].LocalName == "timerPaused") { // new route segment ahead if (routeSegment.Waypoints.Count > 0) routeSegments.Add(routeSegment); routeSegment = new RouteSegment(); } else { var lat = (double) rtept.lat; var lon = (double) rtept.lon; double? heartRate = null; double? altitude = null; if (heartRates.ContainsKey(rtept.time)) heartRate = heartRates[rtept.time]; if (rtept.eleSpecified) { altitude = (double?) rtept.ele; } if (rtept.timeSpecified) { routeSegment.Waypoints.Add(new Waypoint(rtept.time, new LongLat(lon, lat), altitude, heartRate, null)); noOfWaypointsWithTimes++; } } noOfWaypoints++; } if (routeSegment.Waypoints.Count > 0) routeSegments.Add(routeSegment); } } // add map reading waypoints routeSegments = Route.AddMapReadingWaypoints(routeSegments, mapReadings); importResult.Succeeded = (noOfWaypointsWithTimes > 0); if (ImportResult.Succeeded) { importResult.Route = new Route(routeSegments); // laps var laps = new LapCollection(); var startTime = ImportResult.Route.FirstWaypoint.Time; // from GPX st:split if (gpx11.extensions != null && gpx11.extensions.Any != null) { foreach (var element in gpx11.extensions.Any) { if (element.Name == "st:activity") { var nodes = element.SelectNodes("st:splits/st:split[@time]", nsManager); if (nodes != null) { foreach (XmlNode node in nodes) { var elapsedTime = double.Parse(node.Attributes["time"].Value, nfi); var lap = new Lap(startTime.AddSeconds(elapsedTime), LapType.Lap); laps.Add(lap); } } } } } // from GPX waypoints if (gpx11.wpt != null && laps.Count == 0) { foreach (var waypoint in gpx11.wpt) { if (waypoint.timeSpecified) { laps.Add(new Lap(waypoint.time, LapType.Lap)); } } } foreach (var rs in routeSegments) { laps.Add(new Lap(rs.FirstWaypoint.Time, LapType.Start)); laps.Add(new Lap(rs.LastWaypoint.Time, LapType.Stop)); } importResult.Laps = laps; } else { if (noOfWaypoints == 0) { importResult.Error = ImportError.NoWaypoints; } else if (noOfWaypointsWithTimes == 0) { importResult.Error = ImportError.NoWaypointTimes; } } if (gpx10convertedFileName != null) { File.Delete(gpx10convertedFileName); fileName = originalFileName; } if (polarConvertedFileName != null) { File.Delete(polarConvertedFileName); fileName = originalFileName; } // import Polar HRM file with same base file name as the gpx file, if existing var extension = new FileInfo(fileName).Extension; if(extension != "") { string hrmFileName = new FileInfo(fileName).FullName.Replace(extension, ".hrm"); if(File.Exists(hrmFileName)) { new PolarHRMImporter().AddLapsAndHRData(hrmFileName, importResult); } } if (EndWork != null) EndWork(this, new EventArgs()); } private static double? GetGarminHeartRateFromWaypoint(wptType wpt) { if (wpt.extensions != null) { foreach (var element in wpt.extensions.Any) { if (element.NamespaceURI == garminTrackPointExtensionsURI && element.LocalName == "TrackPointExtension") { foreach (XmlNode subElement in element.GetElementsByTagName("hr", garminTrackPointExtensionsURI)) { double hr; if (double.TryParse(subElement.InnerText, out hr)) return hr; } } } } return null; } private static List FilterMapReadings(List mapReadings) { var filteredMapReadings = new List(); for(var i=0; i filteredMapReadings[filteredMapReadings.Count - 1]) { // simplest case filteredMapReadings.Add(mapReadings[i]); filteredMapReadings.Add(mapReadings[i + 1]); } else { // tricky case, loop through list // not very efficient, but will happen quite seldom so it should be fine var j = 0; while(j < filteredMapReadings.Count) { if (mapReadings[i] < filteredMapReadings[j]) { filteredMapReadings[j] = mapReadings[i]; } if(mapReadings[i] <= filteredMapReadings[j+1]) { while(mapReadings[i+1] >= filteredMapReadings[j+1]) { filteredMapReadings.RemoveAt(j+1); } if(filteredMapReadings.Count % 2 == 1) { filteredMapReadings.Insert(j + 1, mapReadings[i + 1]); } break; } j += 2; } } } } return filteredMapReadings; } #region IRouteImporter Members public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GPX/GPXUtil.cs000066400000000000000000000036601446222606700304230ustar00rootroot00000000000000using System.IO; using System.Xml; using System.Xml.XPath; namespace QuickRoute.BusinessEntities.Importers.GPX { public static class GPXUtil { public static GPXVersion GetGPXVersion(string fileName) { if (IsGPX10(fileName)) return GPXVersion.GPX10; if (IsGPX11(fileName)) return GPXVersion.GPX11; return GPXVersion.Unknown; } private static bool IsGPX10(string fileName) { var reader = new XmlTextReader(fileName); var doc = new XPathDocument(reader); var nav = doc.CreateNavigator(); var nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("gpx10", "http://www.topografix.com/GPX/1/0"); XPathNavigator gpxElement = nav.SelectSingleNode("/gpx10:gpx", nsManager); return (gpxElement != null); } private static bool IsGPX11(string fileName) { var reader = new XmlTextReader(fileName); var doc = new XPathDocument(reader); var nav = doc.CreateNavigator(); var nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("gpx11", "http://www.topografix.com/GPX/1/1"); XPathNavigator gpxElement = nav.SelectSingleNode("/gpx11:gpx", nsManager); return (gpxElement != null); } public static bool ConvertGPX10ToGPX11(string sourceFileName, string targetFileName) { bool result = false; TextReader reader = new StreamReader(sourceFileName); TextWriter writer = new StreamWriter(targetFileName); string data = reader.ReadToEnd(); if (data.Contains("http://www.topografix.com/GPX/1/0")) { writer.Write(data.Replace("http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1")); result = true; } reader.Close(); writer.Close(); return result; } } public enum GPXVersion { GPX10, GPX11, Unknown } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/000077500000000000000000000000001446222606700273525ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/000077500000000000000000000000001446222606700307535ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/ANTDevice.cs000066400000000000000000000070771446222606700330570ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; using System.Xml.XPath; using QuickRoute.Common; namespace QuickRoute.BusinessEntities.Importers.Garmin.ANTAgent { public class ANTDevice { /// /// Initializes the device from data in the specified path. /// /// The path where the data resides. Shall end with a backslash. public ANTDevice(string path) { // id and display name XmlTextReader reader = new XmlTextReader(path + "GarminDevice.XML"); XPathDocument doc = new XPathDocument(reader); XPathNavigator nav = doc.CreateNavigator(); XmlNamespaceManager nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("ns", "http://www.garmin.com/xmlschemas/GarminDevice/v2"); XPathNavigator idElement = nav.SelectSingleNode("/ns:Device/ns:Id", nsManager); Id = idElement.Value; XPathNavigator displayNameElement = nav.SelectSingleNode("/ns:Device/ns:DisplayName", nsManager); DisplayName = displayNameElement.Value; reader.Close(); // history items HistoryItems = new List(); DirectoryInfo di = new DirectoryInfo(path + "History\\"); var cache = ReadCache(); foreach (FileInfo fi in di.GetFiles("*.TCX")) { var key = GetCacheKey(fi); if (!cache.ContainsKey(key)) { var itemsInFile = ExtractHistoryItemsFromFile(fi); cache.Add(key, itemsInFile); } HistoryItems.AddRange(cache[key]); } SaveCache(cache); } public string DisplayName { get; set; } public string Id { get; set; } public List HistoryItems { get; set; } private IEnumerable ExtractHistoryItemsFromFile(FileInfo fi) { var items = new List(); XPathNodeIterator historyItemIds; XmlNamespaceManager nsManager; XmlTextReader reader; XPathDocument doc; XPathNavigator nav; reader = new XmlTextReader(fi.FullName); doc = new XPathDocument(reader); nav = doc.CreateNavigator(); nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("ns", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"); historyItemIds = nav.Select("//ns:Activity/ns:Id", nsManager); while (historyItemIds.MoveNext()) { XPathNavigator historyItemId = historyItemIds.Current; if (historyItemId != null) items.Add(new HistoryItem(DisplayName, historyItemId.Value, fi)); } reader.Close(); return items; } private IDictionary> ReadCache() { try { return CommonUtil.DeserializeFromFile>>(CacheFileName); } catch (Exception) { return new Dictionary>(); } } private void SaveCache(IDictionary> cache) { try { CommonUtil.SerializeToFile(cache, CacheFileName); } catch (Exception) { } } private string CacheFileName { get { return Path.Combine(CommonUtil.GetApplicationDataPath(), "ANTDeviceCache.bin"); } } private string GetCacheKey(FileInfo fi) { return fi.FullName + " " + fi.LastWriteTimeUtc.Ticks.ToString(); } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/AntpmImporter.cs000066400000000000000000000164071446222606700341130ustar00rootroot00000000000000// -*- mode: csharp; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; coding: utf-8-unix -*- // ***** BEGIN LICENSE BLOCK ***** //////////////////////////////////////////////////////////////////// // Copyright (c) 2013 RALOVICH, Kristóf // // // // This program is free software; you can redistribute it and/or // // modify it under the terms of the GNU General Public License // // version 3 or later as published by the Free Software Foundation// // // //////////////////////////////////////////////////////////////////// // ***** END LICENSE BLOCK ***** using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; using QuickRoute.BusinessEntities.Importers.FIT; using QuickRoute.Common; namespace QuickRoute.BusinessEntities.Importers.Garmin.ANTAgent { // importer for ANT+minus https://code.google.com/p/antpm/ public class AntpmImporter : IGPSDeviceImporter { public AntpmImporter () { //LogUtil.LogTrace(); mFitFileList = new List (); mPath = getConfigFolder(); LogUtil.LogInfo("AntpmImporter: " + mPath); } private string getConfigFolder () { string e0 = Environment.GetEnvironmentVariable ("ANTPM_DIR"); // http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html // $XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. // If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used. string e1 = Environment.GetEnvironmentVariable("XDG_CONFIG_HOME"); string e2 = Environment.GetEnvironmentVariable("HOME"); string e3 = Environment.GetEnvironmentVariable("USERPROFILE"); //LogUtil.LogDebug("e1=" + e1); //LogUtil.LogDebug("e2=" + e2); //LogUtil.LogDebug("e3=" + e3); //LogUtil.LogDebug("e0=" + e0); if (!String.IsNullOrEmpty (e0)) return Path.Combine (e0, ""); if(!String.IsNullOrEmpty(e1)) return Path.Combine(e1, "antpm/"); else if(!String.IsNullOrEmpty(e2)) return Path.Combine(e2, ".config/antpm/"); else if(!String.IsNullOrEmpty(e3)) return Path.Combine(e3, ".config/antpm/"); else return Path.Combine("~", ".config/antpm/"); } private void discover() { if(!IsConnected) { LogUtil.LogWarn("\""+mPath+"\" doesn't exist\n"); return; } mFitFileList.Clear(); LogUtil.LogDebug("Listing \"" + mPath + "\"..."); var baseDir = new DirectoryInfo(mPath); int nDirs = baseDir.GetDirectories().Length; foreach (DirectoryInfo di in baseDir.GetDirectories()) { string folder = mPath + di.Name + "\\"; LogUtil.LogDebug(folder); foreach(FileInfo fi in di.GetFiles("*.fit", SearchOption.AllDirectories)) { string name = fi.FullName; // skip directory file if(name.EndsWith("0000.fit")) continue; // try getting fit activity timestamp -> date // skip files without activity/date var fiti = new FITImporter{ FileName = name }; fiti.Import(); if(!fiti.ImportResult.Succeeded || fiti.CreationTime==InvalidCreationTime) { //LogUtil.LogDebug("name=" + fi.Name + " NO_DATE"); continue; } FitFile ff = new FitFile (); ff.fi = fi; ff.fit = fiti; mFitFileList.Add (ff); } } LogUtil.LogDebug("Found " + nDirs + " dirs, " + mFitFileList.Count + " files"); // for(int i = 0; i < mFileList.Count; i++) // { // FileInfo fi = mFileList[i]; // FITImporter fiti = mFitList[i]; // LogUtil.LogDebug("n=" + fi.Name + // ", lw=" + fi.LastWriteTime.ToString() + // ", ct=" + fiti.CreationTime.ToString() + // ", f=" + fiti.FirstTime.ToString() + // ", l=" + fiti.LastTime.ToString()); // } mFitFileList.Sort((x, y) => x.fit.CreationTime.CompareTo(y.fit.CreationTime)); } private class FitFile { public FileInfo fi; public FITImporter fit; }; private HistoryItem itemToImport; /// /// The list of FIT files with activities and timestamps. /// private List mFitFileList; /// /// The ...\\.config\\antpm\\ path. Shall end with a backslash. /// public string mPath { get; set; } #region IRouteImporter Members public ImportResult ImportResult { get; set; } public DialogResult ShowPreImportDialogs() { discover(); var historyItems = new List(); for(int i = 0; i < mFitFileList.Count; i++) { FileInfo fi = mFitFileList[i].fi; FITImporter fiti = mFitFileList[i].fit; string displayName = fi.Name; // Previously we used the last-written time of the .FIT // file, but this might be off for various reasons, thus // the most accuracy comes from inside the .FIT itself. //string id = fi.LastWriteTime.ToString(); string id = fiti.CreationTime.ToLocalTime().ToString(); HistoryItem hi = new HistoryItem(displayName, id, fi); historyItems.Add(hi); } using (var dlg = new SessionSelector()) { if (BeginWork != null) BeginWork(this, new EventArgs()); dlg.Sessions = historyItems; if (BeginWork != null) EndWork(this, new EventArgs()); DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { if(historyItems.Count<1) itemToImport = null; else itemToImport = (HistoryItem)dlg.SelectedSession; } dlg.Dispose(); return result; } } public void Import() { if(itemToImport == null) { ImportResult = new ImportResult(); ImportResult.Succeeded = false; ImportResult.Error = ImportError.Unknown; ImportResult.ErrorMessage = "No valid FIT activities in folder"; return; } LogUtil.LogDebug("Importing \"" + itemToImport.ToString() + "\"\n"); ImportResult = new ImportResult(); var fitImporter = new FITImporter { FileName = itemToImport.FileInfo.FullName }; fitImporter.Import(); ImportResult = fitImporter.ImportResult; } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; private DateTime InvalidCreationTime = new DateTime(1989, 12, 31, 00, 00, 00, DateTimeKind.Utc); #endregion #region IGPSDeviceImporter Members public bool IsConnected { get { bool exists = Directory.Exists(mPath); return exists; } } public bool CachedDataExists { get { return IsConnected; } } public string DeviceName { get { return "ANT+minus (" + mPath + ")"; } } public void Refresh() { discover (); } #endregion } } GarminANTAgentImporter.cs000066400000000000000000000050321446222606700355040ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/ANTAgentusing System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; using QuickRoute.BusinessEntities.Importers.TCX; namespace QuickRoute.BusinessEntities.Importers.Garmin.ANTAgent { public class GarminANTAgentImporter : IGPSDeviceImporter { private HistoryItem itemToImport; #region IRouteImporter Members public ImportResult ImportResult { get; set; } /// /// The ...Application Data\GARMIN\Devices\ path. Shall end with a backslash. /// public string Path { get; set; } public DialogResult ShowPreImportDialogs() { var historyItems = new List(); var baseDir = new DirectoryInfo(Path); if (baseDir.Exists) { foreach (DirectoryInfo di in baseDir.GetDirectories()) { var antDevice = new ANTDevice(Path + di.Name + "\\"); foreach (HistoryItem hi in antDevice.HistoryItems) { historyItems.Insert(0, hi); } } } using (var dlg = new SessionSelector()) { if (BeginWork != null) BeginWork(this, new EventArgs()); dlg.Sessions = historyItems; if (BeginWork != null) EndWork(this, new EventArgs()); DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { itemToImport = (HistoryItem)dlg.SelectedSession; } dlg.Dispose(); return result; } } public void Import() { ImportResult = new ImportResult(); var tcxImporter = new TCXImporter { FileName = itemToImport.FileInfo.FullName, IdToImport = DateTime.Parse(itemToImport.Id).ToString("yyyy-MM-dd HH:mm:ss") }; tcxImporter.Import(); ImportResult = tcxImporter.ImportResult; } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion #region IGPSDeviceImporter Members public bool IsConnected { get { return Directory.Exists(Path); } } public bool CachedDataExists { get { return IsConnected; } } public string DeviceName { get { return "Garmin ANT Agent"; } } public void Refresh() { // do nothing } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/HistoryItem.cs000066400000000000000000000012251446222606700335620ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Text; namespace QuickRoute.BusinessEntities.Importers.Garmin.ANTAgent { [Serializable] public class HistoryItem { public HistoryItem(string displayName, string id, FileInfo fileInfo) { DisplayName = displayName; Id = id; FileInfo = fileInfo; } public string DisplayName { get; set; } public string Id { get; set; } public FileInfo FileInfo { get; set; } public override string ToString() { return DisplayName + ": " + DateTime.Parse(Id).ToString("yyyy-MM-dd HH:mm:ss"); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/Forerunner/000077500000000000000000000000001446222606700314775ustar00rootroot00000000000000GarminForerunnerUSBImporter.cs000066400000000000000000000243021446222606700373270ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Garmin/Forerunner#if __MonoCS__ using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; using System.Windows.Forms; using QuickRoute.BusinessEntities; //using QuickRoute.GPSDeviceReaders.GarminUSBReader; using Timer = System.Threading.Timer; namespace QuickRoute.BusinessEntities.Importers.Garmin.Forerunner { public class GarminForerunnerUSBImporter : IGPSDeviceImporter { //private readonly GarminUSBReader garminUSBReader = GarminUSBReader.Instance; private ImportResult importResult; //private GarminSession sessionToImport; #region IGPSDeviceImporter Members public bool IsConnected { get { return false; } } public bool CachedDataExists { get { return false; } } public string DeviceName { get { return ""; } } public void Refresh() { // do nothing } #endregion #region IRouteImporter Members public DialogResult ShowPreImportDialogs() { //if (BeginWork != null) BeginWork(this, new EventArgs()); DialogResult result; // var showProgressIndicator = false; // // if (/*!garminUSBReader.CachedSessionsExists && */ !garminUSBReader.ReadingNow) // { // garminUSBReader.BeginReadData(); // showProgressIndicator = true; // } // else // { // showProgressIndicator = garminUSBReader.ReadingNow; // } // // if (showProgressIndicator) // { // var progressIndicator = new ProgressIndicator(garminUSBReader); // result = progressIndicator.ShowDialog(); // if (result != DialogResult.OK) // { // if (EndWork != null) EndWork(this, new EventArgs()); // return result; // } // } // // var sessionHeaders = new List(garminUSBReader.GetSessionHeadersFromCache()); // sessionHeaders.Sort(); // sessionHeaders.Reverse(); // // using (var dlg = new GarminSessionSelector(sessionHeaders)) // { // result = dlg.ShowDialog(); // if (result == DialogResult.OK) // { // sessionToImport = garminUSBReader.GetSessionFromCache(dlg.SelectedSessionHeader); // } // dlg.Dispose(); // } // // if (EndWork != null) EndWork(this, new EventArgs()); // result = DialogResult.OK; return result; } public ImportResult ImportResult { get { return importResult; } set { importResult = value; } } public void Import() { // importResult = new ImportResult(); // if (BeginWork != null) BeginWork(this, new EventArgs()); // // // The trackpoints // List routeSegments = new List(); // bool lastTrackpointWasInvalid = false; // bool thisTrackpointIsInvalid = false; // RouteSegment rs = new RouteSegment(); // int current = 0; // int total = sessionToImport.Trackpoints.Count; // foreach (D303_Trk_Point_Type tp in sessionToImport.Trackpoints) // { // Waypoint waypoint = new Waypoint(); // waypoint.Time = tp.TimeAsDateTime; // waypoint.LongLat = new LongLat(tp.Position.LongitudeAsDegrees, tp.Position.LatitudeAsDegrees); // waypoint.Altitude = (double)tp.Altitude; // waypoint.HeartRate = (double)tp.HeartRate; // // thisTrackpointIsInvalid = (tp.Position.Latitude == 2147483647 && tp.Position.Longitude == 2147483647); // if (!thisTrackpointIsInvalid) rs.Waypoints.Add(waypoint); // if (thisTrackpointIsInvalid && lastTrackpointWasInvalid && rs.Waypoints.Count > 0) // { // routeSegments.Add(rs); // rs = new RouteSegment(); // } // lastTrackpointWasInvalid = thisTrackpointIsInvalid; // current++; // if (WorkProgress != null && current % 10 == 0) // { // WorkProgress(this, new WorkProgressEventArgs((double)current / total)); // } // } // if (rs.Waypoints.Count > 0) // { // routeSegments.Add(rs); // } // // // The laps // List elapsedTimes = new List(); // double elapsedTime = 0; // DateTime startTime = DateTime.MinValue; // foreach (D1001_Lap_Type xLap in sessionToImport.Laps) // { // if (startTime == DateTime.MinValue) startTime = xLap.StartTimeAsDateTime; // elapsedTimes.Add(elapsedTime); // elapsedTime += (double)xLap.TotalTime / 100; // } // LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); // // importResult.Route = new Route(routeSegments); // importResult.Laps = laps; // importResult.Succeeded = true; // if (EndWork != null) EndWork(this, new EventArgs()); } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion } } #else using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.GPSDeviceReaders.GarminUSBReader; using Timer = System.Threading.Timer; namespace QuickRoute.BusinessEntities.Importers.Garmin.Forerunner { public class GarminForerunnerUSBImporter : IGPSDeviceImporter { private readonly GarminUSBReader garminUSBReader = GarminUSBReader.Instance; private ImportResult importResult; private GarminSession sessionToImport; #region IGPSDeviceImporter Members public bool IsConnected { get { return garminUSBReader.IsConnected; } } public bool CachedDataExists { get { return garminUSBReader.CachedSessionsExists; } } public string DeviceName { get { return garminUSBReader.DeviceName; } } public void Refresh() { // do nothing } #endregion #region IRouteImporter Members public DialogResult ShowPreImportDialogs() { if (BeginWork != null) BeginWork(this, new EventArgs()); DialogResult result; var showProgressIndicator = false; if (/*!garminUSBReader.CachedSessionsExists && */ !garminUSBReader.ReadingNow) { garminUSBReader.BeginReadData(); showProgressIndicator = true; } else { showProgressIndicator = garminUSBReader.ReadingNow; } if (showProgressIndicator) { var progressIndicator = new ProgressIndicator(garminUSBReader); result = progressIndicator.ShowDialog(); if (result != DialogResult.OK) { if (EndWork != null) EndWork(this, new EventArgs()); return result; } } var sessionHeaders = new List(garminUSBReader.GetSessionHeadersFromCache()); sessionHeaders.Sort(); sessionHeaders.Reverse(); using (var dlg = new GarminSessionSelector(sessionHeaders)) { result = dlg.ShowDialog(); if (result == DialogResult.OK) { sessionToImport = garminUSBReader.GetSessionFromCache(dlg.SelectedSessionHeader); } dlg.Dispose(); } if (EndWork != null) EndWork(this, new EventArgs()); return result; } public ImportResult ImportResult { get { return importResult; } set { importResult = value; } } public void Import() { importResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); // The trackpoints List routeSegments = new List(); bool lastTrackpointWasInvalid = false; bool thisTrackpointIsInvalid = false; RouteSegment rs = new RouteSegment(); int current = 0; int total = sessionToImport.Trackpoints.Count; foreach (D303_Trk_Point_Type tp in sessionToImport.Trackpoints) { Waypoint waypoint = new Waypoint(); waypoint.Time = tp.TimeAsDateTime; waypoint.LongLat = new LongLat(tp.Position.LongitudeAsDegrees, tp.Position.LatitudeAsDegrees); waypoint.Altitude = (double)tp.Altitude; waypoint.HeartRate = (double)tp.HeartRate; thisTrackpointIsInvalid = (tp.Position.Latitude == 2147483647 && tp.Position.Longitude == 2147483647); if (!thisTrackpointIsInvalid) rs.Waypoints.Add(waypoint); if (thisTrackpointIsInvalid && lastTrackpointWasInvalid && rs.Waypoints.Count > 0) { routeSegments.Add(rs); rs = new RouteSegment(); } lastTrackpointWasInvalid = thisTrackpointIsInvalid; current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } if (rs.Waypoints.Count > 0) { routeSegments.Add(rs); } // The laps List elapsedTimes = new List(); double elapsedTime = 0; DateTime startTime = DateTime.MinValue; foreach (D1001_Lap_Type xLap in sessionToImport.Laps) { if (startTime == DateTime.MinValue) startTime = xLap.StartTimeAsDateTime; elapsedTimes.Add(elapsedTime); elapsedTime += (double)xLap.TotalTime / 100; } LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); importResult.Route = new Route(routeSegments); importResult.Laps = laps; importResult.Succeeded = true; if (EndWork != null) EndWork(this, new EventArgs()); } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion } } #endifquickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GlobalSat/000077500000000000000000000000001446222606700300055ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GlobalSat/GH615M/000077500000000000000000000000001446222606700306545ustar00rootroot00000000000000GlobalSatGH615MImporter.cs000066400000000000000000000075051446222606700353150ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GlobalSat/GH615Musing System; using System.Collections.Generic; using System.Windows.Forms; using QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader; namespace QuickRoute.BusinessEntities.Importers.GlobalSat.GH615M { public class GlobalSatGH615MImporter : IGPSDeviceImporter { private readonly GlobalSatGH615MReader _gsGH615MReader = new GlobalSatGH615MReader(); private IGH615MTrackInfo _trackToImport; private ImportResult _importResult; public DialogResult ShowPreImportDialogs() { if (BeginWork != null) BeginWork(this, new EventArgs()); DialogResult result; using (var dlg = new GlobalSatGH615MTrackSelector { DeviceReader = _gsGH615MReader }) { result = dlg.ShowDialog(); if (result == DialogResult.OK) { _trackToImport = dlg.SelectedTrack; } dlg.Dispose(); } if (EndWork != null) EndWork(this, new EventArgs()); return result; } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; public bool IsConnected { get { return _gsGH615MReader.IsConnected; } } public bool CachedDataExists { get { return false; } } public string DeviceName { get { if (_gsGH615MReader.IsConnected) { return String.Format("GlobalSat GH-615M [{0}] on {1}", _gsGH615MReader.GetDeviceInfo().Name, _gsGH615MReader.Port); } return "GlobalSat GH-615M device: not connected"; } } public void Refresh() { _gsGH615MReader.ScanPorts(); } public ImportResult ImportResult { get { return _importResult; } set { _importResult = value; } } public void Import() { _importResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); // The trackpoints var routeSegments = new List(); var rs = new RouteSegment(); var current = 0; var total = _trackToImport.TrackPointsCount; var track = _gsGH615MReader.GetTrack(_trackToImport); foreach (var tp in track.GetTrackPoints()) { var waypoint = new Waypoint { Time = tp.Time, LongLat = new LongLat((double) tp.Longitude, (double) tp.Latitude), Altitude = tp.Altitude, HeartRate = tp.Pulse }; rs.Waypoints.Add(waypoint); current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } if (rs.Waypoints.Count > 0) { routeSegments.Add(rs); } _importResult.Route = new Route(routeSegments); // create one lap (from start to finish) DateTime startTime = DateTime.MinValue; LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, new List(), routeSegments); _importResult.Laps = laps; _importResult.Succeeded = true; if (EndWork != null) EndWork(this, new EventArgs()); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GlobalSat/GH615M/toGPX.xsl000066400000000000000000000052401446222606700324060ustar00rootroot00000000000000 Created on: Feb 2, 2010 Author: senin Track #, quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GlobalSat/icon.ico000066400000000000000000000007061446222606700314340ustar00rootroot00000000000000 x&(( ( @@@c`.guwwwwwwwuwwUwwwwwWwWWwwwwWuwuwwwwuUwuwwuwwUwwWwWwwuwwuwWwwwwwwUWww`wwwwpww"00"0"00wpwwww`wwwwwwwwwwwۿ??quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/GlobalSat/icon.png000066400000000000000000000024451446222606700314500ustar00rootroot00000000000000PNG  IHDR(-SsRGBgAMA a cHRMz&u0`:pQ<PLTE@@@g҂tRNSS%tEXtSoftwarePaint.NET ?????? 3.5.2y`IDAT(Sm C1Y6425jP}6fG@ǁF;~b󒨑9*d1О"Qn p* ν`-jA߿~e<IENDB`quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/IGPSDeviceImporter.cs000066400000000000000000000004421446222606700320700ustar00rootroot00000000000000using QuickRoute.BusinessEntities.Importers; namespace QuickRoute.BusinessEntities.Importers { public interface IGPSDeviceImporter : IRouteImporter { bool IsConnected { get; } bool CachedDataExists { get; } string DeviceName { get; } void Refresh(); } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/IRouteFileImporter.cs000066400000000000000000000003151446222606700322140ustar00rootroot00000000000000using QuickRoute.BusinessEntities.Importers; namespace QuickRoute.BusinessEntities.Importers { public interface IRouteFileImporter : IRouteImporter { string FileName { get; set; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/IRouteImporter.cs000066400000000000000000000007031446222606700314150ustar00rootroot00000000000000using System; using System.Windows.Forms; using QuickRoute.BusinessEntities.Importers; namespace QuickRoute.BusinessEntities.Importers { public interface IRouteImporter { ImportResult ImportResult { get; set; } DialogResult ShowPreImportDialogs(); void Import(); event EventHandler BeginWork; event EventHandler EndWork; event EventHandler WorkProgress; } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/ImportError.cs000066400000000000000000000003541446222606700307520ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.Importers { public enum ImportError { Succeeded, Unknown, NoWaypointTimes, NoWaypoints } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/ImportResult.cs000066400000000000000000000007211446222606700311350ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Importers { public class ImportResult { public bool Succeeded { get; set; } public Route Route { get; set; } public LapCollection Laps { get; set; } public string ErrorMessage { get; set; } public ImportError Error { get; set; } public Exception Exception { get; set; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/JJConnect/000077500000000000000000000000001446222606700277525ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/JJConnect/RegistratorSE/000077500000000000000000000000001446222606700325075ustar00rootroot00000000000000JJConnectRegistratorSEImporter.cs000066400000000000000000000075161446222606700410050ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/JJConnect/RegistratorSEusing System; using System.Collections.Generic; using System.Windows.Forms; using QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader; namespace QuickRoute.BusinessEntities.Importers.JJConnect.RegistratorSE { public class JJConnectRegistratorSEImporter : IGPSDeviceImporter { private readonly JJConnectRegistratorSEReader _regSEReader = new JJConnectRegistratorSEReader(); private IRegSETrack _trackToImport; private ImportResult _importResult; public DialogResult ShowPreImportDialogs() { if (BeginWork != null) BeginWork(this, new EventArgs()); DialogResult result; if (!_regSEReader.LoadCompleted) { var progressIndicator = new ProgressIndicator(_regSEReader); _regSEReader.StartLoadTracks(); result = progressIndicator.ShowDialog(); if (result != DialogResult.OK) { if (EndWork != null) EndWork(this, new EventArgs()); return result; } } using (var dlg = new JJConnectRegistratorSETrackSelector { DeviceReader = _regSEReader }) { result = dlg.ShowDialog(); if (result == DialogResult.OK) { _trackToImport = dlg.SelectedTrack; } dlg.Dispose(); } if (EndWork != null) EndWork(this, new EventArgs()); return result; } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; public bool IsConnected { get { return _regSEReader.IsConnected; } } public bool CachedDataExists { get { return false; } } public string DeviceName { get { if (_regSEReader.IsConnected) { return String.Format("JJ-Connect Registrator SE [{0}] on {1}", _regSEReader.GetDeviceInfo().Name, _regSEReader.Port); } return "JJ-Connect Registrator SE device: not connected"; } } public void Refresh() { _regSEReader.ScanPorts(); } public ImportResult ImportResult { get { return _importResult; } set { _importResult = value; } } public void Import() { _importResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); // The trackpoints var routeSegments = new List(); var rs = new RouteSegment(); var current = 0; var total = _trackToImport.GetTrackInfo().NumbetOfTrackPoints; var elapsedTimes = new List(); DateTime startTime = DateTime.MinValue; foreach (var tp in _trackToImport.GetTrackPoints()) { var waypoint = new Waypoint { Time = tp.Time, LongLat = new LongLat((double)tp.Longitude, (double)tp.Latitude), Altitude = tp.Altitude }; if (tp.HasMark(RegSEPointType.WayPoint)) { elapsedTimes.Add((tp.Time - startTime).TotalSeconds); } rs.Waypoints.Add(waypoint); current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } if (rs.Waypoints.Count > 0) { routeSegments.Add(rs); } _importResult.Route = new Route(routeSegments); // create one lap (from start to finish) LapCollection laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); _importResult.Laps = laps; _importResult.Succeeded = true; if (EndWork != null) EndWork(this, new EventArgs()); } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Navilock/000077500000000000000000000000001446222606700277035ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Navilock/NavilockImporter.cs000066400000000000000000000120121446222606700335160ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; using System.IO; using System.Xml; using System.Xml.XPath; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Importers.Navilock { public class NavilockImporter : IRouteFileImporter { public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; private ImportResult importResult; public ImportResult ImportResult { get { return importResult; } set { importResult = value; } } public string FileName { get; set; } public DialogResult ShowPreImportDialogs() { return DialogResult.OK; } public void Import() { importResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); var laps = new LapCollection(); var routeSegment = new RouteSegment(); XmlTextReader reader = new XmlTextReader(FileName); XPathDocument doc = new XPathDocument(reader); XPathNavigator nav = doc.CreateNavigator(); // get all trackmaster nodes (contains the laps) XPathNodeIterator trackmaster = nav.Select("/NewDataSet/trackmaster"); // get all trackpoint nodes (contains the waypoints) XPathNodeIterator trackPoints = nav.Select("/NewDataSet/TrackPoints"); DateTime startTime = DateTime.MinValue; DateTime endTime = DateTime.MinValue; int current = 0; int total = trackmaster.Count + trackPoints.Count; while (trackmaster.MoveNext()) { if (startTime == DateTime.MinValue) { // get start time of session XPathNavigator startDateNode = trackmaster.Current.SelectSingleNode("TrackName"); XPathNavigator startTimeNode = trackmaster.Current.SelectSingleNode("StartTime"); XPathNavigator durationNode = trackmaster.Current.SelectSingleNode("Duration"); DateTime d; TimeSpan st; TimeSpan et; DateTime.TryParse(startDateNode.Value, out d); TimeSpan.TryParse(startTimeNode.Value, out st); TimeSpan.TryParse(durationNode.Value, out et); startTime = d.Add(st); endTime = startTime.Add(et); } // add lap time XPathNavigator accruedTimeNode = trackmaster.Current.SelectSingleNode("AccruedTime"); TimeSpan ts; TimeSpan.TryParse(accruedTimeNode.Value, out ts); DateTime lapTime = startTime.Add(ts); if (lapTime != endTime) // don't add finish time to laps at this point { laps.Add(new Lap(lapTime, LapType.Lap)); } current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } laps.Add(new Lap(startTime, LapType.Start)); laps.Add(new Lap(endTime, LapType.Stop)); DateTime currentTime = startTime; while (trackPoints.MoveNext()) { XPathNavigator latitudeNode = trackPoints.Current.SelectSingleNode("Latitude"); XPathNavigator longitudeNode = trackPoints.Current.SelectSingleNode("Longitude"); XPathNavigator altitudeNode = trackPoints.Current.SelectSingleNode("Altitude"); XPathNavigator heartRateNode = trackPoints.Current.SelectSingleNode("HeartRate"); XPathNavigator intervalTimeNode = trackPoints.Current.SelectSingleNode("IntervalTime"); if (latitudeNode != null && longitudeNode != null && intervalTimeNode != null) { Waypoint w = new Waypoint(); w.LongLat = new LongLat( Convert.ToDouble(LocalizeDecimalString(longitudeNode.Value)), Convert.ToDouble(LocalizeDecimalString(latitudeNode.Value))); if (altitudeNode != null) w.Altitude = Convert.ToDouble(LocalizeDecimalString(altitudeNode.Value)); if (heartRateNode != null) w.HeartRate = Convert.ToDouble(LocalizeDecimalString(heartRateNode.Value)); currentTime = currentTime.AddSeconds(Convert.ToDouble(LocalizeDecimalString(intervalTimeNode.Value))); w.Time = currentTime; routeSegment.Waypoints.Add(w); } current++; if (WorkProgress != null && current % 10 == 0) { WorkProgress(this, new WorkProgressEventArgs((double)current / total)); } } reader.Close(); importResult.Laps = laps; importResult.Route = new Route(new List {routeSegment}); importResult.Succeeded = true; if (EndWork != null) EndWork(this, new EventArgs()); } private static string LocalizeDecimalString(string s) { s = s.Replace(",", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator); s = s.Replace(".", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator); return s; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/000077500000000000000000000000001446222606700272125ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/PolarHRMImporter.cs000066400000000000000000000107071446222606700327140ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Text; namespace QuickRoute.BusinessEntities.Importers.Polar { public class PolarHRMImporter { /// /// Adds laps and heart rate and altitude data from a Polar HRM file. GPS locations and other data are split into two files, GPX and HRM. /// /// The file name of the HRM file /// The object where e g the route and laps collection are stored public void AddLapsAndHRData(string fileName, ImportResult importResult) { using (StreamReader sr = new StreamReader(fileName)) { HRMSection currentSection = HRMSection.None; DateTime startTime = importResult.Route.FirstWaypoint.Time; List heartRates = new List(); List altitudes = new List(); int intTimesRowCount = 0; while (!sr.EndOfStream) { string line = sr.ReadLine(); if (line.StartsWith("[")) { // new section of file currentSection = StringToHRMSection(line); } else { string[] atoms; switch (currentSection) { case HRMSection.IntTimes: if (line != "") { atoms = line.Split("\t".ToCharArray()); if (intTimesRowCount % 5 == 0 && atoms.Length == 5) { double lapTimeInSeconds = TimeStringToSeconds(atoms[0]); DateTime lapTime = startTime.AddSeconds(lapTimeInSeconds); // only add lap if it is within the time span of the session if (lapTimeInSeconds != 0 && lapTime > importResult.Laps[0].Time && lapTime < importResult.Laps[importResult.Laps.Count - 1].Time) { importResult.Laps.Add(new Lap(lapTime, LapType.Lap)); } } intTimesRowCount += 1; } break; case HRMSection.HRData: atoms = line.Split("\t".ToCharArray()); if (atoms.Length == 3) { heartRates.Add(Convert.ToDouble(atoms[0])); altitudes.Add(Convert.ToDouble(atoms[2])); } break; } } } // add heart rates and altitudes int count = 0; foreach (var segment in importResult.Route.Segments) { foreach (var waypoint in segment.Waypoints) { if (count < heartRates.Count) { waypoint.HeartRate = heartRates[count]; waypoint.Altitude = altitudes[count]; count++; } } } sr.Close(); } } private static double TimeStringToSeconds(string value) { string[] atoms = value.Split(":".ToCharArray()); if (atoms.Length == 3) { string[] secondAtoms = atoms[2].Split(".".ToCharArray()); return 3600 * Convert.ToInt32(atoms[0]) + 60 * Convert.ToInt32(atoms[1]) + Convert.ToInt32(secondAtoms[0]) + Convert.ToDouble(secondAtoms[1]) / 10; } return 0; } private static HRMSection StringToHRMSection(string s) { switch (s) { case "[Params]": return HRMSection.Params; case "[Note]": return HRMSection.Note; case "[IntTimes]": return HRMSection.IntTimes; case "[IntNotes]": return HRMSection.IntNotes; case "[ExtraData]": return HRMSection.ExtraData; case "[Summary-123]": return HRMSection.Summary_123; case "[Summary-TH]": return HRMSection.Summary_TH; case "[HRZones]": return HRMSection.HRZones; case "[SwapTimes]": return HRMSection.SwapTimes; case "[Trip]": return HRMSection.Trip; case "[HRData]": return HRMSection.HRData; default: return HRMSection.None; } } private enum HRMSection { None, Params, Note, IntTimes, IntNotes, ExtraData, Summary_123, Summary_TH, HRZones, SwapTimes, Trip, HRData } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/000077500000000000000000000000001446222606700312775ustar00rootroot00000000000000PersonSessionSelector.Designer.cs000066400000000000000000000123501446222606700376220ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainernamespace QuickRoute.BusinessEntities.Importers.Polar.ProTrainer { partial class PersonSessionSelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PersonSessionSelector)); this.ok = new System.Windows.Forms.Button(); this.personLabel = new System.Windows.Forms.Label(); this.personsComboBox = new System.Windows.Forms.ComboBox(); this.cancel = new System.Windows.Forms.Button(); this.sessionsComboBox = new System.Windows.Forms.ComboBox(); this.sessionLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // personLabel // this.personLabel.AccessibleDescription = null; this.personLabel.AccessibleName = null; resources.ApplyResources(this.personLabel, "personLabel"); this.personLabel.Font = null; this.personLabel.Name = "personLabel"; // // personsComboBox // this.personsComboBox.AccessibleDescription = null; this.personsComboBox.AccessibleName = null; resources.ApplyResources(this.personsComboBox, "personsComboBox"); this.personsComboBox.BackgroundImage = null; this.personsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.personsComboBox.Font = null; this.personsComboBox.FormattingEnabled = true; this.personsComboBox.Name = "personsComboBox"; this.personsComboBox.SelectedIndexChanged += new System.EventHandler(this.personsComboBox_SelectedIndexChanged); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // sessionsComboBox // this.sessionsComboBox.AccessibleDescription = null; this.sessionsComboBox.AccessibleName = null; resources.ApplyResources(this.sessionsComboBox, "sessionsComboBox"); this.sessionsComboBox.BackgroundImage = null; this.sessionsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.sessionsComboBox.Font = null; this.sessionsComboBox.FormattingEnabled = true; this.sessionsComboBox.Name = "sessionsComboBox"; // // sessionLabel // this.sessionLabel.AccessibleDescription = null; this.sessionLabel.AccessibleName = null; resources.ApplyResources(this.sessionLabel, "sessionLabel"); this.sessionLabel.Font = null; this.sessionLabel.Name = "sessionLabel"; // // PersonSessionSelector // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.sessionsComboBox); this.Controls.Add(this.sessionLabel); this.Controls.Add(this.cancel); this.Controls.Add(this.personsComboBox); this.Controls.Add(this.personLabel); this.Controls.Add(this.ok); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "PersonSessionSelector"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Label personLabel; private System.Windows.Forms.ComboBox personsComboBox; private System.Windows.Forms.Button cancel; private System.Windows.Forms.ComboBox sessionsComboBox; private System.Windows.Forms.Label sessionLabel; } }PersonSessionSelector.cs000066400000000000000000000023171446222606700360650ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainerusing System; using System.Collections.Generic; using System.Windows.Forms; using QuickRoute.BusinessEntities.Importers.Polar.ProTrainer; namespace QuickRoute.BusinessEntities.Importers.Polar.ProTrainer { public partial class PersonSessionSelector : Form { public List Persons { get; set; } public PersonSessionSelector(List persons) { InitializeComponent(); Persons = persons; personsComboBox.DataSource = Persons; } public PolarSession SelectedSession { get { return sessionsComboBox.SelectedValue as PolarSession; } set { personsComboBox.SelectedValue = value; } } private void ok_Click(object sender, EventArgs e) { DialogResult = (SelectedSession != null ? DialogResult.OK : DialogResult.Cancel); Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void personsComboBox_SelectedIndexChanged(object sender, EventArgs e) { PolarPerson p = personsComboBox.SelectedItem as PolarPerson; if (p!= null) sessionsComboBox.DataSource = p.Sessions; } } }PersonSessionSelector.da.resx000066400000000000000000000142071446222606700370250ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd Vælg løbepas &Navn: &Løbepas: OK PersonSessionSelector.de.resx000066400000000000000000000142121446222606700370250ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen Einheit wählen &Name: &Einheit: OK PersonSessionSelector.fi.resx000066400000000000000000000140661446222606700370420ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta Valitse sessio &Nimi: &Sessio: PersonSessionSelector.fr.resx000066400000000000000000000140771446222606700370550ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Sélectionner Session Annuler &Nom : &Session : PersonSessionSelector.it.resx000066400000000000000000000146421446222606700370600ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 35, 13 &Nome Cancella 50, 13 &Sessione Seleziona sessione PersonSessionSelector.lt.resx000066400000000000000000000142321446222606700370560ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Atšaukti Pasirinkti treniruotę &Vardas: &Treniruotė: Gerai PersonSessionSelector.no.resx000066400000000000000000000141761446222606700370620ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Velg økt &Navn: &Økt: OK PersonSessionSelector.resx000066400000000000000000000327401446222606700364440ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 75, 23 $this ok 1 38, 13 2 personsComboBox 12, 49 5 Cancel System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 155, 21 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 3 6, 13 Select session 15, 65 $this True System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 1000, 167 12, 9 Top, Left, Right $this 5 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 47, 13 personLabel 16, 167 NoControl System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 185, 129 Bottom, Right &Name: $this 75, 23 sessionsComboBox 95, 98 cancel Bottom, Right 4 Top, Left, Right System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 155, 21 CenterParent 0 14, 98 True 2 &Session: $this OK PersonSessionSelector 15, 25 4 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 sessionLabel True PersonSessionSelector.ru.resx000066400000000000000000000145051446222606700370700ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 32, 13 &Имя: Отмена &Сессия: Выберите сессию PersonSessionSelector.sv.resx000066400000000000000000000154151446222606700370730ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainer text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 33, 13 &Pass: 156, 21 Avbryt 187, 94 Inherit Välj pass OK PolarProTrainerImporter.cs000066400000000000000000000134721446222606700363630ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainerusing System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; using System.Xml; using System.Xml.XPath; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Importers.GPX; namespace QuickRoute.BusinessEntities.Importers.Polar.ProTrainer { public class PolarProTrainerImporter : IGPSDeviceImporter { private List paths = new List(); private PolarSession sessionToImport; /// /// The paths that Program Files\Polar\Polar ProTrainer\ path. Shall end with a backslash. /// public List Paths { get { return paths; } set { paths = value; } } private static List GetPersons(IEnumerable personDirectories) { var persons = new List(); // for each person foreach (DirectoryInfo di in personDirectories) { var yearDirectories = new List(di.GetDirectories()); var person = new PolarPerson(di.Name, new List()); // remove all directories with non-numeric names yearDirectories.RemoveAll(item => { int dummy; return !int.TryParse(item.Name, out dummy); }); // for each year directory foreach (var ydi in yearDirectories) { // get all gpx files var gpxFiles = ydi.GetFiles("*.gpx"); foreach (var gpxFile in gpxFiles) { var session = CreatePersonSessionFromFile(gpxFile.FullName); if (session != null) person.Sessions.Add(session); } } person.Sessions.Sort(); person.Sessions.Reverse(); persons.Add(person); } return persons; } private static PolarSession CreatePersonSessionFromFile(string fileName) { var reader = new XmlTextReader(fileName); PolarSession session = null; try { var doc = new XPathDocument(reader); var nav = doc.CreateNavigator(); var nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("gpx10", "http://www.topografix.com/GPX/1/0"); nsManager.AddNamespace("gpx11", "http://www.topografix.com/GPX/1/1"); XPathNavigator timeNode; timeNode = nav.SelectSingleNode("/gpx10:gpx/gpx10:time", nsManager); if (timeNode != null) { session = new PolarSession(timeNode.ValueAsDateTime, fileName); } timeNode = nav.SelectSingleNode("/gpx11:gpx/gpx11:time", nsManager); if (timeNode != null) { session = new PolarSession(timeNode.ValueAsDateTime, fileName); } } catch (Exception) { } reader.Close(); return session; } #region IRouteImporter Members public ImportResult ImportResult { get; set; } public DialogResult ShowPreImportDialogs() { if (BeginWork != null) BeginWork(this, new EventArgs()); List persons = new List(); foreach (var path in paths) { var baseDir = new DirectoryInfo(path); if (baseDir.Exists) { // get all persons var personDirectories = new List(baseDir.GetDirectories()); // exclude logo, samples, themes and usb directories personDirectories.RemoveAll( di => (new List { "logo", "samples", "themes", "usb" }).Contains(di.Name.ToLower())); persons.AddRange(GetPersons(personDirectories)); } } if (EndWork != null) EndWork(this, new EventArgs()); using (var dlg = new PersonSessionSelector(persons)) { DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { sessionToImport = dlg.SelectedSession; } return result; } } public void Import() { ImportResult = new ImportResult(); // import GPX GPX.GPXImporter GPXImporter = new GPXImporter(); GPXImporter.FileName = sessionToImport.FileName; GPXImporter.Import(); ImportResult = GPXImporter.ImportResult; } public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion #region IGPSDeviceImporter Members public bool IsConnected { get { foreach (var path in paths) { if (Directory.Exists(path)) return true; } return false; } } public bool CachedDataExists { get { return IsConnected; } } public string DeviceName { get { return "Polar ProTrainer"; } } public void Refresh() { // do nothing } #endregion } public class PolarPerson { public PolarPerson(string name, List sessions) { Name = name; Sessions = sessions; } public string Name { get; set; } public List Sessions { get; set; } public override string ToString() { return string.Format("{0} ({1})", Name, Sessions.Count); } } public class PolarSession : IComparable { public PolarSession(DateTime time, string fileName) { Time = time; FileName = fileName; } public string FileName { get; set; } public DateTime Time { get; set; } public int CompareTo(PolarSession other) { return Time.CompareTo(other.Time); } public override string ToString() { return Time.ToString("yyyy-MM-dd HH:mm:ss"); } } } PolarProTrainerUtil.cs000066400000000000000000000164471446222606700355040ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/Polar/ProTrainerusing System; using System.Collections.Generic; using System.Xml; namespace QuickRoute.BusinessEntities.Importers.Polar.ProTrainer { public static class PolarProTrainerUtil { public static bool IsPolarProTrainerGPXFile(string fileName) { var doc = new XmlDocument(); doc.Load(fileName); if (doc.DocumentElement == null) return false; XmlAttribute creatorAttribute = doc.DocumentElement.Attributes["creator"]; if (creatorAttribute == null) return false; return creatorAttribute.Value.Contains("Polar ProTrainer"); } private static ValidationStatus GetValidationStatus(string timeString) { int minute = GetMinute(timeString); if (minute >= 60) return ValidationStatus.Invalid; return (minute % 10 == 0 && minute != 0 ? ValidationStatus.InvalidCandidate : ValidationStatus.Valid); } public static void CorrectPolarProTrainerGPXFile(string inputFileName, string outputFileName) { var doc = new XmlDocument(); doc.Load(inputFileName); var nsManager = new XmlNamespaceManager(doc.NameTable); nsManager.AddNamespace("gpx", "http://www.topografix.com/GPX/1/1"); if (doc.DocumentElement != null) { XmlNodeList times = doc.DocumentElement.SelectNodes("/gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt/gpx:time", nsManager); if (times != null) { var timeEntries = new List(); foreach (XmlNode time in times) { timeEntries.Add(new TimeEntry { TimeNode = time, ValidationStatus = GetValidationStatus(time.InnerText) }); } for (int i = 0; i < timeEntries.Count; i++) { TimeEntry te = timeEntries[i]; if (te.ValidationStatus == ValidationStatus.InvalidCandidate) { // invalid time candidates that are valid: // times whose next neightbour's minute has the format x1 for (int j = i + 1; j < timeEntries.Count; j++) { if (GetMinute(timeEntries[j].TimeNode.InnerText) != GetMinute(te.TimeNode.InnerText)) { ValidationStatus status = (GetMinute(timeEntries[j].TimeNode.InnerText) == GetMinute(te.TimeNode.InnerText) + 1 ? ValidationStatus.Valid : ValidationStatus.Invalid); for (int k = i; k < j; k++) { timeEntries[k].ValidationStatus = status; } i = j - 1; break; } } } } for (int i = timeEntries.Count - 1; i >= 0; i--) { TimeEntry te = timeEntries[i]; if (te.ValidationStatus == ValidationStatus.InvalidCandidate) { // invalid time candidates that are valid: // times whose previous neightbour's minute has the format x9 for (int j = i - 1; j >= 0; j--) { if (GetMinute(timeEntries[j].TimeNode.InnerText) != GetMinute(te.TimeNode.InnerText)) { ValidationStatus status = (GetMinute(timeEntries[j].TimeNode.InnerText) == GetMinute(te.TimeNode.InnerText) - 1 || (GetMinute(timeEntries[j].TimeNode.InnerText) == 0 && GetMinute(te.TimeNode.InnerText) == 59) ? ValidationStatus.Valid : ValidationStatus.Invalid); for (int k = i; k > j; k--) { timeEntries[k].ValidationStatus = status; } i = j + 1; break; } } } } for (int i = 0; i < timeEntries.Count; i++) { TimeEntry te = timeEntries[i]; if (te.ValidationStatus == ValidationStatus.Invalid) { te.TimeNode.InnerText = CorrectTimeString(te.TimeNode.InnerText); } } // correct Polar GPX bug when passing midnight - Polar's file starts over with the same date again // forum post describing the bug: http://www.matstroeng.se/quickroute/forum/index.php?mode=thread&cat=0&thread=292 for (int i = 1; i < timeEntries.Count; i++) { var lastTime = DateTime.Parse(timeEntries[i - 1].TimeNode.InnerText).ToUniversalTime(); var thisTime = DateTime.Parse(timeEntries[i].TimeNode.InnerText).ToUniversalTime(); if (thisTime.AddHours(23) < lastTime && thisTime.AddHours(24) > lastTime) { timeEntries[i].TimeNode.InnerText = thisTime.AddHours(24).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ"); } } } // correct points that have the same location as previous point //XmlNodeList points = doc.DocumentElement.SelectNodes("/gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt", nsManager); //if (points != null) //{ // LongLat previousPosition = GetLongLatFromTrkpt(points[0]); // for(int i = 1; i 0) { ImportResult.Succeeded = true; ImportResult.Route = document.Sessions[0].Route; ImportResult.Laps = document.Sessions[0].Laps; } else { ImportResult.Succeeded = false; } } #region IRouteImporter Members public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/RouteFileFormat.cs000066400000000000000000000006511446222606700315350ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities.Importers { public class RouteFileFormat : FileFormat { private IRouteFileImporter importer; public RouteFileFormat(string fileFilter, IRouteFileImporter importer) : base(fileFilter) { this.importer = importer; } public IRouteFileImporter Importer { get { return importer; } set { importer = value; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/RouteImporterUtil.cs000066400000000000000000000031541446222606700321450ustar00rootroot00000000000000using System; using System.Collections.Generic; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Importers { public static class RouteImporterUtil { public static LapCollection CreateLapsFromElapsedTimes(DateTime startTime, List elapsedTimes, List routeSegments) { LapCollection laps = new LapCollection(); if (routeSegments.Count == 0) return laps; // justify lap times with regard to paused times during the race int currentRouteSegmentIndex = 0; for (int i = 0; i < elapsedTimes.Count; i++) { while (startTime.AddSeconds(elapsedTimes[i]) > routeSegments[currentRouteSegmentIndex].LastWaypoint.Time && currentRouteSegmentIndex < routeSegments.Count - 1) { double stoppedTime = (routeSegments[currentRouteSegmentIndex + 1].FirstWaypoint.Time.Ticks - routeSegments[currentRouteSegmentIndex].LastWaypoint.Time.Ticks) / (double)TimeSpan.TicksPerSecond; for (int j = i; j < elapsedTimes.Count; j++) { elapsedTimes[j] += stoppedTime; } currentRouteSegmentIndex++; } } // add each lap foreach (double et in elapsedTimes) { if (et > 0) laps.Add(new Lap(startTime.AddSeconds(et), LapType.Lap)); } // add start and end of each route segment as a lap foreach (RouteSegment rs in routeSegments) { laps.Add(new Lap(rs.FirstWaypoint.Time, LapType.Start)); laps.Add(new Lap(rs.LastWaypoint.Time, LapType.Stop)); } return laps; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.Designer.cs000066400000000000000000000077231446222606700333600ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities.Importers { partial class SessionSelector { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SessionSelector)); this.ok = new System.Windows.Forms.Button(); this.activityLabel = new System.Windows.Forms.Label(); this.sessionsComboBox = new System.Windows.Forms.ComboBox(); this.cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // activityLabel // this.activityLabel.AccessibleDescription = null; this.activityLabel.AccessibleName = null; resources.ApplyResources(this.activityLabel, "activityLabel"); this.activityLabel.Font = null; this.activityLabel.Name = "activityLabel"; // // sessionsComboBox // this.sessionsComboBox.AccessibleDescription = null; this.sessionsComboBox.AccessibleName = null; resources.ApplyResources(this.sessionsComboBox, "sessionsComboBox"); this.sessionsComboBox.BackgroundImage = null; this.sessionsComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.sessionsComboBox.Font = null; this.sessionsComboBox.FormattingEnabled = true; this.sessionsComboBox.Name = "sessionsComboBox"; // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // SessionSelector // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.cancel); this.Controls.Add(this.sessionsComboBox); this.Controls.Add(this.activityLabel); this.Controls.Add(this.ok); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SessionSelector"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Label activityLabel; private System.Windows.Forms.ComboBox sessionsComboBox; private System.Windows.Forms.Button cancel; } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.cs000066400000000000000000000023701446222606700316120ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; namespace QuickRoute.BusinessEntities.Importers { public partial class SessionSelector : Form { private List sessions; public SessionSelector() { InitializeComponent(); } public List Sessions { get { return sessions; } set { sessions = value; sessionsComboBox.Items.Clear(); sessionsComboBox.DataSource = sessions; int maxWidth = 0; foreach(object s in sessions) { maxWidth = Math.Max(maxWidth, TextRenderer.MeasureText(s.ToString(), sessionsComboBox.Font).Width); } maxWidth += 32; if (maxWidth > sessionsComboBox.Width) Width += maxWidth - sessionsComboBox.Width; } } public object SelectedSession { get { return sessionsComboBox.SelectedValue; } set { sessionsComboBox.SelectedValue = value; } } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.da.resx000066400000000000000000000140471446222606700325550ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd Vælg løbepas &Løbepas: OK quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.de.resx000066400000000000000000000140521446222606700325550ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Einheit: Abbrechen Einheit wählen OK quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.fi.resx000066400000000000000000000137261446222606700325720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Sessio: Peruuta Valitse sessio quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.fr.resx000066400000000000000000000137421446222606700326010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Session : Annuler Sélectionner la session quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.it.resx000066400000000000000000000140541446222606700326030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Sessione Cancella Seleziona sessione OK quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.lt.resx000066400000000000000000000140701446222606700326040ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Treniruotė: Atšaukti Pasirinkti treniruotę Gerai quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.no.resx000066400000000000000000000140361446222606700326030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Økt: Avbryt Velg økt OK quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.resx000066400000000000000000000263131446222606700321710ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 75, 23 $this System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True &Session: System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Cancel activityLabel Select session 0 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 Left, Right $this 3 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1000, 132 ok Right 185, 98 Right 15, 25 75, 23 96, 59 $this 1 12, 9 8, 132 155, 21 cancel 2 CenterParent 47, 13 sessionsComboBox 6, 13 0 2 OK SessionSelector 15, 59 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.ru.resx000066400000000000000000000137601446222606700326200ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Сессия: Отмена Выберите сессию quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SessionSelector.sv.resx000066400000000000000000000152721446222606700326220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 33, 13 &Pass: 156, 21 Avbryt 187, 94 Inherit Välj pass quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/SupportedImportFormatManager.cs000066400000000000000000000153521446222606700343160ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Threading; using System.Windows.Forms; using QuickRoute.BusinessEntities.Importers; using QuickRoute.BusinessEntities.Importers.FIT; using QuickRoute.BusinessEntities.Importers.FRWD; #if !__MonoCS__ using QuickRoute.BusinessEntities.Importers.Garmin.Forerunner; #endif using QuickRoute.BusinessEntities.Importers.Garmin.ANTAgent; using QuickRoute.BusinessEntities.Importers.Navilock; using QuickRoute.BusinessEntities.Importers.Polar.ProTrainer; using QuickRoute.BusinessEntities.Importers.GPX; using QuickRoute.BusinessEntities.Importers.QuickRoute; using QuickRoute.BusinessEntities.Importers.TCX; using QuickRoute.BusinessEntities.Importers.GlobalSat.GH615M; using QuickRoute.BusinessEntities.Importers.JJConnect.RegistratorSE; #if !__MonoCS__ using QuickRoute.GPSDeviceReaders.GarminUSBReader; #endif using QuickRoute.Resources; using Wintellect.PowerCollections; namespace QuickRoute.BusinessEntities.Importers { public delegate void RefreshProgressDelegate(string message, int percent); public delegate void RefreshCompletedDelegate(); public static class SupportedImportFormatManager { private static Thread _thread; public static event RefreshProgressDelegate RefreshProgressChanged; public static event RefreshCompletedDelegate RefreshCompleted; public static List GetSupportedGPSDevices() { var supportedGPSDevices = new List(); #if !__MonoCS__ // Garmin Forerunner supportedGPSDevices.Add(new GPSDevice(new GarminForerunnerUSBImporter())); #endif // GlobalSat GH-615M supportedGPSDevices.Add(new GPSDevice(new GlobalSatGH615MImporter())); // JJ-Connect Registrator SE supportedGPSDevices.Add(new GPSDevice(new JJConnectRegistratorSEImporter())); // Garmin ANT Agent GarminANTAgentImporter antImporter = new GarminANTAgentImporter(); antImporter.Path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\GARMIN\Devices\"; GPSDevice antDevice = new GPSDevice(antImporter); supportedGPSDevices.Add(antDevice); // ANT+minus AntpmImporter antpmImporter = new AntpmImporter(); GPSDevice antpmDevice = new GPSDevice(antpmImporter); supportedGPSDevices.Add(antpmDevice); // Polar ProTrainer var polarProTrainerImporter = new PolarProTrainerImporter(); polarProTrainerImporter.Paths = new List { GetProgramFilesPath() + @"\Polar\Polar ProTrainer\", Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\VirtualStore\Program Files\Polar\Polar ProTrainer\", }; GPSDevice polarProTrainerDevice = new GPSDevice(polarProTrainerImporter); supportedGPSDevices.Add(polarProTrainerDevice); //System.Console.WriteLine(supportedGPSDevices.Count); return supportedGPSDevices; } public static List GetSupportedRouteFileFormats() { var supportedRouteFileFormats = new List(); supportedRouteFileFormats.Add( new RouteFileFormat(Strings.FileFilter_GpxFiles, new GPXImporter())); supportedRouteFileFormats.Add( new RouteFileFormat(Strings.FileFilter_AllQuickRouteFiles, new QuickRouteImporter())); supportedRouteFileFormats.Add( new RouteFileFormat(Strings.FileFilter_FitFiles, new FITImporter())); supportedRouteFileFormats.Add( new RouteFileFormat(Strings.FileFilter_TcxFiles, new TCXImporter())); supportedRouteFileFormats.Add( new RouteFileFormat(Strings.FileFilter_FrwdTxtFiles, new FRWDImporter())); supportedRouteFileFormats.Add( new RouteFileFormat(Strings.FileFilter_NavilockActFiles, new NavilockImporter())); return supportedRouteFileFormats; } public static List GetSupportedMapFileFormats() { var supportedMapImageFileFormats = new List(); supportedMapImageFileFormats.Add( new FileFormat(Strings.FileFilter_ImageFiles)); supportedMapImageFileFormats.Add( new FileFormat(Strings.FileFilter_QuickRouteFiles)); supportedMapImageFileFormats.Add( new FileFormat(Strings.FileFilter_KmzFiles)); return supportedMapImageFileFormats; } public static List SearchForGPSDevices() { return SearchForGPSDevices(GetSupportedGPSDevices()); } public static List SearchForGPSDevices(List devicesToSearchFor) { var foundDevices = new List(); foreach (var device in devicesToSearchFor) { if (device.Importer.IsConnected || device.Importer.CachedDataExists) { foundDevices.Add(device); } } return foundDevices; } public static void StopRefreshThread() { try { if (_thread != null && _thread.IsAlive) { _thread.Abort(); } } catch (ThreadAbortException) { if (_thread != null) { while (_thread.ThreadState == ThreadState.Running) { } } _thread = null; } } private static void StartReadThread(ThreadStart threadStartMethod) { StopRefreshThread(); var myThread = new ThreadStart(threadStartMethod); _thread = new Thread(myThread); _thread.Start(); } public static void StartRefreshGPSDevices() { StartReadThread(RefreshGPSDevices); } private static void RefreshGPSDevices() { List devices = GetSupportedGPSDevices(); for (int i = 0; i < devices.Count; i++) { var device = devices[i]; var percent = ((i / (Single)devices.Count) * 100); if (percent > 100) { percent = 100; } if (RefreshProgressChanged != null) { RefreshProgressChanged(String.Format("Looking for supported devices... ({0}/{1})", i, devices.Count), (int)percent); } device.Importer.Refresh(); } if (RefreshCompleted != null) { RefreshCompleted(); } } private static string GetProgramFilesPath() { if (IntPtr.Size == 8 || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) { return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); } return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/TCX/000077500000000000000000000000001446222606700265735ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/TCX/TCXImporter.cs000066400000000000000000000206651446222606700313130ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; using System.Xml; using System.Xml.XPath; using QuickRoute.BusinessEntities; namespace QuickRoute.BusinessEntities.Importers.TCX { public class TCXImporter : IRouteFileImporter { private string idToImport; private string fileName; private ImportResult importResult; public string FileName { get { return fileName; } set { fileName = value; } } public string IdToImport { get { return idToImport; } set { idToImport = value; } } public ImportResult ImportResult { get { return importResult; } set { importResult = value; } } public DialogResult ShowPreImportDialogs() { using (var dlg = new SessionSelector()) { if (BeginWork != null) BeginWork(this, new EventArgs()); dlg.Sessions = GetAllActivities(); if (BeginWork != null) EndWork(this, new EventArgs()); DialogResult result = dlg.ShowDialog(); if (result == DialogResult.OK) { IdToImport = dlg.SelectedSession.ToString(); } dlg.Dispose(); return result; } } public void Import() { importResult = new ImportResult(); if (BeginWork != null) BeginWork(this, new EventArgs()); XmlTextReader reader = new XmlTextReader(FileName); XPathDocument doc = new XPathDocument(reader); XPathNavigator nav = doc.CreateNavigator(); XmlNamespaceManager nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("ns", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"); XPathNodeIterator activities = nav.Select("//ns:Activity", nsManager); while (activities.MoveNext()) { XPathNavigator id = activities.Current.SelectSingleNode("ns:Id", nsManager); if (id != null && DateTime.Parse(id.Value).ToString("yyyy-MM-dd HH:mm:ss") == IdToImport) { // the activity was found // the laps XPathNodeIterator lapNodes = activities.Current.Select("ns:Lap", nsManager); List routeSegments = new List(); RouteSegment routeSegment = new RouteSegment(); while (lapNodes.MoveNext()) { // the tracks XPathNodeIterator trackNodes = lapNodes.Current.Select("ns:Track", nsManager); int trackCount = 0; while (trackNodes.MoveNext()) { if (trackCount > 0) { if (routeSegment.Waypoints.Count > 1) routeSegments.Add(routeSegment); routeSegment = new RouteSegment(); } XPathNodeIterator trackpointNodes = trackNodes.Current.Select("ns:Trackpoint", nsManager); DateTime lastTime = DateTime.MinValue; LongLat lastLongLat = null; int trackpointCount = 0; while (trackpointNodes.MoveNext()) { Waypoint waypoint = new Waypoint(); waypoint.Time = DateTime.Parse(trackpointNodes.Current.SelectSingleNode("ns:Time", nsManager).Value).ToUniversalTime(); XPathNavigator position = trackpointNodes.Current.SelectSingleNode("ns:Position", nsManager); if (position != null) { waypoint.LongLat = new LongLat( position.SelectSingleNode("ns:LongitudeDegrees", nsManager).ValueAsDouble, position.SelectSingleNode("ns:LatitudeDegrees", nsManager).ValueAsDouble); } if (trackpointNodes.Current.SelectSingleNode("ns:AltitudeMeters", nsManager) != null) { waypoint.Altitude = trackpointNodes.Current.SelectSingleNode("ns:AltitudeMeters", nsManager).ValueAsDouble; } if (trackpointNodes.Current.SelectSingleNode("ns:HeartRateBpm/ns:Value", nsManager) != null) { waypoint.HeartRate = trackpointNodes.Current.SelectSingleNode("ns:HeartRateBpm/ns:Value", nsManager).ValueAsDouble; } if (waypoint.HeartRate == null && routeSegment.LastWaypoint != null) { // sometimes heart rates are only present at some nodes, so use last valid heart rate waypoint.HeartRate = routeSegment.LastWaypoint.HeartRate; } // do not add waypoint if it has the same location or time as the previous one if (waypoint.LongLat != null && !waypoint.LongLat.Equals(lastLongLat) && waypoint.Time != lastTime) { // special handling for positionless trackpoint in the beginning, use its time together with next position if (trackpointCount == 1 && lastLongLat == null && routeSegment.Waypoints.Count == 0) waypoint.Time = lastTime; routeSegment.Waypoints.Add(waypoint); } lastLongLat = waypoint.LongLat; lastTime = waypoint.Time; trackpointCount++; } if (lastLongLat == null && routeSegment.Waypoints.Count > 1) { // special handling for positionless trackpoint in the end, use its time together with previous position routeSegment.Waypoints[routeSegment.Waypoints.Count - 1].Time = lastTime; } trackCount++; } } // add last route segment if (routeSegment.Waypoints.Count > 1) routeSegments.Add(routeSegment); // set position of all start and end waypoints of the route segments if they are null foreach (RouteSegment rs in routeSegments) { if (rs.FirstWaypoint.LongLat == null && rs.Waypoints.Count > 1) rs.Waypoints[1] = rs.Waypoints[1].Clone(); if (rs.LastWaypoint.LongLat == null && rs.Waypoints.Count > 1) rs.Waypoints[rs.Waypoints.Count - 1] = rs.Waypoints[rs.Waypoints.Count - 2].Clone(); } // the laps lapNodes = activities.Current.Select("ns:Lap", nsManager); // first store all elapsed times List elapsedTimes = new List(); LapCollection laps = new LapCollection(); if (lapNodes.MoveNext()) { DateTime startTime = DateTime.Parse(lapNodes.Current.GetAttribute("StartTime", "")).ToUniversalTime(); double elapsedTime = 0; do { elapsedTimes.Add(elapsedTime); elapsedTime += lapNodes.Current.SelectSingleNode("ns:TotalTimeSeconds", nsManager).ValueAsDouble; } while (lapNodes.MoveNext()); laps = RouteImporterUtil.CreateLapsFromElapsedTimes(startTime, elapsedTimes, routeSegments); } importResult.Route = new Route(routeSegments); importResult.Laps = laps; importResult.Succeeded = importResult.Route.Segments.Count > 0; if(importResult.Route.Segments.Count == 0) importResult.Error = ImportError.NoWaypoints; break; } } reader.Close(); if (EndWork != null) EndWork(this, new EventArgs()); } private List GetAllActivities() { List activities = new List(); XmlTextReader reader = new XmlTextReader(FileName); XPathDocument doc = new XPathDocument(reader); XPathNavigator nav = doc.CreateNavigator(); XmlNamespaceManager nsManager = new XmlNamespaceManager(nav.NameTable); nsManager.AddNamespace("ns", "http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2"); XPathNodeIterator activitiyNodes = nav.Select("/ns:TrainingCenterDatabase/ns:Activities/ns:Activity", nsManager); while (activitiyNodes.MoveNext()) { XPathNavigator id = activitiyNodes.Current.SelectSingleNode("ns:Id", nsManager); activities.Add(DateTime.Parse(id.Value).ToString("yyyy-MM-dd HH:mm:ss")); } reader.Close(); return activities; } #region IRouteImporter Members public event EventHandler BeginWork; public event EventHandler EndWork; public event EventHandler WorkProgress; #endregion } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Importers/WorkProgressEventArgs.cs000066400000000000000000000006601446222606700327540ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.Importers { public class WorkProgressEventArgs : EventArgs { private double percentCompleted; public WorkProgressEventArgs(double percentCompleted) { this.percentCompleted = percentCompleted; } public double PercentCompleted { get { return percentCompleted; } set { percentCompleted = value; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/KmzDocument.cs000066400000000000000000000132521446222606700267430ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.Globalization; using System.IO; using System.Text; using System.Xml; using QuickRoute.Common; #if !__MonoCS__ using Ionic.Zip; #else using ICSharpCode.SharpZipLib.Zip; #endif namespace QuickRoute.BusinessEntities { public class KmzDocument { public KmzDocument(string fileName) { CalculateImageAndTransformationMatrix(fileName); } public KmzDocument(Stream stream) { var tempFileName = CommonUtil.GetTempFileName(); using (var fs = new FileStream(tempFileName, FileMode.Create, FileAccess.Write)) { CommonUtil.CopyStream(stream, fs); } CalculateImageAndTransformationMatrix(tempFileName); File.Delete(tempFileName); } public Stream ImageStream { get; private set; } public Transformation Transformation { get; private set; } private void CalculateImageAndTransformationMatrix(string fileName) { var zipFile = new ZipFile(fileName); var mapSize = new Size(); Transformation = new Transformation(); // get entry for kml file and image file KmlDocument kmlDocument = null; foreach (ZipEntry entry in zipFile) { #if !__MonoCS__ if (entry.FileName == entry.LocalFileName && Path.GetExtension(entry.FileName) == ".kml") #else if (Path.GetDirectoryName(entry.Name) == "" && Path.GetExtension(entry.Name) == ".kml") #endif { using (var kmlStream = new MemoryStream()) { #if !__MonoCS__ entry.Extract(kmlStream); #else zipFile.GetInputStream (entry).CopyTo (kmlStream); #endif kmlStream.Position = 0; kmlDocument = new KmlDocument(kmlStream); } break; } } if (kmlDocument != null) { // we have got a kml document, get map image file stream from it foreach (ZipEntry entry in zipFile) { #if !__MonoCS__ if (entry.FileName == kmlDocument.ImageFileName) #else if (entry.Name == kmlDocument.ImageFileName) #endif { ImageStream = new MemoryStream(); #if !__MonoCS__ entry.Extract(ImageStream); #else zipFile.GetInputStream (entry).CopyTo (ImageStream); #endif ImageStream.Position = 0; // check if image is QR jpeg var ed = QuickRouteJpegExtensionData.FromStream(ImageStream); if(ed != null) { // get transformation matrix from QR jpeg metadata Transformation = ed.Sessions.CalculateAverageTransformation(); ImageStream.Position = 0; return; } else { // it is not, use normal image bounds ImageStream.Position = 0; mapSize = Image.FromStream(ImageStream).Size; // need to get image object to get image size } ImageStream.Position = 0; break; } } } if (kmlDocument != null && ImageStream != null) { // finally, calculate the transformation Transformation = new Transformation(kmlDocument.LongLatBox, mapSize); } } private class KmlDocument { public KmlDocument(Stream stream) { Parse(stream); } public string ImageFileName { get; private set; } public LongLatBox LongLatBox { get; private set; } private void Parse(Stream stream) { var doc = new XmlDocument(); doc.Load(stream); var nsmgr = new XmlNamespaceManager(doc.NameTable); var ns = ""; if(doc.DocumentElement != null && doc.DocumentElement.Attributes["xmlns"] != null) { nsmgr.AddNamespace("ns", doc.DocumentElement.Attributes["xmlns"].Value); ns = "ns:"; } var groundOverlays = doc.SelectNodes(string.Format("//{0}GroundOverlay[1]", ns), nsmgr); if (groundOverlays != null && groundOverlays.Count > 0) { var iconNodes = groundOverlays[0].SelectNodes(string.Format("{0}Icon/{0}href", ns), nsmgr); if (iconNodes != null && iconNodes.Count > 0) { ImageFileName = iconNodes[0].InnerText; } var latLonBoxNodes = groundOverlays[0].SelectNodes(string.Format("{0}LatLonBox", ns), nsmgr); if (latLonBoxNodes != null && latLonBoxNodes.Count > 0) { LongLatBox = new LongLatBox() { North = Convert.ToDouble(latLonBoxNodes[0].SelectSingleNode(string.Format("{0}north", ns), nsmgr).InnerText, CultureInfo.InvariantCulture), South = Convert.ToDouble(latLonBoxNodes[0].SelectSingleNode(string.Format("{0}south", ns), nsmgr).InnerText, CultureInfo.InvariantCulture), West = Convert.ToDouble(latLonBoxNodes[0].SelectSingleNode(string.Format("{0}west", ns), nsmgr).InnerText, CultureInfo.InvariantCulture), East = Convert.ToDouble(latLonBoxNodes[0].SelectSingleNode(string.Format("{0}east", ns), nsmgr).InnerText, CultureInfo.InvariantCulture), Rotation = Convert.ToDouble(latLonBoxNodes[0].SelectSingleNode(string.Format("{0}rotation", ns), nsmgr).InnerText, CultureInfo.InvariantCulture) / 180.0 * Math.PI }; } } } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Lap.cs000066400000000000000000000030261446222606700252150ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities { [Serializable] public class Lap : IComparable, ICloneable { private DateTime time; private LapType lapType; private string description; public Lap() { } public Lap(DateTime time, LapType lapType) { this.time = time; this.lapType = lapType; } public Lap(DateTime time, LapType lapType, string description) { this.time = time; this.lapType = lapType; this.description = description; } public DateTime Time { get { return time; } set { time = value; } } public LapType LapType { get { return lapType; } set { lapType = value; } } public string Description { get { return description; } set { description = value; } } public LongLat GetLocation(Route route) { ParameterizedLocation pl = route.GetParameterizedLocationFromTime(time); return route.GetLocationFromParameterizedLocation(pl); } #region IComparable Members public int CompareTo(Lap other) { var compare = Math.Sign(time.Ticks - other.Time.Ticks); return compare == 0 ? -lapType.CompareTo(other.lapType) : compare; } #endregion #region ICloneable Members public object Clone() { return this.MemberwiseClone(); } #endregion } [Serializable] public enum LapType { Start, Lap, Stop } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/LapCollection.cs000066400000000000000000000101451446222606700272310ustar00rootroot00000000000000using System; using System.Collections; using System.Collections.Generic; using Wintellect.PowerCollections; namespace QuickRoute.BusinessEntities { [Serializable] public class LapCollection : ICollection { private readonly OrderedBag laps = new OrderedBag(); public Lap this[int index] { get { return laps[index]; } } #region ICollection Members public void Add(Lap item) { item.Time = item.Time.ToUniversalTime(); laps.Add(item); } public void AddRange(IEnumerable items) { foreach(var item in items) { item.Time = item.Time.ToUniversalTime(); laps.Add(item); } } public void Clear() { laps.Clear(); } public bool Contains(Lap item) { return laps.Contains(item); } public void CopyTo(Lap[] array, int arrayIndex) { laps.CopyTo(array, arrayIndex); } public int Count { get { return laps.Count; } } public bool IsReadOnly { get { return false; } } public bool Remove(Lap item) { return laps.Remove(item); } #endregion #region IEnumerable Members public IEnumerator GetEnumerator() { return laps.GetEnumerator(); } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return laps.GetEnumerator(); } #endregion public void EnsureUtcTimes() { // a bug in developer version caused wrong sorting of laps in some cases // this code handles the issue (which should be really rare) var utcLaps = new List(); foreach (var lap in this) { lap.Time = lap.Time.ToUniversalTime(); utcLaps.Add(lap); } Clear(); laps.AddMany(utcLaps); } public CutLapsData Cut(DateTime time, CutType cutType) { var cutLapsData = new CutLapsData(); switch (cutType) { case CutType.Before: foreach (var l in this) { if (l.Time <= time) { cutLapsData.CutLaps.Add(l); } } foreach (var l in cutLapsData.CutLaps) { Remove(l); } if (cutLapsData.CutLaps.Count > 0) { var newLap = new Lap(time, LapType.Start); Add(newLap); cutLapsData.AddedLaps.Add(newLap); } break; case CutType.After: foreach (var l in this) { if (l.Time >= time) { cutLapsData.CutLaps.Add(l); } } foreach (var l in cutLapsData.CutLaps) { Remove(l); } if (cutLapsData.CutLaps.Count > 0) { var newLap = new Lap(time, LapType.Stop); Add(newLap); cutLapsData.AddedLaps.Add(newLap); } break; } return cutLapsData; } public void UnCut(CutLapsData cutLapsData) { foreach (Lap l in cutLapsData.CutLaps) { Add(l); } foreach (Lap l in cutLapsData.AddedLaps) { Remove(l); } } public void AddTimeOffset(TimeSpan offset) { foreach (var lap in this) { lap.Time = lap.Time.Add(offset); } } public class CutLapsData { private List cutLaps = new List(); private List addedLaps = new List(); public List CutLaps { get { return cutLaps; } set { cutLaps = value; } } public List AddedLaps { get { return addedLaps; } set { addedLaps = value; } } } public bool Exists(DateTime time, int numberOfTimes = 1) { var count = 0; foreach (var lap in this) { if (lap.Time == time) count++; } return count >= numberOfTimes; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/LapInfo.cs000066400000000000000000000065711446222606700260410ustar00rootroot00000000000000using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using QuickRoute.BusinessEntities.RouteProperties; namespace QuickRoute.BusinessEntities { public class LapInfo : Lap { /// /// The order number to display for this lap. /// public int Number { get; set; } /// /// The index of this lap in a LapCollection. /// public int Index { get; set; } private readonly List properties = new List(); public void AddProperty(RouteProperty property) { if (property == null) { } properties.Add(property); } public List GetProperties() { return new List(properties); } public RouteProperty this[int index] { get { return GetProperties()[index]; } } /// /// Compares a property of this object with a property of another LapInfo object. If they are equal, use the LapInfo index as a comparison. /// /// The LapInfo object to compare with. /// The zero-based index of the property to compare. /// public int CompareProperty(LapInfo other, int propertyIndex) { if(propertyIndex > properties.Count-1 || propertyIndex > other.GetProperties().Count-1) return 0; var value = this[propertyIndex].CompareTo(other[propertyIndex]); if (value == 0) value = Index == -1 ? 1 : (other.Index == -1 ? -1 : Index.CompareTo(other.Index)); return value; } } public class RoutePropertyType { public Type Type { get; set; } public ParameterizedLocation MomentaneousLocation { get; set; } public ParameterizedLocation SpanStart { get; set; } public ParameterizedLocation SpanEnd { get; set; } public RoutePropertyType(RouteProperty rp) { Type = rp.GetType(); var rmp = rp as RouteMomentaneousProperty; if (rmp != null) { MomentaneousLocation = rmp.Location; } var rsp = rp as RouteSpanProperty; if (rsp != null) { SpanStart = rsp.Start; SpanEnd = rsp.End; } } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof(RoutePropertyType)) return false; return Equals((RoutePropertyType)obj); } public bool Equals(RoutePropertyType obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return Equals(obj.Type, Type) && Equals(obj.MomentaneousLocation, MomentaneousLocation) && Equals(obj.SpanStart, SpanStart) && Equals(obj.SpanEnd, SpanEnd); } public override int GetHashCode() { unchecked { int result = (Type != null ? Type.GetHashCode() : 0); result = (result * 397) ^ (MomentaneousLocation != null ? MomentaneousLocation.GetHashCode() : 0); result = (result * 397) ^ (SpanStart != null ? SpanStart.GetHashCode() : 0); result = (result * 397) ^ (SpanEnd != null ? SpanEnd.GetHashCode() : 0); return result; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/LineGraph.cs000066400000000000000000000460071446222606700263600ustar00rootroot00000000000000using System; using System.Collections.Generic; using QuickRoute.BusinessEntities.Numeric; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; namespace QuickRoute.BusinessEntities { public class LineGraph { private List> pointsList; private Session session; public ParameterizedLocation StartPL { get; set; } public ParameterizedLocation EndPL { get; set; } private DomainAttribute xAxisAttribute; private double xAxisMinValue; private double xAxisMaxValue; private NumericConverter xAxisNumericConverter; private ScaleCreatorBase xAxisScaleCreator; private string xAxisCaption; private WaypointAttribute yAxisAttribute; private double yAxisMinValue; private double yAxisMaxValue; private NumericConverter yAxisNumericConverter; private ScaleCreatorBase yAxisScaleCreator; private string yAxisCaption; private Rectangle graphDrawingRectangle; private readonly Font font = new Font("MS Sans Serif", 8.25F); private readonly Pen borderPen = new Pen(Color.Black, 1F); private readonly Pen gridPen = new Pen(Color.FromArgb(128, Color.Gray), 1F); private readonly Pen linePen = new Pen(Color.FromArgb(192, Color.Black), 1.5F); private readonly Pen lapPen = new Pen(Color.FromArgb(128, Color.Blue), 1.5F); private readonly Color fontColor = Color.Black; private readonly Brush lineGraphBackgroundBrush = Brushes.White; ~LineGraph() { font.Dispose(); borderPen.Dispose(); gridPen.Dispose(); linePen.Dispose(); lapPen.Dispose(); } public string XAxisCaption { get { return xAxisCaption; } set { xAxisCaption = value; } } public string YAxisCaption { get { return yAxisCaption; } set { yAxisCaption = value; } } public Session Session { get { return session; } set { session = value; } } public DomainAttribute XAxisAttribute { get { return xAxisAttribute; } set { xAxisAttribute = value; } } public WaypointAttribute YAxisAttribute { get { return yAxisAttribute; } set { yAxisAttribute = value; } } public double XAxisMinValue { get { return xAxisMinValue; } set { xAxisMinValue = value; } } public double XAxisMaxValue { get { return xAxisMaxValue; } set { xAxisMaxValue = value; } } public NumericConverter XAxisNumericConverter { get { return xAxisNumericConverter; } set { xAxisNumericConverter = value; } } public ScaleCreatorBase XAxisScaleCreator { get { return xAxisScaleCreator; } set { xAxisScaleCreator = value; } } public double YAxisMinValue { get { return yAxisMinValue; } set { yAxisMinValue = value; } } public double YAxisMaxValue { get { return yAxisMaxValue; } set { yAxisMaxValue = value; } } public NumericConverter YAxisNumericConverter { get { return yAxisNumericConverter; } set { yAxisNumericConverter = value; } } public ScaleCreatorBase YAxisScaleCreator { get { return yAxisScaleCreator; } set { yAxisScaleCreator = value; } } public Rectangle GraphDrawingRectangle { get { return graphDrawingRectangle; } } public void Calculate() { pointsList = new List>(); DateTime startTime = session.Route.GetTimeFromParameterizedLocation(StartPL); DateTime endTime = session.Route.GetTimeFromParameterizedLocation(EndPL); foreach (RouteSegment rs in session.Route.Segments) { var points = new List(); for (var i = 0; i < rs.Waypoints.Count; i++) { var previousWaypoint = i > 0 ? rs.Waypoints[i - 1] : null; var thisWaypoint = rs.Waypoints[i]; var nextWaypoint = i < rs.Waypoints.Count - 1 ? rs.Waypoints[i + 1] : null; if (thisWaypoint.Time >= startTime && thisWaypoint.Time <= endTime) { var p = new LineGraphPoint { X = GetXValue(thisWaypoint), Y = GetYValue(thisWaypoint), Type = (i == 0 ? LineGraphPointType.Start : (i == rs.Waypoints.Count - 1 ? LineGraphPointType.End : LineGraphPointType.Intermediate)) }; // handle null values List beforePoints = null; List afterPoints = null; if (previousWaypoint != null) { if (YAxisAttributeIsMapReadingAttribute && thisWaypoint.MapReadingState == MapReadingState.StartReading) { beforePoints = new List() { new LineGraphPoint() {X = p.X, Y = 0, Type = LineGraphPointType.Intermediate}, }; } else if (!previousWaypoint.Attributes[yAxisAttribute].HasValue && thisWaypoint.Attributes[yAxisAttribute].HasValue) { beforePoints = new List() { new LineGraphPoint() {X = (GetXValue(previousWaypoint) + p.X)/2, Y = 0, Type = LineGraphPointType.Intermediate}, new LineGraphPoint() {X = (GetXValue(previousWaypoint) + p.X)/2, Y = p.Y, Type = LineGraphPointType.Intermediate} }; } } if (nextWaypoint != null) { if (YAxisAttributeIsMapReadingAttribute && thisWaypoint.MapReadingState == MapReadingState.EndReading) { afterPoints = new List() { new LineGraphPoint() {X = p.X, Y = 0, Type = LineGraphPointType.Intermediate}, }; } else if (!nextWaypoint.Attributes[yAxisAttribute].HasValue && thisWaypoint.Attributes[yAxisAttribute].HasValue) { afterPoints = new List() { new LineGraphPoint() {X = (GetXValue(nextWaypoint) + p.X)/2, Y = p.Y, Type = LineGraphPointType.Intermediate}, new LineGraphPoint() {X = (GetXValue(nextWaypoint) + p.X)/2, Y = 0, Type = LineGraphPointType.Intermediate} }; } } if (beforePoints != null) points.AddRange(beforePoints); points.Add(p); if (afterPoints != null) points.AddRange(afterPoints); } } if (points.Count > 0) { points[0].Type = LineGraphPointType.Start; points[points.Count - 1].Type = LineGraphPointType.End; pointsList.Add(points); } } bool first = true; foreach (var points in pointsList) { foreach (var p in points) { if (first || p.X < xAxisMinValue) xAxisMinValue = p.X; if (first || p.X > xAxisMaxValue) xAxisMaxValue = p.X; //if (first || p.Y < yAxisMinValue) yAxisMinValue = p.Y; //if (first || p.Y > yAxisMaxValue) yAxisMaxValue = p.Y; first = false; } } } private double GetYValue(Waypoint w) { switch (yAxisAttribute) { case WaypointAttribute.Speed: return w.Attributes[WaypointAttribute.Speed].Value; case WaypointAttribute.HeartRate: return w.Attributes[WaypointAttribute.HeartRate].GetValueOrDefault(0); case WaypointAttribute.Altitude: return w.Attributes[WaypointAttribute.Altitude].GetValueOrDefault(0); case WaypointAttribute.DirectionDeviationToNextLap: return w.Attributes[WaypointAttribute.DirectionDeviationToNextLap].Value; case WaypointAttribute.MapReadingDuration: return w.Attributes[WaypointAttribute.MapReadingDuration].GetValueOrDefault(0); case WaypointAttribute.Pace: default: return ConvertUtil.ToPace(w.Attributes[WaypointAttribute.Speed].Value).TotalSeconds; } } private double GetXValue(Waypoint w) { switch (xAxisAttribute) { case DomainAttribute.ElapsedTime: return w.Attributes[WaypointAttribute.ElapsedTime].Value; case DomainAttribute.Distance: return w.Attributes[WaypointAttribute.Distance].Value; case DomainAttribute.TimeOfDay: default: return (double)w.Time.ToLocalTime().Ticks / TimeSpan.TicksPerSecond; } } public void Draw(Graphics g, RectangleF drawingRectangle) { if (yAxisNumericConverter == null) return; if (yAxisScaleCreator == null) return; Brush fontBrush = new SolidBrush(fontColor); g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.AntiAlias; // calculate caption sizes SizeF xAxisCaptionSize = g.MeasureString(xAxisCaption, font); SizeF yAxisCaptionSize = g.MeasureString(yAxisCaption, font); // calculate max x axis label size switch (xAxisAttribute) { case DomainAttribute.TimeOfDay: xAxisNumericConverter = new TimeConverter(TimeConverter.TimeConverterType.TimeOfDay); XAxisScaleCreator = new TimeScaleCreator(xAxisMinValue, xAxisMaxValue, 15, false); break; case DomainAttribute.ElapsedTime: xAxisNumericConverter = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); XAxisScaleCreator = new TimeScaleCreator(xAxisMinValue, xAxisMaxValue, 15, false); break; case DomainAttribute.Distance: xAxisNumericConverter = new NumericConverter(); XAxisScaleCreator = new DoubleScaleCreator(xAxisMinValue, xAxisMaxValue, 15, false); break; } SizeF maxXAxisLabelSize = SizeF.Empty; for (int i = 0; i < xAxisScaleCreator.NoOfMarkers; i++) { double value = xAxisScaleCreator.MarkerValue(i); string label = xAxisNumericConverter.ToString(value); SizeF labelSize = g.MeasureString(label, font); maxXAxisLabelSize.Width = Math.Max(maxXAxisLabelSize.Width, labelSize.Width); maxXAxisLabelSize.Height = Math.Max(maxXAxisLabelSize.Height, labelSize.Height); } // calculate max y axis label size SizeF maxYAxisLabelSize = SizeF.Empty; for (int i = 0; i < yAxisScaleCreator.NoOfMarkers; i++) { double value = yAxisScaleCreator.MarkerValue(i); string label = yAxisNumericConverter.ToString(value); SizeF labelSize = g.MeasureString(label, font); maxYAxisLabelSize.Width = Math.Max(maxYAxisLabelSize.Width, labelSize.Width); maxYAxisLabelSize.Height = Math.Max(maxYAxisLabelSize.Height, labelSize.Height); } // calculate graph drawing rectangle float leftMargin = Math.Max(1.5F * yAxisCaptionSize.Height + maxYAxisLabelSize.Width, maxXAxisLabelSize.Width / 2); int width = (int)(drawingRectangle.Width - leftMargin - maxXAxisLabelSize.Width / 2 - 1); int height = (int)(drawingRectangle.Height - maxYAxisLabelSize.Height / 2 - maxXAxisLabelSize.Height - xAxisCaptionSize.Height - 1); graphDrawingRectangle = new Rectangle( (int)(drawingRectangle.Left + leftMargin), (int)(drawingRectangle.Top + maxYAxisLabelSize.Height / 2), Math.Max(width, 1), Math.Max(height, 1)); // draw graph background g.FillRectangle(lineGraphBackgroundBrush, GraphDrawingRectangle); // draw the axis labels // x axis for (int i = 0; i < xAxisScaleCreator.NoOfMarkers; i++) { double value = xAxisScaleCreator.MarkerValue(i); int x = (int)Math.Round(ValueToX(value)); string label = xAxisNumericConverter.ToString(value); SizeF labelSize = g.MeasureString(label, font); g.DrawString(label, font, fontBrush, new PointF(x - labelSize.Width / 2, GraphDrawingRectangle.Bottom)); g.DrawLine(gridPen, new Point(x, GraphDrawingRectangle.Top), new Point(x, GraphDrawingRectangle.Bottom)); } // y axis for (int i = 0; i < yAxisScaleCreator.NoOfMarkers; i++) { double value = yAxisScaleCreator.MarkerValue(i); int y = (int)Math.Round(ValueToY(value)); string label = yAxisNumericConverter.ToString(value); SizeF labelSize = g.MeasureString(label, font); g.DrawString(label, font, fontBrush, new PointF(GraphDrawingRectangle.Left - labelSize.Width, y - maxYAxisLabelSize.Height / 2)); g.DrawLine(gridPen, new Point(GraphDrawingRectangle.Left, y), new Point(GraphDrawingRectangle.Right, y)); } // draw the axis captions // x axis PointF xAxisCaptionLocation = new PointF( GraphDrawingRectangle.Left + (GraphDrawingRectangle.Width - xAxisCaptionSize.Width) / 2, GraphDrawingRectangle.Bottom + xAxisCaptionSize.Height); g.DrawString(xAxisCaption, font, fontBrush, xAxisCaptionLocation); // y axis, rotated 90 degrees PointF yAxisCaptionLocation = new PointF( GraphDrawingRectangle.Left - 3 * yAxisCaptionSize.Height, GraphDrawingRectangle.Bottom - (GraphDrawingRectangle.Height - yAxisCaptionSize.Width) / 2); g.ResetTransform(); g.TranslateTransform(-yAxisCaptionLocation.X, -yAxisCaptionLocation.Y, MatrixOrder.Append); g.RotateTransform(-90F, MatrixOrder.Append); g.TranslateTransform(yAxisCaptionLocation.X, yAxisCaptionLocation.Y, MatrixOrder.Append); g.DrawString(yAxisCaption, font, fontBrush, yAxisCaptionLocation); g.ResetTransform(); // create the line points var polygonList = new List>(); if (pointsList != null) { foreach (var points in pointsList) { GraphicsPath path = new GraphicsPath(); var polygon = new List { new PointF(ValueToX(points[0].X), GraphDrawingRectangle.Bottom) }; foreach (LineGraphPoint p in points) { polygon.Add(new PointF(ValueToX(p.X), ValueToY(p.Y))); } polygon.Add(new PointF(ValueToX(points[points.Count - 1].X), GraphDrawingRectangle.Bottom)); path.AddPolygon(polygon.ToArray()); polygonList.Add(polygon); g.SetClip(path); RouteLineSettings rls = session.Settings.RouteLineSettingsCollection[yAxisAttribute]; // draw the gradient filling Bitmap templateBitmap = new Bitmap(32, GraphDrawingRectangle.Height); Graphics templateGraphics = Graphics.FromImage(templateBitmap); double colorRangeInterval = rls.ColorRange.EndValue - rls.ColorRange.StartValue; if (colorRangeInterval == 0) colorRangeInterval = 0.00001; rls.ColorRange.Gradient.Draw( templateGraphics, new Rectangle(0, 0, templateBitmap.Width, templateBitmap.Height), (yAxisMinValue - rls.ColorRange.StartValue) / colorRangeInterval, 1 + (yAxisMaxValue - rls.ColorRange.EndValue) / colorRangeInterval, Gradient.Direction.ReverseVertical); templateGraphics.Dispose(); for (int i = 0; i < GraphDrawingRectangle.Width; i += templateBitmap.Width) { g.DrawImage(templateBitmap, GraphDrawingRectangle.Left + i, GraphDrawingRectangle.Top); } } } g.SetClip(GraphDrawingRectangle); // draw lap lines foreach (Lap lap in session.Laps) { double xValue = 0; switch (xAxisAttribute) { case DomainAttribute.TimeOfDay: xValue = (double)lap.Time.ToLocalTime().Ticks / TimeSpan.TicksPerSecond; break; case DomainAttribute.ElapsedTime: xValue = session.Route.GetAttributeFromParameterizedLocation( WaypointAttribute.ElapsedTime, session.Route.GetParameterizedLocationFromTime(lap.Time)).Value; break; case DomainAttribute.Distance: xValue = session.Route.GetAttributeFromParameterizedLocation( WaypointAttribute.Distance, session.Route.GetParameterizedLocationFromTime(lap.Time)).Value; break; } int x = (int)Math.Round(ValueToX(xValue)); g.DrawLine(lapPen, x, graphDrawingRectangle.Top, x, graphDrawingRectangle.Bottom); } // draw the line above the gradient area foreach (var polygon in polygonList) { g.DrawLines(linePen, polygon.ToArray()); } g.ResetClip(); g.DrawRectangle(borderPen, GraphDrawingRectangle); // dispose drawing objects fontBrush.Dispose(); } public float ValueToX(double value) { if (xAxisMaxValue == xAxisMinValue) return 0; return GraphDrawingRectangle.Left + (float)((value - xAxisMinValue) / (xAxisMaxValue - xAxisMinValue)) * GraphDrawingRectangle.Width; } public float ValueToY(double value) { if (yAxisMaxValue == yAxisMinValue) return 0; return GraphDrawingRectangle.Bottom - (float)((value - yAxisMinValue) / (yAxisMaxValue - yAxisMinValue)) * GraphDrawingRectangle.Height; } public double XToValue(int x) { if (GraphDrawingRectangle.Width == 0) return 0; return xAxisMinValue + ((double)x - GraphDrawingRectangle.Left) / GraphDrawingRectangle.Width * (xAxisMaxValue - xAxisMinValue); } public double YToValue(int y) { if (GraphDrawingRectangle.Height == 0) return yAxisMinValue; return yAxisMinValue + ((double)GraphDrawingRectangle.Bottom - y) / GraphDrawingRectangle.Height * (yAxisMaxValue - yAxisMinValue); } public double GetYValueFromXValue(double xValue) { if (pointsList == null) return 0; LineGraphPoint p0 = null; LineGraphPoint p1 = null; foreach (var points in pointsList) { foreach (var p in points) { if (p.X <= xValue && (p0 == null || p.X >= p0.X)) p0 = p; if (p.X >= xValue && (p1 == null || p.X < p1.X)) p1 = p; } } if (p0 == null || p1 == null) return 0; if (p0.X == p1.X) return p0.Y; return p0.Y + (xValue - p0.X) / (p1.X - p0.X) * (p1.Y - p0.Y); } private bool YAxisAttributeIsMapReadingAttribute { get { return YAxisAttribute == WaypointAttribute.MapReadingDuration; } } } public class LineGraphPoint : PointD { public LineGraphPointType Type { get; set; } } public enum LineGraphPointType { Start, Intermediate, End } public enum DomainAttribute { TimeOfDay, ElapsedTime, Distance } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Map.cs000066400000000000000000000164741446222606700252310ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Reflection; using System.Runtime.Serialization; using System.Net; using System.IO; using System.Drawing; namespace QuickRoute.BusinessEntities { [Serializable] public class Map : ISerializable { private MapStorageType storageType; private MapSourceType sourceType; private Bitmap image; private string source; [NonSerialized] private byte[] rawData; public Map(string source, MapSourceType sourceType, MapStorageType storageType) { this.source = source; this.sourceType = sourceType; this.storageType = storageType; this.image = GetImage(source, sourceType); } private Bitmap GetImage(string source, MapSourceType sourceType) { Stream stream = null; switch (sourceType) { case MapSourceType.FileSystem: stream = new FileStream(source, FileMode.Open); break; case MapSourceType.Url: stream = GetImageStreamFromUrl(source); break; } var result = StripQuickRouteHeader(stream); if(stream != null) { stream.Close(); stream.Dispose(); } return result; } private Bitmap StripQuickRouteHeader(Stream stream) { Bitmap targetImage = null; if(stream != null) { // check if the image is an exported QuickRoute image; if yes, remove the border var ed = QuickRouteJpegExtensionData.FromStream(stream); var sourceImage = System.Drawing.Image.FromStream(stream); rawData = new byte[stream.Length]; stream.Position = 0; stream.Read(rawData, 0, (int)stream.Length); if (ed != null) { targetImage = new Bitmap(ed.MapLocationAndSizeInPixels.Width, ed.MapLocationAndSizeInPixels.Height); var g = Graphics.FromImage(targetImage); g.DrawImage(sourceImage, new Rectangle(new Point(0, 0), ed.MapLocationAndSizeInPixels.Size), ed.MapLocationAndSizeInPixels, GraphicsUnit.Pixel); g.Dispose(); } else { targetImage = new Bitmap(sourceImage); } } return targetImage; } public Map(Bitmap image) { this.source = null; this.sourceType = MapSourceType.FileSystem; this.storageType = MapStorageType.Inline; this.image = image; this.rawData = null; } public Map(Stream stream) { this.source = null; this.sourceType = MapSourceType.FileSystem; this.storageType = MapStorageType.Inline; stream.Position = 0; this.image = StripQuickRouteHeader(stream); } protected Map(SerializationInfo info, StreamingContext context) { source = info.GetString("source"); sourceType = (MapSourceType)(info.GetValue("sourceType", typeof(MapSourceType))); storageType = (MapStorageType)(info.GetValue("storageType", typeof(MapStorageType))); switch (storageType) { case MapStorageType.Inline: //rawData = (byte[])(info.GetValueNo("rawData", typeof(byte[]))); var getValueNoThrowMethod = info.GetType().GetMethod("GetValueNoThrow", BindingFlags.Instance | BindingFlags.NonPublic); if(getValueNoThrowMethod == null) rawData = (byte[])(info.GetValue("rawData", typeof(byte[]))); else rawData = (byte[])getValueNoThrowMethod.Invoke(info, new object[] { "rawData", typeof(byte[]) }); if (rawData != null) { // version 2.3 file format contains rawData field, create image from it using (var ms = new MemoryStream(rawData)) { image = (Bitmap)System.Drawing.Image.FromStream(ms); } } else { // version 2.2 file format image = (Bitmap)(info.GetValue("image", typeof(Bitmap))); } break; case MapStorageType.Reference: switch (sourceType) { case MapSourceType.FileSystem: image = (Bitmap)System.Drawing.Image.FromFile(source); break; case MapSourceType.Url: image = GetImageFromUrl(source); break; } break; } } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("source", source); info.AddValue("sourceType", sourceType, typeof(MapSourceType)); info.AddValue("storageType", storageType, typeof(MapStorageType)); if(storageType == MapStorageType.Inline) { // saving bitmap object in version 2.2 and earlier if (rawData == null) { info.AddValue("image", image); } else { // from version 2.3, save byte array instead to decrease file size when map image is in jpeg format // this breaks backward compatibility, but the advantage of a small file size is more important in my opinion info.AddValue("rawData", rawData); } } } public MapStorageType StorageType { get { return storageType; } set { storageType = value; } } public MapSourceType SourceType { get { return sourceType; } } public Bitmap Image { get { return image; } } public string Source { get { return source; } } /// /// Rotates the map image /// /// Rotation angle, radians counterclockwise public void RotateImage(double angle) { Graphics g = Graphics.FromImage(image); Matrix t = new Matrix(); t.RotateAt((float)(angle * Math.PI / 180), new PointF((float)image.Width / 2, (float)image.Height / 2)); g.Transform = t; g.DrawImage(image, 0, 0); } private static Bitmap GetImageFromUrl(string url) { var request = WebRequest.Create(url); var response = (HttpWebResponse)request.GetResponse(); var dataStream = response.GetResponseStream(); var imageFromUrl = (Bitmap)System.Drawing.Image.FromStream(dataStream); dataStream.Close(); response.Close(); return imageFromUrl; } private static Stream GetImageStreamFromUrl(string url) { var request = WebRequest.Create(url); var response = (HttpWebResponse)request.GetResponse(); return response.GetResponseStream(); } } /// /// The type of storage of the map image when the map object is serialized. /// public enum MapStorageType { /// /// The map image is stored as a byte array in the object itself /// Inline, /// /// The map image is stored as a reference to a file or url /// Reference } /// /// The location type of the map image file. /// public enum MapSourceType { /// /// The source is a file in the file system /// FileSystem, /// /// The source is a file on an internet url /// Url } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/MapReadingState.cs000066400000000000000000000002311446222606700275040ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities { public enum MapReadingState { NotReading, StartReading, Reading, EndReading } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/MarkerDrawers.cs000066400000000000000000000131301446222606700272470ustar00rootroot00000000000000using System; using System.Runtime.Serialization; using System.Drawing; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities { public interface IMarkerDrawer { void Draw(Graphics g, PointD p, double zoom); } [Serializable] public class DiscDrawer : GlobalizedObject, IMarkerDrawer, ISerializable { private Color color = Color.Black; private double radius = 8.0; public DiscDrawer(Color color, double radius) { this.color = color; this.radius = radius; } protected DiscDrawer(SerializationInfo info, StreamingContext context) { color = Color.FromArgb(info.GetInt32("color")); radius = info.GetDouble("radius"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("color", color.ToArgb()); info.AddValue("radius", radius); } public void Draw(Graphics g, PointD p, double zoom) { Brush b = new SolidBrush(color); g.FillEllipse(b, (float)(p.X - zoom * radius), (float)(p.Y - zoom * radius), (float)(2.0 * zoom * radius), (float)(2.0 * zoom * radius)); b.Dispose(); } public Color Color { get { return color; } set { color = value; } } public double Radius { get { return radius; } set { radius = value; } } } [Serializable] public class DiscAndCircleDrawer : GlobalizedObject, IMarkerDrawer, ISerializable { private Color innerColor = Color.Black; private double innerRadius = 8.0; private double outerRadius = 12.0; private Color outerColor = Color.Red; private double outerLineWidth = 2.0; public DiscAndCircleDrawer(Color innerColor, double innerRadius, Color outerColor, double outerRadius, double outerLineWidth) { this.innerColor = innerColor; this.innerRadius = innerRadius; this.outerColor = outerColor; this.outerRadius = outerRadius; this.outerLineWidth = outerLineWidth; } protected DiscAndCircleDrawer(SerializationInfo info, StreamingContext context) { this.innerColor = Color.FromArgb(info.GetInt32("innerColor")); this.innerRadius = info.GetDouble("innerRadius"); this.outerColor = Color.FromArgb(info.GetInt32("outerColor")); this.outerRadius = info.GetDouble("outerRadius"); this.outerLineWidth = info.GetDouble("outerLineWidth"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("innerColor", innerColor.ToArgb()); info.AddValue("innerRadius", innerRadius); info.AddValue("outerColor", outerColor.ToArgb()); info.AddValue("outerRadius", outerRadius); info.AddValue("outerLineWidth", outerLineWidth); } public void Draw(Graphics g, PointD p, double zoom) { Pen pen = new Pen(outerColor, (float) (zoom*outerLineWidth)); Brush brush = new SolidBrush(innerColor); g.FillEllipse(brush, (float)(p.X - zoom * innerRadius), (float)(p.Y - zoom * innerRadius), (float)(2 * zoom * innerRadius), (float)(2 * zoom * innerRadius)); g.DrawEllipse(pen, (float)(p.X - zoom * (outerRadius - outerLineWidth / 2)), (float)(p.Y - zoom * (outerRadius - outerLineWidth / 2)), (float)(2 * zoom * (outerRadius - outerLineWidth / 2)), (float)(2 * zoom * (outerRadius - outerLineWidth / 2))); pen.Dispose(); brush.Dispose(); } public Color InnerColor { get { return innerColor; } set { innerColor = value; } } public double InnerRadius { get { return innerRadius; } set { innerRadius = value; } } public double OuterRadius { get { return outerRadius; } set { outerRadius = value; } } public Color OuterColor { get { return outerColor; } set { outerColor = value; } } public double OuterLineWidth { get { return outerLineWidth; } set { outerLineWidth = value; } } } [Serializable] public class CircleDrawer : GlobalizedObject, IMarkerDrawer, ISerializable { private Color color = Color.Black; private double radius = 8.0; private double lineWidth = 2.0; public CircleDrawer(Color color, double radius, double lineWidth) { this.color = color; this.radius = radius; this.lineWidth = lineWidth; } protected CircleDrawer(SerializationInfo info, StreamingContext context) { this.Color = Color.FromArgb(info.GetInt32("color")); this.Radius = info.GetDouble("radius"); this.LineWidth = info.GetDouble("lineWidth"); } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("color", color.ToArgb()); info.AddValue("radius", radius); info.AddValue("lineWidth", lineWidth); } public void Draw(Graphics g, PointD p, double zoom) { Pen pen = new Pen(color, (float) (zoom*lineWidth)); g.DrawEllipse(pen, (float)(p.X - zoom * (radius - lineWidth / 2)), (float)(p.Y - zoom * (radius - lineWidth / 2)), (float)(2 * zoom * (radius - lineWidth / 2)), (float)(2 * zoom * (radius - lineWidth / 2))); pen.Dispose(); } public Color Color { get { return color; } set { color = value; } } public double Radius { get { return radius; } set { radius = value; } } public double LineWidth { get { return lineWidth; } set { lineWidth = value; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Numeric/000077500000000000000000000000001446222606700255535ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Numeric/Converters.cs000066400000000000000000000106511446222606700302370ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.Numeric { [Serializable] public class NumericConverter { private int noOfDecimals = 1; private bool forceSign; public int NoOfDecimals { get { return noOfDecimals; } set { noOfDecimals = Math.Max(0, value); } } public bool ForceSign { get { return forceSign; } set { forceSign = value; } } public virtual double? ToNumeric(string s) { double result; bool success = double.TryParse(s.Replace(" ", ""), out result); if (success) { return result; } return null; } public virtual string ToString(double? d) { if (d == null) { return null; } return (forceSign && d.Value > 0 ? "+" : "") + d.Value.ToString("n" + noOfDecimals); } public virtual string ToString(double d) { return ToString((double?)d); } } [Serializable] public class TimeConverter : NumericConverter { private TimeConverterType type; public TimeConverter(TimeConverterType type) { this.type = type; NoOfDecimals = 0; } public TimeConverterType Type { get { return type; } } private readonly string[] separators = new string[] { ".", ":", "," }; public override double? ToNumeric(string s) { string[] atoms = s.Split(separators, StringSplitOptions.None); try { int factor = 0; switch (type) { case TimeConverterType.ElapsedTime: factor = 1; break; case TimeConverterType.TimeOfDay: factor = 60; break; } switch (atoms.Length) { case 1: return factor * 60 * Convert.ToInt32(atoms[0]); case 2: return factor * 60 * Convert.ToInt32(atoms[0]) + factor * Convert.ToInt32(atoms[1]); case 3: return 3600 * Convert.ToInt32(atoms[0]) + 60 * Convert.ToInt32(atoms[1]) + Convert.ToInt32(atoms[2]); default: return null; } } catch (Exception) { return null; } } public override string ToString(double? d) { if (d == null) return null; long intValue = (long)d; var secondsFormat = "00" + (NoOfDecimals == 0 ? "" : "." + new string('0', NoOfDecimals)); var resolution = Math.Pow(10, -NoOfDecimals); var rounded = Math.Floor(d.Value/resolution) * resolution; switch (type) { case TimeConverterType.ElapsedTime: if (intValue < 3600) { return string.Format("{0:d1}:{1:" + secondsFormat + "}", intValue / 60, rounded % 60); } else { return string.Format("{0:d1}:{1:d2}:{2:" + secondsFormat + "}", intValue / 3600, (intValue / 60) % 60, rounded % 60); } case TimeConverterType.TimeOfDay: return string.Format("{0:d1}:{1:d2}:{2:" + secondsFormat + "}", (intValue / 3600) % 24, (intValue / 60) % 60, rounded % 60); default: return null; } } public override string ToString(double d) { return ToString((double?)d); } public string ToString(DateTime dt) { var localTime = dt.ToLocalTime(); return ToString((double?)localTime.Subtract(localTime.Date).TotalSeconds); } public string ToString(TimeSpan ts) { return ToString((double?)ts.TotalSeconds); } public enum TimeConverterType { ElapsedTime, TimeOfDay } } [Serializable] public class IntConverter : NumericConverter { public override double? ToNumeric(string s) { int result; bool success = int.TryParse(s.Replace(" ", ""), out result); if (success) { return (double)result; } else { return null; } } public override string ToString(double? d) { if (d == null) { return null; } else { return ((int)d).ToString("n0"); } } public override string ToString(double d) { return ToString((double?)d); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Numeric/ScaleCreators.cs000066400000000000000000000153051446222606700306400ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.Numeric { [Serializable] public abstract class ScaleCreatorBase { protected double scaleStartValue = 0.0; protected double scaleEndValue = 1.0; protected double markerInterval = 0.1; protected int noOfMarkers = 11; protected double firstMarkerValue = 0.0; protected double lastMarkerValue = 1.0; public double ScaleStartValue { get { return scaleStartValue; } } public double ScaleEndValue { get { return scaleEndValue; } } public double MarkerInterval { get { return markerInterval; } } public int NoOfMarkers { get { return noOfMarkers; } } public double FirstMarkerValue { get { return firstMarkerValue; } } public double LastMarkerValue { get { return lastMarkerValue; } } public double MarkerValue(int index) { return firstMarkerValue + index * markerInterval; } } [Serializable] public class IntScaleCreator : ScaleCreatorBase { // use 10^n * 1, 2, or 5 as marker intervals, n>=0 public IntScaleCreator(int minValue, int maxValue, int maxNoOfMarkers, bool adjustStartAndEndValues) { if (maxNoOfMarkers < 2) maxNoOfMarkers = 2; int intervalLength = Math.Abs(maxValue - minValue); if(intervalLength == 0) intervalLength = 1; double minMarkerInterval = intervalLength / (maxNoOfMarkers - 1); double log10 = Math.Log10(minMarkerInterval); int n = (int)Math.Floor(log10); double scaledMinMarkerInterval = minMarkerInterval / Math.Pow(10,n); // 1 <= scaledMinMarkerInterval < 10 if (scaledMinMarkerInterval <= 2) { markerInterval = 2 * Math.Pow(10, n); } else if (scaledMinMarkerInterval <= 5) { markerInterval = 5 * Math.Pow(10, n); } else { markerInterval = 10 * Math.Pow(10, n); } if (adjustStartAndEndValues) { scaleStartValue = Math.Floor(minValue / markerInterval) * markerInterval; scaleEndValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; firstMarkerValue = scaleStartValue; lastMarkerValue = scaleEndValue; noOfMarkers = (int)((lastMarkerValue - firstMarkerValue) / markerInterval) + 1; } else { scaleStartValue = minValue; scaleEndValue = maxValue; firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; if (firstMarkerValue < minValue) firstMarkerValue += markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; if (lastMarkerValue > maxValue) lastMarkerValue -= markerInterval; noOfMarkers = (int)((lastMarkerValue - firstMarkerValue) / markerInterval) + 1; } } } /// /// Times are represented by seconds /// [Serializable] public class TimeScaleCreator : ScaleCreatorBase { // marker intervals static readonly double[] VALID_MARKER_INTERVALS = new double[] { 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2 , 5 , 15 , 30 , 1 * 60, 2 * 60, 5 * 60, 15 * 60, 30 * 60, 1 * 3600, 2 * 3600, 6 * 3600, 12 * 3600, 24 * 3600 }; public TimeScaleCreator(double minValue, double maxValue, int maxNoOfMarkers, bool adjustStartAndEndValues) { if (maxNoOfMarkers < 2) maxNoOfMarkers = 2; double intervalLength = Math.Abs(maxValue - minValue); if (intervalLength == 0) intervalLength = double.Epsilon; double minMarkerInterval = intervalLength / (maxNoOfMarkers - 1); markerInterval = VALID_MARKER_INTERVALS[VALID_MARKER_INTERVALS.Length - 1]; foreach (double mi in VALID_MARKER_INTERVALS) { if (minMarkerInterval < mi) { markerInterval = mi; break; } } if (adjustStartAndEndValues) { scaleStartValue = Math.Floor(minValue / markerInterval) * markerInterval; scaleEndValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; firstMarkerValue = scaleStartValue; lastMarkerValue = scaleEndValue; noOfMarkers = (int)((lastMarkerValue - firstMarkerValue) / markerInterval) + 1; } else { scaleStartValue = minValue; scaleEndValue = maxValue; firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; if (firstMarkerValue < minValue) firstMarkerValue += markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; if (lastMarkerValue > maxValue) lastMarkerValue -= markerInterval; noOfMarkers = (int)((lastMarkerValue - firstMarkerValue) / markerInterval) + 1; } } } [Serializable] public class DoubleScaleCreator : ScaleCreatorBase { // use 10^n * 1, 2, or 5 as marker intervals public DoubleScaleCreator(double minValue, double maxValue, int maxNoOfMarkers, bool adjustStartAndEndValues) { if (maxNoOfMarkers < 2) maxNoOfMarkers = 2; double intervalLength = Math.Abs(maxValue - minValue); if (intervalLength == 0) intervalLength = double.Epsilon; double minMarkerInterval = intervalLength / (maxNoOfMarkers - 1); double log10 = Math.Log10(minMarkerInterval); int n = (int)Math.Floor(log10); double scaledMinMarkerInterval = minMarkerInterval / Math.Pow(10, n); // 1 <= scaledMinMarkerInterval < 10 if (scaledMinMarkerInterval <= 2){ markerInterval = 2 * Math.Pow(10, n); } else if (scaledMinMarkerInterval <= 5) { markerInterval = 5 * Math.Pow(10, n); } else { markerInterval = 10 * Math.Pow(10, n); } if (adjustStartAndEndValues) { scaleStartValue = Math.Floor(minValue / markerInterval) * markerInterval; scaleEndValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; firstMarkerValue = scaleStartValue; lastMarkerValue = scaleEndValue; noOfMarkers = (int)((lastMarkerValue - firstMarkerValue) / markerInterval) + 1; } else { scaleStartValue = minValue; scaleEndValue = maxValue; firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; if (firstMarkerValue < minValue) firstMarkerValue += markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; if (lastMarkerValue > maxValue) lastMarkerValue -= markerInterval; noOfMarkers = (int)((lastMarkerValue - firstMarkerValue) / markerInterval) + 1; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/ParameterizedLocation.cs000066400000000000000000000075421446222606700307750ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities { /// /// Class for representing a location on a route relative to the indexes of the segments and waypoints. /// [Serializable] public class ParameterizedLocation : IComparable { private int segmentIndex; private double value; public ParameterizedLocation(int segmentIndex, double value) { this.segmentIndex = segmentIndex; this.value = value; } public ParameterizedLocation(ParameterizedLocation pl) { segmentIndex = pl.segmentIndex; value = pl.value; } public int SegmentIndex { get { return segmentIndex; } set { segmentIndex = value; } } public double Value { get { return value; } set { this.value = value; } } public int CompareTo(ParameterizedLocation other) { int indexSign = Math.Sign(segmentIndex - other.SegmentIndex); if (indexSign != 0) return indexSign; return Math.Sign(value - other.Value); } public override bool Equals(object obj) { if (!(obj is ParameterizedLocation)) return false; return this == (ParameterizedLocation)obj; } public override int GetHashCode() { unchecked { return (SegmentIndex.GetHashCode() * 397) ^ Value.GetHashCode(); } } public static bool operator <(ParameterizedLocation pl0, ParameterizedLocation pl1) { return pl0.CompareTo(pl1) < 0; } public static bool operator <=(ParameterizedLocation pl0, ParameterizedLocation pl1) { return pl0.CompareTo(pl1) <= 0; } public static bool operator >(ParameterizedLocation pl0, ParameterizedLocation pl1) { return pl0.CompareTo(pl1) > 0; } public static bool operator >=(ParameterizedLocation pl0, ParameterizedLocation pl1) { return pl0.CompareTo(pl1) >= 0; } public static bool operator ==(ParameterizedLocation pl0, ParameterizedLocation pl1) { if ((object)pl0 == null && (object)pl1 == null) return true; if ((object)pl0 == null || (object)pl1 == null) return false; return pl0.CompareTo(pl1) == 0; } public static bool operator !=(ParameterizedLocation pl0, ParameterizedLocation pl1) { return !(pl0 == pl1); } public static ParameterizedLocation operator -(ParameterizedLocation pl0, ParameterizedLocation pl1) { if (pl0 <= pl1) { return new ParameterizedLocation(0, 0); } else if (pl0.SegmentIndex == pl1.SegmentIndex) { return new ParameterizedLocation(0, pl0.Value - pl1.Value); } else { return new ParameterizedLocation(pl0.SegmentIndex - pl1.SegmentIndex, pl0.Value); } } public static ParameterizedLocation operator ++(ParameterizedLocation pl) { return new ParameterizedLocation(pl.segmentIndex, Math.Floor(pl.value + 1)); } public ParameterizedLocation Floor() { return new ParameterizedLocation(segmentIndex, Math.Floor(value)); } public ParameterizedLocation Ceiling() { return new ParameterizedLocation(segmentIndex, Math.Ceiling(value)); } /// /// Decides whether this parameterized location has a waypoint, i e the value part is an integer /// public bool IsNode { get { return (value == Math.Floor(value)); } } public static ParameterizedLocation Start { get { return new ParameterizedLocation(0,0); } } public override string ToString() { return segmentIndex + ", " + value; } public enum Direction { Backward, Forward } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Properties/000077500000000000000000000000001446222606700263055ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Properties/AssemblyInfo.cs000066400000000000000000000026551446222606700312370ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.BusinessEntities")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.BusinessEntities")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("5d0cad91-85e4-4833-b40a-8098defd9892")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyVersion("2.5")] [assembly: AssemblyFileVersion("2.5")] quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Properties/Settings.Designer.cs000066400000000000000000000045311446222606700321760ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.BusinessEntities.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)] [global::System.Configuration.DefaultSettingValueAttribute("http://www.obasen.nu/winsplits/webservices/WebServices.asmx")] public string QuickRoute_BusinessEntities_WinSplitsWebService_WebServices { get { return ((string)(this["QuickRoute_BusinessEntities_WinSplitsWebService_WebServices"])); } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)] [global::System.Configuration.DefaultSettingValueAttribute("http://bestik.cz/vysledky/webservice.php")] public string QuickRoute_BusinessEntities_CzechSplitsWebService_ResultsDBService { get { return ((string)(this["QuickRoute_BusinessEntities_CzechSplitsWebService_ResultsDBService"])); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Properties/Settings.settings000066400000000000000000000014221446222606700316660ustar00rootroot00000000000000 http://www.obasen.nu/winsplits/webservices/WebServices.asmx http://bestik.cz/vysledky/webservice.php quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/QuickRoute.BusinessEntities.csproj000066400000000000000000000634671446222606700330050ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61} Library Properties QuickRoute.BusinessEntities QuickRoute.BusinessEntities v4.5 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt 4 false bin\x86\Release\ TRACE true pdbonly x86 prompt 4 log4net Form ExportImageSizeAndQualitySelector.cs Form ExportImageSizeSelector.cs Form PersonSessionSelector.cs Form SessionSelector.cs True True Settings.settings gpx1.1.xsd True True Reference.map True True Reference.map gpx1.1.xsd SettingsSingleFileGenerator Settings.Designer.cs Reference.map Reference.map Reference.map MSDiscoCodeGenerator Reference.cs Reference.map Reference.map Reference.map MSDiscoCodeGenerator Reference.cs Reference.map ExportImageSizeAndQualitySelector.cs ExportImageSizeAndQualitySelector.cs Designer ExportImageSizeAndQualitySelector.cs Designer ExportImageSizeAndQualitySelector.cs Designer ExportImageSizeAndQualitySelector.cs Designer ExportImageSizeAndQualitySelector.cs Designer ExportImageSizeAndQualitySelector.cs Designer ExportImageSizeSelector.cs ExportImageSizeSelector.cs Designer ExportImageSizeSelector.cs Designer ExportImageSizeSelector.cs Designer ExportImageSizeSelector.cs Designer ExportImageSizeSelector.cs Designer ExportImageSizeSelector.cs Designer PersonSessionSelector.cs Designer PersonSessionSelector.cs Designer PersonSessionSelector.cs Designer PersonSessionSelector.cs Designer PersonSessionSelector.cs Designer PersonSessionSelector.cs Designer SessionSelector.cs SessionSelector.cs Designer SessionSelector.cs Designer SessionSelector.cs Designer SessionSelector.cs Designer SessionSelector.cs Designer SessionSelector.cs Designer {FFEC4820-9B6B-47E9-8594-B71A52081C1E} GarminUSBReader {81633CC3-9C5E-4C93-A9A6-876F6AE40883} GlobalSatGH615MReader {E91D684B-2DD8-4C50-8111-1940BFB427EE} JJConnectRegistratorSEReader {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E} QuickRoute.Common {2854A1FB-52F7-4197-A24E-E9977FD21563} QuickRoute.Resources {5821977D-AC2C-4912-BCD0-6E6B1A756167} Wintellect.PowerCollections {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E} ExifLibrary {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} ICSharpCode.SharpZLib Designer Designer Designer Designer Designer Designer Designer Designer Dynamic Web References\CzechSplitsWebService\ http://bestik.cz/vysledky/webservice.php%3fwsdl Settings QuickRoute_BusinessEntities_CzechSplitsWebService_ResultsDBService Dynamic Web References\WinSplitsWebService\ http://www.obasen.nu/winsplits/webservices/WebServices.asmx Settings QuickRoute_BusinessEntities_WinSplitsWebService_WebServices quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/QuickRouteJpegExtensionData.cs000066400000000000000000000725541446222606700321050ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text; using QuickRoute.BusinessEntities.Exporters; namespace QuickRoute.BusinessEntities { public class QuickRouteJpegExtensionData { private static readonly byte[] quickRouteIdentifier = new byte[] { 0x51, 0x75, 0x69, 0x63, 0x6b, 0x52, 0x6f, 0x75, 0x74, 0x65 }; private const string currentVersion = "1.0.0.0"; public string Version { get; set; } public LongLat[] MapCornerPositions { get; set; } public LongLat[] ImageCornerPositions { get; set; } public Rectangle MapLocationAndSizeInPixels { get; set; } public SessionCollection Sessions { get; set; } public double PercentualSize { get; set; } public static QuickRouteJpegExtensionData FromQuickRouteDocument(Document document) { var data = new QuickRouteJpegExtensionData {Version = currentVersion, Sessions = document.Sessions, PercentualSize = 1}; return data; } public static QuickRouteJpegExtensionData FromQuickRouteDocument(Document document, Rectangle imageBounds, Rectangle mapBounds, double percentualSize) { return FromQuickRouteDocument(document, document.Sessions, imageBounds, mapBounds, percentualSize); } public static QuickRouteJpegExtensionData FromQuickRouteDocument(Document document, SessionCollection sessions, Rectangle imageBounds, Rectangle mapBounds, double percentualSize) { var data = new QuickRouteJpegExtensionData { Version = currentVersion, ImageCornerPositions = document.GetImageCornersLongLat(imageBounds, mapBounds, percentualSize), MapCornerPositions = document.GetMapCornersLongLat(), MapLocationAndSizeInPixels = mapBounds, Sessions = sessions, PercentualSize = percentualSize }; return data; } public static QuickRouteJpegExtensionData FromImageExporter(ImageExporter exporter) { var data = new QuickRouteJpegExtensionData { Version = currentVersion, ImageCornerPositions = exporter.Document.GetImageCornersLongLat(exporter.ImageBounds, exporter.MapBounds, exporter.Properties.PercentualSize), MapCornerPositions = exporter.Document.GetMapCornersLongLat(), MapLocationAndSizeInPixels = exporter.MapBounds, Sessions = exporter.Sessions, PercentualSize = exporter.Properties.PercentualSize }; return data; } /// /// Creates a QuickRouteJpegExtensionData object from a stream containing a byte array with image data. /// /// A stream containing the byte array with data /// public static QuickRouteJpegExtensionData FromStream(Stream stream) { var edStream = new MemoryStream(); // find APP0 QuickRoute marker var buffer = new byte[2]; stream.Read(buffer, 0, 2); if (buffer[0] == 0xff && buffer[1] == 0xd8) //SOI { // try to find QuickRoute Jpeg Extension Data block while (stream.Position < stream.Length) { stream.Read(buffer, 0, 2); if (buffer[0] != 0xff) break; // we have reached image data if (buffer[1] == 0xe0) // APP0 { // found app0 marker, read length of block stream.Read(buffer, 0, 2); var length = buffer[1] + 256 * buffer[0]; // little-endian if (length >= 2 + quickRouteIdentifier.Length) { var identifier = new byte[quickRouteIdentifier.Length]; stream.Read(identifier, 0, quickRouteIdentifier.Length); var equal = true; for (var i = 0; i < quickRouteIdentifier.Length; i++) { if (identifier[i] != quickRouteIdentifier[i]) { equal = false; break; } } if (equal) { var block = new byte[length - 2 - quickRouteIdentifier.Length]; stream.Read(block, 0, block.Length); edStream.Write(block, 0, block.Length); } else { stream.Position += length - 2 - quickRouteIdentifier.Length; if (edStream.Length > 0) break; } } else { stream.Position += length - 2; if (edStream.Length > 0) break; } } else { if (edStream.Length > 0) break; } } } return edStream.Length > 0 ? ParseStream(edStream) : null; } /// /// Creates a QuickRouteJpegExtensionData object from a jpeg file /// /// The file name of the jpeg file /// public static QuickRouteJpegExtensionData FromJpegFile(string fileName) { var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read); var ed = FromStream(stream); stream.Close(); stream.Dispose(); return ed; } private static QuickRouteJpegExtensionData ParseStream(Stream stream) { var data = new QuickRouteJpegExtensionData {PercentualSize = 1}; stream.Position = 0; var edReader = new BinaryReader(stream); while (stream.Position < stream.Length) { var tag = (Tags)edReader.ReadByte(); var tagLength = Convert.ToInt32(edReader.ReadUInt32()); switch (tag) { case Tags.Version: data.Version = edReader.ReadByte() + "." + edReader.ReadByte() + "." + edReader.ReadByte() + "." + edReader.ReadByte(); break; case Tags.MapCornerPositions: data.MapCornerPositions = new LongLat[4]; data.MapCornerPositions[0] = ReadLongLat(edReader); data.MapCornerPositions[1] = ReadLongLat(edReader); data.MapCornerPositions[2] = ReadLongLat(edReader); data.MapCornerPositions[3] = ReadLongLat(edReader); break; case Tags.ImageCornerPositions: data.ImageCornerPositions = new LongLat[4]; data.ImageCornerPositions[0] = ReadLongLat(edReader); data.ImageCornerPositions[1] = ReadLongLat(edReader); data.ImageCornerPositions[2] = ReadLongLat(edReader); data.ImageCornerPositions[3] = ReadLongLat(edReader); break; case Tags.MapLocationAndSizeInPixels: var rect = new Rectangle { X = edReader.ReadUInt16(), Y = edReader.ReadUInt16(), Width = edReader.ReadUInt16(), Height = edReader.ReadUInt16() }; data.MapLocationAndSizeInPixels = rect; break; case Tags.Sessions: data.Sessions = ReadSessions(edReader); break; default: edReader.BaseStream.Position += tagLength; break; } } return data; } /// /// Places this object's data into a jpeg stream. /// /// The original stream where the image resides /// The stream to be returned, including the embedded data public void EmbedDataInImage(Stream sourceImageStream, Stream targetImageStream) { var buffer = new byte[2]; sourceImageStream.Position = 0; sourceImageStream.Read(buffer, 0, 2); if (buffer[0] == 0xff && buffer[1] == 0xd8) //SOI { sourceImageStream.Read(buffer, 0, 2); if (buffer[0] == 0xff && buffer[1] == 0xe0) // APP0 { // read first APP0 block and write it to the target stream sourceImageStream.Read(buffer, 0, 2); var length = buffer[1] + 256 * buffer[0]; // little-endian sourceImageStream.Position += length - 2; int pos = Convert.ToInt32(sourceImageStream.Position); var tmpBuffer = new byte[pos]; sourceImageStream.Position = 0; sourceImageStream.Read(tmpBuffer, 0, pos); targetImageStream.Write(tmpBuffer, 0, pos); // write the QuickRoute Jpeg Extension Data to the target stream var data = CreateQuickRouteJpegExtensionData(); var maxBlockLength = 65523; length = data.Length; var lengthLeft = length; do // we may need to use several blocks { var blockLength = Math.Min(lengthLeft, maxBlockLength); targetImageStream.Write(new byte[] { 0xff, 0xe0 }, 0, 2); targetImageStream.Write(new byte[] { Convert.ToByte((blockLength + 12) / 256), Convert.ToByte((blockLength + 12) % 256) }, 0, 2); targetImageStream.Write(quickRouteIdentifier, 0, quickRouteIdentifier.Length); targetImageStream.Write(data, length - lengthLeft, blockLength); lengthLeft -= blockLength; } while (lengthLeft > 0); // write remaining blocks, but exclude any QuickRoute Jpeg Extension Data blocks while (sourceImageStream.Position < sourceImageStream.Length) { // TODO: fetch APP1 and other blocks that have a specified length as well sourceImageStream.Read(buffer, 0, 2); if (!(buffer[0] == 0xff && buffer[1] == 0xe0)) { // we have reached start of image data, just write it to target stream sourceImageStream.Position -= 2; tmpBuffer = new byte[sourceImageStream.Length - sourceImageStream.Position]; sourceImageStream.Read(tmpBuffer, 0, tmpBuffer.Length); targetImageStream.Write(tmpBuffer, 0, tmpBuffer.Length); break; } else { // found app0 marker, read length of block var isQuickRouteBlock = true; sourceImageStream.Read(buffer, 0, 2); length = buffer[1] + 256 * buffer[0]; // little-endian if (length >= 2 + quickRouteIdentifier.Length) { var identifier = new byte[quickRouteIdentifier.Length]; sourceImageStream.Read(identifier, 0, quickRouteIdentifier.Length); for (var i = 0; i < quickRouteIdentifier.Length; i++) { if (identifier[i] != quickRouteIdentifier[i]) { isQuickRouteBlock = false; break; } } if (isQuickRouteBlock) { sourceImageStream.Position += length - 2 - quickRouteIdentifier.Length; } else { sourceImageStream.Position -= 2 + 2 + quickRouteIdentifier.Length; } } else { sourceImageStream.Position -= 4; } if (!isQuickRouteBlock) { tmpBuffer = new byte[length + 2]; sourceImageStream.Read(tmpBuffer, 0, tmpBuffer.Length); targetImageStream.Write(tmpBuffer, 0, tmpBuffer.Length); } } } } } } /// /// Exports the QuickRouteJpegExtensionData object to a GPX file. /// /// The stream to export the gpx file to.backbuffer public void ToGpx(Stream stream) { var gpxExporter = new GpxExporter(Sessions[0], stream); gpxExporter.Export(); } private static SessionCollection ReadSessions(BinaryReader reader) { var sessions = new SessionCollection(); var sessionCount = reader.ReadUInt32(); for (int i = 0; i < sessionCount; i++) { var tag = (Tags)reader.ReadByte(); var tagLength = Convert.ToInt32(reader.ReadUInt32()); switch (tag) { case Tags.Session: sessions.Add(ReadSession(reader, tagLength)); break; default: reader.BaseStream.Position += tagLength; break; } } return sessions; } private static Session ReadSession(BinaryReader reader, int length) { List mapReadingList = null; Route route = null; HandleCollection handles = null; LongLat projectionOrigin = null; LapCollection laps = null; var startPos = reader.BaseStream.Position; SessionInfo sessionInfo = null; DateTime lastTime; while (reader.BaseStream.Position < startPos + length) { var tag = (Tags)reader.ReadByte(); var tagLength = Convert.ToInt32(reader.ReadUInt32()); switch (tag) { case Tags.Route: var attributes = reader.ReadUInt16(); var extraWaypointAttributesLength = reader.ReadUInt16(); var routeSegments = new List(); var segmentCount = reader.ReadUInt32(); lastTime = DateTime.MinValue; for (var i = 0; i < segmentCount; i++) { var rs = new RouteSegment(); var waypointCount = reader.ReadUInt32(); for (var j = 0; j < waypointCount; j++) { var w = new Waypoint(); w.LongLat = ReadLongLat(reader); w.Time = ReadTime(lastTime, reader); lastTime = w.Time; if ((attributes & (UInt16)WaypointAttribute.HeartRate) == (UInt16)WaypointAttribute.HeartRate) { w.HeartRate = reader.ReadByte(); } if ((attributes & (UInt16)WaypointAttribute.Altitude) == (UInt16)WaypointAttribute.Altitude) { w.Altitude = reader.ReadInt16(); } reader.BaseStream.Position += extraWaypointAttributesLength; // for forward compatibility rs.Waypoints.Add(w); } routeSegments.Add(rs); } route = new Route(routeSegments); break; case Tags.Handles: handles = new HandleCollection(); var handleCount = reader.ReadUInt32(); var handleMarkerDrawer = SessionSettings.CreateDefaultMarkerDrawers()[MarkerType.Handle]; for (var i = 0; i < handleCount; i++) { var handle = new Handle(); // transformation matrix handle.TransformationMatrix = new GeneralMatrix(3, 3); for (var j = 0; j < 9; j++) { handle.TransformationMatrix.SetElement(j / 3, j % 3, reader.ReadDouble()); } // parameterized location var segmentIndex = Convert.ToInt32(reader.ReadUInt32()); var value = reader.ReadDouble(); handle.ParameterizedLocation = new ParameterizedLocation(segmentIndex, value); // pixel location handle.Location = new PointD(reader.ReadDouble(), reader.ReadDouble()); // type handle.Type = (Handle.HandleType)reader.ReadInt16(); // use default marker drawer handle.MarkerDrawer = handleMarkerDrawer; handles.Add(handle); } break; case Tags.ProjectionOrigin: projectionOrigin = ReadLongLat(reader); break; case Tags.Laps: laps = new LapCollection(); var lapCount = reader.ReadUInt32(); for (var i = 0; i < lapCount; i++) { var lap = new Lap(); lap.Time = DateTime.FromBinary(reader.ReadInt64()); lap.LapType = (LapType)reader.ReadByte(); laps.Add(lap); } break; case Tags.SessionInfo: sessionInfo = new SessionInfo(); sessionInfo.Person = new SessionPerson(); sessionInfo.Person.Name = ReadString(reader); sessionInfo.Person.Club = ReadString(reader); sessionInfo.Person.Id = reader.ReadUInt32(); sessionInfo.Description = ReadString(reader); // when more fields are added, check so that tagLength is not passed break; case Tags.MapReadingInfo: mapReadingList = new List(); lastTime = DateTime.MinValue; var startPosition = reader.BaseStream.Position; while (reader.BaseStream.Position - startPosition < tagLength) { var time = ReadTime(lastTime, reader); mapReadingList.Add(time); lastTime = time; } break; default: reader.BaseStream.Position += tagLength; break; } } if(mapReadingList != null && route != null) route = new Route(Route.AddMapReadingWaypoints(route.Segments, mapReadingList)); var session = new Session( route, laps, new Size(0, 0), handles != null && handles.Count > 0 ? handles[0].TransformationMatrix : null, projectionOrigin, new SessionSettings()); if (handles != null) { foreach (var h in handles) { session.AddHandle(h); } } if (sessionInfo != null) session.SessionInfo = sessionInfo; return session; } private static DateTime ReadTime(DateTime lastTime, BinaryReader reader) { var timeType = (TimeType)reader.ReadByte(); switch (timeType) { case TimeType.Full: return DateTime.FromBinary(reader.ReadInt64()); default: //case TimeType.Delta: return lastTime.AddSeconds((double)reader.ReadUInt16() / 1000); } } private static LongLat ReadLongLat(BinaryReader br) { var longLat = new LongLat(); longLat.Longitude = (double)br.ReadInt32() / 3600000; longLat.Latitude = (double)br.ReadInt32() / 3600000; return longLat; } private static void WriteLongLat(LongLat longLat, BinaryWriter bw) { bw.Write(Convert.ToInt32(longLat.Longitude * 3600000)); bw.Write(Convert.ToInt32(longLat.Latitude * 3600000)); } private byte[] CreateQuickRouteJpegExtensionData() { var stream = new MemoryStream(); var writer = new BinaryWriter(stream); // version, 4 bytes writer.Write((byte)Tags.Version); writer.Write((UInt32)4); writer.Write(new byte[] { 1, 0, 0, 0 }); // image corners writer.Write((byte)Tags.ImageCornerPositions); writer.Write((UInt32)32); foreach (var corner in ImageCornerPositions) { WriteLongLat(corner, writer); } // map corners writer.Write((byte)Tags.MapCornerPositions); writer.Write((UInt32)32); foreach (var corner in MapCornerPositions) { WriteLongLat(corner, writer); } // bounds of the map portion of the image writer.Write((byte)Tags.MapLocationAndSizeInPixels); writer.Write((UInt32)8); writer.Write((UInt16)MapLocationAndSizeInPixels.X); writer.Write((UInt16)MapLocationAndSizeInPixels.Y); writer.Write((UInt16)MapLocationAndSizeInPixels.Width); writer.Write((UInt16)MapLocationAndSizeInPixels.Height); // sessions var sessionsStream = new MemoryStream(); var sessionsWriter = new BinaryWriter(sessionsStream); sessionsWriter.Write((UInt32)Sessions.Count); foreach (var session in Sessions) { var sessionData = CreateSessionData(session); sessionsWriter.Write((byte)Tags.Session); sessionsWriter.Write((UInt32)sessionData.Length); sessionsWriter.Write(sessionData); } writer.Write((byte)Tags.Sessions); writer.Write((UInt32)sessionsStream.Length); writer.Write(sessionsStream.ToArray()); sessionsWriter.Close(); sessionsStream.Close(); sessionsStream.Dispose(); var data = stream.ToArray(); writer.Close(); stream.Close(); stream.Dispose(); return data; } private byte[] CreateSessionData(Session session) { var sessionStream = new MemoryStream(); var sessionWriter = new BinaryWriter(sessionStream); // route var routeStream = new MemoryStream(); var routeWriter = new BinaryWriter(routeStream); // which attributes to include for each waypoint var attributes = WaypointAttribute.Position | WaypointAttribute.Time; if (session.Route.ContainsWaypointAttribute(BusinessEntities.WaypointAttribute.HeartRate)) attributes |= WaypointAttribute.HeartRate; if (session.Route.ContainsWaypointAttribute(BusinessEntities.WaypointAttribute.Altitude)) attributes |= WaypointAttribute.Altitude; routeWriter.Write((UInt16)attributes); // any extra length in bytes for future elements for each waypoint routeWriter.Write((UInt16)0); // number of route segments in this route routeWriter.Write((UInt32)session.Route.Segments.Count); foreach (var routeSegment in session.Route.Segments) { // number of waypoints in this route segment routeWriter.Write((UInt32)routeSegment.Waypoints.Count); var lastTime = DateTime.MinValue; foreach (var waypoint in routeSegment.Waypoints) { // position: 8 bytes WriteLongLat(waypoint.LongLat, routeWriter); // time and tome type: 1 + 2-8 bytes WriteTimeTypeAndTime(waypoint.Time, lastTime, routeWriter); lastTime = waypoint.Time; // heart rate: 1 byte if ((((UInt16)attributes) & ((UInt16)WaypointAttribute.HeartRate)) == (UInt16)WaypointAttribute.HeartRate) { routeWriter.Write((byte)(waypoint.HeartRate.HasValue ? Math.Min(Math.Max(waypoint.HeartRate.Value, byte.MinValue), byte.MaxValue) : byte.MinValue)); } // altitude: 2 bytes if ((((UInt16)attributes) & ((UInt16)WaypointAttribute.Altitude)) == (UInt16)WaypointAttribute.Altitude) { routeWriter.Write((Int16)(waypoint.Altitude.HasValue ? Math.Min(Math.Max(waypoint.Altitude.Value, Int16.MinValue), Int16.MaxValue) : 0)); } } } sessionWriter.Write((byte)Tags.Route); sessionWriter.Write((UInt32)routeStream.Length); sessionWriter.Write(routeStream.ToArray()); routeWriter.Close(); routeStream.Close(); routeStream.Dispose(); // handles // TODO: adjust for zoom var handleStream = new MemoryStream(); var handleWriter = new BinaryWriter(handleStream); handleWriter.Write((UInt32)session.Handles.Length); foreach (var handle in session.Handles) { // transformation matrix var scaleMatrix = new GeneralMatrix(new[] {PercentualSize, 0, 0, 0, PercentualSize, 0, 0, 0, 1}, 3); var scaledTM = scaleMatrix*handle.TransformationMatrix; for (var i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) { handleWriter.Write(scaledTM.GetElement(i, j)); } } // parameterized location handleWriter.Write((UInt32)handle.ParameterizedLocation.SegmentIndex); handleWriter.Write(handle.ParameterizedLocation.Value); // pixel location handleWriter.Write(PercentualSize * handle.Location.X); handleWriter.Write(PercentualSize * handle.Location.Y); // type handleWriter.Write((Int16)handle.Type); } sessionWriter.Write((byte)Tags.Handles); sessionWriter.Write((UInt32)handleStream.Length); sessionWriter.Write(handleStream.ToArray()); handleWriter.Close(); handleStream.Close(); handleStream.Dispose(); // projection origin sessionWriter.Write((byte)Tags.ProjectionOrigin); sessionWriter.Write((UInt32)8); WriteLongLat(session.ProjectionOrigin, sessionWriter); // laps var lapStream = new MemoryStream(); var lapWriter = new BinaryWriter(lapStream); lapWriter.Write((UInt32)session.Laps.Count); foreach (var lap in session.Laps) { // time lapWriter.Write(lap.Time.ToUniversalTime().ToBinary()); // type lapWriter.Write((byte)lap.LapType); } sessionWriter.Write((byte)Tags.Laps); sessionWriter.Write((UInt32)lapStream.Length); sessionWriter.Write(lapStream.ToArray()); lapWriter.Close(); lapStream.Close(); lapStream.Dispose(); // session info var sessionInfoStream = new MemoryStream(); var sessionInfoWriter = new BinaryWriter(sessionInfoStream); // never change the order or remove field that has already been added! WriteString(session.SessionInfo.Person.Name, sessionInfoWriter); WriteString(session.SessionInfo.Person.Club, sessionInfoWriter); sessionInfoWriter.Write(session.SessionInfo.Person.Id); WriteString(session.SessionInfo.Description, sessionInfoWriter); sessionWriter.Write((byte)Tags.SessionInfo); sessionWriter.Write((UInt32)sessionInfoStream.Length); sessionWriter.Write(sessionInfoStream.ToArray()); sessionInfoWriter.Close(); sessionInfoStream.Close(); sessionInfoStream.Dispose(); // map reading info var mapReadingsList = session.Route.GetMapReadingsList(); if(mapReadingsList != null) { var mapReadingInfoStream = new MemoryStream(); var mapReadingInfoWriter = new BinaryWriter(mapReadingInfoStream); var lastTime = DateTime.MinValue; foreach (var mapReading in mapReadingsList) { WriteTimeTypeAndTime(mapReading, lastTime, mapReadingInfoWriter); } sessionWriter.Write((byte)Tags.MapReadingInfo); sessionWriter.Write((UInt32)mapReadingInfoStream.Length); sessionWriter.Write(mapReadingInfoStream.ToArray()); mapReadingInfoWriter.Close(); mapReadingInfoStream.Close(); mapReadingInfoStream.Dispose(); } var data = sessionStream.ToArray(); sessionWriter.Close(); sessionStream.Close(); sessionStream.Dispose(); return data; } private static void WriteTimeTypeAndTime(DateTime time, DateTime lastTime, BinaryWriter writer) { var diff = time.Subtract(lastTime).Ticks / 10000; // milliseconds var type = (diff > UInt16.MaxValue ? TimeType.Full : TimeType.Delta); writer.Write((byte)type); // time: 2-8 bytes switch (type) { case TimeType.Full: writer.Write(time.ToUniversalTime().ToBinary()); break; case TimeType.Delta: writer.Write((UInt16)diff); break; } } private static void WriteString(string s, BinaryWriter writer) { var bytes = new UTF8Encoding().GetBytes(s); var length = Math.Min(bytes.Length, 65535); var bytesToWrite = new byte[length]; Array.Copy(bytes, bytesToWrite, length); writer.Write((UInt16)length); writer.Write(bytesToWrite); } private static byte[] GetStringBytes(string s) { var bytes = new UTF8Encoding().GetBytes(s); var length = Math.Min(bytes.Length, 65535); var bytesToWrite = new byte[length]; Array.Copy(bytes, bytesToWrite, length); return bytesToWrite; } private static string ReadString(BinaryReader reader) { var length = reader.ReadUInt16(); return new UTF8Encoding().GetString(reader.ReadBytes(length)); } private enum Tags : byte { Version = 1, /// /// The longitude/latitude coordinates of the corners of the map image (excluding borders and header) /// MapCornerPositions = 2, /// /// The longitude/latitude coordinates of the corners of the map image (including borders and header) /// ImageCornerPositions = 3, /// /// The pixel location and size of the the map image (excluding borders and header) /// MapLocationAndSizeInPixels = 4, Sessions = 5, Session = 6, Route = 7, Handles = 8, ProjectionOrigin = 9, Laps = 10, SessionInfo = 11, MapReadingInfo = 12 } private enum TimeType : byte { Full = 0, Delta = 1 } [Flags] private enum WaypointAttribute { Position = 1, Time = 2, HeartRate = 4, Altitude = 8 } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Route.cs000066400000000000000000002615131446222606700256060ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Runtime.Serialization; using Wintellect.PowerCollections; namespace QuickRoute.BusinessEntities { [Serializable] public class Route : ISerializable { private readonly List segments = new List(); private OrderedBag lapTimes; private Interval speedSmoothingInterval = new Interval(0, 0); // for backwards compatibility only, do not use in new code private Dictionary smoothingIntervals = SessionSettings.CreateDefaultSmoothingIntervals(); private bool suppressWaypointAttributeCalculation; [NonSerialized] private Dictionary waypointAttributeExists; public Route(List segments) { this.segments = segments; } protected Route(SerializationInfo info, StreamingContext context) { segments = (List)(info.GetValue("segments", typeof(List))); } #region ISerializable Members void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("segments", segments, typeof(List)); } #endregion #region Public properties public List Segments { get { return segments; } } public Dictionary SmoothingIntervals { get { if (smoothingIntervals == null) { smoothingIntervals = SessionSettings.CreateDefaultSmoothingIntervals(); smoothingIntervals[WaypointAttribute.Speed] = speedSmoothingInterval; smoothingIntervals[WaypointAttribute.Pace] = speedSmoothingInterval; } return smoothingIntervals; } set { smoothingIntervals = value; CalculateWaypointAttributes(true); } } public Waypoint FirstWaypoint { get { return segments.Count == 0 ? null : segments[0].Waypoints[0]; } } public Waypoint LastWaypoint { get { return segments.Count == 0 ? null : segments[segments.Count - 1].Waypoints[segments[segments.Count - 1].Waypoints.Count - 1]; } } public ParameterizedLocation FirstPL { get { return new ParameterizedLocation(0, 0); } } public ParameterizedLocation LastPL { get { return new ParameterizedLocation(segments.Count - 1, segments[segments.Count - 1].Waypoints.Count - 1); } } public OrderedBag LapTimes { get { return lapTimes; } set { lapTimes = value; } } public bool SuppressWaypointAttributeCalculation { get { return suppressWaypointAttributeCalculation; } set { suppressWaypointAttributeCalculation = value; } } #endregion #region Public methods public void Initialize() { CalculateWaypointAttributes(true); } public void EnsureUtcTimes() { foreach (var segment in segments) { foreach (var waypoint in segment.Waypoints) { waypoint.Time = waypoint.Time.ToUniversalTime(); } } } public LongLat CenterLongLat() { RectangleD boundingRectangle = BoundingRectangle(); return new LongLat(boundingRectangle.Center.X, boundingRectangle.Center.Y); } public RectangleD BoundingProjectedRectangle(LongLat projectionOrigin) { double minX = 0; double minY = 0; double maxX = 0; double maxY = 0; for (int i = 0; i < segments.Count; i++) { for (int j = 0; j < segments[i].Waypoints.Count; j++) { PointD projectedLocation = segments[i].Waypoints[j].LongLat.Project(projectionOrigin); if (projectedLocation.X < minX || (i == 0 && j == 0)) minX = projectedLocation.X; if (projectedLocation.Y < minY || (i == 0 && j == 0)) minY = projectedLocation.Y; if (projectedLocation.X > maxX || (i == 0 && j == 0)) maxX = projectedLocation.X; if (projectedLocation.Y > maxY || (i == 0 && j == 0)) maxY = projectedLocation.Y; } } return new RectangleD(new PointD(minX, minY), new SizeD(maxX - minX, maxY - minY)); } public RectangleD BoundingRectangle() { double minX = 0; double minY = 0; double maxX = 0; double maxY = 0; for (int i = 0; i < segments.Count; i++) { for (int j = 0; j < segments[i].Waypoints.Count; j++) { LongLat longLat = segments[i].Waypoints[j].LongLat; if (longLat.Longitude < minX || (i == 0 && j == 0)) minX = longLat.Longitude; if (longLat.Latitude < minY || (i == 0 && j == 0)) minY = longLat.Latitude; if (longLat.Longitude > maxX || (i == 0 && j == 0)) maxX = longLat.Longitude; if (longLat.Latitude > maxY || (i == 0 && j == 0)) maxY = longLat.Latitude; } } return new RectangleD(new PointD(minX, minY), new SizeD(maxX - minX, maxY - minY)); } public PointD GetProjectedLocationFromParameterizedLocation(ParameterizedLocation parameterizedLocation, LongLat projectionOrigin) { List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; if (parameterizedLocation.IsNode) return waypoints[(int)parameterizedLocation.Value].LongLat.Project(projectionOrigin); var i = (int)parameterizedLocation.Floor().Value; if (i >= waypoints.Count - 1) i = waypoints.Count - 2; if (waypoints.Count < 2) return waypoints[0].LongLat.Project(projectionOrigin); double d = parameterizedLocation.Value - i; PointD p0 = waypoints[i].LongLat.Project(projectionOrigin); PointD p1 = waypoints[i + 1].LongLat.Project(projectionOrigin); return new PointD(p0.X + d * (p1.X - p0.X), p0.Y + d * (p1.Y - p0.Y)); } public LongLat GetLocationFromParameterizedLocation(ParameterizedLocation parameterizedLocation) { List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; if (parameterizedLocation.IsNode) return waypoints[(int)parameterizedLocation.Value].LongLat; var i = (int)parameterizedLocation.Floor().Value; if (i >= waypoints.Count - 1) i = waypoints.Count - 2; if (waypoints.Count < 2) return waypoints[0].LongLat; double d = parameterizedLocation.Value - i; LongLat p0 = waypoints[i].LongLat; LongLat p1 = waypoints[i + 1].LongLat; return new LongLat(p0.Longitude + d * (p1.Longitude - p0.Longitude), p0.Latitude + d * (p1.Latitude - p0.Latitude)); } public DateTime GetTimeFromParameterizedLocation(ParameterizedLocation parameterizedLocation) { List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; if (parameterizedLocation.IsNode) return waypoints[(int)parameterizedLocation.Value].Time; var i = (int)parameterizedLocation.Floor().Value; if (i >= waypoints.Count - 1) i = waypoints.Count - 2; if (waypoints.Count < 2) return waypoints[0].Time; double d = parameterizedLocation.Value - i; DateTime dt0 = waypoints[i].Time; DateTime dt1 = waypoints[i + 1].Time; return new DateTime(dt0.Ticks + (long)(d * (dt1.Ticks - dt0.Ticks)), dt0.Kind); } public double? GetOriginalAttributeFromParameterizedLocation(WaypointAttribute attribute, ParameterizedLocation parameterizedLocation) { if (attribute != WaypointAttribute.HeartRate && attribute != WaypointAttribute.Altitude) throw new ArgumentException("The 'attribute' parameter must be either WaypointAttribute.HeartRate or WaypointAttribute.Altitude"); List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; if (parameterizedLocation.IsNode) return waypoints[(int)parameterizedLocation.Value].GetOriginalAttribute(attribute); var i = (int)parameterizedLocation.Floor().Value; if (i >= waypoints.Count - 1) i = waypoints.Count - 2; if (waypoints.Count < 2) return waypoints[0].GetOriginalAttribute(attribute); double d = parameterizedLocation.Value - i; var v0 = waypoints[i].GetOriginalAttribute(attribute); var v1 = waypoints[i + 1].GetOriginalAttribute(attribute); if (v0.HasValue && v1.HasValue) return v0 + d * (v1 - v0); return null; } public double? GetAttributeFromParameterizedLocation(WaypointAttribute attribute, ParameterizedLocation parameterizedLocation) { List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; if (parameterizedLocation.IsNode) { return waypoints[(int)parameterizedLocation.Value].Attributes.ContainsKey(attribute) ? waypoints[(int)parameterizedLocation.Value].Attributes[attribute] : null; } var i = (int)parameterizedLocation.Floor().Value; if (i >= waypoints.Count - 1) i = waypoints.Count - 2; if (waypoints.Count < 2) return waypoints[0].Attributes[attribute]; double d = parameterizedLocation.Value - i; return GetAttributeValueBetweenWaypoints(waypoints[i], waypoints[i + 1], d, attribute); } /// /// Relatively slow, use the three parameter overload if possible. /// /// /// public ParameterizedLocation GetParameterizedLocationFromTime(DateTime time) { return GetParameterizedLocationFromTime(time, false); } /// /// Relatively slow, use the three parameter overload if possible. /// /// /// If true, returns null if outside segments /// public ParameterizedLocation GetParameterizedLocationFromTime(DateTime time, bool strict) { if (time <= FirstWaypoint.Time) return FirstPL; if (time >= LastWaypoint.Time) return LastPL; for (int i = 0; i < segments.Count; i++) { RouteSegment segment = segments[i]; if (!(strict && (time < segment.FirstWaypoint.Time || time > segment.LastWaypoint.Time))) // don't look outside segment if in strict mode { if (time <= segment.FirstWaypoint.Time) return new ParameterizedLocation(i, 0); if (time <= segment.LastWaypoint.Time) { int lo = 0; int hi = segment.Waypoints.Count - 2; while (hi >= lo) { int mi = (lo + hi) / 2; if (time < segment.Waypoints[mi].Time) { hi = mi - 1; } else if (time > segment.Waypoints[mi + 1].Time) { lo = mi + 1; } else { var delta = segment.Waypoints[mi + 1].Time.Ticks - segment.Waypoints[mi].Time.Ticks; if (delta == 0) return new ParameterizedLocation(i, mi); return new ParameterizedLocation(i, mi + (double)(time.Ticks - segment.Waypoints[mi].Time.Ticks) / (segment.Waypoints[mi + 1].Time.Ticks - segment.Waypoints[mi].Time.Ticks)); } } } } } return null; } public ParameterizedLocation GetParameterizedLocationFromTime(DateTime time, ParameterizedLocation initialGuess, ParameterizedLocation.Direction direction) { if (time <= FirstWaypoint.Time) return FirstPL; if (time >= LastWaypoint.Time) return LastPL; if (initialGuess == null) return GetParameterizedLocationFromTime(time); ParameterizedLocation pl = new ParameterizedLocation(initialGuess).Floor(); if (direction == ParameterizedLocation.Direction.Forward) { ParameterizedLocation lastPL = LastPL; while (pl < lastPL) { var w2pl = new ParameterizedLocation(pl.SegmentIndex, (int)pl.Value + 1); if (!IsLastPLInSegment(w2pl)) { Waypoint w1 = segments[pl.SegmentIndex].Waypoints[(int)pl.Value]; Waypoint w2 = segments[w2pl.SegmentIndex].Waypoints[(int)w2pl.Value]; if (w2 != null && time >= w1.Time && time <= w2.Time) { if (w2.Time.Ticks == w1.Time.Ticks) return new ParameterizedLocation(pl.SegmentIndex, (int)pl.Value); return new ParameterizedLocation(pl.SegmentIndex, (int)pl.Value + (double)(time.Ticks - w1.Time.Ticks) / (w2.Time.Ticks - w1.Time.Ticks)); } } pl = GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } } else { ParameterizedLocation firstPL = FirstPL; while (pl > firstPL) { var w2pl = new ParameterizedLocation(pl.SegmentIndex, (int)pl.Value + 1); if (!IsLastPLInSegment(w2pl)) { Waypoint w1 = segments[pl.SegmentIndex].Waypoints[(int)pl.Value]; Waypoint w2 = segments[w2pl.SegmentIndex].Waypoints[(int)w2pl.Value]; if (w2 != null && time >= w1.Time && time <= w2.Time) { return new ParameterizedLocation(pl.SegmentIndex, (int)pl.Value + (double)(time.Ticks - w1.Time.Ticks) / (w2.Time.Ticks - w1.Time.Ticks)); } } pl = GetNextPLNode(pl, ParameterizedLocation.Direction.Backward); } } return GetParameterizedLocationFromTime(time); } /// /// Relatively slow. /// /// /// public ParameterizedLocation GetParameterizedLocationFromDistance(double distance) { if (distance <= FirstWaypoint.Attributes[WaypointAttribute.Distance].Value) return FirstPL; if (distance >= LastWaypoint.Attributes[WaypointAttribute.Distance].Value) return LastPL; for (int i = 0; i < segments.Count; i++) { RouteSegment segment = segments[i]; for (int j = 0; j < segment.Waypoints.Count - 1; j++) { if (distance >= segment.Waypoints[j].Attributes[WaypointAttribute.Distance].Value && distance <= segment.Waypoints[j + 1].Attributes[WaypointAttribute.Distance].Value) { return new ParameterizedLocation(i, j + (distance - segment.Waypoints[j].Attributes[WaypointAttribute.Distance].Value) / (segment.Waypoints[j + 1].Attributes[WaypointAttribute.Distance].Value - segment.Waypoints[j].Attributes[WaypointAttribute.Distance].Value)); } if (distance < segment.Waypoints[j].Attributes[WaypointAttribute.Distance].Value) { return new ParameterizedLocation(i, j); } } } return null; } /// /// Only to be used inside a route segment! /// /// /// /// /// public List GetEquallySpacedParameterizedLocations(DateTime startTime, DateTime endTime, TimeSpan interval) { return GetEquallySpacedParameterizedLocations(startTime, endTime, interval, new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc)); } /// /// Only to be used inside a route segment! /// /// /// /// /// /// public List GetEquallySpacedParameterizedLocations(DateTime startTime, DateTime endTime, TimeSpan interval, DateTime referenceTime) { decimal offset = Math.Ceiling(((decimal)startTime.Ticks - referenceTime.Ticks) / interval.Ticks); var time = new DateTime(Convert.ToInt64(referenceTime.Ticks + offset * interval.Ticks), startTime.Kind); var pls = new List(); ParameterizedLocation pl = GetParameterizedLocationFromTime(time); while (time <= endTime) { pls.Add(pl); time += interval; pl = GetParameterizedLocationFromTime(time, pl, ParameterizedLocation.Direction.Forward); } return pls; } /// /// Only to be used inside a route segment! /// /// /// /// /// public List GetEquallySpacedTimes(DateTime startTime, DateTime endTime, TimeSpan interval) { return GetEquallySpacedTimes(startTime, endTime, interval, new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc)); } /// /// Only to be used inside a route segment! /// /// /// /// /// /// public List GetEquallySpacedTimes(DateTime startTime, DateTime endTime, TimeSpan interval, DateTime referenceTime) { decimal offset = Math.Ceiling(((decimal)startTime.Ticks - referenceTime.Ticks) / interval.Ticks); var time = new DateTime(Convert.ToInt64(referenceTime.Ticks + offset * interval.Ticks), startTime.Kind); var times = new List(); while (time <= endTime) { times.Add(time); time += interval; } return times; } /// /// Only to be used inside a route segment! /// /// /// /// /// /// public List GetEquallySpacedWaypoints(DateTime startTime, DateTime endTime, TimeSpan interval, DateTime referenceTime) { decimal offset = Math.Ceiling(((decimal)startTime.Ticks - referenceTime.Ticks) / interval.Ticks); var time = new DateTime(Convert.ToInt64(referenceTime.Ticks + offset * interval.Ticks), startTime.Kind); List pls = GetEquallySpacedParameterizedLocations(startTime, endTime, interval, referenceTime); var waypoints = new List(); foreach (ParameterizedLocation pl in pls) { var w = CreateWaypointFromParameterizedLocation(pl); w.Time = time; // to prevent rounding errors waypoints.Add(w); time += interval; } return waypoints; } /// /// Only to be used inside a route segment! /// /// /// /// /// public List GetEquallySpacedWaypoints(DateTime startTime, DateTime endTime, TimeSpan interval) { return GetEquallySpacedWaypoints(startTime, endTime, interval, new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc)); } /// /// Calculates elapsed time, distance, direction and speed for all waypoints in the route. /// public void CalculateWaypointAttributes(bool routeChanged) { if (suppressWaypointAttributeCalculation) return; // first pass: location, elapsed time, distance, direction if (routeChanged) { double distance = 0; double elapsedTime = 0; for (int i = 0; i < segments.Count; i++) { for (int j = 0; j < segments[i].Waypoints.Count; j++) { Waypoint w = segments[i].Waypoints[j]; double deltaDistance = 0; double deltaTime = 0; w.Attributes[WaypointAttribute.Longitude] = w.LongLat.Longitude; w.Attributes[WaypointAttribute.Latitude] = w.LongLat.Latitude; if (j > 0) { deltaDistance = LinearAlgebraUtil.DistancePointToPointLongLat(w.LongLat, segments[i].Waypoints[j - 1].LongLat); deltaTime = w.Time.Subtract(segments[i].Waypoints[j - 1].Time).TotalSeconds; } elapsedTime += deltaTime; distance += deltaDistance; w.Attributes[WaypointAttribute.Distance] = distance; w.Attributes[WaypointAttribute.ElapsedTime] = elapsedTime; } } // check existence of heart rate, altitude and map reading waypointAttributeExists = new Dictionary(); var attributesToCheckExistenceFor = new List { WaypointAttribute.HeartRate, WaypointAttribute.Altitude, WaypointAttribute.MapReadingDuration }; foreach (var wa in attributesToCheckExistenceFor) { waypointAttributeExists[wa] = CheckIfWaypointAttributeExists(wa); } // second pass: the rest CalculateSpeeds(); CalculateSlidingAverageAttributes(WaypointAttribute.HeartRate, SmoothingIntervals[WaypointAttribute.HeartRate]); CalculateSlidingAverageAttributes(WaypointAttribute.Altitude, SmoothingIntervals[WaypointAttribute.Altitude]); CalculateInclinations(); CalculateMapReadings(); } // CalculateDirectionDeviationsToNextLap is also dependent on laps, not just route change CalculateDirectionDeviationsToNextLap(); } public Waypoint CreateWaypointFromParameterizedLocation(ParameterizedLocation parameterizedLocation) { var w = new Waypoint(); List waypoints = segments[parameterizedLocation.SegmentIndex].Waypoints; var i = (int)parameterizedLocation.Floor().Value; if (i >= waypoints.Count - 1) i = waypoints.Count - 2; if (waypoints.Count < 2) return waypoints[0]; double d = parameterizedLocation.Value - i; // time DateTime dt0 = waypoints[i].Time; DateTime dt1 = waypoints[i + 1].Time; w.Time = new DateTime(dt0.Ticks + (long)(d * (dt1.Ticks - dt0.Ticks)), dt0.Kind); // location LongLat p0 = waypoints[i].LongLat; LongLat p1 = waypoints[i + 1].LongLat; w.LongLat = new LongLat(p0.Longitude + d * (p1.Longitude - p0.Longitude), p0.Latitude + d * (p1.Latitude - p0.Latitude)); // altitude if (waypoints[i].Altitude.HasValue && waypoints[i + 1].Altitude.HasValue) { w.Altitude = waypoints[i].Altitude + d * (waypoints[i + 1].Altitude - waypoints[i].Altitude); } // heart rate if (waypoints[i].HeartRate.HasValue && waypoints[i + 1].HeartRate.HasValue) { w.HeartRate = waypoints[i].HeartRate + d * (waypoints[i + 1].HeartRate - waypoints[i].HeartRate); } var attributes = new List { WaypointAttribute.Pace, WaypointAttribute.HeartRate, WaypointAttribute.Altitude, WaypointAttribute.Speed, WaypointAttribute.DirectionDeviationToNextLap, WaypointAttribute.ElapsedTime, WaypointAttribute.Distance, WaypointAttribute.Inclination, WaypointAttribute.Direction, WaypointAttribute.Longitude, WaypointAttribute.Latitude }; // map reading if(waypointAttributeExists[WaypointAttribute.MapReadingDuration]) { if(parameterizedLocation.IsNode) { w.MapReadingState = waypoints[i].MapReadingState; } else { w.MapReadingState = waypoints[i].MapReadingState == MapReadingState.NotReading || waypoints[i + 1].MapReadingState == MapReadingState.NotReading ? MapReadingState.NotReading : MapReadingState.Reading; } attributes.AddRange(new[] { WaypointAttribute.MapReadingDuration, WaypointAttribute.MapReadingState, WaypointAttribute.PreviousMapReadingEnd, WaypointAttribute.NextMapReadingStart }); } foreach (var attribute in attributes) { w.Attributes[attribute] = GetAttributeValueBetweenWaypoints(waypoints[i], waypoints[i + 1], d, attribute); } return w; } public Waypoint CreateWaypointFromTime(DateTime time) { return CreateWaypointFromParameterizedLocation(GetParameterizedLocationFromTime(time)); } public CutRouteData Cut(ParameterizedLocation parameterizedLocation, CutType cutType) { var cutRoute = new CutRouteData { CutType = cutType }; switch (cutType) { case CutType.Before: cutRoute.Segments.AddRange(segments.GetRange(0, parameterizedLocation.SegmentIndex)); if (!parameterizedLocation.IsNode) { // cut between two waypoints: create cut waypoint Waypoint cutWaypoint = CreateWaypointFromParameterizedLocation(parameterizedLocation); var rs = new RouteSegment(); segments.RemoveRange(0, parameterizedLocation.SegmentIndex); rs.Waypoints.AddRange(segments[0].Waypoints.GetRange(0, (int)parameterizedLocation.Ceiling().Value)); cutRoute.Segments.Add(rs); segments[0].Waypoints.RemoveRange(0, (int)parameterizedLocation.Ceiling().Value); segments[0].Waypoints.Insert(0, cutWaypoint); cutRoute.WaypointInsertedAtCut = cutWaypoint; } else { // cut exactly at a waypoint var rs = new RouteSegment(); segments.RemoveRange(0, parameterizedLocation.SegmentIndex); rs.Waypoints.AddRange(segments[0].Waypoints.GetRange(0, (int)parameterizedLocation.Value)); cutRoute.Segments.Add(rs); segments[0].Waypoints.RemoveRange(0, (int)parameterizedLocation.Value); } // handle map readings nicely if (waypointAttributeExists[WaypointAttribute.MapReadingDuration] && segments[0].FirstWaypoint.MapReadingState == MapReadingState.Reading) { segments[0].FirstWaypoint.MapReadingState = MapReadingState.StartReading; } break; case CutType.After: if (parameterizedLocation.SegmentIndex < segments.Count - 1) { cutRoute.Segments.AddRange(segments.GetRange(parameterizedLocation.SegmentIndex + 1, segments.Count - 1 - parameterizedLocation.SegmentIndex)); segments.RemoveRange(parameterizedLocation.SegmentIndex + 1, segments.Count - 1 - parameterizedLocation.SegmentIndex); } var i = (int)parameterizedLocation.Ceiling().Value; int count = segments[parameterizedLocation.SegmentIndex].Waypoints.Count; if (!parameterizedLocation.IsNode) { // cut between two waypoints: create cut waypoint Waypoint cutWaypoint = CreateWaypointFromParameterizedLocation(parameterizedLocation); var rs = new RouteSegment(); rs.Waypoints.AddRange(segments[parameterizedLocation.SegmentIndex].Waypoints.GetRange(i, count - i)); cutRoute.Segments.Insert(0, rs); segments[parameterizedLocation.SegmentIndex].Waypoints.RemoveRange(i, count - i); segments[parameterizedLocation.SegmentIndex].Waypoints.Insert(i, cutWaypoint); cutRoute.WaypointInsertedAtCut = cutWaypoint; } else { // cut exactly at a waypoint var rs = new RouteSegment(); rs.Waypoints.AddRange(segments[parameterizedLocation.SegmentIndex].Waypoints.GetRange(i + 1, count - 1 - i)); cutRoute.Segments.Insert(0, rs); segments[parameterizedLocation.SegmentIndex].Waypoints.RemoveRange(i + 1, count - 1 - i); } // handle map readings nicely var lastWaypoint = segments[segments.Count - 1].LastWaypoint; if (waypointAttributeExists[WaypointAttribute.MapReadingDuration] && lastWaypoint.MapReadingState == MapReadingState.Reading) { lastWaypoint.MapReadingState = MapReadingState.EndReading; } break; } return cutRoute; } public void UnCut(CutRouteData cutRouteData) { Waypoint cutWaypoint; switch (cutRouteData.CutType) { case CutType.Before: cutWaypoint = segments[0].FirstWaypoint; var beforeCutWaypoint = cutRouteData.Segments[cutRouteData.Segments.Count - 1].LastWaypoint; if (cutRouteData.WaypointInsertedAtCut != null) { segments[0].Waypoints.Remove(cutRouteData.WaypointInsertedAtCut); } segments.InsertRange(0, cutRouteData.Segments.GetRange(0, cutRouteData.Segments.Count - 1)); segments[cutRouteData.Segments.Count - 1].Waypoints. InsertRange(0, cutRouteData.Segments[cutRouteData.Segments.Count - 1].Waypoints); // handle map reading if (cutRouteData.WaypointInsertedAtCut == null) { if (cutWaypoint.MapReadingState == MapReadingState.StartReading && (beforeCutWaypoint.MapReadingState == MapReadingState.Reading || beforeCutWaypoint.MapReadingState == MapReadingState.StartReading)) { cutWaypoint.MapReadingState = MapReadingState.Reading; } } break; case CutType.After: cutWaypoint = segments[segments.Count - 1].LastWaypoint; var afterCutWaypoint = cutRouteData.Segments[0].FirstWaypoint; if (cutRouteData.WaypointInsertedAtCut != null) { segments[segments.Count - 1].Waypoints.Remove(cutRouteData.WaypointInsertedAtCut); } segments[segments.Count - 1].Waypoints.AddRange(cutRouteData.Segments[0].Waypoints); segments.AddRange(cutRouteData.Segments.GetRange(1, cutRouteData.Segments.Count - 1)); // handle map reading if (cutRouteData.WaypointInsertedAtCut == null) { if (cutWaypoint.MapReadingState == MapReadingState.EndReading && (afterCutWaypoint.MapReadingState == MapReadingState.Reading || afterCutWaypoint.MapReadingState == MapReadingState.EndReading)) { cutWaypoint.MapReadingState = MapReadingState.Reading; } } break; } } public List GetMomentaneousValueList(WaypointAttribute attribute, ParameterizedLocation startPL, ParameterizedLocation endPL, TimeSpan samplingInterval) { DateTime time = GetTimeFromParameterizedLocation(startPL); DateTime endTime = GetTimeFromParameterizedLocation(endPL); ParameterizedLocation previousPL = GetParameterizedLocationOfPreviousWaypoint(startPL, false); ParameterizedLocation nextPL = GetParameterizedLocationOfNextWaypoint(startPL, true); Waypoint previousWaypoint = GetClosestWaypointFromParameterizedLocation(previousPL); Waypoint nextWaypoint = GetClosestWaypointFromParameterizedLocation(nextPL); var values = new List(); while (time < endTime) { double t0 = time.Subtract(previousWaypoint.Time).TotalSeconds; double t1 = nextWaypoint.Time.Subtract(previousWaypoint.Time).TotalSeconds; double t = (t1 > 0 ? t0 / t1 : 0); double? value = GetAttributeValueBetweenWaypoints(previousWaypoint, nextWaypoint, 1 - t, attribute); values.Add(value); // is there a waypoint before next sample time? DateTime nextSampleTime = time.Add(samplingInterval); while (nextWaypoint.Time <= nextSampleTime && nextSampleTime < endTime) { previousPL = nextPL; nextPL = GetParameterizedLocationOfNextWaypoint(nextPL, true); if (previousPL.SegmentIndex != nextPL.SegmentIndex) { // moved to next segment previousPL = nextPL; nextPL = GetParameterizedLocationOfNextWaypoint(nextPL, true); previousWaypoint = GetClosestWaypointFromParameterizedLocation(previousPL); nextWaypoint = GetClosestWaypointFromParameterizedLocation(nextPL); nextSampleTime = previousWaypoint.Time; } else { previousWaypoint = nextWaypoint; nextWaypoint = GetClosestWaypointFromParameterizedLocation(nextPL); } } time = nextSampleTime; } return values; } /// /// Gets the values at the specified percentage when the attribute values are sorted. /// /// /// /// /// public double? GetOrderedValue(WaypointAttribute attribute, double percentage, TimeSpan samplingInterval) { List list = GetMomentaneousValueList( attribute, GetParameterizedLocationFromTime(FirstWaypoint.Time), GetParameterizedLocationFromTime(LastWaypoint.Time), samplingInterval); list.Sort(); var i = (int)(percentage * list.Count); return list[Math.Min(i, list.Count - 1)]; } /// /// Gets the values at each percentage specified in the percentages list when the attribute values are sorted. /// /// /// /// /// public List GetOrderedValues(WaypointAttribute attribute, List percentages, TimeSpan samplingInterval) { List list = GetMomentaneousValueList( attribute, GetParameterizedLocationFromTime(FirstWaypoint.Time), GetParameterizedLocationFromTime(LastWaypoint.Time), samplingInterval); list.Sort(); var values = new List(); foreach (double percentage in percentages) { var i = (int)(percentage * list.Count); int index = Math.Min(i, list.Count - 1); if (index >= 0) values.Add(list[index]); } return values; } public double CalculatePaceStandardDeviation(ParameterizedLocation start, ParameterizedLocation end) { return CalculatePaceStandardDeviation(start, end, new Interval(0, 0)); } public double CalculatePaceStandardDeviation(ParameterizedLocation start, ParameterizedLocation end, Interval slidingAverageInterval) { // first collect all waypoints var nodes = new List>(); ParameterizedLocation adjustedStart = GetParameterizedLocationOfNextWaypoint(start, false); ParameterizedLocation adjustedEnd = GetParameterizedLocationOfPreviousWaypoint(end, false); var pl = new ParameterizedLocation(adjustedStart); if (!start.IsNode) nodes.Add(new Pair(start, CreateWaypointFromParameterizedLocation(start))); while (pl != null && pl <= adjustedEnd) { if (pl.Value > segments[pl.SegmentIndex].Waypoints.Count - 1) { pl.SegmentIndex++; pl.Value = 0; } nodes.Add(new Pair(pl, GetClosestWaypointFromParameterizedLocation(pl))); pl = GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } if (!end.IsNode) nodes.Add(new Pair(end, CreateWaypointFromParameterizedLocation(end))); var paces = new List(); if (slidingAverageInterval.Length == 0) { for (int i = 0; i < nodes.Count; i++) { ParameterizedLocation p = nodes[i].First; Waypoint w = nodes[i].Second; double beforeWeight = (i == 0 || IsFirstPLInSegment(p) ? 0 : (double)(w.Time.Ticks - nodes[i - 1].Second.Time.Ticks) / TimeSpan.TicksPerSecond / 2); double afterWeight = (i == nodes.Count - 1 || IsLastPLInSegment(p) ? 0 : (double)(nodes[i + 1].Second.Time.Ticks - w.Time.Ticks) / TimeSpan.TicksPerSecond / 2); paces.Add( new StatisticsUtil.WeightedItem( beforeWeight + afterWeight, ConvertUtil.ToPace(segments[p.SegmentIndex].Waypoints[(int)p.Value].Attributes[WaypointAttribute.Speed].Value).TotalSeconds ) ); } } else { ParameterizedLocation siStartPL = GetParameterizedLocationFromTime(nodes[0].Second.Time.AddSeconds(slidingAverageInterval.Start)); ParameterizedLocation siEndPL = GetParameterizedLocationFromTime(nodes[0].Second.Time.AddSeconds(slidingAverageInterval.End)); for (int i = 0; i < nodes.Count; i++) { // start of sliding interval siStartPL = GetParameterizedLocationFromTime(nodes[i].Second.Time.AddSeconds(slidingAverageInterval.Start), siStartPL, ParameterizedLocation.Direction.Forward); // end of sliding interval siEndPL = GetParameterizedLocationFromTime(nodes[i].Second.Time.AddSeconds(slidingAverageInterval.End), siEndPL, ParameterizedLocation.Direction.Forward); if (siStartPL != null && siEndPL != null) { if (siStartPL.SegmentIndex < nodes[i].First.SegmentIndex) siStartPL = new ParameterizedLocation(nodes[i].First.SegmentIndex, 0); if (siEndPL.SegmentIndex > nodes[i].First.SegmentIndex) siEndPL = new ParameterizedLocation(nodes[i].First.SegmentIndex, segments[nodes[i].First.SegmentIndex].Waypoints.Count - 1); ParameterizedLocation p = nodes[i].First; Waypoint w = nodes[i].Second; double pace = ConvertUtil.ToPace(w.Attributes[WaypointAttribute.Speed].Value).TotalSeconds; double siStartDistance = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, siStartPL).Value; double siEndDistance = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, siEndPL).Value; double siLength = GetTimeFromParameterizedLocation(siEndPL).Subtract(GetTimeFromParameterizedLocation(siStartPL)). TotalSeconds; double meanSpeed = (siLength == 0 ? 0 : (siEndDistance - siStartDistance) / siLength); double meanPace = ConvertUtil.ToPace(meanSpeed).TotalSeconds; double beforeWeight = (i == 0 || IsFirstPLInSegment(p) ? 0 : (double)(w.Time.Ticks - nodes[i - 1].Second.Time.Ticks) / TimeSpan.TicksPerSecond / 2); double afterWeight = (i == nodes.Count - 1 || IsLastPLInSegment(p) ? 0 : (double)(nodes[i + 1].Second.Time.Ticks - w.Time.Ticks) / TimeSpan.TicksPerSecond / 2); paces.Add(new StatisticsUtil.WeightedItem((beforeWeight + afterWeight), pace - meanPace)); } } } return StatisticsUtil.GetStandardDeviation(paces); } public double CalculateSpeedPercentualStandardDeviation(ParameterizedLocation start, ParameterizedLocation end) { return CalculateSpeedPercentualStandardDeviation(start, end, new Interval(0, 0)); } public double CalculateSpeedPercentualStandardDeviation(ParameterizedLocation start, ParameterizedLocation end, Interval slidingAverageInterval) { // first collect all waypoints var nodes = new List>(); ParameterizedLocation adjustedStart = GetParameterizedLocationOfNextWaypoint(start, false); ParameterizedLocation adjustedEnd = GetParameterizedLocationOfPreviousWaypoint(end, false); var pl = new ParameterizedLocation(adjustedStart); if (!start.IsNode) nodes.Add(new Pair(start, CreateWaypointFromParameterizedLocation(start))); while (pl != null && pl <= adjustedEnd) { if (pl.Value > segments[pl.SegmentIndex].Waypoints.Count - 1) { pl.SegmentIndex++; pl.Value = 0; } nodes.Add(new Pair(pl, GetClosestWaypointFromParameterizedLocation(pl))); pl = GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } if (!end.IsNode) nodes.Add(new Pair(end, CreateWaypointFromParameterizedLocation(end))); var speeds = new List(); if (slidingAverageInterval.Length == 0) { double elapsedTime = GetAttributeFromParameterizedLocation(WaypointAttribute.ElapsedTime, LastPL).Value; double meanSpeed = (GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, LastPL).Value - GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, FirstPL).Value) / (elapsedTime == 0 ? 0 : elapsedTime); for (int i = 0; i < nodes.Count; i++) { ParameterizedLocation p = nodes[i].First; Waypoint w = nodes[i].Second; double beforeWeight = (i == 0 || IsFirstPLInSegment(p) ? 0 : (double)(w.Time.Ticks - nodes[i - 1].Second.Time.Ticks) / TimeSpan.TicksPerSecond / 2); double afterWeight = (i == nodes.Count - 1 || IsLastPLInSegment(p) ? 0 : (double)(nodes[i + 1].Second.Time.Ticks - w.Time.Ticks) / TimeSpan.TicksPerSecond / 2); speeds.Add( new StatisticsUtil.WeightedItem( beforeWeight + afterWeight, (meanSpeed == 0 ? 0 : segments[p.SegmentIndex].Waypoints[(int)p.Value].Attributes[WaypointAttribute.Speed].Value / meanSpeed) ) ); } } else { ParameterizedLocation siStartPL = GetParameterizedLocationFromTime(nodes[0].Second.Time.AddSeconds(slidingAverageInterval.Start)); ParameterizedLocation siEndPL = GetParameterizedLocationFromTime(nodes[0].Second.Time.AddSeconds(slidingAverageInterval.End)); for (int i = 0; i < nodes.Count; i++) { // start of sliding interval siStartPL = GetParameterizedLocationFromTime(nodes[i].Second.Time.AddSeconds(slidingAverageInterval.Start), siStartPL, ParameterizedLocation.Direction.Forward); // end of sliding interval siEndPL = GetParameterizedLocationFromTime(nodes[i].Second.Time.AddSeconds(slidingAverageInterval.End), siEndPL, ParameterizedLocation.Direction.Forward); if (siStartPL != null && siEndPL != null) { if (siStartPL.SegmentIndex < nodes[i].First.SegmentIndex) siStartPL = new ParameterizedLocation(nodes[i].First.SegmentIndex, 0); if (siEndPL.SegmentIndex > nodes[i].First.SegmentIndex) siEndPL = new ParameterizedLocation(nodes[i].First.SegmentIndex, segments[nodes[i].First.SegmentIndex].Waypoints.Count - 1); ParameterizedLocation p = nodes[i].First; Waypoint w = nodes[i].Second; double siStartDistance = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, siStartPL).Value; double siEndDistance = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, siEndPL).Value; double siLength = GetTimeFromParameterizedLocation(siEndPL).Subtract(GetTimeFromParameterizedLocation(siStartPL)). TotalSeconds; double meanSpeed = (siLength == 0 ? 0 : (siEndDistance - siStartDistance) / siLength); double beforeWeight = (i == 0 || IsFirstPLInSegment(p) ? 0 : (double)(w.Time.Ticks - nodes[i - 1].Second.Time.Ticks) / TimeSpan.TicksPerSecond / 2); double afterWeight = (i == nodes.Count - 1 || IsLastPLInSegment(p) ? 0 : (double)(nodes[i + 1].Second.Time.Ticks - w.Time.Ticks) / TimeSpan.TicksPerSecond / 2); speeds.Add(new StatisticsUtil.WeightedItem((beforeWeight + afterWeight), (meanSpeed == 0 ? 0 : w.Attributes[WaypointAttribute.Speed].Value / meanSpeed))); } } } return StatisticsUtil.GetStandardDeviation(speeds); } public double CalculateAverageDirectionDeviationToNextLap(ParameterizedLocation start, ParameterizedLocation end) { ParameterizedLocation adjustedStart = GetParameterizedLocationOfNextWaypoint(start, false); ParameterizedLocation adjustedEnd = GetParameterizedLocationOfPreviousWaypoint(end, false); DateTime previousTime = GetTimeFromParameterizedLocation(start); var pl = new ParameterizedLocation(adjustedStart); double sum = 0; double weightSum = 0; while (pl != null && pl <= adjustedEnd) { if (pl.Value > segments[pl.SegmentIndex].Waypoints.Count - 1) { pl.SegmentIndex++; pl.Value = 0; previousTime = GetTimeFromParameterizedLocation(pl); } DateTime time = GetTimeFromParameterizedLocation(pl); long weight = time.Ticks - previousTime.Ticks; sum += weight * GetAttributeFromParameterizedLocation(WaypointAttribute.DirectionDeviationToNextLap, pl).Value; weightSum += weight; previousTime = time; pl = GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } return (weightSum == 0 ? 0 : sum / weightSum); } /// /// Returns true if there are NO null values for the specified attributes in the segments. /// /// /// public bool ContainsWaypointAttribute(WaypointAttribute attribute) { return waypointAttributeExists[attribute]; } public List GetMapReadingsList() { if(!waypointAttributeExists[WaypointAttribute.MapReadingDuration]) return null; var mapReadingsList = new List(); for (var i = 0; i < segments.Count; i++) { for (var j = 0; j < segments[i].Waypoints.Count; j++) { var w = segments[i].Waypoints[j]; if(w.MapReadingState == MapReadingState.StartReading || w.MapReadingState == MapReadingState.EndReading) mapReadingsList.Add(w.Time); } } return mapReadingsList.Count == 0 ? null : mapReadingsList; } #region ParameterizedLocation helpers public bool IsFirstPLInSegment(ParameterizedLocation pl) { return (pl.Value <= 0); } public bool IsLastPLInSegment(ParameterizedLocation pl) { return (pl.Value >= segments[pl.SegmentIndex].Waypoints.Count - 1); } public bool IsFirstPL(ParameterizedLocation pl) { return (pl <= FirstPL); } public bool IsLastPL(ParameterizedLocation pl) { return (pl >= LastPL); } public ParameterizedLocation GetNextPLNode(ParameterizedLocation pl, ParameterizedLocation.Direction direction) { if (direction == ParameterizedLocation.Direction.Forward) { if (pl.Floor().Value + 1 > segments[pl.SegmentIndex].Waypoints.Count - 1) { if (pl.SegmentIndex + 1 > segments.Count - 1) return null; return new ParameterizedLocation(pl.SegmentIndex + 1, 0); } return new ParameterizedLocation(pl.SegmentIndex, pl.Floor().Value + 1); } else { if (pl.Ceiling().Value - 1 < 0) { if (pl.SegmentIndex <= 0) return null; return new ParameterizedLocation(pl.SegmentIndex - 1, segments[pl.SegmentIndex - 1].Waypoints.Count - 1); } return new ParameterizedLocation(pl.SegmentIndex, pl.Ceiling().Value - 1); } } public bool IsFirstSegment(ParameterizedLocation pl) { return (pl.SegmentIndex <= 0); } public bool IsLastSegment(ParameterizedLocation pl) { return (pl.SegmentIndex >= segments.Count - 1); } #endregion #endregion #region Private methods private double GetAverageSpeed(int currentSegmentIndex, int currentWaypointIndex, DateTime startTime, DateTime endTime) { if (startTime == endTime) { // can't have zero-length interval, so make very small interval to calculate speed for startTime = startTime.AddMilliseconds(-0.5); endTime = endTime.AddMilliseconds(0.5); } if (startTime < segments[currentSegmentIndex].FirstWaypoint.Time) startTime = Segments[currentSegmentIndex].FirstWaypoint.Time; if (endTime > Segments[currentSegmentIndex].LastWaypoint.Time) endTime = Segments[currentSegmentIndex].LastWaypoint.Time; if (startTime == endTime) return 0; // same time for both first and last waypoint of this segment int i = currentWaypointIndex; List waypoints = Segments[currentSegmentIndex].Waypoints; if (waypoints[i].Time < startTime) { while (waypoints[i].Time < startTime) { i += 1; } } else { while (waypoints[i].Time > startTime) { i -= 1; } } double distance = 0.0; while (waypoints[i].Time < endTime) { long ticks0 = Math.Max(startTime.Ticks, waypoints[i].Time.Ticks); long ticks1 = Math.Min(endTime.Ticks, waypoints[i + 1].Time.Ticks); long ticksDuration = waypoints[i + 1].Time.Ticks - waypoints[i].Time.Ticks; if (ticksDuration != 0) { double t = (ticks1 - ticks0) / (double)ticksDuration; distance += t * LinearAlgebraUtil.DistancePointToPointLongLat(waypoints[i].LongLat, waypoints[i + 1].LongLat); } i++; } TimeSpan timeSpan = endTime.Subtract(startTime); return distance / timeSpan.TotalSeconds; } private ParameterizedLocation GetParameterizedLocationOfPreviousWaypoint( ParameterizedLocation parameterizedLocation, bool forceAdvance) { if (!parameterizedLocation.IsNode) { return new ParameterizedLocation(parameterizedLocation.SegmentIndex, parameterizedLocation.Floor().Value); } else if (parameterizedLocation.Value > 0) { return new ParameterizedLocation(parameterizedLocation.SegmentIndex, parameterizedLocation.Value - (forceAdvance ? 1 : 0)); } else if (forceAdvance && parameterizedLocation.SegmentIndex > 0) { return new ParameterizedLocation(parameterizedLocation.SegmentIndex - 1, segments[parameterizedLocation.SegmentIndex - 1].Waypoints.Count - 1); } else { return new ParameterizedLocation(parameterizedLocation.SegmentIndex, 0); } } private ParameterizedLocation GetParameterizedLocationOfNextWaypoint(ParameterizedLocation parameterizedLocation, bool forceAdvance) { if (!parameterizedLocation.IsNode) { return new ParameterizedLocation(parameterizedLocation.SegmentIndex, parameterizedLocation.Ceiling().Value); } else if (parameterizedLocation.Value < segments[parameterizedLocation.SegmentIndex].Waypoints.Count - 1) { return new ParameterizedLocation(parameterizedLocation.SegmentIndex, parameterizedLocation.Value + (forceAdvance ? 1 : 0)); } else if (forceAdvance && parameterizedLocation.SegmentIndex < segments.Count - 1) { return new ParameterizedLocation(parameterizedLocation.SegmentIndex + 1, 0); } else { return new ParameterizedLocation(parameterizedLocation.SegmentIndex, segments[parameterizedLocation.SegmentIndex].Waypoints.Count - 1); } } private Waypoint GetClosestWaypointFromParameterizedLocation(ParameterizedLocation parameterizedLocation) { if (parameterizedLocation.SegmentIndex < 0 || parameterizedLocation.SegmentIndex > segments.Count - 1) return null; if (parameterizedLocation.Value < 0 || parameterizedLocation.Value > segments[parameterizedLocation.SegmentIndex].Waypoints.Count - 1) return null; return segments[parameterizedLocation.SegmentIndex].Waypoints[(int)parameterizedLocation.Value]; } private Waypoint GetNextWaypoint(ParameterizedLocation parameterizedLocation, bool forceAdvance) { return GetClosestWaypointFromParameterizedLocation(GetParameterizedLocationOfNextWaypoint(parameterizedLocation, forceAdvance)); } private Waypoint GetPreviousWaypoint(ParameterizedLocation parameterizedLocation, bool forceAdvance) { return GetClosestWaypointFromParameterizedLocation(GetParameterizedLocationOfPreviousWaypoint(parameterizedLocation, forceAdvance)); } // w0 and w1 are adjacent, t measured from w0 private static double? GetAttributeValueBetweenWaypoints(Waypoint w0, Waypoint w1, double t, WaypointAttribute attribute) { switch(attribute) { case WaypointAttribute.MapReadingDuration: return w0.MapReadingState == MapReadingState.StartReading || w0.MapReadingState == MapReadingState.Reading ? w0.Attributes[WaypointAttribute.MapReadingDuration] : null; case WaypointAttribute.MapReadingState: return GetAttributeValueBetweenWaypoints(w0, w1, t, WaypointAttribute.MapReadingDuration) != null ? 1 : 0; case WaypointAttribute.PreviousMapReadingEnd: return w1.Attributes[WaypointAttribute.PreviousMapReadingEnd] != null ? (double?)(w1.Attributes[WaypointAttribute.PreviousMapReadingEnd].Value - (1 - t) * (w1.Time - w0.Time).TotalSeconds) : null; case WaypointAttribute.NextMapReadingStart: return w0.Attributes[WaypointAttribute.NextMapReadingStart] != null ? (double?)(w0.Attributes[WaypointAttribute.NextMapReadingStart].Value - t * (w1.Time - w0.Time).TotalSeconds) : null; default: var d0 = w0.Attributes[attribute]; var d1 = w1.Attributes[attribute]; if (d0.HasValue && d1.HasValue) return d0 + t * (d1 - d0); if (!d0.HasValue && !d1.HasValue) return null; return (t < 0.5 ? d0 : d1); } } private void CalculateSlidingAverageAttributes(WaypointAttribute attribute, Interval smoothingInterval) { // using optimized but hard-to-understand algorithm if (attribute != WaypointAttribute.HeartRate && attribute != WaypointAttribute.Altitude) throw new ArgumentException("The 'attribute' parameter must be either WaypointAttribute.HeartRate or WaypointAttribute.Altitude"); bool zeroLengthInterval = smoothingInterval.Length == 0; bool containsAttribute = ContainsWaypointAttribute(attribute); ParameterizedLocation siStartPL = null; ParameterizedLocation siEndPL = null; if (!zeroLengthInterval) { siStartPL = GetParameterizedLocationFromTime(FirstWaypoint.Time.AddSeconds(smoothingInterval.Start)); siEndPL = GetParameterizedLocationFromTime(FirstWaypoint.Time.AddSeconds(smoothingInterval.End)); } for (int i = 0; i < segments.Count; i++) { double[] valueSums = null; bool[] valueIsSet = null; DateTime[] valueTimes = null; var nullValueFound = false; if (containsAttribute && !zeroLengthInterval) { valueSums = new double[segments[i].Waypoints.Count]; valueIsSet = new bool[segments[i].Waypoints.Count]; valueTimes = new DateTime[segments[i].Waypoints.Count]; valueSums[0] = 0; if (segments[i].Waypoints.Count > 0) { valueIsSet[0] = segments[i].Waypoints[0].GetOriginalAttribute(attribute).HasValue; valueTimes[0] = segments[i].Waypoints[0].Time; nullValueFound = !valueIsSet[0]; } for (int j = 1; j < segments[i].Waypoints.Count; j++) { var previousWaypoint = segments[i].Waypoints[j - 1]; var thisWaypoint = segments[i].Waypoints[j]; var previousOriginalAttribute = previousWaypoint.GetOriginalAttribute(attribute); var thisOriginalAttribute = thisWaypoint.GetOriginalAttribute(attribute); valueIsSet[j] = thisOriginalAttribute.HasValue; valueTimes[j] = thisWaypoint.Time; nullValueFound = nullValueFound || !valueIsSet[j]; if (valueIsSet[j - 1] && valueIsSet[j]) { valueSums[j] = valueSums[j - 1] + (valueTimes[j] - valueTimes[j - 1]).TotalSeconds * (previousOriginalAttribute.Value + thisOriginalAttribute.Value) / 2; } else { valueSums[j] = valueSums[j - 1]; } } } for (int j = 0; j < segments[i].Waypoints.Count; j++) { Waypoint w = segments[i].Waypoints[j]; if (!containsAttribute) { w.Attributes[attribute] = null; } else if (zeroLengthInterval) { w.Attributes[attribute] = w.GetOriginalAttribute(attribute); } else { // start of sliding interval siStartPL = GetParameterizedLocationFromTime(w.Time.AddSeconds(smoothingInterval.Start), siStartPL, ParameterizedLocation.Direction.Forward); // end of sliding interval siEndPL = GetParameterizedLocationFromTime(w.Time.AddSeconds(smoothingInterval.End), siEndPL, ParameterizedLocation.Direction.Forward); if (siStartPL != null && siEndPL != null) { if (siStartPL.SegmentIndex < i) siStartPL = new ParameterizedLocation(i, 0); if (siEndPL.SegmentIndex > i) siEndPL = new ParameterizedLocation(i, segments[i].Waypoints.Count - 1); double startSum; double endSum; var adjustedIntervalLength = (GetTimeFromParameterizedLocation(siEndPL) - GetTimeFromParameterizedLocation(siStartPL)).TotalSeconds; int startIndex; int endIndex; if (siStartPL.IsNode) { startSum = valueSums[(int)siStartPL.Value]; startIndex = (int)siStartPL.Value; } else { var d = siStartPL.Value - Math.Floor(siStartPL.Value); startSum = (1 - d) * valueSums[(int)siStartPL.Value] + d * valueSums[(int)siStartPL.Value + 1]; startIndex = (int)siStartPL.Value; } if (siEndPL.IsNode) { endSum = valueSums[(int)siEndPL.Value]; endIndex = (int)siEndPL.Value; } else { var d = siEndPL.Value - Math.Floor(siEndPL.Value); endSum = (1 - d) * valueSums[(int)siEndPL.Value] + d * valueSums[(int)siEndPL.Value + 1]; endIndex = (int)siEndPL.Value + 1; } if (adjustedIntervalLength == 0) { w.Attributes[attribute] = w.GetOriginalAttribute(attribute); } else { // check if there are any null values in this interval bool nullValueFoundInInterval; if (!nullValueFound) { // no null value in whole route, don't need to check this interval nullValueFoundInInterval = false; } else { // there is at least one null value in the route, need to check if there exists any in this interval nullValueFoundInInterval = false; for (var k = startIndex; k <= endIndex; k++) { if (!valueIsSet[k]) { nullValueFoundInInterval = true; break; } } } if (!nullValueFoundInInterval) { // no null values in this interval, perform normal calculation w.Attributes[attribute] = (endSum - startSum) / adjustedIntervalLength; } else { // null value found, calculate based on each non-null value waypoint pair adjustedIntervalLength = 0; double sum = 0; for (var k = startIndex; k < endIndex; k++) { if (valueIsSet[k] && valueIsSet[k + 1]) { double start = Math.Max(k, siStartPL.Value); double end = Math.Min(k + 1, siEndPL.Value); adjustedIntervalLength += (end - start) * (valueTimes[k + 1] - valueTimes[k]).TotalSeconds; sum += (end - start) * (valueSums[k + 1] - valueSums[k]); } } w.Attributes[attribute] = (adjustedIntervalLength == 0 ? (double?)null : sum / adjustedIntervalLength); } } } else { w.Attributes[attribute] = null; } } } } } /// /// Calculates speeds and paces. /// private void CalculateSpeeds() { // using optimized but hard-to-understand algorithm var actualInterval = new Interval(SmoothingIntervals[WaypointAttribute.Speed]); if (actualInterval.Length == 0) { // need to have non-zero smothing interval when calculating speed, set it to a millisecond var center = actualInterval.Start; actualInterval = new Interval(center - 0.0005, center + 0.0005); } ParameterizedLocation siStartPL = GetParameterizedLocationFromTime(FirstWaypoint.Time.AddSeconds(actualInterval.Start)); ParameterizedLocation siEndPL = GetParameterizedLocationFromTime(FirstWaypoint.Time.AddSeconds(actualInterval.End)); for (int i = 0; i < segments.Count; i++) { for (int j = 0; j < segments[i].Waypoints.Count; j++) { Waypoint w = segments[i].Waypoints[j]; // start of sliding interval siStartPL = GetParameterizedLocationFromTime(w.Time.AddSeconds(actualInterval.Start), siStartPL, ParameterizedLocation.Direction.Forward); // end of sliding interval siEndPL = GetParameterizedLocationFromTime(w.Time.AddSeconds(actualInterval.End), siEndPL, ParameterizedLocation.Direction.Forward); if (siStartPL != null && siEndPL != null) { if (siStartPL.SegmentIndex < i) siStartPL = new ParameterizedLocation(i, 0); if (siEndPL.SegmentIndex > i) siEndPL = new ParameterizedLocation(i, segments[i].Waypoints.Count - 1); double siStartDistance = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, siStartPL).Value; double siEndDistance = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, siEndPL).Value; double siLength = (GetTimeFromParameterizedLocation(siEndPL) - GetTimeFromParameterizedLocation(siStartPL)).TotalSeconds; w.Attributes[WaypointAttribute.Speed] = (siLength == 0 ? 0 : 3.6 * (siEndDistance - siStartDistance) / siLength); } else { w.Attributes[WaypointAttribute.Speed] = 0; } w.Attributes[WaypointAttribute.Pace] = ConvertUtil.ToPace(w.Attributes[WaypointAttribute.Speed].Value).TotalSeconds; } } } private void CalculateDirectionDeviationsToNextLap() { if (lapTimes.Count >= 2) { int lapIndex = 0; var lapStartPL = GetParameterizedLocationFromTime(lapTimes[lapIndex]); var lapEndPL = GetParameterizedLocationFromTime(lapTimes[lapIndex + 1]); // using optimized but hard-to-understand algorithm var actualInterval = new Interval(SmoothingIntervals[WaypointAttribute.DirectionDeviationToNextLap]); if (actualInterval.Length == 0) { // need to have non-zero smothing interval when calculating direction vectors, set it to a millisecond var center = actualInterval.Start; actualInterval = new Interval(center - 0.0005, center + 0.0005); } ParameterizedLocation siStartPL = GetParameterizedLocationFromTime(FirstWaypoint.Time.AddSeconds(actualInterval.Start)); ParameterizedLocation siEndPL = GetParameterizedLocationFromTime(FirstWaypoint.Time.AddSeconds(actualInterval.End)); for (int i = 0; i < segments.Count; i++) { // 1. calculate the direction angles in this segment, taking laps into account (never consider positions outside current lap) var directionAngles = new double[segments[i].Waypoints.Count]; var startLapIndexInThisSegment = lapIndex; var lapStartPLInThisSegment = GetParameterizedLocationFromTime(lapTimes[lapIndex]); var lapEndPLInThisSegment = GetParameterizedLocationFromTime(lapTimes[lapIndex + 1]); for (int j = 0; j < segments[i].Waypoints.Count; j++) { Waypoint w = segments[i].Waypoints[j]; while (w.Time > lapTimes[lapIndex] && lapIndex < lapTimes.Count - 1) { lapIndex++; lapStartPL = GetParameterizedLocationFromTime(lapTimes[lapIndex - 1]); lapEndPL = GetParameterizedLocationFromTime(lapTimes[lapIndex]); } // start of sliding interval siStartPL = GetParameterizedLocationFromTime(w.Time.AddSeconds(actualInterval.Start), siStartPL, ParameterizedLocation.Direction.Forward); // end of sliding interval siEndPL = GetParameterizedLocationFromTime(w.Time.AddSeconds(actualInterval.End), siEndPL, ParameterizedLocation.Direction.Forward); if (siStartPL != null && siEndPL != null) { if (siStartPL.SegmentIndex < i) siStartPL = new ParameterizedLocation(i, 0); if (siEndPL.SegmentIndex > i) siEndPL = new ParameterizedLocation(i, segments[i].Waypoints.Count - 1); if (siStartPL < lapStartPL) siStartPL = new ParameterizedLocation(lapStartPL); if (siEndPL > lapEndPL) siEndPL = new ParameterizedLocation(lapEndPL); var siStartLocation = GetLocationFromParameterizedLocation(siStartPL); var siEndLocation = GetLocationFromParameterizedLocation(siEndPL); var middle = (siStartLocation / 2 + siEndLocation / 2); var p0 = siStartLocation.Project(middle); var p1 = siEndLocation.Project(middle); directionAngles[j] = LinearAlgebraUtil.GetAngleD(LinearAlgebraUtil.Normalize(p1 - p0)); } else { directionAngles[j] = 0; } } // 2. calculate the directions and direction deviations based on values achieved in step 1 lapIndex = startLapIndexInThisSegment; lapStartPL = lapStartPLInThisSegment; lapEndPL = lapEndPLInThisSegment; var lapLongLat = GetLocationFromParameterizedLocation(GetParameterizedLocationFromTime(lapTimes[lapIndex + 1])); for (int j = 0; j < segments[i].Waypoints.Count; j++) { Waypoint w = segments[i].Waypoints[j]; // direction (clockwise from north: n = 0, e = 90, s = 180, w = 270) var direction = -directionAngles[j] + 90; if (direction < 0) direction += 360; w.Attributes[WaypointAttribute.Direction] = direction; // direction deviation to next lap while (w.Time > lapTimes[lapIndex] && lapIndex < lapTimes.Count - 1) { lapIndex++; lapLongLat = GetLocationFromParameterizedLocation(GetParameterizedLocationFromTime(lapTimes[lapIndex])); } LongLat middle = (w.LongLat / 2 + lapLongLat / 2); PointD p0 = w.LongLat.Project(middle); PointD p1 = lapLongLat.Project(middle); PointD directionVectorToNextLap = LinearAlgebraUtil.Normalize(p1 - p0); w.Attributes[WaypointAttribute.DirectionDeviationToNextLap] = Math.Abs(LinearAlgebraUtil.GetAngleD(directionVectorToNextLap, LinearAlgebraUtil.CreateNormalizedVectorFromAngleD(directionAngles[j]))); } } } } private void CalculateInclinations() { var containsAltitude = ContainsWaypointAttribute(WaypointAttribute.Altitude); var altitudeSmoothingInterval = new Interval(-0.005, 0.005); var distanceSmoothingInterval = SmoothingIntervals[WaypointAttribute.Altitude]; if (distanceSmoothingInterval.Length == 0) distanceSmoothingInterval = altitudeSmoothingInterval; for (int i = 0; i < segments.Count; i++) { for (int j = 0; j < segments[i].Waypoints.Count; j++) { var waypoint = segments[i].Waypoints[j]; if (containsAltitude) { var pl = new ParameterizedLocation(i, j); var startDirection = altitudeSmoothingInterval.Start < 0 ? ParameterizedLocation.Direction.Backward : ParameterizedLocation.Direction.Forward; var endDirection = altitudeSmoothingInterval.End < 0 ? ParameterizedLocation.Direction.Backward : ParameterizedLocation.Direction.Forward; // altitude calculations var altitudeStartTime = waypoint.Time.AddSeconds(altitudeSmoothingInterval.Start); var altitudeEndTime = waypoint.Time.AddSeconds(altitudeSmoothingInterval.End); var altitudeStartPL = GetParameterizedLocationFromTime(altitudeStartTime, pl, startDirection); var altitudeEndPL = GetParameterizedLocationFromTime(altitudeEndTime, pl, endDirection); if (altitudeStartPL.SegmentIndex < i) { altitudeStartPL = new ParameterizedLocation(i, 0); altitudeStartTime = segments[i].FirstWaypoint.Time; } if (altitudeEndPL.SegmentIndex > i) { altitudeEndPL = new ParameterizedLocation(i, segments[i].Waypoints.Count - 1); altitudeEndTime = segments[i].LastWaypoint.Time; } var altitudeDifference = GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, altitudeEndPL) - GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, altitudeStartPL); var altitudeDuration = (altitudeEndTime - altitudeStartTime).TotalSeconds; // distance calculations var distanceStartTime = waypoint.Time.AddSeconds(distanceSmoothingInterval.Start); var distanceEndTime = waypoint.Time.AddSeconds(distanceSmoothingInterval.End); var distanceStartPL = GetParameterizedLocationFromTime(distanceStartTime, pl, startDirection); var distanceEndPL = GetParameterizedLocationFromTime(distanceEndTime, pl, endDirection); if (distanceStartPL.SegmentIndex < i) { distanceStartPL = new ParameterizedLocation(i, 0); distanceStartTime = segments[i].FirstWaypoint.Time; } if (distanceEndPL.SegmentIndex > i) { distanceEndPL = new ParameterizedLocation(i, segments[i].Waypoints.Count - 1); distanceEndTime = segments[i].LastWaypoint.Time; } var distanceDifference = GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, distanceEndPL) - GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, distanceStartPL); var distanceDuration = (distanceEndTime - distanceStartTime).TotalSeconds; // calculate the inclination if (!distanceDifference.HasValue || !altitudeDifference.HasValue) { waypoint.Attributes[WaypointAttribute.Inclination] = null; } else if (altitudeDuration == 0 || distanceDuration == 0) { waypoint.Attributes[WaypointAttribute.Inclination] = 0; } else { waypoint.Attributes[WaypointAttribute.Inclination] = LinearAlgebraUtil.ToDegrees(Math.Atan2(altitudeDifference.Value / altitudeDuration, distanceDifference.Value / distanceDuration)); } } else { waypoint.Attributes[WaypointAttribute.Inclination] = null; } } } } private void CalculateMapReadings() { if (waypointAttributeExists[WaypointAttribute.MapReadingDuration]) { for (int i = 0; i < segments.Count; i++) { double? duration = null; for (int j = 0; j < segments[i].Waypoints.Count; j++) { var waypoint = segments[i].Waypoints[j]; if (waypoint.MapReadingState == MapReadingState.StartReading) { var k = j + 1; while (segments[i].Waypoints[k].MapReadingState == MapReadingState.Reading) k++; duration = (segments[i].Waypoints[k].Time - waypoint.Time).TotalSeconds; } waypoint.Attributes[WaypointAttribute.MapReadingDuration] = duration; waypoint.Attributes[WaypointAttribute.MapReadingState] = duration != null ? 1 : 0; if (waypoint.MapReadingState == MapReadingState.EndReading) { duration = null; } } DateTime? previousEndReadingTime = null; for (int j = 0; j < segments[i].Waypoints.Count; j++) { var waypoint = segments[i].Waypoints[j]; waypoint.Attributes[WaypointAttribute.PreviousMapReadingEnd] = previousEndReadingTime == null ? null : (double?)(waypoint.Time - previousEndReadingTime.Value).TotalSeconds; if (waypoint.MapReadingState == MapReadingState.EndReading) { previousEndReadingTime = waypoint.Time; } } DateTime? nextStartReadingTime = null; for (int j = segments[i].Waypoints.Count - 1; j >= 0; j--) { var waypoint = segments[i].Waypoints[j]; waypoint.Attributes[WaypointAttribute.NextMapReadingStart] = nextStartReadingTime == null ? null : (double?)(nextStartReadingTime.Value - waypoint.Time).TotalSeconds; ; if (waypoint.MapReadingState == MapReadingState.StartReading) { nextStartReadingTime = waypoint.Time; } } } } else { for (int i = 0; i < segments.Count; i++) { for (int j = 0; j < segments[i].Waypoints.Count; j++) { var waypoint = segments[i].Waypoints[j]; waypoint.Attributes[WaypointAttribute.MapReadingState] = null; waypoint.Attributes[WaypointAttribute.MapReadingDuration] = null; waypoint.Attributes[WaypointAttribute.PreviousMapReadingEnd] = null; waypoint.Attributes[WaypointAttribute.NextMapReadingStart] = null; } } } } private int GetNextLapIndexFromTime(DateTime time) { int lo = 0; int hi = lapTimes.Count - 1; while (hi >= lo) { int mi = (lo + hi) / 2; if (time < lapTimes[mi]) { hi = mi - 1; } else if (time > lapTimes[mi + 1]) { lo = mi + 1; } else { return Math.Min(mi + 1, lapTimes.Count - 1); } } return lo; } private bool CheckIfWaypointAttributeExists(WaypointAttribute attribute) { foreach (RouteSegment segment in Segments) { foreach (Waypoint waypoint in segment.Waypoints) { switch (attribute) { case WaypointAttribute.Altitude: if (waypoint.Altitude != null) return true; break; case WaypointAttribute.HeartRate: if (waypoint.HeartRate != null) return true; break; case WaypointAttribute.MapReadingDuration: if (waypoint.MapReadingState != null) return true; break; } } } return false; } #endregion #region Public static methods public static List AddMapReadingWaypoints(List routeSegments, List mapReadings) { if (mapReadings.Count == 0) return routeSegments; var newRouteSegments = new List(); foreach (var routeSegment in routeSegments) { var newRouteSegment = new RouteSegment(); var waypointCount = 0; var mapReadingIndex = -1; // just to be sure, could probably be removed foreach (var waypoint in routeSegment.Waypoints) { while (mapReadingIndex < mapReadings.Count - 1 && mapReadings[mapReadingIndex+1] <= waypoint.Time) { mapReadingIndex++; } var newWaypoint = waypoint.Clone(); if (waypoint == routeSegment.FirstWaypoint) { newWaypoint.MapReadingState = mapReadingIndex % 2 == 0 ? MapReadingState.StartReading : MapReadingState.NotReading; newRouteSegment.Waypoints.Add(newWaypoint); } else if (waypoint == routeSegment.LastWaypoint) { newWaypoint.MapReadingState = newRouteSegment.LastWaypoint.MapReadingState == MapReadingState.StartReading || newRouteSegment.LastWaypoint.MapReadingState == MapReadingState.Reading ? MapReadingState.EndReading : MapReadingState.NotReading; newRouteSegment.Waypoints.Add(newWaypoint); break; } else { if (mapReadingIndex != -1 && mapReadings[mapReadingIndex] == newWaypoint.Time) { newWaypoint.MapReadingState = mapReadingIndex % 2 == 0 ? MapReadingState.StartReading : MapReadingState.EndReading; } else { newWaypoint.MapReadingState = mapReadingIndex % 2 == 0 ? MapReadingState.Reading : MapReadingState.NotReading; } newRouteSegment.Waypoints.Add(newWaypoint); } var nextWaypoint = routeSegment.Waypoints[waypointCount + 1]; while (mapReadingIndex < mapReadings.Count - 1 && mapReadings[mapReadingIndex + 1] < nextWaypoint.Time) { var time = mapReadings[mapReadingIndex + 1]; var t = (double)(time - waypoint.Time).Ticks / (nextWaypoint.Time - waypoint.Time).Ticks; var longLat = (1 - t) * waypoint.LongLat + t * nextWaypoint.LongLat; var altitude = waypoint.Altitude.HasValue && nextWaypoint.Altitude.HasValue ? (double?)((1 - t) * waypoint.Altitude.Value + t * nextWaypoint.Altitude.Value) : null; var heartRate = waypoint.HeartRate.HasValue && nextWaypoint.HeartRate.HasValue ? (double?)((1 - t) * waypoint.HeartRate.Value + t * nextWaypoint.HeartRate.Value) : null; var mapReadingState = (mapReadingIndex + 1) % 2 == 0 ? MapReadingState.StartReading : MapReadingState.EndReading; newRouteSegment.Waypoints.Add(new Waypoint(time, longLat, altitude, heartRate, mapReadingState)); mapReadingIndex++; } waypointCount++; } newRouteSegments.Add(newRouteSegment); } return newRouteSegments; } #endregion #region Nested classes public class CutRouteData { private List segments = new List(); public List Segments { get { return segments; } set { segments = value; } } public CutType CutType { get; set; } public Waypoint WaypointInsertedAtCut { get; set; } } private class TimedAttribute { public DateTime Time { get; set; } public double? Value { get; set; } } #endregion public void AddTimeOffset(TimeSpan offset) { foreach (RouteSegment segment in Segments) { foreach (Waypoint waypoint in segment.Waypoints) { waypoint.Time = waypoint.Time.Add(offset); } } } /// /// Returns the parameterized location of the start of the corresponding lap, given a parameterized location. /// /// The parameterized location that defines the lap. /// public ParameterizedLocation GetLapStartParameterizedLocation(ParameterizedLocation pl) { var currentTime = GetTimeFromParameterizedLocation(pl); var lastLapTime = lapTimes[0]; foreach (var lapTime in lapTimes) { if (lapTime > lastLapTime && lapTime < currentTime) { lastLapTime = lapTime; } } return GetParameterizedLocationFromTime(lastLapTime, pl, ParameterizedLocation.Direction.Backward); } /// /// Returns the parameterized location of the end of the corresponding lap, given a parameterized location. /// /// The parameterized location that defines the lap. /// public ParameterizedLocation GetLapEndParameterizedLocation(ParameterizedLocation pl) { var currentTime = GetTimeFromParameterizedLocation(pl); var nextLapTime = lapTimes[lapTimes.Count - 1]; foreach (var lapTime in lapTimes) { if (lapTime < nextLapTime && lapTime >= currentTime) { nextLapTime = lapTime; } } return GetParameterizedLocationFromTime(nextLapTime, pl, ParameterizedLocation.Direction.Forward); } } [Serializable] public class RouteSegment { private List waypoints = new List(); public List Waypoints { get { return waypoints; } set { waypoints = value; } } public Waypoint FirstWaypoint { get { return waypoints.Count == 0 ? null : waypoints[0]; } } public Waypoint LastWaypoint { get { return waypoints.Count == 0 ? null : waypoints[waypoints.Count - 1]; } } } [Serializable] public class Waypoint { // core data of a waypoint private double? altitude; private double? heartRate; private LongLat longLat; private DateTime time; private MapReadingState? mapReadingState; // dictionary for storing calculated (possibly smoothed) attribute values (speed, altitude, etc) of this waypoint. [NonSerialized] private Dictionary attributes; public Waypoint() { attributes = new Dictionary(); } public Waypoint(DateTime time, LongLat longLat, double? altitude, double? heartRate, MapReadingState? mapReadingState) : this() { this.time = time; this.longLat = longLat; this.altitude = altitude; this.heartRate = heartRate; this.mapReadingState = mapReadingState; } public DateTime Time { get { return time; } set { time = value; } } public LongLat LongLat { get { return longLat; } set { longLat = value; } } public double? Altitude { get { return altitude; } set { altitude = value; } } public double? HeartRate { get { return heartRate; } set { heartRate = value; } } public MapReadingState? MapReadingState { get { return mapReadingState; } set { mapReadingState = value; } } public Waypoint Clone() { var newWaypoint = new Waypoint(time, longLat, altitude, heartRate, mapReadingState); foreach (var attributeKey in Attributes.Keys) { newWaypoint.Attributes[attributeKey] = Attributes[attributeKey]; } return newWaypoint; } public Dictionary Attributes { get { // need to ensure that this is not null due to backward compatibility if (attributes == null) attributes = new Dictionary(); return attributes; } } /// /// Returns the original heart rate or altitude. /// /// Must be WaypointAttribute.HeartRate or WaypointAttribute.Altitude /// public double? GetOriginalAttribute(WaypointAttribute attribute) { if (attribute != WaypointAttribute.HeartRate && attribute != WaypointAttribute.Altitude) throw new ArgumentException("The 'attribute' parameter must be either WaypointAttribute.HeartRate or WaypointAttribute.Altitude."); switch (attribute) { case WaypointAttribute.HeartRate: return HeartRate; case WaypointAttribute.Altitude: return Altitude; } return null; } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteAdjustManager.cs000066400000000000000000000031511446222606700302440ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Drawing; namespace QuickRoute.BusinessEntities { public static class RouteAdjustmentManager { public static GeneralMatrix CreateInitialTransformationMatrix(Route route, Size mapSize, LongLat projectionOrigin) { // create initial adjustment: route should fit in the 75% inner rectangle of the map RectangleD routeRectangle = route.BoundingProjectedRectangle(projectionOrigin); RectangleD mapRectangle = new RectangleD(1.0 / 8.0 * mapSize.Width, 1.0 / 8.0 * mapSize.Height, 3.0 / 4.0 * mapSize.Width, 3.0 / 4.0 * mapSize.Height); // check width/height ratio for each of the rectangles, and adjust the map rectangle to have the same ratio as the route rectangle double routeRatio = routeRectangle.Width / routeRectangle.Height; double mapRatio = mapRectangle.Width / mapRectangle.Height; if (mapRatio < routeRatio) { // too narrow mapRectangle = new RectangleD(mapRectangle.Left, mapRectangle.Center.Y - mapRectangle.Width / routeRatio / 2.0, mapRectangle.Width, mapRectangle.Width / routeRatio); } else { // too wide mapRectangle = new RectangleD(mapRectangle.Center.X - mapRectangle.Height * routeRatio / 2.0, mapRectangle.Top, mapRectangle.Height * routeRatio, mapRectangle.Height); } GeneralMatrix t = LinearAlgebraUtil.CalculateTransformationMatrix(routeRectangle.LowerLeft, mapRectangle.UpperLeft, routeRectangle.UpperRight, mapRectangle.LowerRight, null, false); return t; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteLineSettings.cs000066400000000000000000000062471446222606700301400ustar00rootroot00000000000000using System; using System.Runtime.Serialization; using System.Drawing; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities { [Serializable] public class RouteLineSettings : GlobalizedObject, ISerializable { private ColorRange colorRange; private double width; private Color maskColor; private double maskWidth; private bool maskVisible; private double alphaAdjustment; private double monochromeWidth; private Color monochromeColor; public RouteLineSettings() { } public RouteLineSettings(ColorRange colorRange, double width, Color maskColor, double maskWidth, bool maskVisible, double alphaAdjustment) { this.colorRange = colorRange; this.width = width; this.maskColor = maskColor; this.maskWidth = maskWidth; this.maskVisible = maskVisible; AlphaAdjustment = alphaAdjustment; } protected RouteLineSettings(SerializationInfo info, StreamingContext context) { colorRange = (ColorRange)(info.GetValue("colorRange", typeof(ColorRange))); width = info.GetDouble("width"); maskColor = Color.FromArgb(info.GetInt32("maskColor")); maskWidth = info.GetDouble("maskWidth"); maskVisible = info.GetBoolean("maskVisible"); alphaAdjustment = info.GetDouble("alphaAdjustment"); if(info.MemberCount > 6) { monochromeColor = Color.FromArgb(info.GetInt32("monochromeColor")); monochromeWidth = info.GetDouble("monochromeWidth"); } else { monochromeColor = Color.FromArgb(160, Color.Red); monochromeWidth = 3; } } void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("colorRange", colorRange, typeof(ColorRange)); info.AddValue("width", width); info.AddValue("maskColor", maskColor.ToArgb()); info.AddValue("maskWidth", maskWidth); info.AddValue("maskVisible", maskVisible); info.AddValue("alphaAdjustment", alphaAdjustment); info.AddValue("monochromeWidth", monochromeWidth); info.AddValue("monochromeColor", monochromeColor.ToArgb()); } public ColorRange ColorRange { get { return colorRange; } set { colorRange = value; } } public double Width { get { return width; } set { width = value; } } public Color MaskColor { get { return maskColor; } set { maskColor = value; } } public double MaskWidth { get { return maskWidth; } set { maskWidth = value; } } public bool MaskVisible { get { return maskVisible; } set { maskVisible = value; } } public double AlphaAdjustment { get { return alphaAdjustment; } set { alphaAdjustment = Math.Min(1, Math.Max(-1, value)); } } public double MonochromeWidth { get { return monochromeWidth; } set { monochromeWidth = value; } } public Color MonochromeColor { get { return monochromeColor; } set { monochromeColor = value; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/000077500000000000000000000000001446222606700273245ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Altitude.cs000066400000000000000000000026421446222606700314320ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class Altitude : RouteMomentaneousProperty { public Altitude(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public Altitude(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, Location); AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/AltitudeDifference.cs000066400000000000000000000074311446222606700334060ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class AltitudeDifference : RouteSpanProperty { public AltitudeDifference(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AltitudeDifference(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } double? sum = 0; for (var i = Start.SegmentIndex; i <= End.SegmentIndex; i++) { var startPL = new ParameterizedLocation(i, 0); var endPL = new ParameterizedLocation(i, Session.Route.Segments[i].Waypoints.Count - 1); if (startPL < Start) startPL = Start; if (endPL > End) endPL = End; var startAltitude = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, startPL); var endAltitude = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, endPL); if (startAltitude == null || endAltitude == null) { sum = null; break; } sum += endAltitude.Value - startAltitude.Value; } value = sum; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AltitudeDifferenceFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; var d = ((double?)v); var s = d.HasValue ? string.Format(provider, format, d.Value) : "-"; if (d.HasValue && provider == null) s = (d.Value > 0 ? "+" : "") + s; return s; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } public class AltitudeDifferenceFromStart : RouteFromStartProperty { public AltitudeDifferenceFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AltitudeDifferenceFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AltitudeDifference(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; var d = ((double?)v); var s = d.HasValue ? string.Format(provider, format, d.Value) : "-"; if (d.HasValue && provider == null) s = (d.Value > 0 ? "+" : "") + s; return s; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Ascent.cs000066400000000000000000000105031446222606700310670ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class Ascent : RouteSpanProperty { public Ascent(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public Ascent(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var sum = 0.0; var pl = new ParameterizedLocation(Start); double? previousAltitude = 0; // try to get value of close location from cache if(HasCache) { var closestProperty = CacheManager.GetLastAdded(GetType(), Locations); if(closestProperty != null) { if(closestProperty.Value != null) sum = (double)closestProperty.Value; pl = new ParameterizedLocation(closestProperty.Locations.IsSpan ? closestProperty.Locations.End : closestProperty.Locations.Location); previousAltitude = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, pl); pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } } while (pl != null && pl <= End) { var altitude = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, pl); if (pl != Start && !Session.Route.IsFirstPLInSegment(pl)) { if (altitude.HasValue) { if (altitude > previousAltitude) sum += altitude.Value - previousAltitude.Value; } else { value = null; return; } } previousAltitude = altitude; if (pl >= End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > End) pl = new ParameterizedLocation(End); } value = (double?)sum; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AscentFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } public class AscentFromStart : RouteFromStartProperty { public AscentFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AscentFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new Ascent(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } } AverageDirectionDeviationToNextLap.cs000066400000000000000000000115411446222606700364530ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using System.Collections.Generic; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageDirectionDeviationToNextLap : RouteSpanProperty { public AverageDirectionDeviationToNextLap(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageDirectionDeviationToNextLap(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var pl = new ParameterizedLocation(Start); var nodes = new List(); while (pl <= End) { var directionDeviationToNextLap = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.DirectionDeviationToNextLap, pl); var nodeType = NodeType.Intermediate; if (Session.Route.IsFirstPLInSegment(pl)) nodeType = NodeType.Begin; if (Session.Route.IsLastPLInSegment(pl)) nodeType = NodeType.End; nodes.Add(new Node() { DirectionDeviationToNextLap = directionDeviationToNextLap.Value, Time = Session.Route.GetTimeFromParameterizedLocation(pl), NodeType = nodeType }); if (pl >= End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > End) pl = new ParameterizedLocation(End); } if (nodes.Count > 0) { nodes[0].NodeType = NodeType.Begin; nodes[nodes.Count - 1].NodeType = NodeType.End; } var sum = 0.0; var totalDuration = 0.0; for (var i = 0; i < nodes.Count; i++) { double duration = 0; switch (nodes[i].NodeType) { case NodeType.Begin: duration = (nodes[i + 1].Time - nodes[i].Time).TotalSeconds / 2; break; case NodeType.End: duration = (nodes[i].Time - nodes[i - 1].Time).TotalSeconds / 2; break; case NodeType.Intermediate: duration = (nodes[i].Time - nodes[i - 1].Time).TotalSeconds / 2 + (nodes[i + 1].Time - nodes[i].Time).TotalSeconds / 2; break; } sum += duration * nodes[i].DirectionDeviationToNextLap; totalDuration += duration; } value = (double?)(totalDuration == 0 ? 0 : sum / totalDuration); AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageDirectionDeviationToNextLapFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return true; } } private class Node { public double DirectionDeviationToNextLap; public DateTime Time; public NodeType NodeType; } private enum NodeType { Begin, Intermediate, End } } public class AverageDirectionDeviationToNextLapFromStart : RouteFromStartProperty { public AverageDirectionDeviationToNextLapFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageDirectionDeviationToNextLapFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AverageDirectionDeviationToNextLap(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/AverageHeartRate.cs000066400000000000000000000115341446222606700330310ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageHeartRate : RouteSpanProperty { public AverageHeartRate(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageHeartRate(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var pl = new ParameterizedLocation(Start); var nodes = new List(); while (pl <= End) { var hr = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.HeartRate, pl); if(hr.HasValue) { var nodeType = NodeType.Intermediate; if (Session.Route.IsFirstPLInSegment(pl)) nodeType = NodeType.Begin; if (Session.Route.IsLastPLInSegment(pl)) nodeType = NodeType.End; nodes.Add(new HRNode() { HR = hr.Value, Time = Session.Route.GetTimeFromParameterizedLocation(pl), NodeType = nodeType }); } else { value = null; return; } if (pl >= End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > End) pl = new ParameterizedLocation(End); } if (nodes.Count > 0) { nodes[0].NodeType = NodeType.Begin; nodes[nodes.Count - 1].NodeType = NodeType.End; } var heartbeats = 0.0; var totalDuration = 0.0; for(var i=1; i 0 ? "+" : "") + s; return s; } public override string MaxWidthString { get { return ValueToString(99.9); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } public class AverageInclinationFromStart : RouteFromStartProperty { public AverageInclinationFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageInclinationFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AverageInclination(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n1}"; var d = ((double?)v); var s = d.HasValue ? string.Format(provider, format, d.Value) : "-"; if (d.HasValue && provider == null) s = (d.Value > 0 ? "+" : "") + s; return s; } public override string MaxWidthString { get { return ValueToString(99.9); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/AverageMapReadingTime.cs000066400000000000000000000100621446222606700337730ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageMapReadingTime : RouteSpanProperty { public AverageMapReadingTime(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageMapReadingTime(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = TimeSpan.Zero; } else { var mapReadingDuration = (TimeSpan)new MapReadingDurationInSpan(Session, Locations, RetrieveExternalProperty).Value; var numberOfMapReadings = (int)new NumberOfMapReadings(Session, Locations, RetrieveExternalProperty).Value; value = numberOfMapReadings == 0 ? TimeSpan.Zero : TimeSpan.FromSeconds(mapReadingDuration.TotalSeconds / numberOfMapReadings); } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageMapReadingTimeFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if ((TimeSpan)v == TimeSpan.Zero) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime) {NoOfDecimals = 1}; return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(0, 9, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class AverageMapReadingTimeFromStart : RouteFromStartProperty { public AverageMapReadingTimeFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageMapReadingTimeFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan)(new AverageMapReadingTime(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((int)Value).CompareTo((int)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if ((TimeSpan)v == TimeSpan.Zero) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime) { NoOfDecimals = 1 }; return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(0, 9, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }AveragePaceWhenNotReadingMap.cs000066400000000000000000000125131446222606700351740ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class AveragePaceWhenNotReadingMap : RouteSpanProperty { public AveragePaceWhenNotReadingMap(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AveragePaceWhenNotReadingMap(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = null; } else { var pl = Locations.Start; var previousEndReadingTime = default(DateTime); double previousEndReadingDistance = 0; var totalTime = TimeSpan.Zero; var totalDistance = 0.0; while (true) { var w = pl.IsNode ? Session.Route.Segments[pl.SegmentIndex].Waypoints[(int)pl.Value] : Session.Route.CreateWaypointFromParameterizedLocation(pl); if (w.MapReadingState == BusinessEntities.MapReadingState.EndReading || (w.MapReadingState == BusinessEntities.MapReadingState.NotReading && pl == Locations.Start)) { previousEndReadingTime = w.Time; previousEndReadingDistance = (double)w.Attributes[WaypointAttribute.Distance]; } if ((w.MapReadingState == BusinessEntities.MapReadingState.StartReading && pl != Locations.Start) || (w.MapReadingState == BusinessEntities.MapReadingState.NotReading && pl == Locations.End)) { totalTime += w.Time - previousEndReadingTime; totalDistance += (double)w.Attributes[WaypointAttribute.Distance] - previousEndReadingDistance; } if (pl >= Locations.End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > Locations.End) pl = new ParameterizedLocation(Locations.End); } value = totalDistance == 0 ? (TimeSpan?)null : TimeSpan.FromSeconds(Math.Min(86400, totalTime.TotalSeconds) /* to prevent overflow */ / (totalDistance / 1000)); } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AveragePaceWhenNotReadingMapFromStart); } public override int CompareTo(object obj) { return ((TimeSpan?)Value ?? TimeSpan.MaxValue).CompareTo((TimeSpan?)(((RouteProperty)obj).Value) ?? TimeSpan.MaxValue); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (v == null) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class AveragePaceWhenNotReadingMapFromStart : RouteFromStartProperty { public AveragePaceWhenNotReadingMapFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AveragePaceWhenNotReadingMapFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan?)(new AveragePaceWhenNotReadingMap(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan?)Value ?? TimeSpan.MaxValue).CompareTo((TimeSpan?)(((RouteProperty)obj).Value) ?? TimeSpan.MaxValue); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (v == null) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }AveragePaceWhenReadingMap.cs000066400000000000000000000124201446222606700345100ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class AveragePaceWhenReadingMap : RouteSpanProperty { public AveragePaceWhenReadingMap(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AveragePaceWhenReadingMap(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = null; } else { var pl = Locations.Start; var previousStartReadingTime = default(DateTime); double previousStartReadingDistance = 0; var totalTime = TimeSpan.Zero; var totalDistance = 0.0; while (true) { var w = pl.IsNode ? Session.Route.Segments[pl.SegmentIndex].Waypoints[(int)pl.Value] : Session.Route.CreateWaypointFromParameterizedLocation(pl); if (w.MapReadingState == BusinessEntities.MapReadingState.StartReading || (w.MapReadingState == BusinessEntities.MapReadingState.Reading && pl == Locations.Start)) { previousStartReadingTime = w.Time; previousStartReadingDistance = (double)w.Attributes[WaypointAttribute.Distance]; } if ((w.MapReadingState == BusinessEntities.MapReadingState.EndReading && pl != Locations.Start) || (w.MapReadingState == BusinessEntities.MapReadingState.Reading && pl == Locations.End)) { totalTime += w.Time - previousStartReadingTime; totalDistance += (double) w.Attributes[WaypointAttribute.Distance] - previousStartReadingDistance; } if (pl >= Locations.End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > Locations.End) pl = new ParameterizedLocation(Locations.End); } value = totalDistance == 0 ? (TimeSpan?)null : TimeSpan.FromSeconds(totalTime.TotalSeconds / ( totalDistance / 1000)); } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AveragePaceWhenReadingMapFromStart); } public override int CompareTo(object obj) { return ((TimeSpan?)Value ?? TimeSpan.MaxValue).CompareTo((TimeSpan?)(((RouteProperty)obj).Value) ?? TimeSpan.MaxValue); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (v == null) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class AveragePaceWhenReadingMapFromStart : RouteFromStartProperty { public AveragePaceWhenReadingMapFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AveragePaceWhenReadingMapFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan?)(new AveragePaceWhenReadingMap(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan?)Value ?? TimeSpan.MaxValue).CompareTo((TimeSpan?)(((RouteProperty)obj).Value) ?? TimeSpan.MaxValue); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (v == null) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/AverageRoutePace.cs000066400000000000000000000065211446222606700330410ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageRoutePace : RouteSpanProperty { public AverageRoutePace(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageRoutePace(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = ConvertUtil.ToPace((double)new AverageRouteSpeed(Session, Start, End, RetrieveExternalProperty).Value); AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageRoutePaceFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999,59,59)); } } public override bool ContainsValue { get { return true; } } } public class AverageRoutePaceFromStart : RouteFromStartProperty { public AverageRoutePaceFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageRoutePaceFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AverageRoutePace(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/AverageRouteSpeed.cs000066400000000000000000000057211446222606700332320ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageRouteSpeed : RouteSpanProperty { public AverageRouteSpeed(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageRouteSpeed(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var routeLength = (double)new RouteDistance(Session, Start, End, RetrieveExternalProperty).Value; var elapsedTime = (TimeSpan)new ElapsedTime(Session, Start, End, RetrieveExternalProperty).Value; value = elapsedTime.TotalSeconds == 0 ? 0 : 3.6 * routeLength / elapsedTime.TotalSeconds; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageRouteSpeedFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { // speed in km/h if (format == null) format = "{0:n1}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(999.9); } } public override bool ContainsValue { get { return true; } } } public class AverageRouteSpeedFromStart : RouteFromStartProperty { public AverageRouteSpeedFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageRouteSpeedFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AverageRouteSpeed(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { // speed in km/h if (format == null) format = "{0:n1}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(999.9); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/AverageStraightLinePace.cs000066400000000000000000000066201446222606700343400ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageStraightLinePace : RouteSpanProperty { public AverageStraightLinePace(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageStraightLinePace(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = ConvertUtil.ToPace((double)new AverageStraightLineSpeed(Session, Start, End, RetrieveExternalProperty).Value); AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageStraightLinePaceFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return true; } } } public class AverageStraightLinePaceFromStart : RouteFromStartProperty { public AverageStraightLinePaceFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageStraightLinePaceFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AverageStraightLinePace(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(999, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } AverageStraightLineSpeed.cs000066400000000000000000000060341446222606700344500ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageStraightLineSpeed : RouteSpanProperty { public AverageStraightLineSpeed(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageStraightLineSpeed(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var straightLineLength = (double)new StraightLineDistance(Session, Start, End, RetrieveExternalProperty).Value; var elapsedTime = (TimeSpan)new ElapsedTime(Session, Start, End, RetrieveExternalProperty).Value; value = elapsedTime.TotalSeconds == 0 ? 0 : 3.6 * straightLineLength / elapsedTime.TotalSeconds; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageStraightLineSpeedFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { // speed in km/h if (format == null) format = "{0:n1}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(999.9); } } public override bool ContainsValue { get { return true; } } } public class AverageStraightLineSpeedFromStart : RouteFromStartProperty { public AverageStraightLineSpeedFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageStraightLineSpeedFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new AverageStraightLineSpeed(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { // speed in km/h if (format == null) format = "{0:n1}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(999.9); } } public override bool ContainsValue { get { return true; } } } } AverageTimeBetweenMapReadings.cs000066400000000000000000000114611446222606700354150ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class AverageTimeBetweenMapReadings : RouteSpanProperty { public AverageTimeBetweenMapReadings(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public AverageTimeBetweenMapReadings(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = TimeSpan.Zero; } else { var pl = Locations.Start; DateTime? previousEndReadingTime = null; var totalTime = TimeSpan.Zero; var count = 0; while(true) { if(pl.Value == 0) previousEndReadingTime = null; // reset when entering new segment var w = pl.IsNode ? Session.Route.Segments[pl.SegmentIndex].Waypoints[(int) pl.Value] : Session.Route.CreateWaypointFromParameterizedLocation(pl); if(w.MapReadingState == BusinessEntities.MapReadingState.EndReading) { previousEndReadingTime = w.Time; } if (w.MapReadingState == BusinessEntities.MapReadingState.StartReading && previousEndReadingTime.HasValue) { totalTime += w.Time - previousEndReadingTime.Value; count++; } if (pl >= Locations.End) break; pl++; if (pl > Locations.End) pl = new ParameterizedLocation(Locations.End); } value = new TimeSpan(count == 0 ? 0 : totalTime.Ticks / count); } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(AverageTimeBetweenMapReadingsFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if ((TimeSpan)v == TimeSpan.Zero) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime) { NoOfDecimals = 1 }; return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(0, 9, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class AverageTimeBetweenMapReadingsFromStart : RouteFromStartProperty { public AverageTimeBetweenMapReadingsFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public AverageTimeBetweenMapReadingsFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan)(new AverageTimeBetweenMapReadings(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((int)Value).CompareTo((int)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if ((TimeSpan)v == TimeSpan.Zero) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime) { NoOfDecimals = 1 }; return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(0, 9, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/BlankRouteProperty.cs000066400000000000000000000013451446222606700334710ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public class BlankRouteProperty : RouteProperty { public BlankRouteProperty() : base(null, null, null) { } protected override void Calculate() { value = 0; } public override string MaxWidthString { get { return ToString(); } } public override bool ContainsValue { get { return false; } } protected override string ValueToString(object v, string format, IFormatProvider provider) { return ""; } public override string ToString() { return ValueToString(Value); } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/CircleTime.cs000066400000000000000000000037721446222606700317040ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class CircleTime : RouteMomentaneousProperty { public CircleTime(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public CircleTime(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan)(new CircleTimeBackward(Session, Location, RetrieveExternalProperty).Value) + (TimeSpan)(new CircleTimeForward(Session, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(23, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/CircleTimeAtEndOfSpan.cs000066400000000000000000000136571446222606700337320ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class CircleTimeAtEndOfSpan : RouteSpanProperty { public CircleTimeAtEndOfSpan(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public CircleTimeAtEndOfSpan(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var currentLongLat = Session.Route.GetLocationFromParameterizedLocation(End); var lastPL = new ParameterizedLocation(End); ParameterizedLocation thisPL; ParameterizedLocation thresholdPL; double lastNodeDistance = 0; double thisNodeDistance = 0; while (true) { thisPL = Session.Route.GetNextPLNode(lastPL, ParameterizedLocation.Direction.Backward); if (thisPL == null || Session.Route.IsFirstPLInSegment(thisPL) || thisPL < Start) break; var longLat = Session.Route.GetLocationFromParameterizedLocation(thisPL); thisNodeDistance = LinearAlgebraUtil.DistancePointToPointLongLat(longLat, currentLongLat); if (thisNodeDistance > DistanceThreshold) break; lastPL = thisPL; lastNodeDistance = thisNodeDistance; } if (thisPL == null) thisPL = new ParameterizedLocation(Start.SegmentIndex, 0); if (Session.Route.IsFirstPLInSegment(thisPL)) { thresholdPL = thisPL; } else if (thisPL < Start) { thresholdPL = new ParameterizedLocation(Start); } else { var t = thisNodeDistance - lastNodeDistance == 0 ? 1 : (DistanceThreshold - lastNodeDistance) / (thisNodeDistance - lastNodeDistance); thresholdPL = new ParameterizedLocation(thisPL.SegmentIndex, lastPL.Value - t * (lastPL.Value - thisPL.Value)); } value = Session.Route.GetTimeFromParameterizedLocation(End) - Session.Route.GetTimeFromParameterizedLocation(thresholdPL); AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(CircleTimeAtEndOfSpanFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } public class CircleTimeAtEndOfSpanFromStart : RouteFromStartProperty { public CircleTimeAtEndOfSpanFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public CircleTimeAtEndOfSpanFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var time = Session.Route.GetTimeFromParameterizedLocation(Location); var sum = new TimeSpan(); for (var i = 1; i < Session.Laps.Count; i++) { if (Session.Laps[i].LapType != LapType.Start) { if (time >= Session.Laps[i].Time) { sum += (TimeSpan)new CircleTimeAtEndOfSpan( Session, Session.Route.GetParameterizedLocationFromTime(Session.Laps[i - 1].Time), Session.Route.GetParameterizedLocationFromTime(Session.Laps[i].Time), RetrieveExternalProperty).Value; } } } value = sum; AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/CircleTimeAtStartOfSpan.cs000066400000000000000000000136671446222606700343220ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class CircleTimeAtStartOfSpan : RouteSpanProperty { public CircleTimeAtStartOfSpan(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public CircleTimeAtStartOfSpan(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var currentLongLat = Session.Route.GetLocationFromParameterizedLocation(Start); var lastPL = new ParameterizedLocation(Start); ParameterizedLocation thisPL; ParameterizedLocation thresholdPL; double lastNodeDistance = 0; double thisNodeDistance = 0; while (true) { thisPL = Session.Route.GetNextPLNode(lastPL, ParameterizedLocation.Direction.Forward); if (thisPL == null || Session.Route.IsLastPLInSegment(thisPL) || thisPL > End) break; var longLat = Session.Route.GetLocationFromParameterizedLocation(thisPL); thisNodeDistance = LinearAlgebraUtil.DistancePointToPointLongLat(longLat, currentLongLat); if (thisNodeDistance > DistanceThreshold) break; lastPL = thisPL; lastNodeDistance = thisNodeDistance; } if (thisPL == null) thisPL = new ParameterizedLocation(Start.SegmentIndex, Session.Route.Segments[Start.SegmentIndex].Waypoints.Count - 1); if (Session.Route.IsLastPLInSegment(thisPL)) { thresholdPL = thisPL; } else if (thisPL > End) { thresholdPL = new ParameterizedLocation(End); } else { var t = thisNodeDistance - lastNodeDistance == 0 ? 1 : (DistanceThreshold - lastNodeDistance) / (thisNodeDistance - lastNodeDistance); thresholdPL = new ParameterizedLocation(thisPL.SegmentIndex, lastPL.Value + t * (thisPL.Value - lastPL.Value)); } value = Session.Route.GetTimeFromParameterizedLocation(thresholdPL) - Session.Route.GetTimeFromParameterizedLocation(Start); AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(CircleTimeAtStartOfSpanFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } public class CircleTimeAtStartOfSpanFromStart : RouteFromStartProperty { public CircleTimeAtStartOfSpanFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public CircleTimeAtStartOfSpanFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var time = Session.Route.GetTimeFromParameterizedLocation(Location); var sum = new TimeSpan(); for (var i = 1; i < Session.Laps.Count; i++) { if (Session.Laps[i].LapType != LapType.Start) { if (time >= Session.Laps[i].Time) { sum += (TimeSpan)new CircleTimeAtStartOfSpan( Session, Session.Route.GetParameterizedLocationFromTime(Session.Laps[i - 1].Time), Session.Route.GetParameterizedLocationFromTime(Session.Laps[i].Time), RetrieveExternalProperty).Value; } } } value = sum; AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/CircleTimeBackward.cs000066400000000000000000000063601446222606700333370ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class CircleTimeBackward : RouteMomentaneousProperty { public CircleTimeBackward(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public CircleTimeBackward(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var currentLongLat = Session.Route.GetLocationFromParameterizedLocation(Location); var lastPL = new ParameterizedLocation(Location); ParameterizedLocation thisPL; ParameterizedLocation thresholdPL; double lastNodeDistance = 0; double thisNodeDistance = 0; while (true) { thisPL = Session.Route.GetNextPLNode(lastPL, ParameterizedLocation.Direction.Backward); if(thisPL == null || Session.Route.IsFirstPLInSegment(thisPL)) break; var longLat = Session.Route.GetLocationFromParameterizedLocation(thisPL); thisNodeDistance = LinearAlgebraUtil.DistancePointToPointLongLat(longLat, currentLongLat); if (thisNodeDistance > DistanceThreshold) break; lastPL = thisPL; lastNodeDistance = thisNodeDistance; } if (thisPL == null) thisPL = new ParameterizedLocation(Location.SegmentIndex, 0); if (Session.Route.IsFirstPLInSegment(thisPL)) { thresholdPL = thisPL; } else { var t = thisNodeDistance - lastNodeDistance == 0 ? 1 : (DistanceThreshold - lastNodeDistance) / (thisNodeDistance - lastNodeDistance); thresholdPL = new ParameterizedLocation(thisPL.SegmentIndex, lastPL.Value - t * (lastPL.Value - thisPL.Value)); } value = Session.Route.GetTimeFromParameterizedLocation(Location) - Session.Route.GetTimeFromParameterizedLocation(thresholdPL); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(23, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/CircleTimeForward.cs000066400000000000000000000064441446222606700332300ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class CircleTimeForward : RouteMomentaneousProperty { public CircleTimeForward(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public CircleTimeForward(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var currentLongLat = Session.Route.GetLocationFromParameterizedLocation(Location); var lastPL = new ParameterizedLocation(Location); ParameterizedLocation thisPL; ParameterizedLocation thresholdPL; double lastNodeDistance = 0; double thisNodeDistance = 0; while (true) { thisPL = Session.Route.GetNextPLNode(lastPL, ParameterizedLocation.Direction.Forward); if (thisPL == null || Session.Route.IsLastPLInSegment(thisPL)) break; var longLat = Session.Route.GetLocationFromParameterizedLocation(thisPL); thisNodeDistance = LinearAlgebraUtil.DistancePointToPointLongLat(longLat, currentLongLat); if(thisNodeDistance > DistanceThreshold) break; lastPL = thisPL; lastNodeDistance = thisNodeDistance; } if (thisPL == null) thisPL = new ParameterizedLocation(Location.SegmentIndex, Session.Route.Segments[Location.SegmentIndex].Waypoints.Count - 1); if (Session.Route.IsLastPLInSegment(thisPL)) { thresholdPL = thisPL; } else { var t = thisNodeDistance - lastNodeDistance == 0 ? 1 : (DistanceThreshold - lastNodeDistance) / (thisNodeDistance - lastNodeDistance); thresholdPL = new ParameterizedLocation(thisPL.SegmentIndex, lastPL.Value + t * (thisPL.Value - lastPL.Value)); } value = Session.Route.GetTimeFromParameterizedLocation(thresholdPL) - Session.Route.GetTimeFromParameterizedLocation(Location); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(23, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/CircleTimeInSpan.cs000066400000000000000000000101041446222606700330000ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class CircleTimeInSpan : RouteSpanProperty { public CircleTimeInSpan(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public CircleTimeInSpan(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if(distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan)(new CircleTimeAtStartOfSpan(Session, Start, End, RetrieveExternalProperty).Value) + (TimeSpan)(new CircleTimeAtEndOfSpan(Session, Start, End, RetrieveExternalProperty).Value); AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(CircleTimeInSpanFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } public class CircleTimeInSpanFromStart : RouteFromStartProperty { public CircleTimeInSpanFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public CircleTimeInSpanFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } private double? distanceThreshold; protected double DistanceThreshold { get { if (distanceThreshold == null && RetrieveExternalProperty != null) distanceThreshold = RetrieveExternalProperty("CircleTimeRadius"); return distanceThreshold ?? 0; } } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan)(new CircleTimeInSpan(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Descent.cs000066400000000000000000000105031446222606700312370ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class Descent : RouteSpanProperty { public Descent(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public Descent(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var sum = 0.0; var pl = new ParameterizedLocation(Start); double? previousAltitude = 0; // try to get value of close location from cache if (HasCache) { var closestProperty = CacheManager.GetLastAdded(GetType(), Locations); if (closestProperty != null) { if (closestProperty.Value != null) sum = (double)closestProperty.Value; pl = new ParameterizedLocation(closestProperty.Locations.IsSpan ? closestProperty.Locations.End : closestProperty.Locations.Location); previousAltitude = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, pl); pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } } while (pl != null && pl <= End) { var altitude = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Altitude, pl); if (pl != Start && !Session.Route.IsFirstPLInSegment(pl)) { if (altitude.HasValue) { if (altitude < previousAltitude) sum += previousAltitude.Value - altitude.Value; } else { value = null; return; } } previousAltitude = altitude; if (pl >= End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > End) pl = new ParameterizedLocation(End); } value = sum; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(DescentFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } public class DescentFromStart : RouteFromStartProperty { public DescentFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public DescentFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new Descent(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Direction.cs000066400000000000000000000027411446222606700315770ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class Direction : RouteMomentaneousProperty { public Direction(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public Direction(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Direction, Location); AddToCache(); } public override int CompareTo(object obj) { return (Convert.ToDouble(Value)).CompareTo(Convert.ToDouble(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return true; } } } }DirectionDeviationToNextLap.cs000066400000000000000000000030511446222606700351550ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class DirectionDeviationToNextLap : RouteMomentaneousProperty { public DirectionDeviationToNextLap(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public DirectionDeviationToNextLap(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.DirectionDeviationToNextLap, Location); AddToCache(); } public override int CompareTo(object obj) { return (Convert.ToDouble(Value)).CompareTo(Convert.ToDouble(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return true; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/ElapsedTime.cs000066400000000000000000000072511446222606700320540ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class ElapsedTime : RouteSpanProperty { public ElapsedTime(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public ElapsedTime(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var sum = new TimeSpan(); for (var i = Start.SegmentIndex; i <= End.SegmentIndex; i++) { var startPL = new ParameterizedLocation(i, 0); var endPL = new ParameterizedLocation(i, Session.Route.Segments[i].Waypoints.Count-1); if (startPL < Start) startPL = Start; if (endPL > End) endPL = End; sum += Session.Route.GetTimeFromParameterizedLocation(endPL) - Session.Route.GetTimeFromParameterizedLocation(startPL); } value = sum; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(ElapsedTimeFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29,59,59)); } } public override bool ContainsValue { get { return true; } } } public class ElapsedTimeFromStart : RouteFromStartProperty { public ElapsedTimeFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public ElapsedTimeFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new ElapsedTime(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan) v); } return string.Format(provider, format ?? "{0}", (TimeSpan) v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/HeartRate.cs000066400000000000000000000026441446222606700315400ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class HeartRate : RouteMomentaneousProperty { public HeartRate(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public HeartRate(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.HeartRate, Location); AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.HeartRate); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/ImageX.cs000066400000000000000000000023131446222606700310240ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class ImageX : RouteMomentaneousProperty { public ImageX(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public ImageX(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.AdjustedRoute.GetLocationFromParameterizedLocation(Locations.Location).X; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { return string.Format(provider, format ?? "{0:n0}", v); } public override string MaxWidthString { get { return ValueToString(9999); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/ImageY.cs000066400000000000000000000023131446222606700310250ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class ImageY : RouteMomentaneousProperty { public ImageY(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public ImageY(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.AdjustedRoute.GetLocationFromParameterizedLocation(Locations.Location).Y; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { return string.Format(provider, format ?? "{0:n0}", v); } public override string MaxWidthString { get { return ValueToString(9999); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Inclination.cs000066400000000000000000000030031446222606700321160ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class Inclination : RouteMomentaneousProperty { public Inclination(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public Inclination(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Inclination, Location); AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n1}"; var d = ((double?)v); var s = d.HasValue ? string.Format(provider, format, d.Value) : "-"; if (d.HasValue && provider == null) s = (d.Value > 0 ? "+" : "") + s; return s; } public override string MaxWidthString { get { return ValueToString(99.9); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.Altitude); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/LapNumber.cs000066400000000000000000000045671446222606700315540ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public class LapNumber : RouteMomentaneousProperty { public LapNumber(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public LapNumber(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } // remove all start of segments (if they are not the end of another segment at the same time) var lapTimeCounts = new Dictionary(); var lapTimesWithoutSegmentStarts = new List(); foreach (var lapTime in Session.Route.LapTimes) { if (!lapTimeCounts.ContainsKey(lapTime)) lapTimeCounts.Add(lapTime, 0); lapTimeCounts[lapTime]++; } foreach (var rs in Session.Route.Segments) { if(lapTimeCounts.ContainsKey(rs.FirstWaypoint.Time)) lapTimeCounts[rs.FirstWaypoint.Time]--; } foreach (var item in lapTimeCounts) { for(var i=0; i Strings.Yes.Length ? Strings.No : Strings.Yes; } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class MapReadingDurationInSpan : RouteSpanProperty { public MapReadingDurationInSpan(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public MapReadingDurationInSpan(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = TimeSpan.Zero; } else { var pl = Locations.Start; DateTime previousStartReadingTime = default(DateTime); var totalTime = TimeSpan.Zero; while (true) { var w = pl.IsNode ? Session.Route.Segments[pl.SegmentIndex].Waypoints[(int)pl.Value] : Session.Route.CreateWaypointFromParameterizedLocation(pl); if (w.MapReadingState == BusinessEntities.MapReadingState.StartReading || (w.MapReadingState == BusinessEntities.MapReadingState.Reading && pl == Locations.Start)) { previousStartReadingTime = w.Time; } if ((w.MapReadingState == BusinessEntities.MapReadingState.EndReading && pl != Locations.Start) || (w.MapReadingState == BusinessEntities.MapReadingState.Reading && pl == Locations.End)) { totalTime += w.Time - previousStartReadingTime; } if (pl >= Locations.End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > Locations.End) pl = new ParameterizedLocation(Locations.End); } value = totalTime; } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(MapReadingDurationFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(0, 9, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class MapReadingDurationFromStart : RouteFromStartProperty { public MapReadingDurationFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public MapReadingDurationFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (TimeSpan)(new MapReadingDurationInSpan(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(0, 9, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/MapReadingPercentage.cs000066400000000000000000000070561446222606700336700ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class MapReadingPercentage : RouteSpanProperty { public MapReadingPercentage(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public MapReadingPercentage(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = 0.0; } else { var mapReadingDuration = (TimeSpan)new MapReadingDurationInSpan(Session, Locations, RetrieveExternalProperty).Value; var totalDuration = (TimeSpan)new ElapsedTime(Session, Locations, RetrieveExternalProperty).Value; value = mapReadingDuration.TotalSeconds/totalDuration.TotalSeconds; } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(MapReadingPercentageFromStart); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; return string.Format(provider, format ?? "{0:p1}", Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(1); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class MapReadingPercentageFromStart : RouteFromStartProperty { public MapReadingPercentageFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public MapReadingPercentageFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (double)new MapReadingPercentage(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value; AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; return string.Format(provider, format ?? "{0:p1}", Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(1); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/MapReadingState.cs000066400000000000000000000033761446222606700326740ustar00rootroot00000000000000using System; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.RouteProperties { public class MapReadingState : RouteMomentaneousProperty { public MapReadingState(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public MapReadingState(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = false; } else { value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.MapReadingState, Location) == 1; } AddToCache(); } public override int CompareTo(object obj) { return (Convert.ToDouble(Value)).CompareTo(Convert.ToDouble(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; return Convert.ToDouble(v) == 0 ? Strings.No : Strings.Yes; } public override string MaxWidthString { get { return Strings.No.Length > Strings.Yes.Length ? Strings.No : Strings.Yes; } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/MaxHeartRate.cs000066400000000000000000000100741446222606700322020ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class MaxHeartRate : RouteSpanProperty { public MaxHeartRate(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public MaxHeartRate(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } double? max = null; var pl = new ParameterizedLocation(Start); // try to get value of close location from cache if (HasCache) { var closestProperty = CacheManager.GetLastAdded(GetType(), Locations); if (closestProperty != null) { if (closestProperty.Value != null) max = (double)closestProperty.Value; pl = new ParameterizedLocation(closestProperty.Locations.IsSpan ? closestProperty.Locations.End : closestProperty.Locations.Location); pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } } while (pl <= End) { var hr = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.HeartRate, pl); if (hr.HasValue) { if (!max.HasValue || hr.Value > max.Value) max = hr.Value; } else { value = null; return; } if (pl >= End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > End) pl = new ParameterizedLocation(End); } if(max.HasValue) value = max.Value; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(MaxHeartRateFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.HeartRate); } } } public class MaxHeartRateFromStart : RouteFromStartProperty { public MaxHeartRateFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public MaxHeartRateFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new MaxHeartRate(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.HeartRate); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/MinHeartRate.cs000066400000000000000000000100761446222606700322020ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class MinHeartRate : RouteSpanProperty { public MinHeartRate(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public MinHeartRate(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } double? min = null; var pl = new ParameterizedLocation(Start); // try to get value of close location from cache if (HasCache) { var closestProperty = CacheManager.GetLastAdded(GetType(), Locations); if (closestProperty != null) { if (closestProperty.Value != null) min = (double)closestProperty.Value; pl = new ParameterizedLocation(closestProperty.Locations.IsSpan ? closestProperty.Locations.End : closestProperty.Locations.Location); pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } } while (pl <= End) { var hr = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.HeartRate, pl); if (hr.HasValue) { if (!min.HasValue || hr.Value < min.Value) min = hr.Value; } else { value = null; return; } if (pl >= End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > End) pl = new ParameterizedLocation(End); } if (min.HasValue) value = min.Value; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(MinHeartRateFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.HeartRate); } } } public class MinHeartRateFromStart : RouteFromStartProperty { public MinHeartRateFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public MinHeartRateFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new MinHeartRate(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; var d = ((double?)v); return d.HasValue ? string.Format(provider, format, d.Value) : "-"; } public override string MaxWidthString { get { return ValueToString((double?)999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.HeartRate); } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/NextMapReadingStart.cs000066400000000000000000000045311446222606700335420ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.RouteProperties { public class NextMapReadingStart : RouteMomentaneousProperty { public NextMapReadingStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public NextMapReadingStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = null; } else { var nextMapReadingStart = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.NextMapReadingStart, Location); value = nextMapReadingStart == null ? null : (TimeSpan?)TimeSpan.FromSeconds(nextMapReadingStart.Value); } AddToCache(); } public override int CompareTo(object obj) { if ((TimeSpan?)Value == null && (TimeSpan?)((RouteProperty)obj).Value == null) return 0; if ((TimeSpan?)Value != null && (TimeSpan?)((RouteProperty)obj).Value == null) return -1; if ((TimeSpan?)Value == null && (TimeSpan?)((RouteProperty)obj).Value != null) return 1; return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (v == null) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/NumberOfMapReadings.cs000066400000000000000000000077031446222606700335120ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class NumberOfMapReadings : RouteSpanProperty { public NumberOfMapReadings(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public NumberOfMapReadings(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = 0; } else { var count = 0; var pl = Locations.Start; while (true) { var w = pl.IsNode ? Session.Route.Segments[pl.SegmentIndex].Waypoints[(int)pl.Value] : Session.Route.CreateWaypointFromParameterizedLocation(pl); if (w.MapReadingState == BusinessEntities.MapReadingState.StartReading || (w.MapReadingState == BusinessEntities.MapReadingState.Reading && pl == Locations.Start)) { count++; } if (pl >= Locations.End) break; pl = Session.Route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); if (pl > Locations.End) pl = new ParameterizedLocation(Locations.End); } value = count; } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(NumberOfMapReadingsFromStart); } public override int CompareTo(object obj) { return ((int)Value).CompareTo((int)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; return string.Format(provider, format ?? "{0}", v); } public override string MaxWidthString { get { return ValueToString(9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } public class NumberOfMapReadingsFromStart : RouteFromStartProperty { public NumberOfMapReadingsFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public NumberOfMapReadingsFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = new NumberOfMapReadings(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty).Value; AddToCache(); } public override int CompareTo(object obj) { return ((int)Value).CompareTo((int)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (!ContainsValue) return "-"; return string.Format(provider, format ?? "{0}", v); } public override string MaxWidthString { get { return ValueToString(9999); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Pace.cs000066400000000000000000000031441446222606700305250ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class Pace : RouteMomentaneousProperty { public Pace(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public Pace(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = ConvertUtil.ToPace(Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Speed, Location).Value); AddToCache(); } public override int CompareTo(object obj) { return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(23, 59, 59)); } } public override bool ContainsValue { get { return true; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/PreviousMapReadingEnd.cs000066400000000000000000000045471446222606700340600ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.RouteProperties { public class PreviousMapReadingEnd : RouteMomentaneousProperty { public PreviousMapReadingEnd(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public PreviousMapReadingEnd(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (!Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration)) { value = null; } else { var previousMapReadingEnd = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.PreviousMapReadingEnd, Location); value = previousMapReadingEnd == null ? null : (TimeSpan?)TimeSpan.FromSeconds(previousMapReadingEnd.Value); } AddToCache(); } public override int CompareTo(object obj) { if ((TimeSpan?)Value == null && (TimeSpan?)((RouteProperty)obj).Value == null) return 0; if ((TimeSpan?)Value != null && (TimeSpan?)((RouteProperty)obj).Value == null) return -1; if ((TimeSpan?)Value == null && (TimeSpan?)((RouteProperty)obj).Value != null) return 1; return ((TimeSpan)Value).CompareTo((TimeSpan)(((RouteProperty)obj).Value)); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (v == null) return "-"; if (provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString((TimeSpan)v); } return string.Format(provider, format ?? "{0}", (TimeSpan)v); } public override string MaxWidthString { get { return ValueToString(new TimeSpan(29, 59, 59)); } } public override bool ContainsValue { get { return Session.Route.ContainsWaypointAttribute(WaypointAttribute.MapReadingDuration); } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/RouteDistance.cs000066400000000000000000000060241446222606700324260ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { public class RouteDistance : RouteSpanProperty { public RouteDistance(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public RouteDistance(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } if (Start == ParameterizedLocation.Start) { value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, End).Value; // for faster calculation } else { value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, End).Value - Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, Start).Value; } AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(RouteDistanceFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(99999); } } public override bool ContainsValue { get { return true; } } } public class RouteDistanceFromStart : RouteFromStartProperty { public RouteDistanceFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public RouteDistanceFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new RouteDistance(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(99999); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/RouteFromStartProperty.cs000066400000000000000000000012461446222606700343630ustar00rootroot00000000000000namespace QuickRoute.BusinessEntities.RouteProperties { public abstract class RouteFromStartProperty : RouteProperty { public ParameterizedLocation Location { get { return Locations.Location; } } protected RouteFromStartProperty(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected RouteFromStartProperty(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, new RouteLocations(location), retrieveExternalProperty) { } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/RouteLocations.cs000066400000000000000000000054601446222606700326320ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public class RouteLocations : IComparable { /// /// Used for RouteSpanProperty. /// /// /// public RouteLocations(ParameterizedLocation start, ParameterizedLocation end) { Start = start; End = end; Location = end; } /// /// Used for RouteMomentaneousProperty and RouteFromStartProperty. /// /// public RouteLocations(ParameterizedLocation location) { Start = ParameterizedLocation.Start; End = location; Location = location; } /// /// Start of route span. Used for RouteSpanProperty. /// public ParameterizedLocation Start { get; set; } /// /// End of route span. Used for RouteSpanProperty. /// public ParameterizedLocation End { get; set; } /// /// Route location. Used for RouteMomentaneousProperty and RouteFromStartProperty. /// public ParameterizedLocation Location { get; set; } /// /// Returns true if this is a span location (i e the Start and End properties are set). /// public bool IsSpan { get { return Start != null && End != null; } } public int CompareTo(RouteLocations other) { if (Location != null && other.Location == null) return -1; if (Location == null && other.Location != null) return 1; if (Location != null && other.Location != null) return Location.CompareTo(other.Location); var startComparison = Start.CompareTo(other.Start); return startComparison != 0 ? startComparison : End.CompareTo(other.End); } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != typeof (RouteLocations)) return false; return Equals((RouteLocations) obj); } public bool Equals(RouteLocations obj) { if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; return Equals(obj.Start, Start) && Equals(obj.End, End) && Equals(obj.Location, Location); } public override int GetHashCode() { unchecked { int result = (Start != null ? Start.GetHashCode() : 0); result = (result*397) ^ (End != null ? End.GetHashCode() : 0); result = (result*397) ^ (Location != null ? Location.GetHashCode() : 0); return result; } } } } RouteMomentaneousProperty.cs000066400000000000000000000022771446222606700350420ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/* * FROM START OF SESSION TO CURRENT POSITION, * FROM START OF LAP TO CURRENT POSITION, * THIS LAP * (having start point and end point) * elapsed time * distance * average speed * average direction deviation * number of stops * * * MOMENTANEOUS VALUE (no dependency to start of session or any other point in time) * time of day * speed * heart rate * altitude * direction deviation * stop: yes or no * */ using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public abstract class RouteMomentaneousProperty : RouteProperty { public ParameterizedLocation Location { get { return Locations.Location; } } protected RouteMomentaneousProperty(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected RouteMomentaneousProperty(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, new RouteLocations(location), retrieveExternalProperty) { } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/RouteProperty.cs000066400000000000000000000106631446222606700325240ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public abstract class RouteProperty : IComparable { protected bool calculated; protected object value; protected RouteProperty(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) { Session = session; Locations = locations; RetrieveExternalProperty = retrieveExternalProperty; } /// /// The session to use when calculating route properties. /// protected Session Session { get; private set; } /// /// The location/span of the route property. /// public RouteLocations Locations { get; private set; } /// /// If caching is to be used, set this property to an instance of a RoutePropertyCacheManager. /// Caching enables to receive this and other route properties without calculation. /// public RoutePropertyCacheManager CacheManager { get; set; } /// /// Whether there exists a CacheManager. /// protected bool HasCache { get { return CacheManager != null; } } /// /// Receive this property (at this location/span) if it exists, or othrewise null. /// /// public RouteProperty GetFromCache() { if (!HasCache) return null; return CacheManager.Get(GetType(), Locations); } /// /// Adds this route property to the cache. /// public void AddToCache() { if (HasCache) CacheManager.Add(this); } /// /// The value of this route property. /// public object Value { get { if (!calculated) { Calculate(); calculated = true; } return value; } } /// /// Calculates the value of this property. /// protected abstract void Calculate(); /// /// The string that has the maximum width possible for this property (e g 23:59:59 for a time of day) /// public abstract string MaxWidthString { get; } /// /// Whether the route contains this type of property. Some properties (altitude and heart rate based) can be null and then false is returned. /// public abstract bool ContainsValue { get; } public virtual int CompareTo(object obj) { var other = obj as RouteProperty; if (other == null || GetType() != obj.GetType()) return -1; if (Value == null && other.Value != null) return 1; if (Value != null && other.Value == null) return -1; if (Value == null && other.Value == null) return 0; return ((double)Value).CompareTo((double)other.Value); } public override string ToString() { return ValueToString(Value, null, null); } public string ToString(string format) { return ValueToString(Value, format, null); } public string ToString(IFormatProvider provider) { return ValueToString(Value, null, provider); } public string ToString(string format, IFormatProvider provider) { return ValueToString(Value, format, provider); } /// /// Internal method for converting a value to a string. /// /// The value to be converted. /// The format string to use. /// The custom format provider, or null if no format provider. /// protected abstract string ValueToString(object v, string format, IFormatProvider provider); protected string ValueToString(object v) { return ValueToString(v, null, null); } protected string ValueToString(object v, string format) { return ValueToString(v, format, null); } protected string ValueToString(object v, IFormatProvider provider) { return ValueToString(v, null, provider); } public RetrieveExternalPropertyDelegate RetrieveExternalProperty { get; private set; } } public delegate double RetrieveExternalPropertyDelegate(string externalPropertyName); } RoutePropertyCacheManager.cs000066400000000000000000000066361446222606700346710ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using System.Collections.Generic; using Wintellect.PowerCollections; namespace QuickRoute.BusinessEntities.RouteProperties { public class RoutePropertyCacheManager { private readonly Dictionary> cache = new Dictionary>(); private readonly Dictionary> lastAddedCache = new Dictionary>(); private const int itemsInLastAddedCache = 4; public void Add(RouteProperty routeProperty) { var type = routeProperty.GetType(); if (!cache.ContainsKey(type)) { cache[type] = new Dictionary(); lastAddedCache[type] = new List(); } cache[type][routeProperty.Locations] = routeProperty; lastAddedCache[type].Add(routeProperty); if(lastAddedCache[type].Count > itemsInLastAddedCache) lastAddedCache[type].RemoveAt(0); } public RouteProperty Get(Type routePropertyType, RouteLocations locations) { if (!cache.ContainsKey(routePropertyType)) return null; var cacheSection = cache[routePropertyType]; if (!cacheSection.ContainsKey(locations)) return null; var item = cacheSection[locations]; return item; } public RouteProperty GetClosest(Type routePropertyType, RouteLocations locations, ParameterizedLocation.Direction direction) { if (!cache.ContainsKey(routePropertyType)) return null; var cacheSection = cache[routePropertyType]; RouteProperty closestRouteProperty = null; ParameterizedLocation closestPL = null; if (locations.IsSpan) { foreach (var item in cacheSection) { if (item.Key.Start == locations.Start // need to have same start && (closestPL == null || (direction == ParameterizedLocation.Direction.Forward && item.Key.End >= locations.End && item.Key.End < closestPL) || (direction == ParameterizedLocation.Direction.Backward && item.Key.End <= locations.End && item.Key.End > closestPL) )) { closestPL = item.Key.End; closestRouteProperty = item.Value; } } } else { foreach (var item in cacheSection) { if (closestPL == null || (direction == ParameterizedLocation.Direction.Forward && item.Key.Location >= locations.Location && item.Key.Location < closestPL) || (direction == ParameterizedLocation.Direction.Backward && item.Key.Location <= locations.Location && item.Key.Location > closestPL) ) { closestPL = item.Key.End; closestRouteProperty = item.Value; } } } return closestRouteProperty; } public RouteProperty GetLastAdded(Type routePropertyType, RouteLocations desiredLocations) { if (!lastAddedCache.ContainsKey(routePropertyType)) return null; var items = lastAddedCache[routePropertyType]; if (desiredLocations.IsSpan) { for(int i=items.Count-1; i>=0; i--) { if (items[i].Locations.Start == desiredLocations.Start) return items[i]; } return null; } else { return items[items.Count-1]; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/RouteSpanProperty.cs000066400000000000000000000015761446222606700333510ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public abstract class RouteSpanProperty : RouteProperty { public ParameterizedLocation Start { get { return Locations.Start; } } public ParameterizedLocation End { get { return Locations.End; } } protected RouteSpanProperty(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected RouteSpanProperty(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, new RouteLocations(start, end), retrieveExternalProperty) { } public abstract Type GetRouteFromStartPropertyType(); } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/RouteToStraightLine.cs000066400000000000000000000060721446222606700335770ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { public class RouteToStraightLine : RouteSpanProperty { public RouteToStraightLine(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public RouteToStraightLine(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var routeLength = (double)(new RouteDistance(Session, Start, End, RetrieveExternalProperty).Value); var straightLineLength = (double)(new StraightLineDistance(Session, Start, End, RetrieveExternalProperty).Value); value = straightLineLength != 0 ? (routeLength-straightLineLength)/straightLineLength : 0; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(RouteToStraightLineFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { return Convert.ToDouble(v).ToString("p1"); } public override string MaxWidthString { get { return ValueToString(9.999); } } public override bool ContainsValue { get { return true; } } } public class RouteToStraightLineFromStart : RouteFromStartProperty { public RouteToStraightLineFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public RouteToStraightLineFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } var routeLength = (double)(new RouteDistanceFromStart(Session, Location, RetrieveExternalProperty).Value); var straightLineLength = (double)(new StraightLineDistanceFromStart(Session, Location, RetrieveExternalProperty).Value); value = straightLineLength != 0 ? (routeLength - straightLineLength) / straightLineLength : 0; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { return Convert.ToDouble(v).ToString("p1"); } public override string MaxWidthString { get { return ValueToString(9.999); } } public override bool ContainsValue { get { return true; } } } } SelectableRoutePropertyType.cs000066400000000000000000000017261446222606700352730ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using System.Collections.Generic; using System.Text; using QuickRoute.Resources; namespace QuickRoute.BusinessEntities.RouteProperties { [Serializable] public class SelectableRoutePropertyType { private Type routePropertyType; public SelectableRoutePropertyType(Type routePropertyType, bool selected) { RoutePropertyType = routePropertyType; Selected = selected; } public Type RoutePropertyType { get { return routePropertyType; } set { if (!(value.IsSubclassOf(typeof (RouteProperty)))) throw new Exception("The type must be a descendant of RouteProperty."); routePropertyType = value; } } public bool Selected { get; set; } public override string ToString() { return Strings.ResourceManager.GetString("RoutePropertyName_" + RoutePropertyType.Name) ?? RoutePropertyType.Name; } } } SelectableRoutePropertyTypeCollection.cs000066400000000000000000000012511446222606700373000ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RoutePropertiesusing System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; namespace QuickRoute.BusinessEntities.RouteProperties { [Serializable] public class SelectableRoutePropertyTypeCollection : Collection { public void AddRange(SelectableRoutePropertyTypeCollection items) { foreach (var item in items) { Add(item); } } public bool ContainsRoutePropertyType(Type t) { foreach (var item in this) { if(t == item.RoutePropertyType) { return true; } } return false; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Speed.cs000066400000000000000000000025021446222606700307120ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class Speed : RouteMomentaneousProperty { public Speed(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public Speed(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Speed, Location); AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { // speed in km/h if (format == null) format = "{0:n1}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(999.9); } } public override bool ContainsValue { get { return true; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/StraightLineDistance.cs000066400000000000000000000140721446222606700337270ustar00rootroot00000000000000using System; namespace QuickRoute.BusinessEntities.RouteProperties { // TODO: project position in the middle of a lap down on straight line public class StraightLineDistance : RouteSpanProperty { public StraightLineDistance(Session session, ParameterizedLocation start, ParameterizedLocation end, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, start, end, retrieveExternalProperty) { } public StraightLineDistance(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } double sum = 0; var spanStartTime = Session.Route.GetTimeFromParameterizedLocation(Start); var spanEndTime = Session.Route.GetTimeFromParameterizedLocation(End); int lapIndex = 0; // examine each lap until end time while (Session.Route.LapTimes[lapIndex] < spanEndTime && lapIndex < Session.Route.LapTimes.Count - 1) { var thisLapStartPL = Session.Route.GetParameterizedLocationFromTime(Session.Route.LapTimes[lapIndex]); var thisLapEndPL = Session.Route.GetParameterizedLocationFromTime(Session.Route.LapTimes[lapIndex+1]); ParameterizedLocation startPL = null; // span starts somewhere in this lap? if (spanStartTime >= Session.Route.LapTimes[lapIndex] && spanStartTime < Session.Route.LapTimes[lapIndex+1]) { startPL = Start; } // span starts before this lap? else if (spanStartTime < Session.Route.LapTimes[lapIndex]) { startPL = thisLapStartPL; } ParameterizedLocation endPL = null; // span ends somewhere in this lap? if (spanEndTime >= Session.Route.LapTimes[lapIndex] && spanEndTime < Session.Route.LapTimes[lapIndex + 1]) { endPL = End; } // span ends after this lap? else if (spanEndTime >= Session.Route.LapTimes[lapIndex+1]) { endPL = thisLapEndPL; } if(startPL != null && endPL != null) { // this lap contains some of the desired distance to be measured for (var i = startPL.SegmentIndex; i <= endPL.SegmentIndex; i++) { var thisSegmentStartPL = new ParameterizedLocation(i, 0); var thisSegmentEndPL = new ParameterizedLocation(i, Session.Route.Segments[i].Waypoints.Count - 1); if (thisSegmentStartPL < startPL) thisSegmentStartPL = startPL; if (thisSegmentEndPL > endPL) thisSegmentEndPL = endPL; var thisLapStartLocation = Session.Route.GetLocationFromParameterizedLocation(thisLapStartPL); var thisLapEndLocation = Session.Route.GetLocationFromParameterizedLocation(thisLapEndPL); var projectionOrigin = thisLapStartLocation / 2 + thisLapEndLocation / 2; var startLocationPoint = Session.Route.GetLocationFromParameterizedLocation(startPL).Project(projectionOrigin); var endLocationPoint = Session.Route.GetLocationFromParameterizedLocation(endPL).Project(projectionOrigin); var thisLapStartLocationPoint = thisLapStartLocation.Project(projectionOrigin); var thisLapEndLocationPoint = thisLapEndLocation.Project(projectionOrigin); double t0; double t1; // get start and end point parameterized lcoations (t0 and t1) on straight line LinearAlgebraUtil.ClosestDistancePointToLine(startLocationPoint, thisLapStartLocationPoint, thisLapEndLocationPoint, out t0); LinearAlgebraUtil.ClosestDistancePointToLine(endLocationPoint, thisLapStartLocationPoint, thisLapEndLocationPoint, out t1); t0 = Math.Max(0, Math.Min(1, t0)); t1 = Math.Max(0, Math.Min(1, t1)); sum += (t1-t0) * LinearAlgebraUtil.DistancePointToPointLongLat(thisLapStartLocation, thisLapEndLocation); } } lapIndex++; } value = sum; AddToCache(); } public override Type GetRouteFromStartPropertyType() { return typeof(StraightLineDistanceFromStart); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(99999); } } public override bool ContainsValue { get { return true; } } } public class StraightLineDistanceFromStart : RouteFromStartProperty { public StraightLineDistanceFromStart(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } public StraightLineDistanceFromStart(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = (new StraightLineDistance(Session, ParameterizedLocation.Start, Location, RetrieveExternalProperty) { CacheManager = CacheManager }).Value; AddToCache(); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if (format == null) format = "{0:n0}"; return string.Format(provider, format, Convert.ToDouble(v)); } public override string MaxWidthString { get { return ValueToString(99999); } } public override bool ContainsValue { get { return true; } } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/RouteProperties/Time.cs000066400000000000000000000031641446222606700305550ustar00rootroot00000000000000using System; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.BusinessEntities.RouteProperties { public class Time : RouteMomentaneousProperty { public Time(Session session, RouteLocations locations, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, locations, retrieveExternalProperty) { } public Time(Session session, ParameterizedLocation location, RetrieveExternalPropertyDelegate retrieveExternalProperty) : base(session, location, retrieveExternalProperty) { } protected override void Calculate() { var cachedProperty = GetFromCache(); if (cachedProperty != null) { value = cachedProperty.Value; return; } value = Session.Route.GetTimeFromParameterizedLocation(Location); AddToCache(); } public override int CompareTo(object obj) { return (Convert.ToDateTime(Value).CompareTo(Convert.ToDateTime(((RouteProperty)obj).Value))); } protected override string ValueToString(object v, string format, IFormatProvider provider) { if(provider == null) { var tc = new TimeConverter(TimeConverter.TimeConverterType.TimeOfDay); return tc.ToString(Convert.ToDateTime(v)); } return string.Format(provider, format ?? "{0}", Convert.ToDateTime(v)); } public override string MaxWidthString { get { return ValueToString(new DateTime(2000, 01, 01, 23, 59, 59, 0, DateTimeKind.Local)); } } public override bool ContainsValue { get { return true; } } } }quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Session.cs000066400000000000000000001430451446222606700261320ustar00rootroot00000000000000using System; using System.Collections; using System.Collections.Generic; using System.Drawing.Drawing2D; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; using QuickRoute.BusinessEntities.Importers.GPX.GPX11; using System.Drawing; using System.Globalization; using Wintellect.PowerCollections; namespace QuickRoute.BusinessEntities { [Serializable] public class Session { #region Private fields private SessionInfo sessionInfo = new SessionInfo(); private Route route; private LongLat projectionOrigin; private GeneralMatrix initialTransformationMatrix; [NonSerialized] private AdjustedRoute adjustedRoute; [NonSerialized] private List alphaAdjustmentChanges; private LapCollection laps; private HandleCollection handles = new HandleCollection(); private SessionSettings settings = new SessionSettings(); #endregion #region Constructors public Session(Route route, LapCollection laps, Size mapSize, SessionSettings settings) : this(route, laps, mapSize, null, route.CenterLongLat(), settings) { } public Session(Route route, LapCollection laps, Size mapSize, GeneralMatrix initialTransformationMatrix, SessionSettings settings) : this(route, laps, mapSize, initialTransformationMatrix, null, settings) { } public Session(Route route, LapCollection laps, Size mapSize, GeneralMatrix initialTransformationMatrix, LongLat projectionOrigin, SessionSettings settings) { this.route = route; this.route.SuppressWaypointAttributeCalculation = true; this.route.SmoothingIntervals = settings.SmoothingIntervals; this.laps = laps; this.projectionOrigin = projectionOrigin ?? route.CenterLongLat(); this.settings = settings; this.initialTransformationMatrix = initialTransformationMatrix ?? RouteAdjustmentManager.CreateInitialTransformationMatrix(this.route, mapSize, this.projectionOrigin); this.route.SuppressWaypointAttributeCalculation = false; Initialize(true); } #endregion #region Public properties public SessionInfo SessionInfo { get { return sessionInfo ?? new SessionInfo(); } set { sessionInfo = value; } } public Route Route { get { return route; } set { route = value; } } public LongLat ProjectionOrigin { get { return projectionOrigin; } set { projectionOrigin = value; } } public AdjustedRoute AdjustedRoute { get { return adjustedRoute; } } public LapCollection Laps { get { return laps; } set { laps = value; } } public Handle[] Handles { get { ArrayList handleArrayList = new ArrayList(); foreach (var h in handles) { if (h.Type == Handle.HandleType.Handle) handleArrayList.Add(h); } return handleArrayList.ToArray(typeof(Handle)) as Handle[]; } } public Handle StartHandle { get { return (handles.Count > 0 ? handles[0] : null); } } public Handle EndHandle { get { return (handles.Count == 0 ? null : handles[handles.Count - 1]); } } public SessionSettings Settings { get { return settings; } set { settings = value; route.SmoothingIntervals = settings.SmoothingIntervals; } } public List AlphaAdjustmentChanges { get { return alphaAdjustmentChanges; } set { alphaAdjustmentChanges = value; if (alphaAdjustmentChanges != null) alphaAdjustmentChanges.Sort(); } } public GeneralMatrix InitialTransformationMatrix { get { return initialTransformationMatrix; } set { initialTransformationMatrix = value; } } #endregion #region Public methods public void Initialize(bool routeChanged) { SetLapTimesToRoute(route); route.CalculateWaypointAttributes(routeChanged); route.EnsureUtcTimes(); laps.EnsureUtcTimes(); CreateAdjustedRoute(); } /// /// To be called when a handle is added/deleted/moved. Transformation matrices are recalculated and the adjusted route is updated. /// /// The handle public void UpdateHandle(Handle h) { UpdateTransformationMatrices(h); CreateAdjustedRoute(); } //public void CreateAdjustedRoute_old() //{ // adjustedRoute = new AdjustedRoute(); // for (int i = 0; i < route.Segments.Count; i++) // { // adjustedRoute.Segments.Add(new AdjustedRouteSegment()); // } // if (StartHandle == null) // { // // no handles, use the initial transformation matrix for all adjusted waypoints // for (int i = 0; i < route.Segments.Count; i++) // { // for (int j = 0; j < route.Segments[i].Waypoints.Count; j++) // { // Waypoint waypoint = route.Segments[i].Waypoints[j]; // PointD location = LinearAlgebraUtil.Transform(waypoint.LongLat.Project(projectionOrigin), initialTransformationMatrix); // adjustedRoute.Segments[i].Waypoints.Add(new AdjustedWaypoint(location, new ParameterizedLocation(i, j))); // } // } // } // else // { // // there are handles, use them // //1. Create parameterized location list for adjusted route. Include // // a) handles // // b) waypoints from route // List plList = new List(); // foreach (Handle h in handles) // { // PLWithKey pwk = new PLWithKey(PLKey.Handle, h.ParameterizedLocation); // plList.Add(pwk); // } // for (int i = 0; i < route.Segments.Count; i++) // { // RouteSegment rs = route.Segments[i]; // for (int j = 0; j < rs.Waypoints.Count; j++) // { // // todo: if a faster route line drawing is desired, don't add all waypoint locations to the list. Use some algorithm to determine which waypoints to throw away (e g these where acceleration is nearly constant). Have a look at Garmin FR305 Smart data recording algorithm. // PLWithKey pwk = new PLWithKey(PLKey.Waypoint, new ParameterizedLocation(i, j)); // plList.Add(pwk); // } // } // plList.Sort(); // // 2. Create and add an adjusted waypoint for each location in this list // Handle previousHandle = StartHandle; // Handle nextHandle = StartHandle; // double previousHandleDistance = 0; // double nextHandleDistance = 0; // int handleIndex = -1; // foreach (PLWithKey pwk in plList) // { // Waypoint w; // PointD location0; // PointD location1; // double distance; // if (pwk.Key == PLKey.Handle) // { // handleIndex++; // previousHandle = handles[handleIndex]; // previousHandleDistance = route.GetDistanceFromParameterizedLocation(previousHandle.ParameterizedLocation); // nextHandle = handleIndex < handles.Count - 1 ? handles[handleIndex + 1] : handles[handleIndex]; // nextHandleDistance = route.GetDistanceFromParameterizedLocation(nextHandle.ParameterizedLocation); // w = route.CreateWaypointFromParameterizedLocation(pwk); // location0 = LinearAlgebraUtil.Transform(w.LongLat.Project(projectionOrigin), previousHandle.TransformationMatrix); // location1 = LinearAlgebraUtil.Transform(w.LongLat.Project(projectionOrigin), nextHandle.TransformationMatrix); // distance = route.GetDistanceFromParameterizedLocation(pwk); // } // else // { // if (pwk == previousHandle.ParameterizedLocation) // { // continue; // } // w = route.Segments[pwk.SegmentIndex].Waypoints[(int)pwk.Value]; // location0 = LinearAlgebraUtil.Transform(w.LongLat.Project(projectionOrigin), previousHandle.TransformationMatrix); // location1 = LinearAlgebraUtil.Transform(w.LongLat.Project(projectionOrigin), nextHandle.TransformationMatrix); // distance = w.Distance; // } // double t; // if (nextHandleDistance == previousHandleDistance) // { // t = 0; // } // else // { // t = (distance - previousHandleDistance) / (nextHandleDistance - previousHandleDistance); // } // AdjustedWaypoint aw = new AdjustedWaypoint((1 - t) * location0 + t * location1, pwk); // adjustedRoute.Segments[pwk.SegmentIndex].Waypoints.Add(aw); // } // } //} /// /// Creates an adjusted route based on the handles. /// public void CreateAdjustedRoute() { adjustedRoute = new AdjustedRoute(); for (int i = 0; i < route.Segments.Count; i++) { adjustedRoute.Segments.Add(new AdjustedRouteSegment()); } if (StartHandle == null) { // no handles, use the initial transformation matrix for all adjusted waypoints for (int i = 0; i < route.Segments.Count; i++) { for (int j = 0; j < route.Segments[i].Waypoints.Count; j++) { Waypoint waypoint = route.Segments[i].Waypoints[j]; PointD location = LinearAlgebraUtil.Transform(waypoint.LongLat.Project(projectionOrigin), initialTransformationMatrix); adjustedRoute.Segments[i].Waypoints.Add(new AdjustedWaypoint(location, new ParameterizedLocation(i, j))); } } } else { // there are handles, use them //1. Create parameterized location list for adjusted route. Include // a) handles // b) waypoints from route List plList = new List(); // handles foreach (Handle h in handles) { PLWithKey pwk = new PLWithKey(PLKey.Handle, h.ParameterizedLocation); plList.Add(pwk); } // waypoints for (int i = 0; i < route.Segments.Count; i++) { RouteSegment rs = route.Segments[i]; for (int j = 0; j < rs.Waypoints.Count; j++) { // todo: if a faster route line drawing is desired, don't add all waypoint locations to the list. Use some algorithm to determine which waypoints to throw away (e g these where acceleration is nearly constant). Have a look at Garmin FR305 Smart data recording algorithm. PLWithKey pwk = new PLWithKey(PLKey.Waypoint, new ParameterizedLocation(i, j)); plList.Add(pwk); } } plList.Sort(); // 2. Create and add an adjusted waypoint for each location in this list Handle currentHandle = StartHandle; int handleIndex = -1; foreach (PLWithKey pwk in plList) { Waypoint w; if (pwk.Key == PLKey.Handle) { if (handleIndex < handles.Count - 2 || handleIndex == -1) handleIndex++; currentHandle = handles[handleIndex]; w = route.CreateWaypointFromParameterizedLocation(pwk); } else { w = route.Segments[pwk.SegmentIndex].Waypoints[(int)pwk.Value]; } PointD location = LinearAlgebraUtil.Transform(w.LongLat.Project(projectionOrigin), currentHandle.TransformationMatrix); AdjustedWaypoint aw = new AdjustedWaypoint(location, pwk); adjustedRoute.Segments[pwk.SegmentIndex].Waypoints.Add(aw); } } } public Color GetColorFromParameterizedLocation(ParameterizedLocation pl, WaypointAttribute colorCodingAttribute) { RouteLineSettings rls = settings.RouteLineSettingsCollection[colorCodingAttribute]; //// determining value according to current attribute: pace, heart rate or altitude double? value = route.GetAttributeFromParameterizedLocation(colorCodingAttribute, pl); // experimental: dashed route //RouteLineSettings rls = settings.RouteLineSettingsCollection[DashedAdjustedWaypointCreator.experimental_dashWaypointAttribute]; //if (value != null) //{ // value = ((int) (value/250.0))%2 == 0 ? rls.ColorRange.StartValue : rls.ColorRange.EndValue; //} // need to check whether this is the end of a map reading, if so we need to reset the value so that the line following this waypoint will indicate "not reading" if (colorCodingAttribute == WaypointAttribute.MapReadingDuration && pl.IsNode && Route.CreateWaypointFromParameterizedLocation(pl).MapReadingState == MapReadingState.EndReading) { value = 0; } Color color = rls.ColorRange.GetColor(value == null ? 0 : (double)value); return color; } public GeneralMatrix GetTransformationMatrixFromParameterizedLocation(ParameterizedLocation parameterizedLocation) { switch (handles.Count) { case 0: return initialTransformationMatrix; case 1: return handles[0].TransformationMatrix; default: for (int i = 0; i < handles.Count; i++) { if (parameterizedLocation <= handles[i].ParameterizedLocation) return handles[i].TransformationMatrix; } return EndHandle.TransformationMatrix; } } /// /// Calculates the real-world length of one map pixel. /// /// The length in meters. public double GetPixelScale() { double sum = 0; for (int i = 0; i < handles.Count - 1; i++) { double unitLength = LinearAlgebraUtil.GetUnitLengthFromTransformationMatrix(handles[i].TransformationMatrix.Inverse()); ElapsedTime startTime = new ElapsedTime((i == 0 ? route.FirstWaypoint.Attributes[WaypointAttribute.ElapsedTime].Value : route.GetAttributeFromParameterizedLocation(WaypointAttribute.ElapsedTime, handles[i].ParameterizedLocation).Value)); ElapsedTime endTime = new ElapsedTime((i == handles.Count - 2 ? route.LastWaypoint.Attributes[WaypointAttribute.ElapsedTime].Value : route.GetAttributeFromParameterizedLocation(WaypointAttribute.ElapsedTime, handles[i + 1].ParameterizedLocation).Value)); sum += unitLength * (endTime.Value - startTime.Value); } return route.LastWaypoint.Attributes[WaypointAttribute.ElapsedTime].Value - route.FirstWaypoint.Attributes[WaypointAttribute.ElapsedTime].Value == 0 ? 0 : sum / (route.LastWaypoint.Attributes[WaypointAttribute.ElapsedTime].Value - route.FirstWaypoint.Attributes[WaypointAttribute.ElapsedTime].Value); } public void AddHandle(Handle h) { handles.Add(h); } public bool RemoveHandle(Handle h) { return handles.Remove(h); } public int IndexOfHandle(Handle h) { return handles.IndexOf(h); } public bool ContainsHandle(Handle h) { return handles.Contains(h); } public HandleCollection.CutHandlesData CutHandles(ParameterizedLocation parameterizedLocation, CutType cutType) { return handles.Cut(parameterizedLocation, cutType); } public void UnCutHandles(HandleCollection.CutHandlesData cutHandlesData) { handles.UnCut(cutHandlesData); } public double GetLapDirectionFromParameterizedLocation(ParameterizedLocation pl) { if (laps == null) return 0; int lapIndex = GetLapIndexFromParameterizedLocation(pl); LongLat longLat0 = route.GetLocationFromParameterizedLocation(route.GetParameterizedLocationFromTime(laps[lapIndex].Time)); LongLat longLat1 = route.GetLocationFromParameterizedLocation(route.GetParameterizedLocationFromTime(laps[lapIndex + 1].Time)); LongLat middle = longLat0 / 2 + longLat1 / 2; PointD p0 = longLat0.Project(middle); PointD p1 = longLat1.Project(middle); return LinearAlgebraUtil.AnglifyD(LinearAlgebraUtil.ToDegrees(LinearAlgebraUtil.GetVectorDirectionR(p0, p1)), AngleStyle.N360CW); } public void DrawRoute(double zoom, Graphics graphics, Document.RouteDrawingMode mode, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, SessionSettings sessionSettings) { // use this session's settings if no settings are specified var rls = sessionSettings == null ? Settings.RouteLineSettingsCollection[colorCodingAttribute] : sessionSettings.RouteLineSettingsCollection[colorCodingAttribute]; switch (mode) { case Document.RouteDrawingMode.Simple: foreach (var ars in AdjustedRoute.Segments) { if (ars.Waypoints.Count > 1) { var points = new PointF[ars.Waypoints.Count]; for (var i = 0; i < ars.Waypoints.Count; i++) { points[i] = (PointF)(zoom * ars.Waypoints[i].Location); } // use monochrome color and width var pen = new Pen(rls.MonochromeColor, (float)(zoom * (rls.MonochromeWidth))) { LineJoin = LineJoin.Round }; graphics.DrawLines(pen, points); pen.Dispose(); } } break; case Document.RouteDrawingMode.Extended: double lineWidth = rls.Width; double maskWidth = (rls.MaskVisible ? rls.MaskWidth : 0); List vertices = CreateRouteLineVertices( AdjustedRoute.GetFirstParameterizedLocation(), AdjustedRoute.GetLastParameterizedLocation(), colorCodingAttribute, secondaryColorCodingAttribute); // filter vertices vertices = FilterVertices(vertices, AdjustedRoute); for (int i = 0; i < vertices.Count - 1; i++) { if (vertices[i].ParameterizedLocation.SegmentIndex == vertices[i + 1].ParameterizedLocation.SegmentIndex) { RouteLineVertex previousVertex = (i > 0 && vertices[i - 1].ParameterizedLocation.SegmentIndex == vertices[i].ParameterizedLocation.SegmentIndex ? vertices[i - 1] : null); RouteLineVertex nextVertex = (i < vertices.Count - 2 && vertices[i + 2].ParameterizedLocation.SegmentIndex == vertices[i + 1].ParameterizedLocation.SegmentIndex ? vertices[i + 2] : null); var splitLine = secondaryColorCodingAttribute.HasValue; var line = new RouteLine( vertices[i], vertices[i + 1], previousVertex, nextVertex, lineWidth, maskWidth, zoom, splitLine); Brush b; Color maskColor = GraphicsUtil.AlphaAdjustColor(rls.MaskColor, vertices[i].AlphaAdjustment); if (splitLine) { var leftLineColor = GraphicsUtil.AlphaAdjustColor(vertices[i].Color, vertices[i].AlphaAdjustment); b = new SolidBrush(leftLineColor); graphics.FillPath(b, line.LeftLinePath); b.Dispose(); var rightLineColor = GraphicsUtil.AlphaAdjustColor(vertices[i].SecondaryColor.Value, vertices[i].AlphaAdjustment); b = new SolidBrush(rightLineColor); graphics.FillPath(b, line.RightLinePath); b.Dispose(); } else { var lineColor = GraphicsUtil.AlphaAdjustColor(vertices[i].Color, vertices[i].AlphaAdjustment); b = new SolidBrush(lineColor); graphics.FillPath(b, line.LinePath); b.Dispose(); } b = new SolidBrush(maskColor); if (line.MaskPath != null) graphics.FillPath(b, line.MaskPath); b.Dispose(); } } break; case Document.RouteDrawingMode.None: // don't draw anything break; } } public List GetAdjustedWaypointLocations(IList legs) { var vertices = new List(); bool[] legExists = new bool[laps.Count - 1]; for (int i = 1; i < laps.Count; i++) { legExists[i - 1] = legs.Contains(i - 1); } bool currentState = false; var breakpoints = new List(); for (int i = 0; i < laps.Count - 1; i++) { if (legExists[i] != currentState) { breakpoints.Add(route.GetParameterizedLocationFromTime(laps[i].Time)); currentState = !currentState; } } if (currentState) breakpoints.Add(route.GetParameterizedLocationFromTime(laps[laps.Count - 1].Time)); int currentBreakpoint = 0; currentState = false; foreach (var w in adjustedRoute.GetAllWaypoints()) { if ((!currentState && w.ParameterizedLocation >= breakpoints[currentBreakpoint]) || (currentState && w.ParameterizedLocation > breakpoints[currentBreakpoint])) { currentState = !currentState; currentBreakpoint++; } if (currentState) vertices.Add(w.Location); if (currentBreakpoint > breakpoints.Count - 1) break; } return vertices; } public void AddTimeOffset(TimeSpan offset) { route.AddTimeOffset(offset); laps.AddTimeOffset(offset); SetLapTimesToRoute(); } public Route CreateRouteAdaptedToSingleTransformationMatrix(GeneralMatrix transformationMatrix) { return CreateRouteAdaptedToSingleTransformationMatrix(this); } public Route CreateRouteAdaptedToSingleTransformationMatrix(Session baseSession) { var transformationMatrix = baseSession.CalculateAverageTransformation().TransformationMatrix; var transformationMatrixInverse = transformationMatrix.Inverse(); var routeSegments = new List(); foreach (var ars in adjustedRoute.Segments) { var routeSegment = new RouteSegment(); foreach (var aw in ars.Waypoints) { var newWaypoint = route.CreateWaypointFromParameterizedLocation(aw.ParameterizedLocation); // create pixel location var projectedLocation = LinearAlgebraUtil.Transform(aw.Location, transformationMatrixInverse); newWaypoint.LongLat = LongLat.Deproject(projectedLocation, baseSession.ProjectionOrigin); routeSegment.Waypoints.Add(newWaypoint); } routeSegments.Add(routeSegment); } var r = new Route(routeSegments); SetLapTimesToRoute(r); r.SmoothingIntervals = route.SmoothingIntervals; return r; } /// /// Using linear least squares algorithm described at http://en.wikipedia.org/wiki/Linear_least_squares /// /// public Transformation CalculateAverageTransformation() { return new SessionCollection { this }.CalculateAverageTransformation(); } /// /// Used to keep internal route lap time list and laps in sync /// public void SetLapTimesToRoute() { SetLapTimesToRoute(route); } #endregion #region Private methods private void UpdateTransformationMatrices(Handle activeHandle) { switch (handles.Count) { case 0: break; case 1: { // perform translation of whole route GeneralMatrix newTransformationMatrix = (GeneralMatrix)initialTransformationMatrix.Clone(); PointD initialProjectedLocation = route.GetProjectedLocationFromParameterizedLocation(activeHandle.ParameterizedLocation, projectionOrigin); PointD initialAdjustedLocation = LinearAlgebraUtil.Transform(initialProjectedLocation, initialTransformationMatrix); PointD translation = activeHandle.Location - initialAdjustedLocation; newTransformationMatrix.SetElement(0, 2, newTransformationMatrix.GetElement(0, 2) + translation.X); newTransformationMatrix.SetElement(1, 2, newTransformationMatrix.GetElement(1, 2) + translation.Y); activeHandle.TransformationMatrix = newTransformationMatrix; break; } default: { // perform scaling and rotation for the handle pairs that the active handle is part of int activeHandleIndex = handles.IndexOf(activeHandle); if (activeHandleIndex > 0) { Handle firstHandle = handles[activeHandleIndex - 1]; Handle secondHandle = activeHandle; firstHandle.TransformationMatrix = LinearAlgebraUtil.CalculateTransformationMatrix( route.GetProjectedLocationFromParameterizedLocation(firstHandle.ParameterizedLocation, projectionOrigin), firstHandle.Location, route.GetProjectedLocationFromParameterizedLocation(secondHandle.ParameterizedLocation, projectionOrigin), secondHandle.Location, firstHandle.TransformationMatrix, true ); } if (activeHandleIndex < handles.Count - 1) { Handle firstHandle = activeHandle; Handle secondHandle = handles[activeHandleIndex + 1]; firstHandle.TransformationMatrix = LinearAlgebraUtil.CalculateTransformationMatrix( route.GetProjectedLocationFromParameterizedLocation(firstHandle.ParameterizedLocation, projectionOrigin), firstHandle.Location, route.GetProjectedLocationFromParameterizedLocation(secondHandle.ParameterizedLocation, projectionOrigin), secondHandle.Location, firstHandle.TransformationMatrix, true ); } } break; } } private int GetLapIndexFromParameterizedLocation(ParameterizedLocation pl) { DateTime time = route.GetTimeFromParameterizedLocation(pl); if (laps == null || laps.Count == 0 || time < laps[0].Time) return 0; for (int i = 1; i < laps.Count - 1; i++) { if (laps[i].Time >= time) return i - 1; } return laps.Count - 2; } /// /// Reduces the number of vertices by removing "unnecessary" vertices, eg those that do not differ much in color and won't change the direction of the line much. /// private static List FilterVertices(IList vertices, AdjustedRoute adjustedRoute) { const double colorDistanceThreshold = 32; const double distanceFromLineThreshold = 0.5; const int maxSubsequentSkippedVertices = 10; var filteredVertices = new List(); var lastIndex = 0; for (var i = 0; i < vertices.Count; i++) { var includeVertex = i == 0 || // always include first vertex i == vertices.Count - 1 || // always include last vertex adjustedRoute.IsStartOfSegment(vertices[i].ParameterizedLocation) || // always include first vertex of route segment adjustedRoute.IsEndOfSegment(vertices[i].ParameterizedLocation) || // always include first vertex of route segment vertices[i].SecondaryColor != null || // currently no filtering when secondary colors are used i - lastIndex >= maxSubsequentSkippedVertices; // not too many vertices in a row can be skipped if (!includeVertex) { var colorDistance = ColorDistance(GraphicsUtil.AlphaAdjustColor(vertices[lastIndex].Color, vertices[lastIndex].AlphaAdjustment), GraphicsUtil.AlphaAdjustColor(vertices[i].Color, vertices[i].AlphaAdjustment)); if(colorDistance >= colorDistanceThreshold) { includeVertex = true; } else { double t; var distanceFromLine = LinearAlgebraUtil.ClosestDistancePointToLine(vertices[i].Location, vertices[lastIndex].Location, vertices[i + 1].Location, out t); if (distanceFromLine >= distanceFromLineThreshold) includeVertex = true; } } if (includeVertex) { if (filteredVertices.Count > 0 && i - lastIndex > 1) { // adjust color of last vertex to an average of the vertex and all skipped vertices var averageList = new List(); for(var j = lastIndex; j < i; j++) { averageList.Add(vertices[j].Color); } vertices[lastIndex].Color = GraphicsUtil.CombineColors(averageList.ToArray()); } filteredVertices.Add(vertices[i]); lastIndex = i; } } return filteredVertices; } private static double ColorDistance(Color color1, Color color2) { return Math.Sqrt( (color1.A-color2.A)*(color1.A-color2.A) + (color1.R-color2.R)*(color1.R-color2.R) + (color1.G-color2.G)*(color1.G-color2.G) + (color1.B-color2.B)*(color1.B-color2.B)); } private List CreateRouteLineVertices( ParameterizedLocation startPL, ParameterizedLocation endPL, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute) { // Points to use: // 1. Points in adjusted route // 2. Start and end points // 3. Points where alpha adjustment changes // Don't insert points from category 2 if there already is a point with the same PL in category 1 // Don't insert points from category 3 if there already is a point with the same PL in category 1 or 2 // 1. Points in adjusted route var adjustedWaypoints = new List(new DefaultAdjustedWaypointCreator().Create(adjustedRoute, startPL, endPL, this)); // experimental: dashed route //var adjustedWaypoints = new List(new DashedAdjustedWaypointCreator().Create(adjustedRoute, startPL, endPL, this)); // 2. Start and end points AdjustedWaypoint startWaypoint = AdjustedRoute.CreateWaypointFromParameterizedLocation(startPL, AdjustedWaypoint.AdjustedWaypointType.Start); AdjustedWaypoint endWaypoint = AdjustedRoute.CreateWaypointFromParameterizedLocation(startPL, AdjustedWaypoint.AdjustedWaypointType.End); adjustedWaypoints.Add(startWaypoint); adjustedWaypoints.Add(endWaypoint); // 3. Points where alpha adjustment changes if (AlphaAdjustmentChanges != null) { foreach (AlphaAdjustmentChange aac in AlphaAdjustmentChanges) { AdjustedWaypoint w = AdjustedRoute.CreateWaypointFromParameterizedLocation(aac.ParameterizedLocation, AdjustedWaypoint.AdjustedWaypointType.AlphaAdjustmentChange); adjustedWaypoints.Add(w); } } adjustedWaypoints.Sort(); // Don't insert points from category 2 if there already is a point with the same PL in category 1 // Don't insert points from category 3 if there already is a point with the same PL in category 1 or 2 for (int i = adjustedWaypoints.Count - 1; i >= 1; i--) { if (adjustedWaypoints[i].ParameterizedLocation == adjustedWaypoints[i - 1].ParameterizedLocation) adjustedWaypoints.RemoveAt(i); } // create route line vertices var vertices = new List(); double currentAlphaAdjustment = 0; int currentAlphaAdjustmentIndex = -1; foreach (AdjustedWaypoint aw in adjustedWaypoints) { while (AlphaAdjustmentChanges != null && currentAlphaAdjustmentIndex + 1 < AlphaAdjustmentChanges.Count && AlphaAdjustmentChanges[currentAlphaAdjustmentIndex + 1].ParameterizedLocation <= aw.ParameterizedLocation) { currentAlphaAdjustmentIndex++; currentAlphaAdjustment = AlphaAdjustmentChanges[currentAlphaAdjustmentIndex].AlphaAdjustment; } var vertex = new RouteLineVertex(); vertex.Location = aw.Location; vertex.Color = GetColorFromParameterizedLocation(aw.ParameterizedLocation, colorCodingAttribute); // experimental: dashed route //vertex.Color = GetColorFromParameterizedLocation(aw.ParameterizedLocation, DashedAdjustedWaypointCreator.experimental_dashWaypointAttribute); if (secondaryColorCodingAttribute.HasValue) vertex.SecondaryColor = GetColorFromParameterizedLocation(aw.ParameterizedLocation, secondaryColorCodingAttribute.Value); vertex.AlphaAdjustment = currentAlphaAdjustment; vertex.ParameterizedLocation = aw.ParameterizedLocation; vertices.Add(vertex); } return vertices; } /// /// Used to keep internal route lap time list and laps in sync /// /// private void SetLapTimesToRoute(Route r) { var lapTimes = new OrderedBag(); foreach (var l in Laps) { lapTimes.Add(l.Time.ToUniversalTime()); } r.LapTimes = lapTimes; } #endregion #region Nested type: RouteLineVertex private class RouteLineVertex { private double alphaAdjustment; public PointD Location { get; set; } public Color Color { get; set; } public Color? SecondaryColor { get; set; } public ParameterizedLocation ParameterizedLocation { get; set; } public double AlphaAdjustment { get { return alphaAdjustment; } set { if (value < -1 || value > 1) throw new ArgumentOutOfRangeException("Alpha adjustment must be between -1 and 1, inclusive."); alphaAdjustment = value; } } } #endregion #region Nested type: RouteLine private class RouteLine { public RouteLine(RouteLineVertex startVertex, RouteLineVertex endVertex, RouteLineVertex previousVertex, RouteLineVertex nextVertex, double lineWidth, double maskWidth, double zoom, bool splitLine) { PointD p0 = zoom * (previousVertex ?? startVertex).Location; PointD p1 = zoom * startVertex.Location; PointD p2 = zoom * endVertex.Location; PointD p3 = zoom * (nextVertex ?? endVertex).Location; PointD directionVector = LinearAlgebraUtil.Normalize(p1 - p0); if (p0.X == p1.X && p0.Y == p1.Y) { p0 = p1 - directionVector; } if (p3.X == p2.X && p3.Y == p2.Y) { p3 = p2 + directionVector; } if(splitLine) { LeftLinePath = CreatePath(p1, p2, p1 - p0, p3 - p2, -zoom * lineWidth / 2, 0, previousVertex == null, nextVertex == null); RightLinePath = CreatePath(p1, p2, p1 - p0, p3 - p2, zoom * lineWidth / 2, 0, previousVertex == null, nextVertex == null); } else { LinePath = CreatePath(p1, p2, p1 - p0, p3 - p2, zoom * lineWidth / 2, -zoom * lineWidth / 2, previousVertex == null, nextVertex == null); } if (zoom * maskWidth > 0) { GraphicsPath leftMaskPath = CreatePath(p1, p2, p1 - p0, p3 - p2, zoom * (lineWidth / 2 + maskWidth), zoom * lineWidth / 2, previousVertex == null, nextVertex == null); GraphicsPath rightMaskPath = CreatePath(p1, p2, p1 - p0, p3 - p2, zoom * (-lineWidth / 2 - maskWidth), zoom * -lineWidth / 2, previousVertex == null, nextVertex == null); MaskPath = new GraphicsPath(FillMode.Winding); MaskPath.AddPath(leftMaskPath, false); MaskPath.AddPath(rightMaskPath, false); } } public GraphicsPath LinePath { get; private set; } public GraphicsPath LeftLinePath { get; private set; } public GraphicsPath RightLinePath { get; private set; } public GraphicsPath MaskPath { get; private set; } // TODO: add support for bool isStartOfLine, bool isEndOfLine private static GraphicsPath CreatePath(PointD p1, PointD p2, PointD d0, PointD d2, double t0, double t1, bool isStartOfLine, bool isEndOfLine) { const double EPSILON = 0.000001; PointD d1 = p2 - p1; PointD n0 = LinearAlgebraUtil.GetNormalVector(d0); PointD n1 = LinearAlgebraUtil.GetNormalVector(d1); PointD n2 = LinearAlgebraUtil.GetNormalVector(d2); PointD c0 = LinearAlgebraUtil.GetNormalVector(LinearAlgebraUtil.Normalize(d0) + LinearAlgebraUtil.Normalize(d1)); PointD c1 = LinearAlgebraUtil.GetNormalVector(LinearAlgebraUtil.Normalize(d1) + LinearAlgebraUtil.Normalize(d2)); bool parallell0 = (Math.Abs(LinearAlgebraUtil.GetAngleR(d0) - LinearAlgebraUtil.GetAngleR(d1)) < EPSILON); bool parallell1 = (Math.Abs(LinearAlgebraUtil.GetAngleR(d1) - LinearAlgebraUtil.GetAngleR(d2)) < EPSILON); PointD start; PointD end; PointD previousPoint; // t0 PointD q00e = p1 + t0 * n0; PointD q01s = p1 + t0 * n1; PointD q01e = p2 + t0 * n1; PointD q02s = p2 + t0 * n2; // t1 PointD q10e = p1 + t1 * n0; PointD q11s = p1 + t1 * n1; PointD q11e = p2 + t1 * n1; PointD q12s = p2 + t1 * n2; var path = new GraphicsPath(FillMode.Winding); double i00t; bool i00 = LinearAlgebraUtil.LineInfiniteLineIntersect(q01s, q01e, q00e, d0, out i00t); double i01t; bool i01 = LinearAlgebraUtil.LineInfiniteLineIntersect(q01s, q01e, q02s, d2, out i01t); double i10t; bool i10 = LinearAlgebraUtil.LineInfiniteLineIntersect(q11s, q11e, q10e, d0, out i10t); double i11t; bool i11 = LinearAlgebraUtil.LineInfiniteLineIntersect(q11s, q11e, q12s, d2, out i11t); if (i00t < 0 && Math.Abs(t0) > 0) { var startAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(t0 * c0)); var sweepAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(c0, n1)); path.AddArc( new RectangleF((float)(p1.X - Math.Abs(t0)), (float)(p1.Y - Math.Abs(t0)), (float)(2 * Math.Abs(t0)), (float)(2 * Math.Abs(t0))), startAngle, sweepAngle ); } if (parallell0) start = q01s; else if (i00) start = q01s + i00t * (q01e - q01s); //else if (i00t > 1) start = LinearAlgebraUtil.InfiniteLinesIntersectionPoint(q01s, d1, P0, t0 * n1); else start = q01s; if (parallell1) end = q01e; else if (i01) end = q01s + i01t * (q01e - q01s); //else if (i01t < 0) end = LinearAlgebraUtil.InfiniteLinesIntersectionPoint(p2, t0 * c1, p1, t0 * c0); else end = q01e; path.AddLine((PointF)start, (PointF)end); if (i01t > 1 && Math.Abs(t0) > 0) { var startAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(t0 * n1)); var sweepAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(n1, c1)); path.AddArc( new RectangleF((float)(p2.X - Math.Abs(t0)), (float)(p2.Y - Math.Abs(t0)), (float)(2 * Math.Abs(t0)), (float)(2 * Math.Abs(t0))), startAngle, sweepAngle ); previousPoint = p2 + t0 * c1; } else { previousPoint = end; } if (Math.Sign(t0) != Math.Sign(t1) && t0 != 0 && t1 != 0) { path.AddLine((PointF)previousPoint, (PointF)p2); } if (!parallell0 && i10) start = q11s + i10t * (q11e - q11s); else start = q11s; if (!parallell1 && i11) end = q11s + i11t * (q11e - q11s); else end = q11e; if (i11t > 1 && Math.Abs(t1) > 0) { var startAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(t1 * c1)); var sweepAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(c1, n1)); path.AddArc( new RectangleF((float)(p2.X - Math.Abs(t1)), (float)(p2.Y - Math.Abs(t1)), (float)(2 * Math.Abs(t1)), (float)(2 * Math.Abs(t1))), startAngle, sweepAngle ); } path.AddLine((PointF)end, (PointF)start); if (i10t < 0 && Math.Abs(t1) > 0) { var startAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(t1 * n1)); var sweepAngle = (float)(180 / Math.PI * LinearAlgebraUtil.GetAngleR(n1, c0)); path.AddArc( new RectangleF((float)(p1.X - Math.Abs(t1)), (float)(p1.Y - Math.Abs(t1)), (float)(2 * Math.Abs(t1)), (float)(2 * Math.Abs(t1))), startAngle, sweepAngle ); previousPoint = p1 + t1 * c0; } else { previousPoint = start; } if (Math.Sign(t0) != Math.Sign(t1) && t0 != 0 && t1 != 0) { path.AddLine((PointF)previousPoint, (PointF)p1); } //path.AddEllipse(new RectangleF((float)(p1.X - Math.Abs(t1 / 5)), (float)(p1.Y - Math.Abs(t1 / 5)), (float)(2 * Math.Abs(t1 / 5)), (float)(2 * Math.Abs(t1 / 5)))); //path.AddEllipse(new RectangleF((float)(p2.X - Math.Abs(t1 / 5)), (float)(p2.Y - Math.Abs(t1 / 5)), (float)(2 * Math.Abs(t1 / 5)), (float)(2 * Math.Abs(t1 / 5)))); return path; } } #endregion private class PLWithKey : ParameterizedLocation, IComparable { private PLKey key; public PLWithKey(PLKey key, ParameterizedLocation pl) : base(pl.SegmentIndex, pl.Value) { this.key = key; } public PLKey Key { get { return key; } set { key = value; } } #region IComparable Members public int CompareTo(PLWithKey other) { int value = base.CompareTo(other); if (value == 0) { return key.CompareTo(other.Key); } else { return value; } } #endregion } private enum PLKey { Handle, Waypoint } public void InsertIdleTime(DateTime time, TimeSpan duration) { if (duration.TotalSeconds < 0) throw new ArgumentException("The duration parameter must be positive."); if (time < route.FirstWaypoint.Time) { AddTimeOffset(duration); } else if (time < route.LastWaypoint.Time) { // add offset to waypoints var originalPL = route.GetParameterizedLocationFromTime(time).Ceiling(); var pl = new ParameterizedLocation(originalPL); while(pl != null) { route.Segments[pl.SegmentIndex].Waypoints[(int) pl.Value].Time += duration; pl = route.GetNextPLNode(pl, ParameterizedLocation.Direction.Forward); } // insert "freezing" waypoint just before first moved waypoint to keep var waypointIndex = (int)originalPL.Value - 1; if (waypointIndex > 0) { // use clone of previous waypoint as freezing waypoint var freezingWaypoint = route.Segments[originalPL.SegmentIndex].Waypoints[waypointIndex - 1].Clone(); var firstMovedWaypoint = route.Segments[originalPL.SegmentIndex].Waypoints[waypointIndex]; freezingWaypoint.Time = firstMovedWaypoint.Time.AddMilliseconds(-1); // insert one millisecond before route.Segments[originalPL.SegmentIndex].Waypoints.Insert(waypointIndex, freezingWaypoint); } // add offset to laps foreach(var lap in laps) { if (lap.Time >= time) lap.Time += duration; } } SetLapTimesToRoute(); } } [Serializable] public class SessionInfo { private SessionPerson person = new SessionPerson(); private string description = ""; public SessionPerson Person { get { return person; } set { person = value; } } public string Description { get { return description; } set { description = value; } } } [Serializable] public class SessionPerson { public SessionPerson() { Name = ""; Club = ""; } public string Name { get; set; } public string Club { get; set; } public uint Id { get; set; } public override string ToString() { return Name + (!String.IsNullOrEmpty(Club) ? ", " + Club : ""); } } // experimental: dashed route public static class AdjustmentWaypointFactory { public static IAdjustedWaypointCreator Create() { return new DefaultAdjustedWaypointCreator(); } } // experimental: dashed route public interface IAdjustedWaypointCreator { IEnumerable Create(AdjustedRoute adjustedRoute, ParameterizedLocation startPL, ParameterizedLocation endPL, Session session); } public class DefaultAdjustedWaypointCreator : IAdjustedWaypointCreator { public IEnumerable Create(AdjustedRoute adjustedRoute, ParameterizedLocation startPL, ParameterizedLocation endPL, Session session) { var adjustedWaypoints = new List(); for (var i = startPL.SegmentIndex; i <= endPL.SegmentIndex; i++) { var ars = adjustedRoute.Segments[i]; for (var j = 0; j < ars.Waypoints.Count; j++) { var aw = ars.Waypoints[j]; if (aw.ParameterizedLocation >= startPL && aw.ParameterizedLocation <= endPL) { adjustedWaypoints.Add(aw); } } } return adjustedWaypoints; } } // experimental: dashed route public class DashedAdjustedWaypointCreator : IAdjustedWaypointCreator { public static WaypointAttribute experimental_dashWaypointAttribute = WaypointAttribute.Distance; public static double experimental_dashLength = 250; public IEnumerable Create(AdjustedRoute adjustedRoute, ParameterizedLocation startPL, ParameterizedLocation endPL, Session session) { var adjustedWaypoints = new List(); for (var i = startPL.SegmentIndex; i <= endPL.SegmentIndex; i++) { var ars = adjustedRoute.Segments[i]; var previousDashPL = ars.FirstWaypoint.ParameterizedLocation; var previousDashValue = session.Route.GetAttributeFromParameterizedLocation(experimental_dashWaypointAttribute, previousDashPL) ?? 0; var previousDashIndex = previousDashValue / experimental_dashLength; for (var j = 0; j < ars.Waypoints.Count; j++) { var aw = ars.Waypoints[j]; if (aw.ParameterizedLocation >= startPL && aw.ParameterizedLocation <= endPL) { var currentDashValue = session.Route.GetAttributeFromParameterizedLocation(experimental_dashWaypointAttribute, aw.ParameterizedLocation) ?? 0; var currentDashIndex = currentDashValue / experimental_dashLength; var dashStartPassed = (int) currentDashIndex > (int) previousDashIndex; if (dashStartPassed) { // create dash start points that are between these adjusted route points for(var k = (int)previousDashIndex+1; k { private List sessions = new List(); public Session this[int index] { get { return sessions[index]; } set { sessions[index] = value; } } /// /// Using linear least squares algorithm described at http://en.wikipedia.org/wiki/Linear_least_squares /// /// public Transformation CalculateAverageTransformation() { var averageProjectionOrigin = new LongLat(); foreach (var session in this) { averageProjectionOrigin += session.ProjectionOrigin / Count; } if (Count == 0) return null; var n = 4; var XtX = new GeneralMatrix(n, n); var Xty = new GeneralMatrix(n, 1); var numberOfUnknowns = 0; foreach (var session in this) { var m = session.Handles.Length; if (m < 2) continue; numberOfUnknowns += m; var startDistance = session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, session.Route.FirstPL).Value; for (var i = 0; i < m; i++) { var longLat = session.Route.GetLocationFromParameterizedLocation(session.Handles[i].ParameterizedLocation); var p = longLat.Project(averageProjectionOrigin); // projected point on earth (metres) var q = session.Handles[i].Location; // point on map image (pixels) var endDistance = (i != m - 1) ? (session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, session.Handles[i].ParameterizedLocation).Value + session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, session.Handles[i + 1].ParameterizedLocation).Value ) / 2 : session.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, session.Route.LastPL).Value; var w = endDistance - startDistance; // weight startDistance = endDistance; XtX.SetElement(0, 0, XtX.GetElement(0, 0) + w * (p.X * p.X + p.Y * p.Y)); XtX.SetElement(0, 2, XtX.GetElement(0, 2) + w * p.X); XtX.SetElement(0, 3, XtX.GetElement(0, 3) - w * p.Y); XtX.SetElement(1, 1, XtX.GetElement(1, 1) + w * (p.X * p.X + p.Y * p.Y)); XtX.SetElement(1, 2, XtX.GetElement(1, 2) + w * p.Y); XtX.SetElement(1, 3, XtX.GetElement(1, 3) + w * p.X); XtX.SetElement(2, 0, XtX.GetElement(2, 0) + w * p.X); XtX.SetElement(2, 1, XtX.GetElement(2, 1) + w * p.Y); XtX.SetElement(2, 2, XtX.GetElement(2, 2) + w); XtX.SetElement(3, 0, XtX.GetElement(3, 0) - w * p.Y); XtX.SetElement(3, 1, XtX.GetElement(3, 1) + w * p.X); XtX.SetElement(3, 3, XtX.GetElement(3, 3) + w); Xty.SetElement(0, 0, Xty.GetElement(0, 0) + w * (q.X * p.X - q.Y * p.Y)); Xty.SetElement(1, 0, Xty.GetElement(1, 0) + w * (q.X * p.Y + q.Y * p.X)); Xty.SetElement(2, 0, Xty.GetElement(2, 0) + w * q.X); Xty.SetElement(3, 0, Xty.GetElement(3, 0) + w * q.Y); } } var T = new GeneralMatrix(3, 3); if (numberOfUnknowns == 0) { T = this[0].InitialTransformationMatrix; } else if (numberOfUnknowns == 1) { T = this[0].Handles[0].TransformationMatrix; } else { var B = XtX.QRD().Solve(Xty); T.SetElement(0, 0, B.GetElement(0, 0)); T.SetElement(0, 1, B.GetElement(1, 0)); T.SetElement(0, 2, B.GetElement(2, 0)); T.SetElement(1, 0, B.GetElement(1, 0)); T.SetElement(1, 1, -B.GetElement(0, 0)); T.SetElement(1, 2, B.GetElement(3, 0)); T.SetElement(2, 0, 0); T.SetElement(2, 1, 0); T.SetElement(2, 2, 1); } return new Transformation(T, averageProjectionOrigin); } /// /// Creates a shallow copy. /// /// public SessionCollection Copy() { var copy = new SessionCollection(); foreach (var s in sessions) { copy.Add(s); } return copy; } #region ICollection Members public void Add(Session item) { sessions.Add(item); } public void Clear() { sessions.Clear(); } public bool Contains(Session item) { return sessions.Contains(item); } public void CopyTo(Session[] array, int arrayIndex) { sessions.CopyTo(array, arrayIndex); } public int Count { get { return sessions.Count; } } public bool IsReadOnly { get { return false; } } public bool Remove(Session item) { return sessions.Remove(item); } #endregion #region IEnumerable Members public IEnumerator GetEnumerator() { return sessions.GetEnumerator(); } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return sessions.GetEnumerator(); } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/SessionSettings.cs000066400000000000000000000207301446222606700276460ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using QuickRoute.BusinessEntities.GlobalizedProperties; namespace QuickRoute.BusinessEntities { [Serializable] public class SessionSettings : GlobalizedObject { // for backward compatibility only, do not use in new code private Interval speedSmoothingInterval = new Interval(0, 0); private Dictionary smoothingIntervals = CreateDefaultSmoothingIntervals(); private Dictionary routeLineSettingsCollection = CreateDefaultRouteLineSettingsCollection(); private Dictionary markerDrawers = CreateDefaultMarkerDrawers(); private double circleTimeRadius = 45; public Dictionary SmoothingIntervals { get { if(smoothingIntervals == null) { smoothingIntervals = CreateDefaultSmoothingIntervals(); smoothingIntervals[WaypointAttribute.Speed] = speedSmoothingInterval; smoothingIntervals[WaypointAttribute.Pace] = speedSmoothingInterval; } return smoothingIntervals; } set { smoothingIntervals = value; } } public Dictionary RouteLineSettingsCollection { get { return routeLineSettingsCollection; } set { routeLineSettingsCollection = value; } } public Dictionary MarkerDrawers { get { return markerDrawers; } set { markerDrawers = value; } } public double CircleTimeRadius { get { return circleTimeRadius; } set { circleTimeRadius = value; } } public static Dictionary CreateDefaultSmoothingIntervals() { var smoothingIntervals = new Dictionary(); smoothingIntervals.Add(WaypointAttribute.Speed, new Interval(0, 0)); smoothingIntervals.Add(WaypointAttribute.Pace, new Interval(0, 0)); smoothingIntervals.Add(WaypointAttribute.HeartRate, new Interval(0, 0)); smoothingIntervals.Add(WaypointAttribute.Altitude, new Interval(-10, 10)); smoothingIntervals.Add(WaypointAttribute.DirectionDeviationToNextLap, new Interval(-2.5, 2.5)); smoothingIntervals.Add(WaypointAttribute.MapReadingDuration, new Interval(0, 0)); return smoothingIntervals; } public static Dictionary CreateDefaultRouteLineSettingsCollection() { var coll = new Dictionary(); RouteLineSettings rls; // default pace line settings rls = new RouteLineSettings( new ColorRange( new Gradient(Color.FromArgb(128, Color.Green), 0.0, Color.FromArgb(128, Color.Yellow), 0.5, Color.FromArgb(128, Color.Red), 1.0), 3.5 * 60, 10 * 60), 3, Color.FromArgb(160, Color.Black), 1.5, true, 0); // TODO: localize rls.ColorRange.Gradient.Name = WaypointAttribute.Pace.ToString(); rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width + 2 * rls.MaskWidth; coll.Add(WaypointAttribute.Pace, rls); // default speed line settings rls = new RouteLineSettings( new ColorRange( new Gradient(Color.FromArgb(128, Color.Red), 0.0, Color.FromArgb(128, Color.Yellow), 0.5, Color.FromArgb(128, Color.Green), 1.0), 5, 20), 3, Color.FromArgb(160, Color.Blue), 1.5, true, 0); // TODO: localize rls.ColorRange.Gradient.Name = WaypointAttribute.Speed.ToString(); rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width + 2 * rls.MaskWidth; coll.Add(WaypointAttribute.Speed, rls); // default heart rate line settings rls = new RouteLineSettings( new ColorRange( new Gradient(Color.FromArgb(128, Color.Green), 0.0, Color.FromArgb(128, Color.Yellow), 0.5, Color.FromArgb(128, Color.Red), 1.0), 120, 190), 3, Color.FromArgb(160, Color.DarkRed), 1.5, true, 0); // TODO: localize rls.ColorRange.Gradient.Name = WaypointAttribute.HeartRate.ToString(); rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width + 2 * rls.MaskWidth; coll.Add(WaypointAttribute.HeartRate, rls); // default altitude line settings rls = new RouteLineSettings( new ColorRange( new Gradient(Color.FromArgb(128, Color.Green), 0.0, Color.FromArgb(128, Color.Yellow), 1.0 / 3, Color.FromArgb(128, Color.Red), 2.0 / 3, Color.FromArgb(128, Color.Blue), 1.0), 0, 500), 3, Color.FromArgb(160, Color.Brown), 1.5, true, 0); // TODO: localize rls.ColorRange.Gradient.Name = WaypointAttribute.Altitude.ToString(); rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width + 2 * rls.MaskWidth; coll.Add(WaypointAttribute.Altitude, rls); // default direction line settings rls = new RouteLineSettings( new ColorRange( new Gradient(Color.FromArgb(0, Color.White), 0.0, Color.FromArgb(128, Color.Yellow), 0.5, Color.FromArgb(128, Color.Red), 1.0), 0, 45), 3, Color.FromArgb(160, Color.Black), 2, true, 0); // TODO: localize rls.ColorRange.Gradient.Name = WaypointAttribute.DirectionDeviationToNextLap.ToString(); rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width + 2 * rls.MaskWidth; coll.Add(WaypointAttribute.DirectionDeviationToNextLap, rls); // default map reading duration line settings rls = new RouteLineSettings( new ColorRange( new Gradient(Color.FromArgb(0, Color.White), 0.0, Color.FromArgb(128, 255, 128, 128), 0.0001, Color.FromArgb(128, 255, 0, 0), 0.5, Color.FromArgb(128, 128, 0, 0), 1.0), 0, 10), 3, Color.FromArgb(160, Color.Black), 2, true, 0); // TODO: localize rls.ColorRange.Gradient.Name = WaypointAttribute.MapReadingDuration.ToString(); rls.MonochromeColor = rls.ColorRange.Gradient.GetColor(1); rls.MonochromeWidth = rls.Width + 2 * rls.MaskWidth; coll.Add(WaypointAttribute.MapReadingDuration, rls); return coll; } public static Dictionary CreateDefaultMarkerDrawers() { Dictionary markerDrawers = new Dictionary(); markerDrawers.Add( MarkerType.Start, new CircleDrawer(Color.FromArgb(192, 255, 0, 64), 12, 3) ); markerDrawers.Add( MarkerType.Lap, new CircleDrawer(Color.FromArgb(192, 255, 0, 64), 12, 3) ); markerDrawers.Add( MarkerType.Stop, new CircleDrawer(Color.FromArgb(192, 255, 0, 64), 12, 3) ); markerDrawers.Add( MarkerType.MouseHover, new DiscAndCircleDrawer(Color.FromArgb(192, Color.Red), 4, Color.FromArgb(192,Color.Black), 6, 2) ); markerDrawers.Add( MarkerType.Handle, new DiscDrawer(Color.FromArgb(192, Color.Blue), 6) ); markerDrawers.Add( MarkerType.ActiveHandle, new DiscAndCircleDrawer(Color.FromArgb(192, Color.Blue), 6, Color.FromArgb(192, Color.Blue), 12, 3) ); markerDrawers.Add( MarkerType.MovingActiveHandle, new CircleDrawer(Color.FromArgb(192, Color.Blue), 12, 3) ); return markerDrawers; } public SessionSettings Copy() { MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, this); ms.Flush(); ms.Seek(0, SeekOrigin.Begin); return bf.Deserialize(ms) as SessionSettings; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Units.cs000066400000000000000000000324451446222606700256120ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.BusinessEntities { public abstract class IUnit : IComparable { public abstract new string ToString(); public abstract void FromString(string s); public abstract double ToDouble(IUnit u0, double d0, IUnit u1, double d1); public abstract object ValueAsObject { get; set; } public abstract int CompareTo(IUnit other); } public class TimeOfDay : IUnit { private readonly string[] separators = new[] { ".", ":", "," }; public TimeOfDay() { } public TimeOfDay(DateTime value) { Value = value; } public DateTime Value { get; set; } public override string ToString() { int seconds = (int)(Value.Subtract(Value.Date).TotalSeconds); return string.Format("{0:d1}", seconds / 3600) + ":" + string.Format("{0:d2}", (seconds / 60) % 60) + ":" + string.Format("{0:d2}", seconds % 60); } public override void FromString(string s) { string[] atoms = s.Split(separators, StringSplitOptions.None); try { int hours = 0; int minutes = 0; int seconds = 0; switch (atoms.Length) { case 1: seconds = Convert.ToInt32(atoms[0]); break; case 2: minutes = Convert.ToInt32(atoms[0]); seconds = Convert.ToInt32(atoms[1]); break; case 3: hours = Convert.ToInt32(atoms[0]); minutes = Convert.ToInt32(atoms[1]); seconds = Convert.ToInt32(atoms[2]); break; default: break; } Value = new DateTime(0, 0, 0, hours, minutes, seconds); } catch (Exception) { Value = new DateTime(); } } public override double ToDouble(IUnit u0, double d0, IUnit u1, double d1) { TimeOfDay v0 = u0 as TimeOfDay; TimeOfDay v1 = u1 as TimeOfDay; if (v0 == null || v1 == null) throw new ArgumentException(); if (v0.Value.Ticks == v1.Value.Ticks) return d0; return d0 + (double)(Value.Ticks - v0.Value.Ticks) / (v1.Value.Ticks - v0.Value.Ticks) * (d1 - d0); } public override object ValueAsObject { get { return Value; } set { Value = Convert.ToDateTime(value); } } public override int CompareTo(IUnit other) { if (other is TimeOfDay) { return Value.CompareTo((other as TimeOfDay).Value); } throw new ArgumentException(); } public static Scale CreateScale(DateTime minValue, DateTime maxValue, int maxNoOfMarkers, bool adjustStartAndEndValues) { Scale s = ElapsedTime.CreateScale( DateTimeToDouble(minValue), DateTimeToDouble(maxValue), maxNoOfMarkers, adjustStartAndEndValues); s.Start = new TimeOfDay(DoubleToDateTime(((ElapsedTime)s.Start).Value)); s.End = new TimeOfDay(DoubleToDateTime(((ElapsedTime)s.End).Value)); List newMarkers = new List(); foreach(IUnit u in s.Markers) { newMarkers.Add(new TimeOfDay(DoubleToDateTime(((ElapsedTime)u).Value))); } s.Markers = newMarkers; return s; } private static double DateTimeToDouble(DateTime dt) { return (double)dt.Ticks / TimeSpan.TicksPerSecond; } private static DateTime DoubleToDateTime(double d) { return new DateTime((long)(d*TimeSpan.TicksPerSecond)); } } /// /// Elapsed time expressed in seconds /// public class ElapsedTime : IUnit { private readonly string[] separators = new[] { ".", ":", "," }; public ElapsedTime() { } public ElapsedTime(double value) { Value = value; } public double Value { get; set; } public TimeSpan ToTimeSpan() { return new TimeSpan(Convert.ToInt64(TimeSpan.TicksPerSecond*Value)); } #region IUnit Members public override string ToString() { int seconds = (int)Value; if(seconds < 3600) { return string.Format("{0:d1}", (seconds / 60) % 60) + ":" + string.Format("{0:d2}", seconds % 60); } else { return string.Format("{0:d1}", seconds / 3600) + ":" + string.Format("{0:d2}", (seconds / 60) % 60) + ":" + string.Format("{0:d2}", seconds % 60); } } public override void FromString(string s) { string[] atoms = s.Split(separators, StringSplitOptions.None); try { int hours = 0; int minutes = 0; int seconds = 0; switch (atoms.Length) { case 1: seconds = Convert.ToInt32(atoms[0]); break; case 2: minutes = Convert.ToInt32(atoms[0]); seconds = Convert.ToInt32(atoms[1]); break; case 3: hours = Convert.ToInt32(atoms[0]); minutes = Convert.ToInt32(atoms[1]); seconds = Convert.ToInt32(atoms[2]); break; default: break; } Value = new TimeSpan(hours, minutes, seconds).TotalSeconds; } catch (Exception) { Value = 0; } } public override double ToDouble(IUnit u0, double d0, IUnit u1, double d1) { ElapsedTime v0 = u0 as ElapsedTime; ElapsedTime v1 = u1 as ElapsedTime; if (v0 == null || v1 == null) throw new ArgumentException(); if (v0.Value == v1.Value) return d0; return d0 + (Value - v0.Value) / (v1.Value - v0.Value) * (d1 - d0); } public override object ValueAsObject { get { return Value; } set { Value = Convert.ToDouble(value); } } public override int CompareTo(IUnit other) { if (other is TimeOfDay) { return Value.CompareTo((other as TimeOfDay).Value); } throw new ArgumentException(); } #endregion public static Scale CreateScale(double minValue, double maxValue, int maxNoOfMarkers, bool adjustStartAndEndValues) { double[] VALID_MARKER_INTERVALS = new double[] { 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2 , 5 , 15 , 30 , 1 * 60, 2 * 60, 5 * 60, 15 * 60, 30 * 60, 1 * 3600, 2 * 3600, 6 * 3600, 12 * 3600, 24 * 3600 }; Scale scale = new Scale(); if (maxNoOfMarkers < 2) maxNoOfMarkers = 2; double intervalLength = Math.Abs(maxValue - minValue); if (intervalLength == 0) intervalLength = double.Epsilon; double minMarkerInterval = intervalLength / (maxNoOfMarkers - 1); double firstMarkerValue; double lastMarkerValue; double markerInterval = VALID_MARKER_INTERVALS[VALID_MARKER_INTERVALS.Length - 1]; foreach (double mi in VALID_MARKER_INTERVALS) { if (minMarkerInterval < mi) { markerInterval = mi; break; } } if (adjustStartAndEndValues) { firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; scale.Start = new ElapsedTime(firstMarkerValue); scale.End = new ElapsedTime(lastMarkerValue); } else { scale.Start = new ElapsedTime(minValue); scale.End = new ElapsedTime(maxValue); firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; if (firstMarkerValue < minValue) firstMarkerValue += markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; if (lastMarkerValue > maxValue) lastMarkerValue -= markerInterval; } scale.Markers = new List(); for (double value = firstMarkerValue; value <= lastMarkerValue; value += markerInterval) { scale.Markers.Add(new ElapsedTime(value)); } return scale; } } public class DoubleUnitBase : IUnit { public DoubleUnitBase() { } public DoubleUnitBase(double value) { Value = value; } public double Value { get; set; } #region IUnit Members public override string ToString() { return Value.ToString(); } public override void FromString(string s) { double result; if (double.TryParse(s, out result)) { Value = result; } } public override double ToDouble(IUnit u0, double d0, IUnit u1, double d1) { Distance v0 = u0 as Distance; Distance v1 = u1 as Distance; if (v0 == null || v1 == null) throw new ArgumentException(); if (v0.Value == v1.Value) return d0; return d0 + (Value - v0.Value) / (v1.Value - v0.Value) * (d1 - d0); } public override object ValueAsObject { get { return Value; } set { Value = Convert.ToDouble(value); } } public override int CompareTo(IUnit other) { if (other is Distance) { return Value.CompareTo((other as Distance).Value); } throw new ArgumentException(); } #endregion // use 10^n * 1, 2, or 5 as marker intervals public static Scale CreateScale(double minValue, double maxValue, int maxNoOfMarkers, bool adjustStartAndEndValues) { Scale scale = new Scale(); if (maxNoOfMarkers < 2) maxNoOfMarkers = 2; double intervalLength = Math.Abs(maxValue - minValue); if (intervalLength == 0) intervalLength = double.Epsilon; double minMarkerInterval = intervalLength / (maxNoOfMarkers - 1); double firstMarkerValue; double lastMarkerValue; double log10 = Math.Log10(minMarkerInterval); int n = (int)Math.Floor(log10); double scaledMinMarkerInterval = minMarkerInterval / Math.Pow(10, n); // 1 <= scaledMinMarkerInterval < 10 double markerInterval; if (scaledMinMarkerInterval <= 2) { markerInterval = 2 * Math.Pow(10, n); } else if (scaledMinMarkerInterval <= 5) { markerInterval = 5 * Math.Pow(10, n); } else { markerInterval = 10 * Math.Pow(10, n); } if (adjustStartAndEndValues) { firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; scale.Start = new Distance(firstMarkerValue); scale.End = new Distance(lastMarkerValue); } else { scale.Start = new Distance(minValue); scale.End = new Distance(maxValue); firstMarkerValue = Math.Floor(minValue / markerInterval) * markerInterval; if (firstMarkerValue < minValue) firstMarkerValue += markerInterval; lastMarkerValue = Math.Ceiling(maxValue / markerInterval) * markerInterval; if (lastMarkerValue > maxValue) lastMarkerValue -= markerInterval; } scale.Markers = new List(); for (double value = firstMarkerValue; value <= lastMarkerValue; value += markerInterval) { scale.Markers.Add(new Distance(value)); } return scale; } } public class Distance : DoubleUnitBase { public Distance() { } public Distance(double value) : base(value) { } } public class HeartRate : DoubleUnitBase { public HeartRate() { } public HeartRate(double value) : base(value) { } } public class Altitude : DoubleUnitBase { public Altitude() { } public Altitude(double value) : base(value) { } } public class MapReadingSimpleState : IUnit { public MapReadingSimpleState() { } public MapReadingSimpleState(bool value) { Value = value; } public bool Value { get; set; } #region IUnit Members public override string ToString() { return Value.ToString(); } public override void FromString(string s) { bool result; if (bool.TryParse(s, out result)) { Value = result; } } public override double ToDouble(IUnit u0, double d0, IUnit u1, double d1) { MapReadingSimpleState v0 = u0 as MapReadingSimpleState; MapReadingSimpleState v1 = u1 as MapReadingSimpleState; if (v0 == null || v1 == null) throw new ArgumentException(); if (v0.Value == v1.Value) return d0; return d0 + ((Value ? 1 : 0) - (v0.Value ? 1 : 0)) / ((v1.Value ? 1 : 0) - (v0.Value ? 1 : 0)) * (d1 - d0); } public override object ValueAsObject { get { return Value; } set { Value = Convert.ToBoolean(value); } } public override int CompareTo(IUnit other) { if (other is MapReadingSimpleState) { return Value.CompareTo((other as MapReadingSimpleState).Value); } throw new ArgumentException(); } #endregion } public class Scale { public IUnit Start { get; set; } public IUnit End { get; set; } public List Markers { get; set; } } } quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/000077500000000000000000000000001446222606700267305ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/000077500000000000000000000000001446222606700331425ustar00rootroot00000000000000GetCategoriesResponse.datasource000066400000000000000000000012631446222606700414050ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService QuickRoute.BusinessEntities.CzechSplitsWebService.GetCategoriesResponse, Web References.CzechSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null GetEventsResponse.datasource000066400000000000000000000012531446222606700405630ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService QuickRoute.BusinessEntities.CzechSplitsWebService.GetEventsResponse, Web References.CzechSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null GetRunnersAndSplitsResponse.datasource000066400000000000000000000012771446222606700426030ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService QuickRoute.BusinessEntities.CzechSplitsWebService.GetRunnersAndSplitsResponse, Web References.CzechSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Reference.cs000066400000000000000000000555011446222606700353160ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.239. // #pragma warning disable 1591 namespace QuickRoute.BusinessEntities.CzechSplitsWebService { using System; using System.Web.Services; using System.Diagnostics; using System.Web.Services.Protocols; using System.ComponentModel; using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="ResultsDBServiceBinding", Namespace="http://www.bestik.cz/vysledky")] [System.Xml.Serialization.SoapIncludeAttribute(typeof(dateTime))] [System.Xml.Serialization.SoapIncludeAttribute(typeof(Runner))] [System.Xml.Serialization.SoapIncludeAttribute(typeof(Category))] [System.Xml.Serialization.SoapIncludeAttribute(typeof(Event))] public partial class ResultsDBService : System.Web.Services.Protocols.SoapHttpClientProtocol { private System.Threading.SendOrPostCallback GetEventsOperationCompleted; private System.Threading.SendOrPostCallback GetCategoriesOperationCompleted; private System.Threading.SendOrPostCallback GetRunnersAndSplitsOperationCompleted; private bool useDefaultCredentialsSetExplicitly; /// public ResultsDBService() { this.Url = global::QuickRoute.BusinessEntities.Properties.Settings.Default.QuickRoute_BusinessEntities_CzechSplitsWebService_ResultsDBService; if ((this.IsLocalFileSystemWebService(this.Url) == true)) { this.UseDefaultCredentials = true; this.useDefaultCredentialsSetExplicitly = false; } else { this.useDefaultCredentialsSetExplicitly = true; } } public new string Url { get { return base.Url; } set { if ((((this.IsLocalFileSystemWebService(base.Url) == true) && (this.useDefaultCredentialsSetExplicitly == false)) && (this.IsLocalFileSystemWebService(value) == false))) { base.UseDefaultCredentials = false; } base.Url = value; } } public new bool UseDefaultCredentials { get { return base.UseDefaultCredentials; } set { base.UseDefaultCredentials = value; this.useDefaultCredentialsSetExplicitly = true; } } /// public event GetEventsCompletedEventHandler GetEventsCompleted; /// public event GetCategoriesCompletedEventHandler GetCategoriesCompleted; /// public event GetRunnersAndSplitsCompletedEventHandler GetRunnersAndSplitsCompleted; /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://bestik.cz/vysledky/webservice.php/GetEvents", RequestNamespace="http://www.bestik.cz/vysledky", ResponseNamespace="http://www.bestik.cz/vysledky")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public GetEventsResponse GetEvents(GetEvents request) { object[] results = this.Invoke("GetEvents", new object[] { request}); return ((GetEventsResponse)(results[0])); } /// public void GetEventsAsync(GetEvents request) { this.GetEventsAsync(request, null); } /// public void GetEventsAsync(GetEvents request, object userState) { if ((this.GetEventsOperationCompleted == null)) { this.GetEventsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetEventsOperationCompleted); } this.InvokeAsync("GetEvents", new object[] { request}, this.GetEventsOperationCompleted, userState); } private void OnGetEventsOperationCompleted(object arg) { if ((this.GetEventsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetEventsCompleted(this, new GetEventsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://bestik.cz/vysledky/webservice.php/GetCategories", RequestNamespace="http://www.bestik.cz/vysledky", ResponseNamespace="http://www.bestik.cz/vysledky")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public GetCategoriesResponse GetCategories(GetCategories request) { object[] results = this.Invoke("GetCategories", new object[] { request}); return ((GetCategoriesResponse)(results[0])); } /// public void GetCategoriesAsync(GetCategories request) { this.GetCategoriesAsync(request, null); } /// public void GetCategoriesAsync(GetCategories request, object userState) { if ((this.GetCategoriesOperationCompleted == null)) { this.GetCategoriesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCategoriesOperationCompleted); } this.InvokeAsync("GetCategories", new object[] { request}, this.GetCategoriesOperationCompleted, userState); } private void OnGetCategoriesOperationCompleted(object arg) { if ((this.GetCategoriesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetCategoriesCompleted(this, new GetCategoriesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://bestik.cz/vysledky/webservice.php/GetRunnersAndSplits", RequestNamespace="http://www.bestik.cz/vysledky", ResponseNamespace="http://www.bestik.cz/vysledky")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public GetRunnersAndSplitsResponse GetRunnersAndSplits(GetRunnersAndSplits request) { object[] results = this.Invoke("GetRunnersAndSplits", new object[] { request}); return ((GetRunnersAndSplitsResponse)(results[0])); } /// public void GetRunnersAndSplitsAsync(GetRunnersAndSplits request) { this.GetRunnersAndSplitsAsync(request, null); } /// public void GetRunnersAndSplitsAsync(GetRunnersAndSplits request, object userState) { if ((this.GetRunnersAndSplitsOperationCompleted == null)) { this.GetRunnersAndSplitsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRunnersAndSplitsOperationCompleted); } this.InvokeAsync("GetRunnersAndSplits", new object[] { request}, this.GetRunnersAndSplitsOperationCompleted, userState); } private void OnGetRunnersAndSplitsOperationCompleted(object arg) { if ((this.GetRunnersAndSplitsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetRunnersAndSplitsCompleted(this, new GetRunnersAndSplitsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// public new void CancelAsync(object userState) { base.CancelAsync(userState); } private bool IsLocalFileSystemWebService(string url) { if (((url == null) || (url == string.Empty))) { return false; } System.Uri wsUri = new System.Uri(url); if (((wsUri.Port >= 1024) && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { return true; } return false; } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class GetEvents { private System.DateTime startDateField; private System.DateTime endDateField; private string countryField; /// public System.DateTime startDate { get { return this.startDateField; } set { this.startDateField = value; } } /// public System.DateTime endDate { get { return this.endDateField; } set { this.endDateField = value; } } /// public string country { get { return this.countryField; } set { this.countryField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class dateTime { private System.DateTime dateTime1Field; /// [System.Xml.Serialization.SoapElementAttribute("dateTime")] public System.DateTime dateTime1 { get { return this.dateTime1Field; } set { this.dateTime1Field = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class Runner { private string nameField; private string clubField; private System.DateTime startTimeField; private System.DateTime finishTimeField; private dateTime[] splitsField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public string Club { get { return this.clubField; } set { this.clubField = value; } } /// public System.DateTime StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// public System.DateTime FinishTime { get { return this.finishTimeField; } set { this.finishTimeField = value; } } /// public dateTime[] Splits { get { return this.splitsField; } set { this.splitsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class GetRunnersAndSplitsResponse { private Runner[] getRunnersAndSplitsResultField; /// public Runner[] GetRunnersAndSplitsResult { get { return this.getRunnersAndSplitsResultField; } set { this.getRunnersAndSplitsResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class GetRunnersAndSplits { private string databaseIdField; private int categoryIndexField; /// public string databaseId { get { return this.databaseIdField; } set { this.databaseIdField = value; } } /// public int categoryIndex { get { return this.categoryIndexField; } set { this.categoryIndexField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class Category { private string nameField; private int noOfRunnersField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public int NoOfRunners { get { return this.noOfRunnersField; } set { this.noOfRunnersField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class GetCategoriesResponse { private Category[] getCategoriesResultField; /// public Category[] GetCategoriesResult { get { return this.getCategoriesResultField; } set { this.getCategoriesResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class GetCategories { private string databaseIdField; /// public string databaseId { get { return this.databaseIdField; } set { this.databaseIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class Event { private string nameField; private string organiserField; private System.DateTime startDateField; private string databaseIdField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public string Organiser { get { return this.organiserField; } set { this.organiserField = value; } } /// public System.DateTime StartDate { get { return this.startDateField; } set { this.startDateField = value; } } /// public string DatabaseId { get { return this.databaseIdField; } set { this.databaseIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.bestik.cz/vysledky")] public partial class GetEventsResponse { private Event[] getEventsResultField; /// public Event[] GetEventsResult { get { return this.getEventsResultField; } set { this.getEventsResultField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetEventsCompletedEventHandler(object sender, GetEventsCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetEventsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetEventsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public GetEventsResponse Result { get { this.RaiseExceptionIfNecessary(); return ((GetEventsResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetCategoriesCompletedEventHandler(object sender, GetCategoriesCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetCategoriesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetCategoriesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public GetCategoriesResponse Result { get { this.RaiseExceptionIfNecessary(); return ((GetCategoriesResponse)(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetRunnersAndSplitsCompletedEventHandler(object sender, GetRunnersAndSplitsCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRunnersAndSplitsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetRunnersAndSplitsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public GetRunnersAndSplitsResponse Result { get { this.RaiseExceptionIfNecessary(); return ((GetRunnersAndSplitsResponse)(this.results[0])); } } } } #pragma warning restore 1591Reference.map000066400000000000000000000006171446222606700354640ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService webservice.wsdl000066400000000000000000000222461446222606700361220ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/CzechSplitsWebService quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService/000077500000000000000000000000001446222606700326435ustar00rootroot00000000000000Category.datasource000066400000000000000000000012251446222606700364150ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService QuickRoute.BusinessEntities.WinSplitsWebService.Category, Web References.WinSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Event.datasource000066400000000000000000000012171446222606700357220ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService QuickRoute.BusinessEntities.WinSplitsWebService.Event, Web References.WinSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null EventClubRunnerCount.datasource000066400000000000000000000012551446222606700407350ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService QuickRoute.BusinessEntities.WinSplitsWebService.EventClubRunnerCount, Web References.WinSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null Reference.cs000066400000000000000000000552571446222606700350270ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.239. // #pragma warning disable 1591 namespace QuickRoute.BusinessEntities.WinSplitsWebService { using System; using System.Web.Services; using System.Diagnostics; using System.Web.Services.Protocols; using System.ComponentModel; using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="WebServicesSoap", Namespace="http://www.winsplits.se/")] public partial class WebServices : System.Web.Services.Protocols.SoapHttpClientProtocol { private System.Threading.SendOrPostCallback GetEventsOperationCompleted; private System.Threading.SendOrPostCallback GetCategoriesOperationCompleted; private System.Threading.SendOrPostCallback GetRunnersAndSplitsOperationCompleted; private System.Threading.SendOrPostCallback GetRunnersPerClubAndEventOperationCompleted; private bool useDefaultCredentialsSetExplicitly; /// public WebServices() { this.Url = global::QuickRoute.BusinessEntities.Properties.Settings.Default.QuickRoute_BusinessEntities_WinSplitsWebService_WebServices; if ((this.IsLocalFileSystemWebService(this.Url) == true)) { this.UseDefaultCredentials = true; this.useDefaultCredentialsSetExplicitly = false; } else { this.useDefaultCredentialsSetExplicitly = true; } } public new string Url { get { return base.Url; } set { if ((((this.IsLocalFileSystemWebService(base.Url) == true) && (this.useDefaultCredentialsSetExplicitly == false)) && (this.IsLocalFileSystemWebService(value) == false))) { base.UseDefaultCredentials = false; } base.Url = value; } } public new bool UseDefaultCredentials { get { return base.UseDefaultCredentials; } set { base.UseDefaultCredentials = value; this.useDefaultCredentialsSetExplicitly = true; } } /// public event GetEventsCompletedEventHandler GetEventsCompleted; /// public event GetCategoriesCompletedEventHandler GetCategoriesCompleted; /// public event GetRunnersAndSplitsCompletedEventHandler GetRunnersAndSplitsCompleted; /// public event GetRunnersPerClubAndEventCompletedEventHandler GetRunnersPerClubAndEventCompleted; /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.winsplits.se/GetEvents", RequestNamespace="http://www.winsplits.se/", ResponseNamespace="http://www.winsplits.se/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public Event[] GetEvents(System.DateTime startDate, System.DateTime endDate, string country) { object[] results = this.Invoke("GetEvents", new object[] { startDate, endDate, country}); return ((Event[])(results[0])); } /// public void GetEventsAsync(System.DateTime startDate, System.DateTime endDate, string country) { this.GetEventsAsync(startDate, endDate, country, null); } /// public void GetEventsAsync(System.DateTime startDate, System.DateTime endDate, string country, object userState) { if ((this.GetEventsOperationCompleted == null)) { this.GetEventsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetEventsOperationCompleted); } this.InvokeAsync("GetEvents", new object[] { startDate, endDate, country}, this.GetEventsOperationCompleted, userState); } private void OnGetEventsOperationCompleted(object arg) { if ((this.GetEventsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetEventsCompleted(this, new GetEventsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.winsplits.se/GetCategories", RequestNamespace="http://www.winsplits.se/", ResponseNamespace="http://www.winsplits.se/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public Category[] GetCategories(int databaseId) { object[] results = this.Invoke("GetCategories", new object[] { databaseId}); return ((Category[])(results[0])); } /// public void GetCategoriesAsync(int databaseId) { this.GetCategoriesAsync(databaseId, null); } /// public void GetCategoriesAsync(int databaseId, object userState) { if ((this.GetCategoriesOperationCompleted == null)) { this.GetCategoriesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCategoriesOperationCompleted); } this.InvokeAsync("GetCategories", new object[] { databaseId}, this.GetCategoriesOperationCompleted, userState); } private void OnGetCategoriesOperationCompleted(object arg) { if ((this.GetCategoriesCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetCategoriesCompleted(this, new GetCategoriesCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.winsplits.se/GetRunnersAndSplits", RequestNamespace="http://www.winsplits.se/", ResponseNamespace="http://www.winsplits.se/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public Runner[] GetRunnersAndSplits(int databaseId, short categoryIndex) { object[] results = this.Invoke("GetRunnersAndSplits", new object[] { databaseId, categoryIndex}); return ((Runner[])(results[0])); } /// public void GetRunnersAndSplitsAsync(int databaseId, short categoryIndex) { this.GetRunnersAndSplitsAsync(databaseId, categoryIndex, null); } /// public void GetRunnersAndSplitsAsync(int databaseId, short categoryIndex, object userState) { if ((this.GetRunnersAndSplitsOperationCompleted == null)) { this.GetRunnersAndSplitsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRunnersAndSplitsOperationCompleted); } this.InvokeAsync("GetRunnersAndSplits", new object[] { databaseId, categoryIndex}, this.GetRunnersAndSplitsOperationCompleted, userState); } private void OnGetRunnersAndSplitsOperationCompleted(object arg) { if ((this.GetRunnersAndSplitsCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetRunnersAndSplitsCompleted(this, new GetRunnersAndSplitsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://www.winsplits.se/GetRunnersPerClubAndEvent", RequestNamespace="http://www.winsplits.se/", ResponseNamespace="http://www.winsplits.se/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public EventClubRunnerCount[] GetRunnersPerClubAndEvent(System.DateTime startDate, System.DateTime endDate, string country) { object[] results = this.Invoke("GetRunnersPerClubAndEvent", new object[] { startDate, endDate, country}); return ((EventClubRunnerCount[])(results[0])); } /// public void GetRunnersPerClubAndEventAsync(System.DateTime startDate, System.DateTime endDate, string country) { this.GetRunnersPerClubAndEventAsync(startDate, endDate, country, null); } /// public void GetRunnersPerClubAndEventAsync(System.DateTime startDate, System.DateTime endDate, string country, object userState) { if ((this.GetRunnersPerClubAndEventOperationCompleted == null)) { this.GetRunnersPerClubAndEventOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetRunnersPerClubAndEventOperationCompleted); } this.InvokeAsync("GetRunnersPerClubAndEvent", new object[] { startDate, endDate, country}, this.GetRunnersPerClubAndEventOperationCompleted, userState); } private void OnGetRunnersPerClubAndEventOperationCompleted(object arg) { if ((this.GetRunnersPerClubAndEventCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetRunnersPerClubAndEventCompleted(this, new GetRunnersPerClubAndEventCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// public new void CancelAsync(object userState) { base.CancelAsync(userState); } private bool IsLocalFileSystemWebService(string url) { if (((url == null) || (url == string.Empty))) { return false; } System.Uri wsUri = new System.Uri(url); if (((wsUri.Port >= 1024) && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { return true; } return false; } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.winsplits.se/")] public partial class Event { private string nameField; private string organiserField; private System.DateTime startDateField; private int databaseIdField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public string Organiser { get { return this.organiserField; } set { this.organiserField = value; } } /// public System.DateTime StartDate { get { return this.startDateField; } set { this.startDateField = value; } } /// public int DatabaseId { get { return this.databaseIdField; } set { this.databaseIdField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.winsplits.se/")] public partial class ClubRunnerCount { private string clubField; private int noOfRunnersField; /// public string Club { get { return this.clubField; } set { this.clubField = value; } } /// public int NoOfRunners { get { return this.noOfRunnersField; } set { this.noOfRunnersField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.winsplits.se/")] public partial class EventClubRunnerCount { private Event eventField; private ClubRunnerCount[] clubRunnerCountsField; /// public Event Event { get { return this.eventField; } set { this.eventField = value; } } /// public ClubRunnerCount[] ClubRunnerCounts { get { return this.clubRunnerCountsField; } set { this.clubRunnerCountsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.winsplits.se/")] public partial class Runner { private string nameField; private string clubField; private System.Nullable startTimeField; private System.Nullable finishTimeField; private System.DateTime[] splitsField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public string Club { get { return this.clubField; } set { this.clubField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] public System.Nullable StartTime { get { return this.startTimeField; } set { this.startTimeField = value; } } /// [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] public System.Nullable FinishTime { get { return this.finishTimeField; } set { this.finishTimeField = value; } } /// public System.DateTime[] Splits { get { return this.splitsField; } set { this.splitsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.winsplits.se/")] public partial class Category { private string nameField; private int noOfRunnersField; /// public string Name { get { return this.nameField; } set { this.nameField = value; } } /// public int NoOfRunners { get { return this.noOfRunnersField; } set { this.noOfRunnersField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetEventsCompletedEventHandler(object sender, GetEventsCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetEventsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetEventsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public Event[] Result { get { this.RaiseExceptionIfNecessary(); return ((Event[])(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetCategoriesCompletedEventHandler(object sender, GetCategoriesCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetCategoriesCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetCategoriesCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public Category[] Result { get { this.RaiseExceptionIfNecessary(); return ((Category[])(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetRunnersAndSplitsCompletedEventHandler(object sender, GetRunnersAndSplitsCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRunnersAndSplitsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetRunnersAndSplitsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public Runner[] Result { get { this.RaiseExceptionIfNecessary(); return ((Runner[])(this.results[0])); } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetRunnersPerClubAndEventCompletedEventHandler(object sender, GetRunnersPerClubAndEventCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetRunnersPerClubAndEventCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetRunnersPerClubAndEventCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public EventClubRunnerCount[] Result { get { this.RaiseExceptionIfNecessary(); return ((EventClubRunnerCount[])(this.results[0])); } } } } #pragma warning restore 1591Reference.map000066400000000000000000000011601446222606700351570ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService Runner.datasource000066400000000000000000000012211446222606700361050ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService QuickRoute.BusinessEntities.WinSplitsWebService.Runner, Web References.WinSplitsWebService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null WebServices.disco000066400000000000000000000014411446222606700360300ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService WebServices.wsdl000066400000000000000000000271661446222606700357140ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/Web References/WinSplitsWebService quickroute-linux-upstream-2.5/QuickRoute.BusinessEntities/app.config000066400000000000000000000022701446222606700261210ustar00rootroot00000000000000
http://www.obasen.nu/winsplits/webservices/WebServices.asmx http://bestik.cz/vysledky/webservice.php quickroute-linux-upstream-2.5/QuickRoute.Common/000077500000000000000000000000001446222606700221015ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Common/CommonUtil.cs000066400000000000000000000111201446222606700245110ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; namespace QuickRoute.Common { public class CommonUtil { public static string GetApplicationDataPath() { //return (Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\QuickRoute\\").Replace("\\\\", "\\"); return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "QuickRoute"); } public static string GetTempFileName() { return GetTempFileName(null); } public static string GetTempFileName(string extension) { if (extension == null) extension = "tmp"; var path = GetTempPath(); string fileName; do { //fileName = path + DateTime.Now.Ticks + "_" + new Random().Next(0, 999999) + "." + extension; fileName = Path.Combine(path, DateTime.Now.Ticks + "_" + new Random().Next(0, 999999) + "." + extension); } while (File.Exists(fileName)); return fileName; } public static string GetTempFileName(string suggestedFileName, string extension) { var path = GetTempPath(); //string fileName = path + CreateValidFileName(GetTempFileNameHelper(suggestedFileName, extension)); string fileName = Path.Combine(path, CreateValidFileName(GetTempFileNameHelper(suggestedFileName, extension))); var count = 0; while (File.Exists(fileName)) { count++; var fn = Path.GetFileNameWithoutExtension(suggestedFileName) + String.Format(" ({0})", count) + Path.GetExtension(suggestedFileName); //fileName = path + CreateValidFileName(GetTempFileNameHelper(fn, extension)); fileName = Path.Combine(path, CreateValidFileName(GetTempFileNameHelper(fn, extension))); } return fileName; } private static string GetTempFileNameHelper(string fileName, string extension) { return extension != null ? Path.GetFileNameWithoutExtension(fileName) + "." + extension : Path.GetFileName(fileName); } /// /// /// /// public static string GetTempPath() { return Path.Combine(GetApplicationDataPath(), @"Temp"); } public static void ClearTempFolder() { var dir = new DirectoryInfo(GetTempPath()); var files = dir.GetFiles("*.*"); foreach (var file in files) { file.Delete(); } var directories = dir.GetDirectories("*.*"); foreach (var directory in directories) { directory.Delete(true); } } public static string GetDownloadedFileName(string fileName) { // todo: add gui for download meter, cancelable if (fileName.StartsWith("http")) { var client = new WebClient(); var downloadedFileName = GetTempFileName(fileName, null); client.DownloadFile(fileName, downloadedFileName); return downloadedFileName; } return fileName; } public static string CreateValidFileName(string fileName) { string validFileName = fileName.Trim(); foreach (char invalChar in Path.GetInvalidFileNameChars()) { validFileName = validFileName.Replace(invalChar.ToString(), ""); } foreach (char invalChar in Path.GetInvalidPathChars()) { validFileName = validFileName.Replace(invalChar.ToString(), ""); } return validFileName; } /// /// Copies the contents of input to output. Doesn't close either stream. /// public static void CopyStream(Stream input, Stream output) { var buffer = new byte[8 * 1024]; int len; while ((len = input.Read(buffer, 0, buffer.Length)) > 0) { output.Write(buffer, 0, len); } } public static void SerializeToFile(T obj, string fileName) { IFormatter formatter = new BinaryFormatter(); using (var stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { formatter.Serialize(stream, obj); } } public static T DeserializeFromFile(string fileName) { IFormatter formatter = new BinaryFormatter(); using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None)) { return (T)formatter.Deserialize(stream); } } } } quickroute-linux-upstream-2.5/QuickRoute.Common/IMapPublisher.cs000066400000000000000000000041451446222606700251400ustar00rootroot00000000000000using System; using System.Collections.Generic; namespace QuickRoute.Common { public interface IMapPublisher { string WebServiceUrl { get; set; } string Username { get; set; } string Password { get; set; } PublishResult Publish(MapInfo map); GetAllCategoriesResult GetAllCategories(); GetAllMapsResult GetAllMaps(); ConnectResult Connect(); } public class MapInfo { public int ID { get; set; } public int UserID { get; set; } public int CategoryID { get; set; } public DateTime Date { get; set; } public string Name { get; set; } public string Organiser { get; set; } public string Country { get; set; } public string Discipline { get; set; } public string RelayLeg { get; set; } public string MapName { get; set; } public string ResultListUrl { get; set; } public string Comment { get; set; } public byte[] MapImageData { get; set; } public byte[] BlankMapImageData { get; set; } public string MapImageFileExtension { get; set; } public override string ToString() { return Name + (Date != DateTime.MinValue ? " [" + Date.ToShortDateString() + "]" : ""); } } public class Category { public int ID { get; set; } public int UserID { get; set; } public string Name { get; set; } public override string ToString() { return Name; } } public class PublishResult { public bool Success { get; set; } public string ErrorMessage { get; set; } public string URL { get; set; } } public class GetAllMapsResult { public bool Success { get; set; } public string ErrorMessage { get; set; } public List Maps { get; set; } } public class GetAllCategoriesResult { public bool Success { get; set; } public string ErrorMessage { get; set; } public List Categories { get; set; } } public class ConnectResult { public bool Success { get; set; } public string ErrorMessage { get; set; } public string Version { get; set; } } }quickroute-linux-upstream-2.5/QuickRoute.Common/LogUtil.cs000066400000000000000000000213721446222606700240140ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Text; using log4net; using log4net.Appender; using log4net.Config; using System.Runtime.InteropServices; using System.ComponentModel; using System.Threading; namespace QuickRoute.Common { public static class LogUtil { private static bool configured; private static decimal lastTime = -1; #if __MonoCS__ private static readonly Dictionary timers = new Dictionary(); private static readonly HighPerformanceTimerBase standardTimer = new HighPerformanceTimerNix(); #else private static readonly Dictionary timers = new Dictionary(); private static readonly HighPerformanceTimerBase standardTimer = new HighPerformanceTimer(); #endif public static void MonoFixMe() { MonoFixMe(null); } public static void MonoFixMe(string message) { LogDebug("MONO FIXME\n" + message==null?"":message); } public static bool IsRunningOnMono () { return Type.GetType ("Mono.Runtime") != null; } public static void LogDebug(string message) { WriteToLog(message, LogLevel.Debug); } public static void LogInfo(string message) { WriteToLog(message, LogLevel.Info); } public static void LogWarn(string message) { WriteToLog(message, LogLevel.Warn); } public static void LogError(string message) { WriteToLog(message, LogLevel.Error); } public static void LogFatal(string message) { WriteToLog(message, LogLevel.Fatal); } public static void LogTrace() { StackTrace st = new StackTrace(true); string stackIndent = ""; for(int i =0; i< st.FrameCount; i++ ) { StackFrame sf = st.GetFrame(i); WriteToLog(stackIndent + sf.ToString(), LogLevel.Debug); WriteToLog(stackIndent + "Method: " + sf.GetMethod().ToString(), LogLevel.Debug ); WriteToLog(stackIndent + "File: " + sf.GetFileName(), LogLevel.Debug); WriteToLog(stackIndent + "Line Number: " + sf.GetFileLineNumber(), LogLevel.Debug); stackIndent += " "; } } private static void WriteToLog(string message, LogLevel level) { if (!configured) throw new Exception("The LogUtil is not configured."); var thisTime = standardTimer.GetCurrentTime(); var duration = (lastTime == -1 ? 0 : thisTime - lastTime); lastTime = thisTime; var caller = GetCaller(); var log = log4net.LogManager.GetLogger(caller.DeclaringType); var m = String.Format("{0:0.000}", thisTime) + " " + String.Format("{0:0.000}", duration) + " " + caller.Name + ": " + message; switch (level) { case LogLevel.Debug: log.Debug(m); break; case LogLevel.Info: log.Info(m); break; case LogLevel.Warn: log.Warn(m); break; case LogLevel.Error: log.Error(m); break; case LogLevel.Fatal: log.Fatal(m); break; } // Debugging aid, shows up in monodevelop console. //System.Console.WriteLine(m); } public static void Configure() { Configure(null); } public static void Configure(string logFileName) { XmlConfigurator.Configure(); if (logFileName != null) { // log to the specified log file name var hierarchy = (log4net.Repository.Hierarchy.Hierarchy) LogManager.GetRepository(); foreach (var a in hierarchy.Root.Appenders) { if (a is FileAppender) { var fa = (FileAppender) a; fa.File = logFileName; fa.ActivateOptions(); } } } configured = true; } private static MethodBase GetCaller() { var stackFrame = new StackTrace().GetFrame(3); return stackFrame.GetMethod(); } private static HighPerformanceTimerBase GetTimer() { return standardTimer; } private static HighPerformanceTimerBase GetTimer(object key) { if (!timers.ContainsKey(key)) timers.Add(key, new HighPerformanceTimerNix()); return timers[key]; } private static void DisposeTimer(object key) { if (timers.ContainsKey(key)) timers.Remove(key); } } public abstract class HighPerformanceTimerBase { // Start the timer public abstract decimal Start(); // Stop the timer public abstract decimal Stop(); // Returns the duration of the timer (in seconds) public virtual decimal Duration { get; set; } public abstract void Reset(); public void ResetAndStart() { Reset(); Start(); } public abstract decimal GetCurrentTime(); } public class HighPerformanceTimer : HighPerformanceTimerBase { [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceCounter(out long lpPerformanceCount); [DllImport("Kernel32.dll")] private static extern bool QueryPerformanceFrequency(out long lpFrequency); private long startTime, stopTime; private static readonly long freq; private bool isStarted; private decimal duration; static HighPerformanceTimer() { if (QueryPerformanceFrequency(out freq) == false) { // high-performance counter not supported throw new Win32Exception(); } } // Constructor public HighPerformanceTimer() : this(false) { } public HighPerformanceTimer(bool startImmediately) { if (startImmediately) Start(); } // Start the timer public override decimal Start() { // lets do the waiting threads there work Thread.Sleep(0); QueryPerformanceCounter(out startTime); isStarted = true; return duration; } // Stop the timer public override decimal Stop() { if (!isStarted) return duration; QueryPerformanceCounter(out stopTime); duration += (decimal)(stopTime - startTime) / freq; return duration; } // Returns the duration of the timer (in seconds) public override decimal Duration { get { if (isStarted) { long currentTime=0; QueryPerformanceCounter(out currentTime); return duration + (decimal)(currentTime - startTime) / freq; } return duration; } } public override void Reset() { isStarted = false; duration = 0; } // in seconds public override decimal GetCurrentTime() { long currentTime=0; QueryPerformanceCounter(out currentTime); return (decimal)currentTime / freq; } } public class HighPerformanceTimerNix : HighPerformanceTimerBase { struct timeval { public int seconds; public int useconds; } [DllImport ("libc")] static extern int gettimeofday (out timeval tv, IntPtr unused); private double startTime, stopTime; private bool isStarted; private decimal duration; public HighPerformanceTimerNix() : this(false) { } public HighPerformanceTimerNix(bool startImmediately) { if(startImmediately) Start(); } public override decimal Start() { Thread.Sleep(0); timeval t; IntPtr unused = IntPtr.Zero; gettimeofday(out t, unused); startTime = (double)t.seconds + ((double)t.useconds)/1000000.0; System.Console.WriteLine("startTime={0}\n", startTime); isStarted = true; return duration; } public override decimal Stop() { if (!isStarted) return duration; timeval t; IntPtr unused = IntPtr.Zero; gettimeofday(out t, unused); stopTime = t.seconds + ((double)t.useconds)/1000000.0; System.Console.WriteLine("stopTime={0}\n", stopTime); //QueryPerformanceCounter(out stopTime); duration += (decimal)(stopTime - startTime); return duration; } public override void Reset() { isStarted = false; duration = 0; } public override decimal GetCurrentTime() { timeval t; IntPtr unused = IntPtr.Zero; gettimeofday(out t, unused); return (decimal)(((double)t.seconds) + ((double)t.useconds)/1000000.0); } } public enum LogLevel { Debug, Info, Warn, Error, Fatal } } quickroute-linux-upstream-2.5/QuickRoute.Common/Properties/000077500000000000000000000000001446222606700242355ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Common/Properties/AssemblyInfo.cs000066400000000000000000000026411446222606700271620ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.Interfaces")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.Interfaces")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("62df128d-8d48-483f-af77-30e91cb6ce9e")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyVersion("2.4")] [assembly: AssemblyFileVersion("2.4")] quickroute-linux-upstream-2.5/QuickRoute.Common/QuickRoute.Common.csproj000066400000000000000000000063331446222606700266520ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E} Library Properties QuickRoute.Common QuickRoute.Common v4.5 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt 4 false bin\x86\Release\ TRACE true pdbonly x86 prompt 4 log4net quickroute-linux-upstream-2.5/QuickRoute.Controls/000077500000000000000000000000001446222606700224545ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Controls/Canvas.Designer.cs000066400000000000000000000117761446222606700257710ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class Canvas { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.canvasPanel = new System.Windows.Forms.Panel(); this.scrXPanel = new System.Windows.Forms.Panel(); this.scrX = new System.Windows.Forms.HScrollBar(); this.bottomRightPanel = new System.Windows.Forms.Panel(); this.scrY = new System.Windows.Forms.VScrollBar(); this.scrXPanel.SuspendLayout(); this.SuspendLayout(); // // canvasPanel // this.canvasPanel.BackColor = System.Drawing.SystemColors.AppWorkspace; this.canvasPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.canvasPanel.Location = new System.Drawing.Point(0, 0); this.canvasPanel.Name = "canvasPanel"; this.canvasPanel.Size = new System.Drawing.Size(361, 216); this.canvasPanel.TabIndex = 7; this.canvasPanel.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.CanvasPanel_MouseWheel); this.canvasPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.CanvasPanel_Paint); this.canvasPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.CanvasPanel_MouseMove); this.canvasPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.CanvasPanel_MouseDown); this.canvasPanel.Resize += new System.EventHandler(this.CanvasPanel_Resize); this.canvasPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.CanvasPanel_MouseUp); // // scrXPanel // this.scrXPanel.Controls.Add(this.scrX); this.scrXPanel.Controls.Add(this.bottomRightPanel); this.scrXPanel.Dock = System.Windows.Forms.DockStyle.Bottom; this.scrXPanel.Location = new System.Drawing.Point(0, 197); this.scrXPanel.Name = "scrXPanel"; this.scrXPanel.Size = new System.Drawing.Size(361, 19); this.scrXPanel.TabIndex = 8; // // scrX // this.scrX.Dock = System.Windows.Forms.DockStyle.Fill; this.scrX.Location = new System.Drawing.Point(0, 0); this.scrX.Name = "scrX"; this.scrX.Size = new System.Drawing.Size(342, 19); this.scrX.SmallChange = 10; this.scrX.TabIndex = 11; this.scrX.ValueChanged += new System.EventHandler(this.Scrollbar_ValueChanged); this.scrX.Scroll += new System.Windows.Forms.ScrollEventHandler(this.Scrollbar_Scroll); // // bottomRightPanel // this.bottomRightPanel.BackColor = System.Drawing.SystemColors.Control; this.bottomRightPanel.Dock = System.Windows.Forms.DockStyle.Right; this.bottomRightPanel.Location = new System.Drawing.Point(342, 0); this.bottomRightPanel.Name = "bottomRightPanel"; this.bottomRightPanel.Size = new System.Drawing.Size(19, 19); this.bottomRightPanel.TabIndex = 10; // // scrY // this.scrY.Dock = System.Windows.Forms.DockStyle.Right; this.scrY.Location = new System.Drawing.Point(342, 0); this.scrY.Name = "scrY"; this.scrY.Size = new System.Drawing.Size(19, 197); this.scrY.SmallChange = 10; this.scrY.TabIndex = 9; this.scrY.ValueChanged += new System.EventHandler(this.Scrollbar_ValueChanged); this.scrY.Scroll += new System.Windows.Forms.ScrollEventHandler(this.Scrollbar_Scroll); // // Canvas // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.SystemColors.AppWorkspace; this.Controls.Add(this.scrY); this.Controls.Add(this.scrXPanel); this.Controls.Add(this.canvasPanel); this.Name = "Canvas"; this.Size = new System.Drawing.Size(361, 216); this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.CanvasPanel_MouseWheel); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Canvas_KeyDown); this.scrXPanel.ResumeLayout(false); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Panel canvasPanel; private System.Windows.Forms.Panel scrXPanel; private System.Windows.Forms.HScrollBar scrX; private System.Windows.Forms.Panel bottomRightPanel; private System.Windows.Forms.VScrollBar scrY; } } quickroute-linux-upstream-2.5/QuickRoute.Controls/Canvas.cs000066400000000000000000001423711446222606700242260ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Drawing.Text; using System.IO; using System.Reflection; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Actions; using QuickRoute.BusinessEntities.Numeric; using QuickRoute.Controls.Forms; using QuickRoute.Resources; namespace QuickRoute.Controls { public partial class Canvas : UserControl { #region Declarations private const double LAP_CLOSENESS_TOLERANCE = 16.0; private const double ROUTE_CLOSENESS_TOLERANCE = 32.0; private readonly MouseInfo mouseInfo = new MouseInfo(); private Handle activeHandle; private PointD activeHandleOffset; private PointD activeHandleOldLocation; private Lap activeLap; private WaypointAttribute colorCodingAttribute = WaypointAttribute.Pace; private WaypointAttribute? secondaryColorCodingAttribute; private MouseTool currentMouseTool = MouseTool.Pointer; private Session currentSession; private Document document; private bool initialized; private bool isNewHandle; private double maxZoom = 2.0; private double minZoom = 0.25; private Point mouseDownScrollbarValues; private Handle mouseHoverHandle; private bool movingActiveHandleNow; private bool movingActiveLapNow; private Lap oldActiveLap; private Point origo; private bool preventRedraw; private bool preventScrollEvents; private MouseTool previousMouseTool; private Document.RouteDrawingMode routeDrawingMode = Document.RouteDrawingMode.Extended; private Graphics routeGraphics; private Bitmap routeImage; private RouteLineSettings routeLineSettings; private Graphics routeWithHandlesGraphics; private Bitmap routeWithHandlesImage; private SessionCollection selectedSessions = new SessionCollection(); private double zoom = 1; private Bitmap zoomedMapImage; private bool movingMapWithMouseNow; #region Events public event EventHandler DocumentChanged; public event EventHandler BeforeZoomChanged; public event EventHandler AfterZoomChanged; public event EventHandler RouteMouseHover; public event EventHandler CurrentSessionChanged; /// /// Sends info about an action that was triggered from this class. /// public event EventHandler ActionPerformed; #endregion #endregion #region Constructor and destructor ~Canvas() { if (zoomedMapImage != null) zoomedMapImage.Dispose(); if (routeImage != null) routeImage.Dispose(); if (routeGraphics != null) routeGraphics.Dispose(); if (routeWithHandlesImage != null) routeWithHandlesImage.Dispose(); if (routeWithHandlesGraphics != null) routeWithHandlesGraphics.Dispose(); } #endregion #region Public properties public Document Document { get { return document; } set { if (value == null || !value.Equals(document)) { document = value; if (document != null) { CreateBackBuffer(); Init(); document.MapChanged += Document_MapChanged; } if (DocumentChanged != null) DocumentChanged(this, new EventArgs()); } } } public Session CurrentSession { get { return currentSession; } set { if (document == null || value == currentSession) return; if (!document.Sessions.Contains(value)) { throw new Exception("The session does not exist in the session collection."); } currentSession = value; if (CurrentSessionChanged != null) CurrentSessionChanged(this, new EventArgs()); } } public double Zoom { get { return zoom; } set { value = Math.Min(Math.Max(value, minZoom), maxZoom); if (value == zoom) return; if (BeforeZoomChanged != null) BeforeZoomChanged(this, new EventArgs()); double oldZoom = zoom; zoom = value; if (initialized) { // center point in unzoomed coordinates var centerPoint = new PointD( (scrX.Value + Math.Min(zoomedMapImage.Width, canvasPanel.Width) / 2.0) / oldZoom, (scrY.Value + Math.Min(zoomedMapImage.Height, canvasPanel.Height) / 2.0) / oldZoom); CreateBackBuffer(); //CreateAdjustedRoutes(); preventScrollEvents = true; UpdateScrollbarProperties(); CenterMap(centerPoint); preventScrollEvents = false; canvasPanel.CreateGraphics().Clear(canvasPanel.BackColor); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } if (AfterZoomChanged != null) AfterZoomChanged(this, new EventArgs()); } } public double MinZoom { get { return minZoom; } set { minZoom = value; } } public double MaxZoom { get { return maxZoom; } set { maxZoom = value; } } public RouteLineSettings RouteLineSettings { get { return routeLineSettings; } set { routeLineSettings = value; } } public MouseTool CurrentMouseTool { get { return currentMouseTool; } set { Document.RouteDrawingMode previousRouteDrawingMode = routeDrawingMode; currentMouseTool = value; canvasPanel.Cursor = GetCursor(currentMouseTool); routeDrawingMode = (currentMouseTool == MouseTool.AdjustRoute ? Document.RouteDrawingMode.Simple : Document.RouteDrawingMode.Extended); MapDrawingFlags flags = MapDrawingFlags.Markers; if (routeDrawingMode != previousRouteDrawingMode) { flags |= MapDrawingFlags.Route; } DrawMap(flags); } } public WaypointAttribute ColorCodingAttribute { get { return colorCodingAttribute; } set { colorCodingAttribute = value; DrawMap(MapDrawingFlags.Markers | MapDrawingFlags.Route); } } public WaypointAttribute? SecondaryColorCodingAttribute { get { return secondaryColorCodingAttribute; } set { secondaryColorCodingAttribute = value; DrawMap(MapDrawingFlags.Markers | MapDrawingFlags.Route); } } public bool PreventRedraw { get { return preventRedraw; } set { preventRedraw = value; } } public Document.RouteDrawingMode RouteDrawingMode { get { return routeDrawingMode; } set { routeDrawingMode = value; } } public SessionCollection SelectedSessions { get { return selectedSessions; } set { selectedSessions = value; } } public SessionDrawingMode SessionsToDraw { get; set; } #endregion #region Public methods public Canvas() { InitializeComponent(); } public void Init() { initialized = true; preventScrollEvents = true; scrX.Value = scrX.Minimum; scrY.Value = scrY.Minimum; preventScrollEvents = false; document.ProjectionOrigin = document.Sessions[0].ProjectionOrigin; CreateAdjustedRoutes(); DrawMap(MapDrawingFlags.Markers | MapDrawingFlags.Route); ResizeCanvas(); } public void DrawMap(MapDrawingFlags flags) { if (preventRedraw) return; if (document != null && document.Map != null) { if ((flags & MapDrawingFlags.Route) == MapDrawingFlags.Route) { var mode = routeDrawingMode; if (selectedSessions.Count > 1) mode = Document.RouteDrawingMode.Simple; DrawRoutes(routeGraphics, zoomedMapImage, mode, null); } if ((flags & MapDrawingFlags.Markers) == MapDrawingFlags.Markers) DrawMarkers(); // copy map + route to canvas UpdateBackBuffer(); } } /// /// Makes the route line for the specified lap to appear in a different alpha adjustment than the rest of the course /// /// /// /// /// /// public void AlphaAdjustLap(Session session, Lap lap, double lapAlphaAdjustment, double courseAlphaAdjustment, double defaultAlphaAdjustment) { Route r = session.Route; bool lapExists = session.Laps.Contains(lap) && lap.LapType != LapType.Start; int lapIndex = 0; if (lapExists) { // get the index of the lap for (int i = 0; i < session.Laps.Count; i++) { if (session.Laps[i] == lap) { lapIndex = i; break; } } Lap lastLap = session.Laps[lapIndex - 1]; var aac = new List(); if (r.FirstWaypoint.Time < lastLap.Time) aac.Add(new AlphaAdjustmentChange(r.GetParameterizedLocationFromTime(r.FirstWaypoint.Time), courseAlphaAdjustment)); aac.Add(new AlphaAdjustmentChange(r.GetParameterizedLocationFromTime(lastLap.Time), lapAlphaAdjustment)); aac.Add(new AlphaAdjustmentChange(r.GetParameterizedLocationFromTime(lap.Time), courseAlphaAdjustment)); session.AlphaAdjustmentChanges = aac; DrawMap(MapDrawingFlags.Markers | MapDrawingFlags.Route); } else { var aac = new List(); aac.Add(new AlphaAdjustmentChange(r.GetParameterizedLocationFromTime(r.FirstWaypoint.Time), defaultAlphaAdjustment)); session.AlphaAdjustmentChanges = aac; DrawMap(MapDrawingFlags.Markers | MapDrawingFlags.Route); } } #endregion #region Private properties private Size CanvasSize { get { return new Size( canvasPanel.Width - (scrY.Visible ? scrY.Width : 0), canvasPanel.Height - (scrXPanel.Visible ? scrXPanel.Height : 0)); } } #endregion #region Private methods private void UpdateBackBuffer() { UpdateBackBuffer(canvasPanel.Bounds); } private void UpdateBackBuffer(Rectangle clipRectangle) { if (routeWithHandlesImage == null) return; origo = new Point( Math.Max(0, (canvasPanel.Width - routeWithHandlesImage.Width) / 2), Math.Max(0, (canvasPanel.Height - routeWithHandlesImage.Height) / 2)); var size = new Size( Math.Min(canvasPanel.Width, routeWithHandlesImage.Width), Math.Min(canvasPanel.Height, routeWithHandlesImage.Height)); var clipSize = new Size( Math.Min(size.Width, clipRectangle.Width), Math.Min(size.Height, clipRectangle.Height)); var destOrigo = new Point(origo.X + clipRectangle.Left, origo.Y + clipRectangle.Top); var destRect = new Rectangle(destOrigo, clipSize); var srcRect = new Rectangle(new Point(scrX.Value + clipRectangle.Left, scrY.Value + clipRectangle.Top), clipSize); Graphics g = canvasPanel.CreateGraphics(); g.DrawImage(routeWithHandlesImage, destRect, srcRect, GraphicsUnit.Pixel); g.DrawRectangle(Pens.Black, new Rectangle(origo.X - 1, origo.Y - 1, size.Width + 1, size.Height + 1)); } private void MoveMapWithMouse() { if (mouseInfo.MouseDownArgs != null) { int x = mouseDownScrollbarValues.X + (mouseInfo.MouseDownArgs.Location.X - mouseInfo.MouseMoveArgs.Location.X) - origo.X; int y = mouseDownScrollbarValues.Y + (mouseInfo.MouseDownArgs.Location.Y - mouseInfo.MouseMoveArgs.Location.Y) - origo.Y; scrX.Value = Math.Max(scrX.Minimum, Math.Min(Math.Max(x, scrX.Minimum), scrX.Maximum - scrX.LargeChange)); scrY.Value = Math.Max(scrX.Minimum, Math.Min(Math.Max(y, scrY.Minimum), scrY.Maximum - scrY.LargeChange)); UpdateBackBuffer(); } } private void BeginMoveMapWithMouse() { movingMapWithMouseNow = true; previousMouseTool = currentMouseTool; currentMouseTool = MouseTool.MoveMap; canvasPanel.Cursor = GetCursor(currentMouseTool); preventScrollEvents = true; mouseDownScrollbarValues = new Point(scrX.Value, scrY.Value); } private void EndMoveMapWithMouse() { currentMouseTool = previousMouseTool; canvasPanel.Cursor = GetCursor(currentMouseTool); movingMapWithMouseNow = false; } private void CheckMouseHovering() { // location of mouse pointer in original map coordinates PointD mouseLocation = new PointD((mouseInfo.MouseMoveArgs.X + scrX.Value - origo.X), (mouseInfo.MouseMoveArgs.Y + scrY.Value - origo.Y)) / zoom; double distanceToRoute; ParameterizedLocation closestPL = CurrentSession.AdjustedRoute.GetClosestParameterizedLocation(mouseLocation, out distanceToRoute); if (!movingActiveHandleNow && !movingActiveLapNow) { if (closestPL == null) { // not close to route if(mouseHoverHandle != null) { ResetMouseHoverHandle(); DrawMap(MapDrawingFlags.Markers); } return; } // check if close to existing handle double closestHandleDistance = 0; double closestLapDistance = 0; Handle closestHandle = null; Lap closestLap = null; // Shift key prevents check if close to handle or lap bool shiftDown = (ModifierKeys & Keys.Shift) == Keys.Shift; PointD routeLocation = CurrentSession.AdjustedRoute.GetLocationFromParameterizedLocation(closestPL); if (!shiftDown && currentMouseTool == MouseTool.AdjustRoute) closestHandle = GetClosestHandle(routeLocation, out closestHandleDistance); if (!shiftDown) closestLap = GetClosestLap(routeLocation, out closestLapDistance); if (distanceToRoute >= ROUTE_CLOSENESS_TOLERANCE) { // not close to route ResetMouseHoverHandle(); if (RouteMouseHover != null) RouteMouseHover(this, new RouteMouseHoverEventArgs(closestPL, false)); } else if (closestHandle != null && closestHandleDistance < ROUTE_CLOSENESS_TOLERANCE && !(closestLap != null && closestLapDistance * 1.00001 < closestHandleDistance)) { // close to existing handle, use it as active handle if (activeHandle != null) { // reset previous handle drawer activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.Handle]; } activeHandle = closestHandle; activeHandleOldLocation = activeHandle.Location; activeHandleOffset = mouseLocation - activeHandle.Location; activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.ActiveHandle]; mouseHoverHandle = null; activeLap = null; if (RouteMouseHover != null) RouteMouseHover(this, new RouteMouseHoverEventArgs(activeHandle.ParameterizedLocation, true)); } else if (closestLap != null && closestLapDistance < LAP_CLOSENESS_TOLERANCE) { // close to existing lap, create a mouse hover over this lap ParameterizedLocation pl = CurrentSession.Route.GetParameterizedLocationFromTime(closestLap.Time); PointD lapLocation = CurrentSession.AdjustedRoute.GetLocationFromParameterizedLocation(pl); GeneralMatrix transformationMatrix = CurrentSession.GetTransformationMatrixFromParameterizedLocation(pl); mouseHoverHandle = new Handle(pl, closestLap.Time, lapLocation, transformationMatrix, CurrentSession.Settings.MarkerDrawers[MarkerType.MouseHover]); if (RouteMouseHover != null) RouteMouseHover(this, new RouteMouseHoverEventArgs(pl, true)); activeLap = closestLap; } else { // mouse hover over route if (activeHandle != null) { // reset handle drawer to standard handle drawer activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.Handle]; } activeHandle = null; activeLap = null; GeneralMatrix transformationMatrix = CurrentSession.GetTransformationMatrixFromParameterizedLocation(closestPL); mouseHoverHandle = new Handle(closestPL, routeLocation, transformationMatrix, CurrentSession.Settings.MarkerDrawers[MarkerType.MouseHover]); if (RouteMouseHover != null) RouteMouseHover(this, new RouteMouseHoverEventArgs(closestPL, true)); } DrawMap(MapDrawingFlags.Markers); } else if (movingActiveHandleNow) { activeHandle.Location = mouseLocation - activeHandleOffset; CurrentSession.UpdateHandle(activeHandle); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } else if (movingActiveLapNow) { if (closestPL == null) return; // not close to the route activeLap.Time = CurrentSession.Route.GetTimeFromParameterizedLocation(closestPL); DrawMap(MapDrawingFlags.Markers); } } private void ResetMouseHoverHandle() { mouseHoverHandle = null; activeLap = null; if (activeHandle != null) { // reset handle drawer to standard handle drawer activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.Handle]; } activeHandle = null; } public void DrawActiveHandle(ParameterizedLocation pl) { // mouse hover over route if (activeHandle != null) { // reset handle drawer to standard handle drawer activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.Handle]; } activeHandle = null; activeLap = null; PointD routeLocation = CurrentSession.AdjustedRoute.GetLocationFromParameterizedLocation(pl); if (pl != null) { GeneralMatrix transformationMatrix = CurrentSession.GetTransformationMatrixFromParameterizedLocation(pl); mouseHoverHandle = new Handle(pl, routeLocation, transformationMatrix, CurrentSession.Settings.MarkerDrawers[MarkerType.MouseHover]); } else { mouseHoverHandle = null; } DrawMap(MapDrawingFlags.Markers); } /// /// Returns the closest handle to the given point. /// /// Location in original map coordinates /// Distance in original map distance units /// private Handle GetClosestHandle(PointD location, out double distance) { Handle closestHandle = null; double closestDistance = 0.0; foreach (Handle h in CurrentSession.Handles) { double tmpDistance = LinearAlgebraUtil.DistancePointToPoint(location, h.Location); if (closestHandle == null || tmpDistance < closestDistance) { closestHandle = h; closestDistance = tmpDistance; } } distance = closestDistance; return closestHandle; } /// /// Returns the closest lap to the given point. /// /// Location in original map coordinates /// Distance in original map distance units /// private Lap GetClosestLap(PointD location, out double distance) { Lap closestLap = null; double closestDistance = 0.0; foreach (Lap lap in CurrentSession.Laps) { ParameterizedLocation pl = CurrentSession.Route.GetParameterizedLocationFromTime(lap.Time); PointD lapLocation = CurrentSession.AdjustedRoute.GetLocationFromParameterizedLocation(pl); double tmpDistance = LinearAlgebraUtil.DistancePointToPoint(location, lapLocation); if (closestLap == null || tmpDistance < closestDistance) { closestLap = lap; closestDistance = tmpDistance; } } distance = closestDistance; return closestLap; } private void CreateAdjustedRoutes() { foreach (Session s in document.Sessions) { s.CreateAdjustedRoute(); } } private void DrawRoutes(Graphics graphics, Image mapImage, Document.RouteDrawingMode mode, SessionSettings sessionSettings) { SessionCollection sessionList; // which sessions to draw? if (currentMouseTool == MouseTool.AdjustRoute) { sessionList = GetSessions(SessionDrawingMode.Current); } else { sessionList = GetSessions(SessionsToDraw); } document.DrawRoutes(sessionList, zoom, graphics, mapImage, mode, colorCodingAttribute, secondaryColorCodingAttribute, sessionSettings); } private SessionCollection GetSessions(SessionDrawingMode mode) { var coll = new SessionCollection(); switch (mode) { case SessionDrawingMode.None: coll = new SessionCollection(); break; case SessionDrawingMode.Current: coll.Add(CurrentSession); break; case SessionDrawingMode.Selected: coll = SelectedSessions; break; case SessionDrawingMode.All: coll = document.Sessions; break; } return coll; } private void DrawMarkers() { // copy route graphics as a background to route with handles routeWithHandlesGraphics.DrawImage(routeImage, new Point(0, 0)); //BitBltWrapper(mRouteImage, mRouteWithHandlesGraphics); // draw the handles if (currentMouseTool == MouseTool.AdjustRoute) { foreach (Handle h in CurrentSession.Handles) { if (h.MarkerDrawer != null) h.MarkerDrawer.Draw(routeWithHandlesGraphics, zoom * h.Location, zoom); } } if (mouseHoverHandle != null && mouseHoverHandle.MarkerDrawer != null) { mouseHoverHandle.MarkerDrawer.Draw(routeWithHandlesGraphics, zoom * mouseHoverHandle.Location, zoom); } // laps foreach (Lap lap in CurrentSession.Laps) { if (lap.LapType == LapType.Lap || (lap.LapType == LapType.Stop && CurrentSession.Route.Segments.Count > 1)) { ParameterizedLocation pl = CurrentSession.Route.GetParameterizedLocationFromTime(lap.Time); PointD p = CurrentSession.AdjustedRoute.GetLocationFromParameterizedLocation(pl); CurrentSession.Settings.MarkerDrawers[MarkerType.Lap].Draw(routeWithHandlesGraphics, zoom * p, zoom); } } } private void ResizeCanvas() { if (document != null && document.Map != null) { //Console.WriteLine("ResizeCanvas"); UpdateScrollbarProperties(); if (!scrXPanel.Visible) scrX.Value = scrX.Minimum; if (!scrY.Visible) scrY.Value = scrY.Minimum; scrX.Value = Math.Min(scrX.Value, scrX.Maximum - scrX.LargeChange + 1); scrY.Value = Math.Min(scrY.Value, scrY.Maximum - scrY.LargeChange + 1); canvasPanel.CreateGraphics().Clear(canvasPanel.BackColor); UpdateBackBuffer(canvasPanel.Bounds); } } private void UpdateScrollbarProperties() { if (zoomedMapImage == null) return; scrXPanel.Visible = Width < zoomedMapImage.Size.Width; scrY.Visible = Height - (scrXPanel.Visible ? scrXPanel.Height : 0) < zoomedMapImage.Size.Height; scrXPanel.Visible = Width - (scrY.Visible ? scrY.Width : 0) < zoomedMapImage.Size.Width; scrY.Visible = Height - (scrXPanel.Visible ? scrXPanel.Height : 0) < zoomedMapImage.Size.Height; bottomRightPanel.Visible = (scrXPanel.Visible && scrY.Visible); canvasPanel.Size = new Size(Width - (scrY.Visible ? scrY.Width : 0), Height - (scrXPanel.Visible ? scrXPanel.Height : 0)); scrX.Maximum = zoomedMapImage.Size.Width; scrX.LargeChange = canvasPanel.Width; scrY.Maximum = zoomedMapImage.Size.Height; scrY.LargeChange = canvasPanel.Height; } /// /// Centers map around point p (non-zoomed coordinates) /// /// public void CenterMap(PointD p) { PointD zoomedPoint = zoom * p; if (scrXPanel.Visible) { var value = (int)(zoomedPoint.X - (CanvasSize.Width) / 2.0); scrX.Value = Math.Min(Math.Max(value, scrX.Minimum), scrX.Maximum - scrX.LargeChange); } else { scrX.Value = 0; } if (scrY.Visible) { var value = (int)(zoomedPoint.Y - (CanvasSize.Height) / 2.0); scrY.Value = Math.Min(Math.Max(value, scrY.Minimum), scrY.Maximum - scrY.LargeChange); } else { scrY.Value = 0; } } private RectangleD GetViewport() { return new RectangleD( scrX.Value / zoom, scrY.Value / zoom, (CanvasSize.Width) / zoom, (CanvasSize.Height) / zoom); } public void EnsureLegIsVisible(RectangleD rect, bool allowZoomChange) { RectangleD viewport = GetViewport(); // inner viewport is 90% of viewport double side = Math.Min(viewport.Width, viewport.Height); var innerViewport = new RectangleD( viewport.Left + 0.05 * side, viewport.Top + 0.05 * side, viewport.Width - 0.10 * side, viewport.Height - 0.10 * side); var center = new PointD(); if (rect.Width > innerViewport.Width) { center.X = rect.Left + rect.Width / 2; } else if (rect.Right < innerViewport.Left || rect.Left > innerViewport.Right) { center.X = rect.Center.X; } else if (rect.Left < innerViewport.Left) { center.X = innerViewport.Center.X + rect.Left - innerViewport.Left; } else if (rect.Right > innerViewport.Right) { center.X = innerViewport.Center.X + rect.Right - innerViewport.Right; } else { center.X = innerViewport.Center.X; } if (rect.Height > innerViewport.Height) { center.Y = rect.Top + rect.Height / 2; } else if (rect.Bottom < innerViewport.Top || rect.Top > innerViewport.Bottom) { center.Y = rect.Center.Y; } else if (rect.Top < innerViewport.Top) { center.Y = innerViewport.Center.Y + rect.Top - innerViewport.Top; } else if (rect.Bottom > innerViewport.Bottom) { center.Y = innerViewport.Center.Y + rect.Bottom - innerViewport.Bottom; } else { center.Y = innerViewport.Center.Y; } if (!(center.X == innerViewport.Center.X && center.Y == innerViewport.Center.Y)) CenterMap(center); if (allowZoomChange && (rect.Width > innerViewport.Width || rect.Height > innerViewport.Height)) { // rectangle larger than innerViewport: change zoom double newZoom = Math.Min(innerViewport.Width / rect.Width, innerViewport.Height / rect.Height) * zoom; Zoom = newZoom; } } /// /// Makes sure that the line starting at p0 and ending at p1 is fully visible. If the line does not fit, place center of line at center of screen. /// /// Start of line (in unzoomed map coordinates) /// End of line (in unzoomed map coordinates) public void EnsureLegIsVisible(PointD p0, PointD p1) { RectangleD viewport = GetViewport(); // inner viewport is 90% of viewport double side = Math.Min(viewport.Width, viewport.Height); var innerViewport = new RectangleD( viewport.Left + 0.05 * side, viewport.Top + 0.05 * side, viewport.Width - 0.10 * side, viewport.Height - 0.10 * side); var center = new PointD(); if (Math.Abs(p1.X - p0.X) > innerViewport.Width) { center.X = (p0.X + p1.X) / 2; } else if (Math.Min(p0.X, p1.X) < innerViewport.Left) { center.X = innerViewport.Center.X - (innerViewport.Left - Math.Min(p0.X, p1.X)); } else if (Math.Max(p0.X, p1.X) > innerViewport.Right) { center.X = innerViewport.Center.X + (Math.Max(p0.X, p1.X) - innerViewport.Right); } else { center.X = viewport.Center.X; } if (Math.Abs(p1.Y - p0.Y) > innerViewport.Width) { center.Y = (p0.Y + p1.Y) / 2; } else if (Math.Min(p0.Y, p1.Y) < innerViewport.Top) { center.Y = innerViewport.Center.Y - (innerViewport.Top - Math.Min(p0.Y, p1.Y)); } else if (Math.Max(p0.Y, p1.Y) > innerViewport.Bottom) { center.Y = innerViewport.Center.Y + (Math.Max(p0.Y, p1.Y) - innerViewport.Bottom); } else { center.Y = viewport.Center.Y; } if (!(center.X == viewport.Center.X && center.Y == viewport.Center.Y)) CenterMap(center); } private void CreateBackBuffer() { if (document != null && document.Map != null) { // Dispose previus images and graphics objects if (zoomedMapImage != null) zoomedMapImage.Dispose(); if (routeImage != null) routeImage.Dispose(); if (routeGraphics != null) routeGraphics.Dispose(); if (routeWithHandlesImage != null) routeWithHandlesImage.Dispose(); if (routeWithHandlesGraphics != null) routeWithHandlesGraphics.Dispose(); // create new images and graphics zoomedMapImage = document.CreateMapImage(zoom); routeImage = new Bitmap(zoomedMapImage.Width, zoomedMapImage.Height, PixelFormat.Format32bppPArgb); routeGraphics = Graphics.FromImage(routeImage); routeGraphics.SmoothingMode = SmoothingMode.AntiAlias; routeWithHandlesImage = new Bitmap(zoomedMapImage.Width, zoomedMapImage.Height, PixelFormat.Format32bppPArgb); routeWithHandlesGraphics = Graphics.FromImage(routeWithHandlesImage); routeWithHandlesGraphics.SmoothingMode = SmoothingMode.AntiAlias; } } public void AddLap(ParameterizedLocation parameterizedLocation, bool showLapTimeForm) { var time = CurrentSession.Route.GetTimeFromParameterizedLocation(parameterizedLocation); time = time.AddTicks(-time.Ticks % TimeSpan.TicksPerSecond); // truncate to nearest second if (showLapTimeForm) { using (var form = new LapTimeForm { InitialTime = time, Session = CurrentSession }) { if (form.ShowDialog() != DialogResult.OK) return; time = form.Time; } } if (!CurrentSession.Laps.Exists(time)) { ExecuteAction(new AddLapAction(new Lap(time, LapType.Lap), CurrentSession)); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } } public void DeleteLap(Lap lap) { ExecuteAction(new DeleteLapAction(lap, CurrentSession)); DrawMap(MapDrawingFlags.Markers); } private void ExecuteAction(IAction action) { action.Execute(); if (ActionPerformed != null) ActionPerformed(this, new ActionEventArgs(action)); } public void Cut(ParameterizedLocation parameterizedLocation) { Cut(parameterizedLocation, null); } public void Cut(ParameterizedLocation parameterizedLocation, DateTime? time) { if (!time.HasValue) time = CurrentSession.Route.GetTimeFromParameterizedLocation(parameterizedLocation); using (var form = new RouteCutForm { InitialTime = time.Value }) { double distance = CurrentSession.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, parameterizedLocation). Value; double totalDistance = CurrentSession.Route.LastWaypoint.Attributes[WaypointAttribute.Distance].Value; form.CutType = (distance < totalDistance/2 ? CutType.Before : CutType.After); if (form.ShowDialog() == DialogResult.OK) { mouseHoverHandle = null; var action = new CutRouteAction(CurrentSession, form.Time, form.CutType); ExecuteAction(action); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } } } private void DeleteActiveHandle() { ExecuteAction(new DeleteHandleAction(activeHandle, CurrentSession)); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } private void BeginActiveHandleMoving() { PointD mouseLocation = new PointD((mouseInfo.MouseDownArgs.X - origo.X + scrX.Value), (mouseInfo.MouseDownArgs.Y - origo.Y + scrY.Value)) / zoom; activeHandle.Location = mouseLocation - activeHandleOffset; activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.MovingActiveHandle]; isNewHandle = !CurrentSession.ContainsHandle(activeHandle); if (isNewHandle) { CurrentSession.AddHandle(activeHandle); isNewHandle = true; } movingActiveHandleNow = true; CurrentSession.UpdateHandle(activeHandle); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } private void EndActiveHandleMoving() { movingActiveHandleNow = false; if (isNewHandle) { ExecuteAction(new AddHandleAction(activeHandle, CurrentSession)); } else { ExecuteAction(new MoveHandleAction(activeHandle, CurrentSession, activeHandleOldLocation)); } DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } private void EndActiveLapMoving() { movingActiveLapNow = false; if (!CurrentSession.Laps.Exists(activeLap.Time, 2)) { ExecuteAction(new EditLapAction(activeLap, oldActiveLap, CurrentSession)); DrawMap(MapDrawingFlags.Route | MapDrawingFlags.Markers); } else { activeLap.Time = oldActiveLap.Time; } } public static Cursor GetCursor(MouseTool mouseTool) { // Cursors should be saved with 1 bit per pixel. // First make png image in Photoshop, then open it in GIF Movie Gear and select Frame > Edit Pixels. // This reduces the bpp number. Save as .cur file. var resources = new ComponentResourceManager(typeof(Canvas)); switch (mouseTool) { case MouseTool.ZoomIn: return new Cursor(new MemoryStream((byte[])resources.GetObject("ZoomIn"))); case MouseTool.ZoomOut: return new Cursor(new MemoryStream((byte[])resources.GetObject("ZoomOut"))); case MouseTool.Cut: return new Cursor(new MemoryStream((byte[])resources.GetObject("Cut"))); case MouseTool.MoveMap: return new Cursor(new MemoryStream((byte[])resources.GetObject("MoveMap"))); case MouseTool.AdjustRoute: return new Cursor(new MemoryStream((byte[])resources.GetObject("AdjustRoute"))); case MouseTool.Lap: return new Cursor(new MemoryStream((byte[])resources.GetObject("Lap"))); case MouseTool.Pointer: return Cursors.Default; default: return Cursors.Default; } } private void ZoomIn() { var zoomRectangle = new Rectangle( Math.Min(mouseInfo.MouseDownArgs.X, mouseInfo.MouseUpArgs.X) - origo.X, Math.Min(mouseInfo.MouseDownArgs.Y, mouseInfo.MouseUpArgs.Y) - origo.Y, Math.Abs(mouseInfo.MouseUpArgs.X - mouseInfo.MouseDownArgs.X) - origo.X, Math.Abs(mouseInfo.MouseUpArgs.Y - mouseInfo.MouseDownArgs.Y) - origo.Y); PointD centerPointBeforeZoom = new PointD( scrX.Value + (double)zoomRectangle.Left + (double)zoomRectangle.Width / 2, scrY.Value + (double)zoomRectangle.Top + (double)zoomRectangle.Height / 2) / zoom; double zoomFactor; if (zoomRectangle.Width > 0 && zoomRectangle.Height > 0) { zoomFactor = Math.Min(canvasPanel.Width / (double)zoomRectangle.Width, canvasPanel.Height / (double)zoomRectangle.Height); } else { zoomFactor = 4.0 / 3; } Zoom *= zoomFactor; CenterMap(new PointD(centerPointBeforeZoom.X, centerPointBeforeZoom.Y)); } private void ZoomOut() { PointD centerPointBeforeZoom = new PointD( scrX.Value + (double)mouseInfo.MouseDownArgs.X - origo.X, scrY.Value + (double)mouseInfo.MouseDownArgs.Y - origo.Y) / zoom; Zoom *= 0.75; CenterMap(new PointD(centerPointBeforeZoom.X, centerPointBeforeZoom.Y)); } #endregion #region Event handlers private void CanvasPanel_Resize(object sender, EventArgs e) { ResizeCanvas(); } private void Scrollbar_Scroll(object sender, ScrollEventArgs e) { if (!preventScrollEvents) UpdateBackBuffer(); } private void Scrollbar_ValueChanged(object sender, EventArgs e) { if (!preventScrollEvents) UpdateBackBuffer(); } private void CanvasPanel_MouseDown(object sender, MouseEventArgs e) { mouseInfo.MouseDownArgs = e; if (e.Button == MouseButtons.Right && (scrXPanel.Visible || scrY.Visible)) { // move map BeginMoveMapWithMouse(); } else { switch (currentMouseTool) { case MouseTool.AdjustRoute: #region AdjustRoute // is there a mouse hover handle? if (mouseHoverHandle != null) { // transform mouse hover handle to adjustment handle activeHandle = mouseHoverHandle; activeHandleOldLocation = activeHandle.Location; PointD mouseLocation = new PointD((mouseInfo.MouseDownArgs.X + scrX.Value - origo.X), (mouseInfo.MouseDownArgs.Y + scrY.Value - origo.Y)) / zoom; activeHandleOffset = mouseLocation - mouseHoverHandle.Location; BeginActiveHandleMoving(); } else if (activeHandle != null) { if ((ModifierKeys & Keys.Control) == Keys.Control) { // delete active handle DeleteActiveHandle(); } else { BeginActiveHandleMoving(); activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.MovingActiveHandle]; } } else { BeginMoveMapWithMouse(); } break; #endregion case MouseTool.ZoomIn: break; case MouseTool.ZoomOut: ZoomOut(); break; case MouseTool.Cut: #region Cut // cut route // determine the handle where we should cut Handle cutHandle = null; if (activeHandle != null) { cutHandle = activeHandle; } else if (mouseHoverHandle != null) { cutHandle = mouseHoverHandle; } else { BeginMoveMapWithMouse(); } if (cutHandle != null) { // if not at a lap, round time to nearest second DateTime cutTime; if (cutHandle.Time.HasValue) { cutTime = cutHandle.Time.Value; } else { cutTime = CurrentSession.Route.GetTimeFromParameterizedLocation(cutHandle.ParameterizedLocation); cutTime = new DateTime(TimeSpan.TicksPerSecond * (long)Math.Round((double)cutTime.Ticks / TimeSpan.TicksPerSecond), cutTime.Kind); // round to nearest second } Cut(cutHandle.ParameterizedLocation, cutTime); } break; #endregion case MouseTool.Lap: #region Lap if ((ModifierKeys & Keys.Control) == Keys.Control) { // Ctrl pressed: delete lap if (activeLap != null && activeLap.LapType == LapType.Lap) { // delete lap ExecuteAction(new DeleteLapAction(activeLap, CurrentSession)); DrawMap(MapDrawingFlags.Markers); } else if(activeLap == null) { BeginMoveMapWithMouse(); } } else { if (activeLap != null && activeLap.LapType == LapType.Lap) { // Close to lap: begin move lap movingActiveLapNow = true; oldActiveLap = (Lap)activeLap.Clone(); } else if(activeLap == null) { // add lap Handle addLapHandle = null; if (activeHandle != null) { addLapHandle = activeHandle; } else if (mouseHoverHandle != null) { addLapHandle = mouseHoverHandle; } else { BeginMoveMapWithMouse(); } if (addLapHandle != null) { bool showLapTimeForm = ((ModifierKeys & Keys.Shift) == Keys.Shift); AddLap(addLapHandle.ParameterizedLocation, showLapTimeForm); } } } break; default: BeginMoveMapWithMouse(); break; #endregion } } } private void CanvasPanel_MouseMove(object sender, MouseEventArgs e) { MouseEventArgs oldMouseMoveArgs = mouseInfo.MouseMoveArgs; mouseInfo.MouseMoveArgs = e; if (movingMapWithMouseNow) { MoveMapWithMouse(); } else { switch (currentMouseTool) { case MouseTool.Pointer: case MouseTool.AdjustRoute: case MouseTool.Cut: case MouseTool.Lap: CheckMouseHovering(); break; case MouseTool.ZoomIn: if (mouseInfo.MouseDownArgs != null) { if (oldMouseMoveArgs != null) RubberBandRectangle.DrawXORRectangle(canvasPanel.CreateGraphics(), mouseInfo.MouseDownArgs.X, mouseInfo.MouseDownArgs.Y, oldMouseMoveArgs.X, oldMouseMoveArgs.Y, PenStyles.PS_DOT); RubberBandRectangle.DrawXORRectangle(canvasPanel.CreateGraphics(), mouseInfo.MouseDownArgs.X, mouseInfo.MouseDownArgs.Y, mouseInfo.MouseMoveArgs.X, mouseInfo.MouseMoveArgs.Y, PenStyles.PS_DOT); } break; } } } private void CanvasPanel_MouseUp(object sender, MouseEventArgs e) { mouseInfo.MouseUpArgs = e; preventScrollEvents = false; if (movingMapWithMouseNow) { EndMoveMapWithMouse(); } else { switch (currentMouseTool) { case MouseTool.AdjustRoute: if (movingActiveHandleNow) { EndActiveHandleMoving(); } if (activeHandle != null) { activeHandle.MarkerDrawer = CurrentSession.Settings.MarkerDrawers[MarkerType.Handle]; activeHandle = null; } break; case MouseTool.ZoomIn: if (mouseInfo.MouseMoveArgs != null) RubberBandRectangle.DrawXORRectangle(canvasPanel.CreateGraphics(), mouseInfo.MouseDownArgs.X, mouseInfo.MouseDownArgs.Y, mouseInfo.MouseMoveArgs.X, mouseInfo.MouseMoveArgs.Y, PenStyles.PS_DOT); ZoomIn(); break; case MouseTool.Lap: if (movingActiveLapNow) { EndActiveLapMoving(); } break; } } mouseInfo.Reset(); } private void CanvasPanel_MouseWheel(object sender, MouseEventArgs e) { if ((ModifierKeys & Keys.Control) == Keys.Control) { Zoom += 0.1 * Math.Sign(e.Delta); } else if ((ModifierKeys & Keys.Shift) == Keys.Shift) { scrX.Value = Math.Max(scrX.Minimum, Math.Min(scrX.Maximum - scrX.LargeChange, scrX.Value - Math.Sign(e.Delta) * scrX.SmallChange)); } else { scrY.Value = Math.Max(scrY.Minimum, Math.Min(scrY.Maximum - scrY.LargeChange, scrY.Value - Math.Sign(e.Delta) * scrY.SmallChange)); } } private void CanvasPanel_Paint(object sender, PaintEventArgs e) { UpdateBackBuffer(e.ClipRectangle); } private void Document_MapChanged(object sender, EventArgs e) { CreateBackBuffer(); } private void Document_DocumentChanged(object sender, EventArgs e) { if (DocumentChanged != null) DocumentChanged(this, new EventArgs()); } private void Canvas_KeyDown(object sender, KeyEventArgs e) { // Ctrl++ if (e.Modifiers == Keys.Control && (e.KeyCode == Keys.Add || e.KeyCode == Keys.Oemplus)) { Zoom *= 4.0 / 3; } // Ctrl+- if (e.Modifiers == Keys.Control && (e.KeyCode == Keys.Subtract || e.KeyCode == Keys.OemMinus)) { Zoom *= 0.75; } } #endregion #region Public classes #region Nested type: ActionEventArgs public class ActionEventArgs : EventArgs { public ActionEventArgs(IAction action) { Action = action; } public IAction Action { get; set; } } #endregion #region Nested type: RouteMouseHoverEventArgs public class RouteMouseHoverEventArgs : EventArgs { public RouteMouseHoverEventArgs(ParameterizedLocation parameterizedLocation, bool isClose) { ParameterizedLocation = parameterizedLocation; IsClose = isClose; } public ParameterizedLocation ParameterizedLocation { get; set; } public bool IsClose { get; set; } } #endregion #region Nested type: SessionParameterizedLocationEventArgs public class SessionParameterizedLocationEventArgs : EventArgs { public SessionParameterizedLocationEventArgs(Session session, ParameterizedLocation parameterizedLocation) { Session = session; ParameterizedLocation = parameterizedLocation; } public Session Session { get; set; } public ParameterizedLocation ParameterizedLocation { get; set; } } #endregion #endregion #region Private classes #region Nested type: MouseInfo private class MouseInfo { private MouseEventArgs mouseDownArgs; private MouseEventArgs mouseMoveArgs; private MouseEventArgs mouseUpArgs; public MouseEventArgs MouseDownArgs { get { return mouseDownArgs; } set { mouseDownArgs = value; } } public MouseEventArgs MouseMoveArgs { get { return mouseMoveArgs; } set { mouseMoveArgs = value; } } public MouseEventArgs MouseUpArgs { get { return mouseUpArgs; } set { mouseUpArgs = value; } } public void Reset() { mouseDownArgs = null; mouseMoveArgs = null; mouseUpArgs = null; } } #endregion #endregion #region Enums #region MapDrawingFlags enum [Flags] public enum MapDrawingFlags { Route = 1, Markers = 2 } #endregion #region MouseTool enum public enum MouseTool { Pointer, AdjustRoute, ZoomIn, ZoomOut, Cut, Lap, MoveMap } #endregion #region SessionDrawingMode enum public enum SessionDrawingMode { Selected, Current, None, All } #endregion #endregion } }quickroute-linux-upstream-2.5/QuickRoute.Controls/Canvas.resx000066400000000000000000000162041446222606700245750ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Graphics\AdjustRoute.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Graphics\Cut.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Graphics\Lap.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Graphics\MoveMap.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Graphics\ZoomIn.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Graphics\ZoomOut.cur;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.Controls/ColorRangeIntervalSlider.Designer.cs000066400000000000000000000051701446222606700314500ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class ColorRangeIntervalSlider { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.sliderPanel = new System.Windows.Forms.Panel(); this.SuspendLayout(); // // sliderPanel // this.sliderPanel.Dock = System.Windows.Forms.DockStyle.Fill; this.sliderPanel.Location = new System.Drawing.Point(0, 0); this.sliderPanel.Name = "sliderPanel"; this.sliderPanel.Size = new System.Drawing.Size(288, 34); this.sliderPanel.TabIndex = 0; this.sliderPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ColorRangeIntervalSlider_MouseDown); this.sliderPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ColorRangeIntervalSlider_MouseMove); this.sliderPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.SliderPanel_Paint); this.sliderPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ColorRangeIntervalSlider_MouseUp); // // colorRangeIntervalSlider // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Font = new System.Drawing.Font("Calibri", 8F); this.Controls.Add(this.sliderPanel); this.Name = "colorRangeIntervalSlider"; this.Size = new System.Drawing.Size(288, 34); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ColorRangeIntervalSlider_MouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ColorRangeIntervalSlider_MouseMove); this.Resize += new System.EventHandler(this.ColorRangeIntervalSlider_Resize); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ColorRangeIntervalSlider_MouseUp); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Panel sliderPanel; } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ColorRangeIntervalSlider.cs000066400000000000000000000245161446222606700277160ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.Controls { public partial class ColorRangeIntervalSlider : UserControl { private double minValue = 0.0; private double maxValue = 1.0; private ColorRange colorRange = new ColorRange(new Gradient(Color.White, Color.Black), 0.0, 1.0); private Rectangle colorRangeRectangle; private SliderType currentSlider = SliderType.None; private Bitmap backBufferBitmap; private Graphics backBufferGraphics; private ScaleCreatorBase scaleCreator = new DoubleScaleCreator(0, 1, 11, false); private const int MOUSE_CLOSENESS = 16; private Size sliderSize = new Size(11, 6); private NumericConverter numericConverter; private double alphaAdjustment; private bool preventRedraw; public event EventHandler ColorRangeStartValueChanged; public event EventHandler ColorRangeEndValueChanged; public event EventHandler ColorRangeStartValueChanging; public event EventHandler ColorRangeEndValueChanging; public event MouseEventHandler ColorRangeClicked; public ColorRangeIntervalSlider() { InitializeComponent(); colorRangeRectangle = new Rectangle(new Point(0, 0), Size); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); CreateColorRangeRectangle(); CreateBackBuffer(); } ~ColorRangeIntervalSlider() { if (backBufferBitmap != null) backBufferBitmap.Dispose(); if (backBufferGraphics != null) backBufferGraphics.Dispose(); } public double MinValue { get { return minValue; } set { minValue = value; } } public double MaxValue { get { return maxValue; } set { maxValue = value; } } public ColorRange ColorRange { get { return colorRange; } set { if (colorRange != null) { colorRange.StartValueChanged -= new EventHandler(ColorRange_StartValueChanged); colorRange.EndValueChanged -= new EventHandler(ColorRange_EndValueChanged); } colorRange = value; colorRange.StartValueChanged += new EventHandler(ColorRange_StartValueChanged); colorRange.EndValueChanged += new EventHandler(ColorRange_EndValueChanged); Draw(); } } public ScaleCreatorBase ScaleCreator { get { return scaleCreator; } set { scaleCreator = value; Draw(); } } public NumericConverter NumericConverter { get { return numericConverter; } set { numericConverter = value; Draw(); } } public double AlphaAdjustment { get { return alphaAdjustment; } set { alphaAdjustment = Math.Min(1, Math.Max(-1, value)); } } public bool PreventRedraw { get { return preventRedraw; } set { preventRedraw = value; Draw(); } } private void Draw() { if (backBufferGraphics == null || preventRedraw) return; // use backbuffering Graphics g = backBufferGraphics; // clear background g.Clear(BackColor); // gradient double intervalLength = (colorRange.EndValue - colorRange.StartValue); double startLocation = 0.0 - (colorRange.StartValue - minValue) / intervalLength; double endLocation = 1.0 + (maxValue - colorRange.EndValue) / intervalLength; Gradient.FillCheckerboardRectangle(g, colorRangeRectangle, 8); ColorRange.Gradient.Draw(g, colorRangeRectangle, startLocation, endLocation, Gradient.Direction.Horizontal, alphaAdjustment); // start value slider DrawSlider(new Point(ValueToX(colorRange.StartValue), colorRangeRectangle.Bottom + 1)); // end value slider DrawSlider(new Point(ValueToX(colorRange.EndValue), colorRangeRectangle.Bottom + 1)); // border g.DrawRectangle(Pens.Gray, new Rectangle(colorRangeRectangle.Left - 1, colorRangeRectangle.Top - 1, colorRangeRectangle.Width + 1, colorRangeRectangle.Height + 1)); // marker lines and labels SizeF labelSize; int startY; if (NumericConverter == null) { labelSize = new SizeF(0F, 0F); startY = colorRangeRectangle.Top; } else { labelSize = g.MeasureString(NumericConverter.ToString(scaleCreator.LastMarkerValue) + " ", Font); startY = colorRangeRectangle.Top + (int)labelSize.Height; } float lastLabelX = (float)colorRangeRectangle.Left - labelSize.Width / 2; for (double value = scaleCreator.FirstMarkerValue; value <= scaleCreator.LastMarkerValue; value += scaleCreator.MarkerInterval) { Pen p = new Pen(Color.FromArgb(192, Color.Black)); g.DrawLine( p, (int)ValueToX(value), startY, ValueToX(value), (int)colorRangeRectangle.Bottom ); p.Dispose(); if (NumericConverter != null) { float labelX = (float)ValueToX(value); // only draw label if it is enough space to the last one if (labelX > lastLabelX + labelSize.Width && labelX + labelSize.Width / 2 < (float)colorRangeRectangle.Right) { g.DrawString( " " + NumericConverter.ToString(value), Font, Brushes.Black, new PointF(labelX -labelSize.Width / 2, (float)colorRangeRectangle.Top) ); lastLabelX = labelX; } } } // copy to screen sliderPanel.CreateGraphics().DrawImageUnscaled(backBufferBitmap, new Point(0, 0)); } private double XToValue(int x) { return minValue + (double)(x - colorRangeRectangle.Left) / (double)(colorRangeRectangle.Width) * (maxValue - minValue); } private int ValueToX(double value) { return colorRangeRectangle.Left + (int)((value - minValue) / (maxValue - minValue) * colorRangeRectangle.Width); } private void CreateBackBuffer() { if (Width > 0 && Height > 0) { if (backBufferBitmap != null) backBufferBitmap.Dispose(); if (backBufferGraphics != null) backBufferGraphics.Dispose(); backBufferBitmap = new Bitmap(Width, Height); backBufferGraphics = Graphics.FromImage(backBufferBitmap); backBufferGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; } } private void CreateColorRangeRectangle() { colorRangeRectangle = new Rectangle( new Point(sliderSize.Width / 2 + 1, 1), new Size(Width - 2 * (sliderSize.Width / 2 + 1), Height - sliderSize.Height - 2)); } private void DrawSlider(Point p) { Point[] points = new Point[3]; points[0] = new Point(p.X, p.Y); points[1] = new Point(p.X + sliderSize.Width / 2, p.Y + sliderSize.Height); points[2] = new Point(p.X - sliderSize.Width / 2, p.Y + sliderSize.Height); backBufferGraphics.FillPolygon(Brushes.Black, points); } #region Event handlers private void ColorRangeIntervalSlider_MouseDown(object sender, MouseEventArgs e) { if (colorRangeRectangle.Contains(e.Location)) { if (ColorRangeClicked != null) ColorRangeClicked(this, e); } else { // get closest slider int startCloseness = Math.Abs(e.X - ValueToX(colorRange.StartValue)); int endCloseness = Math.Abs(e.X - ValueToX(colorRange.EndValue)); if (startCloseness < endCloseness && startCloseness < MOUSE_CLOSENESS) { currentSlider = SliderType.Start; colorRange.StartValue = Math.Max(minValue, Math.Min(maxValue, XToValue(e.X))); Draw(); } else if (endCloseness < MOUSE_CLOSENESS) { currentSlider = SliderType.End; colorRange.EndValue = Math.Max(minValue, Math.Min(maxValue, XToValue(e.X))); Draw(); } else { currentSlider = SliderType.None; } } } private void ColorRangeIntervalSlider_MouseMove(object sender, MouseEventArgs e) { switch (currentSlider) { case SliderType.Start: colorRange.StartValue = Math.Max(minValue, Math.Min(maxValue, XToValue(e.X))); Draw(); break; case SliderType.End: colorRange.EndValue = Math.Max(minValue, Math.Min(maxValue, XToValue(e.X))); Draw(); break; } } private void ColorRangeIntervalSlider_MouseUp(object sender, MouseEventArgs e) { if (currentSlider == SliderType.Start) { if (ColorRangeStartValueChanged != null) ColorRangeStartValueChanged(this, new EventArgs()); } else if(currentSlider == SliderType.End) { if (ColorRangeEndValueChanged != null) ColorRangeEndValueChanged(this, new EventArgs()); } currentSlider = SliderType.None; } private void ColorRangeIntervalSlider_Resize(object sender, EventArgs e) { CreateColorRangeRectangle(); CreateBackBuffer(); } private void ColorRange_StartValueChanged(object sender, EventArgs e) { Draw(); if (currentSlider == SliderType.None) { if (ColorRangeStartValueChanged != null) ColorRangeStartValueChanged(this, new EventArgs()); } else { if (ColorRangeStartValueChanging != null) ColorRangeStartValueChanging(this, new EventArgs()); } } private void ColorRange_EndValueChanged(object sender, EventArgs e) { Draw(); if (currentSlider == SliderType.None) { if (ColorRangeEndValueChanged != null) ColorRangeEndValueChanged(this, new EventArgs()); } else { if (ColorRangeEndValueChanging != null) ColorRangeEndValueChanging(this, new EventArgs()); } } private void SliderPanel_Paint(object sender, PaintEventArgs e) { Draw(); } #endregion private enum SliderType { Start, End, None } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ColorRangeIntervalSlider.resx000066400000000000000000000132661446222606700302720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.Controls/CustomUpDown.cs000066400000000000000000000032331446222606700254130ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.Controls { public partial class CustomUpDown : NumericUpDown { readonly double[] deltas = new double[] { 1, 10, 100 }; double value = 0; NumericConverter numericConverter = new NumericConverter(); public override void DownButton() { if ((Control.ModifierKeys & Keys.Control) == Keys.Control && (Control.ModifierKeys & Keys.Shift) == Keys.Shift) value -= deltas[2]; else if ((Control.ModifierKeys & Keys.Control) == Keys.Control) value -= deltas[1]; else value -= deltas[0]; } public override void UpButton() { if ((Control.ModifierKeys & Keys.Control) == Keys.Control && (Control.ModifierKeys & Keys.Shift) == Keys.Shift) value += deltas[2]; else if ((Control.ModifierKeys & Keys.Control) == Keys.Control) value += deltas[1]; else value += deltas[0]; } protected override void UpdateEditText() { numericConverter = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); double? tmpValue = numericConverter.ToNumeric(Text); if (tmpValue.HasValue) Value = tmpValue.Value; } new public double Value { get { return value; } set { this.value = value; Text = numericConverter.ToString(this.value); } } protected override void OnKeyDown(KeyEventArgs e) { } protected override void OnKeyPress(KeyPressEventArgs e) { } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/DragDropManager.cs000066400000000000000000000033321446222606700260010ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Windows.Forms; namespace QuickRoute.Controls { public class DragDropManager { public List GetDroppedFileNames(DragEventArgs e, IEnumerable allowedFileExtensions = null) { var fileNames = new List(); if (e.Data.GetDataPresent(DataFormats.FileDrop)) { fileNames.AddRange((string[]) e.Data.GetData(DataFormats.FileDrop)); fileNames = FilterFileNamesByExtension(fileNames, allowedFileExtensions); } if (fileNames.Count == 0 && e.Data.GetDataPresent(DataFormats.StringFormat)) { var fileName = (string)e.Data.GetData(DataFormats.StringFormat); if (fileName.StartsWith("http") || File.Exists(fileName)) fileNames.Add(fileName); } if (fileNames.Count == 0 && e.Data.GetDataPresent("FileName")) { fileNames.AddRange((string[])e.Data.GetData("FileName")); } return fileNames; } private static List FilterFileNamesByExtension(IEnumerable fileNames, IEnumerable allowedFileExtensions) { if (fileNames == null) return null; if (allowedFileExtensions == null) return new List(fileNames); var result = new List(); // find first file with correct extension foreach (var fileName in fileNames) { foreach(var fileExtension in allowedFileExtensions) { if (fileName.EndsWith(fileExtension, StringComparison.InvariantCultureIgnoreCase)) { result.Add(fileName); break; } } } return result; } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.Designer.cs000066400000000000000000000076461446222606700305000ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class FileSelectorControl { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FileSelectorControl)); this.files = new System.Windows.Forms.ListBox(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.addFileButton = new System.Windows.Forms.Button(); this.addUrlButton = new System.Windows.Forms.Button(); this.removeButton = new System.Windows.Forms.Button(); this.flowLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // // files // resources.ApplyResources(this.files, "files"); this.files.AllowDrop = true; this.files.FormattingEnabled = true; this.files.Name = "files"; this.files.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; this.files.DragDrop += new System.Windows.Forms.DragEventHandler(this.files_DragDrop); this.files.DragEnter += new System.Windows.Forms.DragEventHandler(this.files_DragEnter); this.files.KeyDown += new System.Windows.Forms.KeyEventHandler(this.files_KeyDown); // // flowLayoutPanel1 // resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1"); this.flowLayoutPanel1.Controls.Add(this.addUrlButton); this.flowLayoutPanel1.Controls.Add(this.removeButton); this.flowLayoutPanel1.Controls.Add(this.addFileButton); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; // // addFileButton // resources.ApplyResources(this.addFileButton, "addFileButton"); this.addFileButton.Name = "addFileButton"; this.addFileButton.UseVisualStyleBackColor = true; this.addFileButton.Click += new System.EventHandler(this.addFileButton_Click); // // addUrlButton // resources.ApplyResources(this.addUrlButton, "addUrlButton"); this.addUrlButton.Name = "addUrlButton"; this.addUrlButton.UseVisualStyleBackColor = true; this.addUrlButton.Click += new System.EventHandler(this.AddUrlButton_Click); // // removeButton // resources.ApplyResources(this.removeButton, "removeButton"); this.removeButton.Name = "removeButton"; this.removeButton.UseVisualStyleBackColor = true; this.removeButton.Click += new System.EventHandler(this.removeButton_Click); // // FileSelectorControl // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.flowLayoutPanel1); this.Controls.Add(this.files); this.Name = "FileSelectorControl"; this.flowLayoutPanel1.ResumeLayout(false); this.flowLayoutPanel1.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.ListBox files; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; private System.Windows.Forms.Button addFileButton; private System.Windows.Forms.Button addUrlButton; private System.Windows.Forms.Button removeButton; } } quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.cs000066400000000000000000000102251446222606700267240ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; namespace QuickRoute.Controls { public partial class FileSelectorControl : UserControl { public string FileDialogTitle { get; set; } public string FileDialogFilter { get; set; } public int FileDialogFilterIndex { get; set; } public event EventHandler FilesChanged; public FileSelectorControl() { InitializeComponent(); } public FileSelectorControl(IEnumerable fileNames, bool allowUrlAdding) : this() { AddFiles(fileNames); AllowUrlAdding = allowUrlAdding; } public List FileNames { get { var fileNames = new List(); foreach (var fileName in files.Items) { fileNames.Add(fileName.ToString()); } return fileNames; } } public bool AllowUrlAdding { get { return addUrlButton.Visible; } set { addUrlButton.Visible = value; } } public void AddFiles(IEnumerable fileNames) { foreach (var fileName in fileNames) { files.Items.Add(fileName); } InvokeFilesChanged(); } private void RemoveFiles(IEnumerable fileNames) { foreach (var fileName in fileNames) { files.Items.Remove(fileName); } InvokeFilesChanged(); } public void AddFile(string fileName) { AddFiles(new List() { fileName }); } public void RemoveFile(string fileName) { RemoveFiles(new List() { fileName }); } private void InvokeFilesChanged() { var eventHandler = FilesChanged; if (eventHandler != null) eventHandler(this, EventArgs.Empty); } private void addFileButton_Click(object sender, EventArgs e) { using (var ofd = new OpenFileDialog { AddExtension = true, CheckFileExists = true, Multiselect = true, Title = FileDialogTitle, Filter = FileDialogFilter, FilterIndex = FileDialogFilterIndex }) { if (ofd.ShowDialog() == DialogResult.OK) { AddFiles(GetDuplicateFreeFiles(ofd.FileNames)); } } } private void AddUrlButton_Click(object sender, EventArgs e) { using (var urlDialog = new Forms.UrlDialog()) { if (urlDialog.ShowDialog() == DialogResult.OK) { AddFiles(GetDuplicateFreeFiles(urlDialog.Urls)); } } } private void removeButton_Click(object sender, EventArgs e) { RemoveSelectedFiles(); } private void RemoveSelectedFiles() { var filesToRemove = new List(); foreach (var item in files.SelectedItems) { filesToRemove.Add(item.ToString()); } RemoveFiles(filesToRemove); } private List GetDuplicateFreeFiles(IEnumerable fileNamesToAdd) { var fileNames = FileNames; var duplicateFreeFiles = new List(); foreach (var fileToAdd in fileNamesToAdd) { if (!fileNames.Contains(fileToAdd)) { duplicateFreeFiles.Add(fileToAdd); } } return duplicateFreeFiles; } private void files_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) { RemoveSelectedFiles(); } } private void files_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void files_DragDrop(object sender, DragEventArgs e) { var manager = new DragDropManager(); var allowedFileExtensions = FileFormatManager.GetQuickRouteFileExtensions(); var fileNames = manager.GetDroppedFileNames(e, allowedFileExtensions); if(fileNames.Count > 0) { AddFiles(fileNames); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.da.resx000066400000000000000000000173361446222606700276750ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 282, 138 Top, Left 0, 3 128, 23 Tilføj &webadresser... Top, Left 0, 32 128, 23 &Fjern Top, Left 0, 61 128, 23 &Tilføj filer... 285, 0 129, 138 quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.de.resx000066400000000000000000000155111446222606700276720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 290, 138 293, 0 121, 138 121, 23 &Dateien hinzufügen... 121, 23 &URLs hinzufügen... 121, 23 &Entfernen quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.fi.resx000066400000000000000000000137761446222606700277130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lisää &tiedostoja... Lisää &url:eja... &Poista quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.fr.resx000066400000000000000000000147371446222606700277220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 105, 23 Ajouter un &fichier... 105, 23 Ajouter une &url... 105, 23 &Retirer quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.it.resx000066400000000000000000000140001446222606700277060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Aggiungi &file... Aggiungi &collegamento... &Rimuovi quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.lt.resx000066400000000000000000000155231446222606700277240ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 248, 138 251, 0 163, 138 163, 23 Pridėti &failą... 163, 23 Pridėti &internetinį adresą... 163, 23 &Pašalinti quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.no.resx000066400000000000000000000161351446222606700277210ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 276, 138 279, 0 135, 138 135, 23 Legg til &filer... Top, Left 135, 23 Legg til &webadresser... 135, 23 &Fjern quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.resx000066400000000000000000000325221446222606700273040ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 flowLayoutPanel1 System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Bottom, Right TopDown NoControl True 2 6, 13 0 NoControl 0 0, 61 System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 307, 138 flowLayoutPanel1 FileSelectorControl Add &files... flowLayoutPanel1 NoControl 0, 3, 0, 3 $this 0, 32 0, 3, 0, 3 0, 0 310, 0 files 103, 23 Top, Bottom, Left, Right 1 addUrlButton Top, Left, Right $this 0, 3, 0, 3 Add &urls... 1 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 2 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 103, 23 flowLayoutPanel1 0, 3 104, 138 0 removeButton System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 0, 0, 0 1 addFileButton Top, Left, Right 1 False &Remove System.Windows.Forms.ListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 103, 23 414, 138 Top, Left, Right True quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.ru.resx000066400000000000000000000137631446222606700277370ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Файлы... &URLs... &Удалить quickroute-linux-upstream-2.5/QuickRoute.Controls/FileSelectorControl.sv.resx000066400000000000000000000141601446222606700277310ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lägg till &filer... Lägg till &url:er... &Ta bort quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/000077500000000000000000000000001446222606700235425ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.cs000066400000000000000000001472201446222606700265000ustar00rootroot00000000000000using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace QuickRoute.Controls.Forms { public class ColorChooser : Form { internal System.Windows.Forms.Label lblBlue; internal System.Windows.Forms.Label lblGreen; internal System.Windows.Forms.Label lblRed; internal System.Windows.Forms.Label lblBrightness; internal System.Windows.Forms.Label lblSaturation; internal System.Windows.Forms.Label lblHue; internal System.Windows.Forms.HScrollBar hsbBlue; internal System.Windows.Forms.HScrollBar hsbGreen; internal System.Windows.Forms.HScrollBar hsbRed; internal System.Windows.Forms.HScrollBar hsbBrightness; internal System.Windows.Forms.HScrollBar hsbSaturation; internal System.Windows.Forms.HScrollBar hsbHue; internal System.Windows.Forms.Button btnCancel; internal System.Windows.Forms.Button btnOK; internal System.Windows.Forms.Label Label3; internal System.Windows.Forms.Label Label7; internal System.Windows.Forms.Panel pnlColor; internal System.Windows.Forms.Label Label6; internal System.Windows.Forms.Label Label1; internal System.Windows.Forms.Label Label5; internal System.Windows.Forms.Panel pnlSelectedColor; internal System.Windows.Forms.Panel pnlBrightness; internal System.Windows.Forms.Label Label2; internal Label lblAlpha; internal HScrollBar hsbAlpha; internal Label label8; internal Panel pnlAlpha; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public ColorChooser() { // // Required for Windows Form Designer support // InitializeComponent(); } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColorChooser)); this.lblBlue = new System.Windows.Forms.Label(); this.lblGreen = new System.Windows.Forms.Label(); this.lblRed = new System.Windows.Forms.Label(); this.lblBrightness = new System.Windows.Forms.Label(); this.lblSaturation = new System.Windows.Forms.Label(); this.lblHue = new System.Windows.Forms.Label(); this.hsbBlue = new System.Windows.Forms.HScrollBar(); this.hsbGreen = new System.Windows.Forms.HScrollBar(); this.hsbRed = new System.Windows.Forms.HScrollBar(); this.hsbBrightness = new System.Windows.Forms.HScrollBar(); this.hsbSaturation = new System.Windows.Forms.HScrollBar(); this.hsbHue = new System.Windows.Forms.HScrollBar(); this.btnCancel = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button(); this.Label3 = new System.Windows.Forms.Label(); this.Label7 = new System.Windows.Forms.Label(); this.pnlColor = new System.Windows.Forms.Panel(); this.Label6 = new System.Windows.Forms.Label(); this.Label1 = new System.Windows.Forms.Label(); this.Label5 = new System.Windows.Forms.Label(); this.pnlSelectedColor = new System.Windows.Forms.Panel(); this.pnlBrightness = new System.Windows.Forms.Panel(); this.Label2 = new System.Windows.Forms.Label(); this.lblAlpha = new System.Windows.Forms.Label(); this.hsbAlpha = new System.Windows.Forms.HScrollBar(); this.label8 = new System.Windows.Forms.Label(); this.pnlAlpha = new System.Windows.Forms.Panel(); this.SuspendLayout(); // // lblBlue // this.lblBlue.AccessibleDescription = null; this.lblBlue.AccessibleName = null; resources.ApplyResources(this.lblBlue, "lblBlue"); this.lblBlue.Name = "lblBlue"; // // lblGreen // this.lblGreen.AccessibleDescription = null; this.lblGreen.AccessibleName = null; resources.ApplyResources(this.lblGreen, "lblGreen"); this.lblGreen.Name = "lblGreen"; // // lblRed // this.lblRed.AccessibleDescription = null; this.lblRed.AccessibleName = null; resources.ApplyResources(this.lblRed, "lblRed"); this.lblRed.Name = "lblRed"; // // lblBrightness // this.lblBrightness.AccessibleDescription = null; this.lblBrightness.AccessibleName = null; resources.ApplyResources(this.lblBrightness, "lblBrightness"); this.lblBrightness.Name = "lblBrightness"; // // lblSaturation // this.lblSaturation.AccessibleDescription = null; this.lblSaturation.AccessibleName = null; resources.ApplyResources(this.lblSaturation, "lblSaturation"); this.lblSaturation.Name = "lblSaturation"; // // lblHue // this.lblHue.AccessibleDescription = null; this.lblHue.AccessibleName = null; resources.ApplyResources(this.lblHue, "lblHue"); this.lblHue.Name = "lblHue"; // // hsbBlue // this.hsbBlue.AccessibleDescription = null; this.hsbBlue.AccessibleName = null; resources.ApplyResources(this.hsbBlue, "hsbBlue"); this.hsbBlue.BackgroundImage = null; this.hsbBlue.Font = null; this.hsbBlue.LargeChange = 1; this.hsbBlue.Maximum = 255; this.hsbBlue.Name = "hsbBlue"; this.hsbBlue.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // hsbGreen // this.hsbGreen.AccessibleDescription = null; this.hsbGreen.AccessibleName = null; resources.ApplyResources(this.hsbGreen, "hsbGreen"); this.hsbGreen.BackgroundImage = null; this.hsbGreen.Font = null; this.hsbGreen.LargeChange = 1; this.hsbGreen.Maximum = 255; this.hsbGreen.Name = "hsbGreen"; this.hsbGreen.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // hsbRed // this.hsbRed.AccessibleDescription = null; this.hsbRed.AccessibleName = null; resources.ApplyResources(this.hsbRed, "hsbRed"); this.hsbRed.BackgroundImage = null; this.hsbRed.Font = null; this.hsbRed.LargeChange = 1; this.hsbRed.Maximum = 255; this.hsbRed.Name = "hsbRed"; this.hsbRed.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // hsbBrightness // this.hsbBrightness.AccessibleDescription = null; this.hsbBrightness.AccessibleName = null; resources.ApplyResources(this.hsbBrightness, "hsbBrightness"); this.hsbBrightness.BackgroundImage = null; this.hsbBrightness.Font = null; this.hsbBrightness.LargeChange = 1; this.hsbBrightness.Maximum = 255; this.hsbBrightness.Name = "hsbBrightness"; this.hsbBrightness.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleHSVScroll); // // hsbSaturation // this.hsbSaturation.AccessibleDescription = null; this.hsbSaturation.AccessibleName = null; resources.ApplyResources(this.hsbSaturation, "hsbSaturation"); this.hsbSaturation.BackgroundImage = null; this.hsbSaturation.Font = null; this.hsbSaturation.LargeChange = 1; this.hsbSaturation.Maximum = 255; this.hsbSaturation.Name = "hsbSaturation"; this.hsbSaturation.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleHSVScroll); // // hsbHue // this.hsbHue.AccessibleDescription = null; this.hsbHue.AccessibleName = null; resources.ApplyResources(this.hsbHue, "hsbHue"); this.hsbHue.BackgroundImage = null; this.hsbHue.Font = null; this.hsbHue.LargeChange = 1; this.hsbHue.Maximum = 255; this.hsbHue.Name = "hsbHue"; this.hsbHue.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleHSVScroll); // // btnCancel // this.btnCancel.AccessibleDescription = null; this.btnCancel.AccessibleName = null; resources.ApplyResources(this.btnCancel, "btnCancel"); this.btnCancel.BackgroundImage = null; this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Font = null; this.btnCancel.Name = "btnCancel"; // // btnOK // this.btnOK.AccessibleDescription = null; this.btnOK.AccessibleName = null; resources.ApplyResources(this.btnOK, "btnOK"); this.btnOK.BackgroundImage = null; this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.btnOK.Name = "btnOK"; // // Label3 // this.Label3.AccessibleDescription = null; this.Label3.AccessibleName = null; resources.ApplyResources(this.Label3, "Label3"); this.Label3.Name = "Label3"; // // Label7 // this.Label7.AccessibleDescription = null; this.Label7.AccessibleName = null; resources.ApplyResources(this.Label7, "Label7"); this.Label7.Name = "Label7"; // // pnlColor // this.pnlColor.AccessibleDescription = null; this.pnlColor.AccessibleName = null; resources.ApplyResources(this.pnlColor, "pnlColor"); this.pnlColor.BackgroundImage = null; this.pnlColor.Font = null; this.pnlColor.Name = "pnlColor"; // // Label6 // this.Label6.AccessibleDescription = null; this.Label6.AccessibleName = null; resources.ApplyResources(this.Label6, "Label6"); this.Label6.Name = "Label6"; // // Label1 // this.Label1.AccessibleDescription = null; this.Label1.AccessibleName = null; resources.ApplyResources(this.Label1, "Label1"); this.Label1.Name = "Label1"; // // Label5 // this.Label5.AccessibleDescription = null; this.Label5.AccessibleName = null; resources.ApplyResources(this.Label5, "Label5"); this.Label5.Name = "Label5"; // // pnlSelectedColor // this.pnlSelectedColor.AccessibleDescription = null; this.pnlSelectedColor.AccessibleName = null; resources.ApplyResources(this.pnlSelectedColor, "pnlSelectedColor"); this.pnlSelectedColor.BackgroundImage = null; this.pnlSelectedColor.Font = null; this.pnlSelectedColor.Name = "pnlSelectedColor"; // // pnlBrightness // this.pnlBrightness.AccessibleDescription = null; this.pnlBrightness.AccessibleName = null; resources.ApplyResources(this.pnlBrightness, "pnlBrightness"); this.pnlBrightness.BackgroundImage = null; this.pnlBrightness.Font = null; this.pnlBrightness.Name = "pnlBrightness"; // // Label2 // this.Label2.AccessibleDescription = null; this.Label2.AccessibleName = null; resources.ApplyResources(this.Label2, "Label2"); this.Label2.Name = "Label2"; // // lblAlpha // this.lblAlpha.AccessibleDescription = null; this.lblAlpha.AccessibleName = null; resources.ApplyResources(this.lblAlpha, "lblAlpha"); this.lblAlpha.Name = "lblAlpha"; // // hsbAlpha // this.hsbAlpha.AccessibleDescription = null; this.hsbAlpha.AccessibleName = null; resources.ApplyResources(this.hsbAlpha, "hsbAlpha"); this.hsbAlpha.BackgroundImage = null; this.hsbAlpha.Font = null; this.hsbAlpha.LargeChange = 1; this.hsbAlpha.Maximum = 255; this.hsbAlpha.Name = "hsbAlpha"; this.hsbAlpha.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // label8 // this.label8.AccessibleDescription = null; this.label8.AccessibleName = null; resources.ApplyResources(this.label8, "label8"); this.label8.Name = "label8"; // // pnlAlpha // this.pnlAlpha.AccessibleDescription = null; this.pnlAlpha.AccessibleName = null; resources.ApplyResources(this.pnlAlpha, "pnlAlpha"); this.pnlAlpha.BackgroundImage = null; this.pnlAlpha.Font = null; this.pnlAlpha.Name = "pnlAlpha"; // // ColorChooser // this.AcceptButton = this.btnOK; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.BackgroundImage = null; this.CancelButton = this.btnCancel; this.Controls.Add(this.pnlAlpha); this.Controls.Add(this.lblAlpha); this.Controls.Add(this.hsbAlpha); this.Controls.Add(this.label8); this.Controls.Add(this.lblBlue); this.Controls.Add(this.lblGreen); this.Controls.Add(this.lblRed); this.Controls.Add(this.lblBrightness); this.Controls.Add(this.lblSaturation); this.Controls.Add(this.lblHue); this.Controls.Add(this.hsbBlue); this.Controls.Add(this.hsbGreen); this.Controls.Add(this.hsbRed); this.Controls.Add(this.hsbBrightness); this.Controls.Add(this.hsbSaturation); this.Controls.Add(this.hsbHue); this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnOK); this.Controls.Add(this.Label3); this.Controls.Add(this.Label7); this.Controls.Add(this.pnlColor); this.Controls.Add(this.Label6); this.Controls.Add(this.Label1); this.Controls.Add(this.Label5); this.Controls.Add(this.pnlSelectedColor); this.Controls.Add(this.pnlBrightness); this.Controls.Add(this.Label2); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ColorChooser"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.ColorChooser2_Load); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.frmMain_MouseUp); this.Paint += new System.Windows.Forms.PaintEventHandler(this.ColorChooser2_Paint); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.HandleMouse); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.HandleMouse); this.ResumeLayout(false); } #endregion private enum ChangeStyle { MouseMove, ARGB, AHSV, None } private ChangeStyle changeType = ChangeStyle.None; private Point selectedPoint; private ColorWheel myColorWheel; private ColorHandler.ARGB ARGB; private ColorHandler.AHSV AHSV; private void ColorChooser2_Load(object sender, System.EventArgs e) { // Turn on double-buffering, so the form looks better. this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.DoubleBuffer, true); // These properties are set in design view, as well, but they // have to be set to false in order for the Paint // event to be able to display their contents. // Never hurts to make sure they're invisible. pnlSelectedColor.Visible = false; pnlBrightness.Visible = false; pnlAlpha.Visible = false; pnlColor.Visible = false; // Calculate the coordinates of the three // required regions on the form. Rectangle SelectedColorRectangle = new Rectangle(pnlSelectedColor.Location, pnlSelectedColor.Size); Rectangle BrightnessRectangle = new Rectangle(pnlBrightness.Location, pnlBrightness.Size); Rectangle AlphaRectangle = new Rectangle(pnlAlpha.Location, pnlAlpha.Size); Rectangle ColorRectangle = new Rectangle(pnlColor.Location, pnlColor.Size); // Export the new ColorWheel class, indicating // the locations of the color wheel itself, the // brightness area, and the position of the selected color. myColorWheel = new ColorWheel(ColorRectangle, BrightnessRectangle, AlphaRectangle, SelectedColorRectangle); myColorWheel.ColorChanged += this.myColorWheel_ColorChanged; // Set the RGB and HSV values // of the NumericUpDown controls. SetARGB(ARGB); SetAHSV(AHSV); } private void HandleMouse(object sender, MouseEventArgs e) { // If you have the left mouse button down, // then update the selectedPoint value and // force a repaint of the color wheel. if ( e.Button == MouseButtons.Left ) { changeType = ChangeStyle.MouseMove; selectedPoint = new Point(e.X, e.Y); this.Invalidate(); } } private void frmMain_MouseUp(object sender, MouseEventArgs e) { myColorWheel.SetMouseUp(); changeType = ChangeStyle.None; } private void SetARGBLabels(ColorHandler.ARGB ARGB) { RefreshText(lblAlpha, ARGB.Alpha); RefreshText(lblRed, ARGB.Red); RefreshText(lblBlue, ARGB.Blue); RefreshText(lblGreen, ARGB.Green); } private void SetAHSVLabels(ColorHandler.AHSV AHSV) { RefreshText(lblHue, AHSV.Hue); RefreshText(lblSaturation, AHSV.Saturation); RefreshText(lblBrightness, AHSV.Value); } private void SetARGB(ColorHandler.ARGB ARGB) { // Update the RGB values on the form. RefreshValue(hsbAlpha, ARGB.Alpha); RefreshValue(hsbRed, ARGB.Red); RefreshValue(hsbBlue, ARGB.Blue); RefreshValue(hsbGreen, ARGB.Green); SetARGBLabels(ARGB); } private void SetAHSV( ColorHandler.AHSV AHSV) { // Update the HSV values on the form. RefreshValue(hsbHue, AHSV.Hue); RefreshValue(hsbSaturation, AHSV.Saturation); RefreshValue(hsbBrightness, AHSV.Value); SetAHSVLabels(AHSV); } private void RefreshValue(HScrollBar hsb, int value) { hsb.Value = value; } private void RefreshText(Label lbl, int value) { lbl.Text = value.ToString(); } public Color Color { // Get or set the color to be // displayed in the color wheel. get { return myColorWheel.Color; } set { // Indicate the color change type. Either RGB or HSV // will cause the color wheel to update the position // of the pointer. changeType = ChangeStyle.ARGB; ARGB = new ColorHandler.ARGB(value.A, value.R, value.G, value.B); AHSV = ColorHandler.ARGBtoAHSV(ARGB); } } private void myColorWheel_ColorChanged(object sender, ColorChangedEventArgs e) { SetARGB(e.ARGB); SetAHSV(e.AHSV); } private void HandleHSVScroll(object sender, ScrollEventArgs e) // If the H, S, or V values change, use this // code to update the RGB values and invalidate // the color wheel (so it updates the pointers). // Check the isInUpdate flag to avoid recursive events // when you update the NumericUpdownControls. { changeType = ChangeStyle.AHSV; AHSV = new ColorHandler.AHSV(hsbAlpha.Value, hsbHue.Value, hsbSaturation.Value, hsbBrightness.Value); SetARGB(ColorHandler.AHSVtoARGB(AHSV)); SetAHSVLabels(AHSV); this.Invalidate(); } private void HandleARGBScroll(object sender, ScrollEventArgs e) { // If the R, G, or B values change, use this // code to update the HSV values and invalidate // the color wheel (so it updates the pointers). // Check the isInUpdate flag to avoid recursive events // when you update the NumericUpdownControls. changeType = ChangeStyle.ARGB; ARGB = new ColorHandler.ARGB(hsbAlpha.Value, hsbRed.Value, hsbGreen.Value, hsbBlue.Value); SetAHSV(ColorHandler.ARGBtoAHSV(ARGB)); SetARGBLabels(ARGB); this.Invalidate(); } private void ColorChooser2_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { // Depending on the circumstances, force a repaint // of the color wheel passing different information. switch (changeType) { case ChangeStyle.AHSV: myColorWheel.Draw(e.Graphics, AHSV); break; case ChangeStyle.MouseMove: case ChangeStyle.None: myColorWheel.Draw(e.Graphics, selectedPoint); break; case ChangeStyle.ARGB: myColorWheel.Draw(e.Graphics, ARGB); break; } } } public class ColorWheel : IDisposable { // These resources should be disposed // of when you're done with them. private Graphics g; private Region colorRegion; private Region brightnessRegion; private Region alphaRegion; private Bitmap colorImage; public EventHandler ColorChanged; // Keep track of the current mouse state. public enum MouseState { MouseUp, ClickOnColor, DragInColor, ClickOnBrightness, DragInBrightness, ClickOnAlpha, DragInAlpha, ClickOutsideRegion, DragOutsideRegion, } private MouseState currentState = MouseState.MouseUp; // The code needs to convert back and forth between // degrees and radians. There are 2*PI radians in a // full circle, and 360 degrees. This constant allows // you to convert back and forth. private const double DEGREES_PER_RADIAN = 180.0 / Math.PI; // COLOR_COUNT represents the number of distinct colors // used to create the circular gradient. Its value // is somewhat arbitrary -- change this to 6, for // example, to see what happens. 1536 (6 * 256) seems // a good compromise -- it's enough to get a full // range of colors, but it doesn't overwhelm the processor // attempting to generate the image. The color wheel // contains 6 sections, and each section displays // 256 colors. Seems like a reasonable compromise. private const int COLOR_COUNT = 6 * 256; private Point centerPoint; private int radius; private Rectangle colorRectangle; private Rectangle brightnessRectangle; private Rectangle alphaRectangle; private Rectangle selectedColorRectangle; private int brightnessX; private double brightnessScaling; private int alphaX; private double alphaScaling; // selectedColor is the actual value selected // by the user. fullColor is the same color, // with its brightness set to 255. private Color selectedColor = Color.White; private Color fullColor; private ColorHandler.ARGB ARGB; private ColorHandler.AHSV AHSV; // Locations for the two "pointers" on the form. private Point colorPoint; private Point brightnessPoint; private Point alphaPoint; private int brightness; private int brightnessMin; private int brightnessMax; private int alpha; private int alphaMin; private int alphaMax; public ColorWheel(Rectangle colorRectangle, Rectangle brightnessRectangle, Rectangle alphaRectangle, Rectangle selectedColorRectangle) { // Caller must provide locations for color wheel // (colorRectangle), brightness "strip" (brightnessRectangle), // alpha "strip" (alphaRectangle) // and location to display selected color (selectedColorRectangle). using (GraphicsPath path = new GraphicsPath()) { // Store away locations for later use. this.colorRectangle = colorRectangle; this.brightnessRectangle = brightnessRectangle; this.alphaRectangle = alphaRectangle; this.selectedColorRectangle = selectedColorRectangle; // Calculate the center of the circle. // Start with the location, then offset // the point by the radius. // Use the smaller of the width and height of // the colorRectangle value. this.radius = (int)Math.Min(colorRectangle.Width, colorRectangle.Height) / 2; this.centerPoint = colorRectangle.Location; this.centerPoint.Offset(radius, radius); // Start the pointer in the center. this.colorPoint = this.centerPoint; // Export a region corresponding to the color circle. // Code uses this later to determine if a specified // point is within the region, using the IsVisible // method. path.AddEllipse(colorRectangle); colorRegion = new Region(path); // set the range for the brightness selector. this.brightnessMin = this.brightnessRectangle.Top; this.brightnessMax = this.brightnessRectangle.Bottom; // Export a region corresponding to the // brightness rectangle, with a little extra // "breathing room". path.AddRectangle(new Rectangle(brightnessRectangle.Left, brightnessRectangle.Top - 10, brightnessRectangle.Width + 10, brightnessRectangle.Height + 20)); // Export region corresponding to brightness // rectangle. Later code uses this to // determine if a specified point is within // the region, using the IsVisible method. brightnessRegion = new Region(path); // Set the location for the brightness indicator "marker". // Also calculate the scaling factor, scaling the height // to be between 0 and 255. brightnessX = brightnessRectangle.Left + brightnessRectangle.Width; brightnessScaling = (double)255 / (brightnessMax - brightnessMin); // Calculate the location of the brightness // pointer. Assume it's at the highest position. brightnessPoint = new Point(brightnessX, brightnessMax); // set the range for the alpha selector. this.alphaMin = this.alphaRectangle.Top; this.alphaMax = this.alphaRectangle.Bottom; // Export a region corresponding to the // alpha rectangle, with a little extra // "breathing room". path.AddRectangle(new Rectangle(alphaRectangle.Left, alphaRectangle.Top - 10, alphaRectangle.Width + 10, alphaRectangle.Height + 20)); // Export region corresponding to alpha // rectangle. Later code uses this to // determine if a specified point is within // the region, using the IsVisible method. alphaRegion = new Region(path); // Set the location for the alpha indicator "marker". // Also calculate the scaling factor, scaling the height // to be between 0 and 255. alphaX = alphaRectangle.Left + alphaRectangle.Width; alphaScaling = (double)255 / (alphaMax - alphaMin); // Calculate the location of the alpha // pointer. Assume it's at the highest position. alphaPoint = new Point(alphaX, alphaMax); // Export the bitmap that contains the circular gradient. CreateGradient(); } } protected void OnColorChanged(ColorHandler.ARGB RGB, ColorHandler.AHSV AHSV) { ColorChangedEventArgs e = new ColorChangedEventArgs(RGB, AHSV); ColorChanged(this, e); } public Color Color { get { return selectedColor; } } void IDisposable.Dispose() { // Dispose of graphic resources if (colorImage != null) colorImage.Dispose(); if (colorRegion != null) colorRegion.Dispose(); if (brightnessRegion != null) brightnessRegion.Dispose(); if (alphaRegion != null) alphaRegion.Dispose(); if (g != null) g.Dispose(); } public void SetMouseUp() { // Indicate that the user has // released the mouse. currentState = MouseState.MouseUp; } public void Draw(Graphics g, ColorHandler.AHSV AHSV) { // Given AHSV values, update the screen. this.g = g; this.AHSV = AHSV; CalcCoordsAndUpdate(this.AHSV); UpdateDisplay(); } public void Draw(Graphics g, ColorHandler.ARGB ARGB) { // Given RGB values, calculate AHSV and then update the screen. this.g = g; this.AHSV = ColorHandler.ARGBtoAHSV(ARGB); CalcCoordsAndUpdate(this.AHSV); UpdateDisplay(); } public void Draw(Graphics g, Point mousePoint) { // You've moved the mouse. // Now update the screen to match. double distance; int degrees; Point delta; Point newColorPoint; Point newBrightnessPoint; Point newAlphaPoint; Point newPoint; // Keep track of the previous color pointer point, // so you can put the mouse there in case the // user has clicked outside the circle. newColorPoint = colorPoint; newBrightnessPoint = brightnessPoint; newAlphaPoint = alphaPoint; // Store this away for later use. this.g = g; if (currentState == MouseState.MouseUp) { if (!mousePoint.IsEmpty) { if (colorRegion.IsVisible(mousePoint)) { // Is the mouse point within the color circle? // If so, you just clicked on the color wheel. currentState = MouseState.ClickOnColor; } else if (brightnessRegion.IsVisible(mousePoint)) { // Is the mouse point within the brightness area? // You clicked on the brightness area. currentState = MouseState.ClickOnBrightness; } else if (alphaRegion.IsVisible(mousePoint)) { // Is the mouse point within the alpha area? // You clicked on the alpha area. currentState = MouseState.ClickOnAlpha; } else { // Clicked outside the color, brightness and alpha // regions. In that case, just put the // pointers back where they were. currentState = MouseState.ClickOutsideRegion; } } } switch (currentState) { case MouseState.ClickOnBrightness: case MouseState.DragInBrightness: // Calculate new color information // based on the brightness, which may have changed. newPoint = mousePoint; if (newPoint.Y < brightnessMin) { newPoint.Y = brightnessMin; } else if (newPoint.Y > brightnessMax) { newPoint.Y = brightnessMax; } newBrightnessPoint = new Point(brightnessX, newPoint.Y); brightness = (int)((brightnessMax - newPoint.Y) * brightnessScaling); AHSV.Value = brightness; ARGB = ColorHandler.AHSVtoARGB(AHSV); break; case MouseState.ClickOnAlpha: case MouseState.DragInAlpha: // Calculate new color information // based on the alpha, which may have changed. newPoint = mousePoint; if (newPoint.Y < alphaMin) { newPoint.Y = alphaMin; } else if (newPoint.Y > alphaMax) { newPoint.Y = alphaMax; } newAlphaPoint = new Point(alphaX, newPoint.Y); alpha = (int)((alphaMax - newPoint.Y) * alphaScaling); AHSV.Alpha = alpha; ARGB = ColorHandler.AHSVtoARGB(AHSV); break; case MouseState.ClickOnColor: case MouseState.DragInColor: // Calculate new color information // based on selected color, which may have changed. newColorPoint = mousePoint; // Calculate x and y distance from the center, // and then calculate the angle corresponding to the // new location. delta = new Point( mousePoint.X - centerPoint.X, mousePoint.Y - centerPoint.Y); degrees = CalcDegrees(delta); // Calculate distance from the center to the new point // as a fraction of the radius. Use your old friend, // the Pythagorean theorem, to calculate this value. distance = Math.Sqrt(delta.X * delta.X + delta.Y * delta.Y) / radius; if (currentState == MouseState.DragInColor) { if (distance > 1) { // Mouse is down, and outside the circle, but you // were previously dragging in the color circle. // What to do? // In that case, move the point to the edge of the // circle at the correct angle. distance = 1; newColorPoint = GetPoint(degrees, radius, centerPoint); } } // Calculate the new AHSV and RGB values. AHSV.Hue = (int)(degrees * 255 / 360); AHSV.Saturation = (int)(distance * 255); AHSV.Value = brightness; ARGB = ColorHandler.AHSVtoARGB(AHSV); fullColor = ColorHandler.AHSVtoColor(AHSV.Alpha, AHSV.Hue, AHSV.Saturation, 255); break; } selectedColor = ColorHandler.AHSVtoColor(AHSV); // Raise an event back to the parent form, // so the form can update any UI it's using // to display selected color values. OnColorChanged(ARGB, AHSV); // On the way out, set the new state. switch (currentState) { case MouseState.ClickOnBrightness: currentState = MouseState.DragInBrightness; break; case MouseState.ClickOnAlpha: currentState = MouseState.DragInAlpha; break; case MouseState.ClickOnColor: currentState = MouseState.DragInColor; break; case MouseState.ClickOutsideRegion: currentState = MouseState.DragOutsideRegion; break; } // Store away the current points for next time. colorPoint = newColorPoint; brightnessPoint = newBrightnessPoint; alphaPoint = newAlphaPoint; // Draw the gradients and points. UpdateDisplay(); } private Point CalcBrightnessPoint(int brightness) { // Take the value for brightness (0 to 255), scale to the // scaling used in the brightness bar, then add the value // to the bottom of the bar. return the correct point at which // to display the brightness pointer. return new Point(brightnessX, (int)(brightnessMax - brightness / brightnessScaling)); } private Point CalcAlphaPoint(int alpha) { // Take the value for alpha (0 to 255), scale to the // scaling used in the alpha bar, then add the value // to the bottom of the bar. return the correct point at which // to display the alpha pointer. return new Point(alphaX, (int)(alphaMax - alpha / alphaScaling)); } private void UpdateDisplay() { // Update the gradients, and place the // pointers correctly based on colors and // brightness. using (Brush selectedBrush = new SolidBrush(selectedColor)) { // Draw the saved color wheel image. g.DrawImage(colorImage, colorRectangle); // Draw the "selected color" rectangle. DrawSelectedColorRectangle(selectedBrush); // Draw the "brightness" rectangle. DrawBrightnessLinearGradient(fullColor); // Draw the "alpha" rectangle. DrawAlphaLinearGradient(selectedColor); // Draw the three pointers. DrawColorPointer(colorPoint); DrawBrightnessPointer(brightnessPoint); DrawAlphaPointer(alphaPoint); } } private void CalcCoordsAndUpdate(ColorHandler.AHSV AHSV) { // Convert color to real-world coordinates and then calculate // the various points. AHSV.Hue represents the degrees (0 to 360), // AHSV.Saturation represents the radius. // This procedure doesn't draw anything--it simply // updates class-level variables. The UpdateDisplay // procedure uses these values to update the screen. // Given the angle (AHSV.Hue), and distance from // the center (AHSV.Saturation), and the center, // calculate the point corresponding to // the selected color, on the color wheel. colorPoint = GetPoint((double)AHSV.Hue / 255 * 360, (double)AHSV.Saturation / 255 * radius, centerPoint); // Given the brightness (AHSV.value), calculate the // point corresponding to the brightness indicator. brightnessPoint = CalcBrightnessPoint(AHSV.Value); // Store information about the selected color. brightness = AHSV.Value; selectedColor = ColorHandler.AHSVtoColor(AHSV); ARGB = ColorHandler.AHSVtoARGB(AHSV); // The full color is the same as AHSV, except that the // brightness is set to full (255). This is the top-most // color in the brightness gradient. fullColor = ColorHandler.AHSVtoColor(AHSV.Alpha, AHSV.Hue, AHSV.Saturation, 255); // Given the brightness (AHSV.value), calculate the // point corresponding to the alpha indicator. alphaPoint = CalcAlphaPoint(AHSV.Alpha); // Store information about the selected color. alpha = AHSV.Alpha; } private void DrawSelectedColorRectangle(Brush brush) { // Make checkerboard boxes as a background int x = selectedColorRectangle.Left; int y = selectedColorRectangle.Top; int size = 8; int brushIndex = 0; int rowIndex = 0; SolidBrush[] checkerboardBrushes = new SolidBrush[] { (SolidBrush)Brushes.LightGray, (SolidBrush)Brushes.White }; while (y <= selectedColorRectangle.Bottom) { while (x <= selectedColorRectangle.Right) { g.FillRectangle(checkerboardBrushes[brushIndex], x, y, Math.Min(size, selectedColorRectangle.Right - x), Math.Min(size, selectedColorRectangle.Bottom - y)); x += size; brushIndex = (brushIndex + 1) % 2; } x = selectedColorRectangle.Left; rowIndex += 1; brushIndex = rowIndex % 2; y += size; } g.FillRectangle(brush, selectedColorRectangle); } private void DrawBrightnessLinearGradient(Color TopColor) { // Given the top color, draw a linear gradient // ranging from black to the top opaque color. Use the // brightness rectangle as the area to fill. TopColor = Color.FromArgb(255, TopColor); using (LinearGradientBrush lgb = new LinearGradientBrush(brightnessRectangle, TopColor, Color.Black, LinearGradientMode.Vertical)) { g.FillRectangle(lgb, brightnessRectangle); } } private void DrawAlphaLinearGradient(Color color) { // Make checkerboard boxes as a background int x = alphaRectangle.Left; int y = alphaRectangle.Top; int size = 8; int brushIndex = 0; int rowIndex = 0; SolidBrush[] checkerboardBrushes = new SolidBrush[] { (SolidBrush)Brushes.LightGray, (SolidBrush)Brushes.White }; while (y <= alphaRectangle.Bottom) { while (x <= alphaRectangle.Right) { g.FillRectangle(checkerboardBrushes[brushIndex], x, y, Math.Min(size, alphaRectangle.Right - x), Math.Min(size, alphaRectangle.Bottom - y)); x += size; brushIndex = (brushIndex + 1) % 2; } x = alphaRectangle.Left; rowIndex += 1; brushIndex = rowIndex % 2; y += size; } foreach (SolidBrush b in checkerboardBrushes) { b.Dispose(); } // Given the color, draw a linear gradient // ranging from opaque to transparent. Use the // alpha rectangle as the area to fill. using (LinearGradientBrush lgb = new LinearGradientBrush(alphaRectangle, Color.FromArgb(255, color), Color.FromArgb(0, color), LinearGradientMode.Vertical)) { g.FillRectangle(lgb, alphaRectangle); } } private int CalcDegrees(Point pt) { int degrees; if (pt.X == 0) { // The point is on the y-axis. Determine whether // it's above or below the x-axis, and return the // corresponding angle. Note that the orientation of the // y-coordinate is backwards. That is, A positive Y value // indicates a point BELOW the x-axis. if (pt.Y > 0) { degrees = 270; } else { degrees = 90; } } else { // This value needs to be multiplied // by -1 because the y-coordinate // is opposite from the normal direction here. // That is, a y-coordinate that's "higher" on // the form has a lower y-value, in this coordinate // system. So everything's off by a factor of -1 when // performing the ratio calculations. degrees = (int)(-Math.Atan((double)pt.Y / pt.X) * DEGREES_PER_RADIAN); // If the x-coordinate of the selected point // is to the left of the center of the circle, you // need to add 180 degrees to the angle. ArcTan only // gives you a value on the right-hand side of the circle. if (pt.X < 0) { degrees += 180; } // Ensure that the return value is // between 0 and 360. degrees = (degrees + 360) % 360; } return degrees; } private void CreateGradient() { // Export a new PathGradientBrush, supplying // an array of points created by calling // the GetPoints method. using (PathGradientBrush pgb = new PathGradientBrush(GetPoints(radius, new Point(radius, radius)))) { // Set the various properties. Note the SurroundColors // property, which contains an array of points, // in a one-to-one relationship with the points // that created the gradient. pgb.CenterColor = Color.White; pgb.CenterPoint = new PointF(radius, radius); pgb.SurroundColors = GetColors(); // Export a new bitmap containing // the color wheel gradient, so the // code only needs to do all this // work once. Later code uses the bitmap // rather than recreating the gradient. colorImage = new Bitmap( colorRectangle.Width, colorRectangle.Height, PixelFormat.Format32bppArgb); using (Graphics newGraphics = Graphics.FromImage(colorImage)) { newGraphics.FillEllipse(pgb, 0, 0, colorRectangle.Width, colorRectangle.Height); } } } private Color[] GetColors() { // Export an array of COLOR_COUNT // colors, looping through all the // hues between 0 and 255, broken // into COLOR_COUNT intervals. AHSV is // particularly well-suited for this, // because the only value that changes // as you create colors is the Hue. Color[] Colors = new Color[COLOR_COUNT]; for (int i = 0; i <= COLOR_COUNT - 1; i++) Colors[i] = ColorHandler.AHSVtoColor(255, (int)((double)(i * 255) / COLOR_COUNT), 255, 255); return Colors; } private Point[] GetPoints(double radius, Point centerPoint) { // Generate the array of points that describe // the locations of the COLOR_COUNT colors to be // displayed on the color wheel. Point[] Points = new Point[COLOR_COUNT]; for (int i = 0; i <= COLOR_COUNT - 1; i++) Points[i] = GetPoint((double)(i * 360) / COLOR_COUNT, radius, centerPoint); return Points; } private Point GetPoint(double degrees, double radius, Point centerPoint) { // Given the center of a circle and its radius, along // with the angle corresponding to the point, find the coordinates. // In other words, conver t from polar to rectangular coordinates. double radians = degrees / DEGREES_PER_RADIAN; return new Point((int)(centerPoint.X + Math.Floor(radius * Math.Cos(radians))), (int)(centerPoint.Y - Math.Floor(radius * Math.Sin(radians)))); } private void DrawColorPointer(Point pt) { // Given a point, draw the color selector. // The constant SIZE represents half // the width -- the square will be twice // this value in width and height. const int SIZE = 3; g.DrawRectangle(Pens.Black, pt.X - SIZE, pt.Y - SIZE, SIZE * 2, SIZE * 2); } private void DrawBrightnessPointer(Point pt) { // Draw a triangle for the // brightness indicator that "points" // at the provided point. const int HEIGHT = 10; const int WIDTH = 7; Point[] Points = new Point[3]; Points[0] = pt; Points[1] = new Point(pt.X + WIDTH, pt.Y + HEIGHT / 2); Points[2] = new Point(pt.X + WIDTH, pt.Y - HEIGHT / 2); g.FillPolygon(Brushes.Black, Points); } private void DrawAlphaPointer(Point pt) { // Draw a triangle for the // alpha indicator that "points" // at the provided point. const int HEIGHT = 10; const int WIDTH = 7; Point[] Points = new Point[3]; Points[0] = pt; Points[1] = new Point(pt.X + WIDTH, pt.Y + HEIGHT / 2); Points[2] = new Point(pt.X + WIDTH, pt.Y - HEIGHT / 2); g.FillPolygon(Brushes.Black, Points); } } public class ColorHandler { // Handle conversions between RGB and HSV // (and Color types, as well). public struct ARGB { // All values are between 0 and 255. public int Alpha; public int Red; public int Green; public int Blue; public ARGB(int A, int R, int G, int B) { Alpha = A; Red = R; Green = G; Blue = B; } public override string ToString() { return String.Format("({0}, {1}, {2}, {3})", Alpha, Red, Green, Blue); } } public struct AHSV { // All values are between 0 and 255. public int Alpha; public int Hue; public int Saturation; public int Value; public AHSV(int A, int H, int S, int V) { Alpha = A; Hue = H; Saturation = S; Value = V; } public override string ToString() { return String.Format("({0}, {1}, {2}, {3})", Alpha, Hue, Saturation, Value); } } public static ARGB AHSVtoARGB(int A, int H, int S, int V) { // H, S, and V must all be between 0 and 255. return AHSVtoARGB(new AHSV(A, H, S, V)); } public static Color AHSVtoColor(AHSV ahsv) { ARGB ARGB = AHSVtoARGB(ahsv); return Color.FromArgb(ARGB.Alpha, ARGB.Red, ARGB.Green, ARGB.Blue); } public static Color AHSVtoColor(int A, int H, int S, int V) { return AHSVtoColor(new AHSV(A, H, S, V)); } public static ARGB AHSVtoARGB(AHSV AHSV) { // HSV contains values scaled as in the color wheel: // that is, all from 0 to 255. // for ( this code to work, HSV.Hue needs // to be scaled from 0 to 360 (it//s the angle of the selected // point within the circle). HSV.Saturation and HSV.value must be // scaled to be between 0 and 1. double h; double s; double v; double r = 0; double g = 0; double b = 0; // Scale Hue to be between 0 and 360. Saturation // and value scale to be between 0 and 1. h = ((double)AHSV.Hue / 255 * 360) % 360; s = (double)AHSV.Saturation / 255; v = (double)AHSV.Value / 255; if (s == 0) { // If s is 0, all colors are the same. // This is some flavor of gray. r = v; g = v; b = v; } else { double p; double q; double t; double fractionalSector; int sectorNumber; double sectorPos; // The color wheel consists of 6 sectors. // Figure out which sector you//re in. sectorPos = h / 60; sectorNumber = (int)(Math.Floor(sectorPos)); // get the fractional part of the sector. // That is, how many degrees into the sector // are you? fractionalSector = sectorPos - sectorNumber; // Calculate values for the three axes // of the color. p = v * (1 - s); q = v * (1 - (s * fractionalSector)); t = v * (1 - (s * (1 - fractionalSector))); // Assign the fractional colors to r, g, and b // based on the sector the angle is in. switch (sectorNumber) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; } } // return an RGB structure, with values scaled // to be between 0 and 255. return new ARGB(AHSV.Alpha, (int)(r * 255), (int)(g * 255), (int)(b * 255)); } public static AHSV ARGBtoAHSV(ARGB ARGB) { // In this function, R, G, and B values must be scaled // to be between 0 and 1. // HSV.Hue will be a value between 0 and 360, and // HSV.Saturation and value are between 0 and 1. // The code must scale these to be between 0 and 255 for // the purposes of this application. double min; double max; double delta; double r = (double)ARGB.Red / 255; double g = (double)ARGB.Green / 255; double b = (double)ARGB.Blue / 255; double h; double s; double v; min = Math.Min(Math.Min(r, g), b); max = Math.Max(Math.Max(r, g), b); v = max; delta = max - min; if (max == 0 || delta == 0) { // R, G, and B must be 0, or all the same. // In this case, S is 0, and H is undefined. // Using H = 0 is as good as any... s = 0; h = 0; } else { s = delta / max; if (r == max) { // Between Yellow and Magenta h = (g - b) / delta; } else if (g == max) { // Between Cyan and Yellow h = 2 + (b - r) / delta; } else { // Between Magenta and Cyan h = 4 + (r - g) / delta; } } // Scale h to be between 0 and 360. // This may require adding 360, if the value // is negative. h *= 60; if (h < 0) { h += 360; } // Scale to the requirements of this // application. All values are between 0 and 255. return new AHSV(ARGB.Alpha, (int)(h / 360 * 255), (int)(s * 255), (int)(v * 255)); } } public class ColorChangedEventArgs : EventArgs { private ColorHandler.ARGB mRGB; private ColorHandler.AHSV mHSV; public ColorChangedEventArgs(ColorHandler.ARGB RGB, ColorHandler.AHSV HSV) { mRGB = RGB; mHSV = HSV; } public ColorHandler.ARGB ARGB { get { return mRGB; } } public ColorHandler.AHSV AHSV { get { return mHSV; } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.da.resx000066400000000000000000000150671446222606700274420ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Transparens Blå Rød Lysintensitet Grøn Farvetone OK Mætning Vælg farve Afbryd quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.de.resx000066400000000000000000000147451446222606700274500ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen Blau Helligkeit Sättigung Rot Farbton Grün Transparenz Farbe wählen quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.fi.resx000066400000000000000000000143311446222606700274450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Sininen Punainen Kirkkaus Vihreä Saturaatio Valitse väri quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.fr.resx000066400000000000000000000144661446222606700274670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bleu Rouge Luminosité Vert Nuance Sélectionner la couleur Annuler quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.it.resx000066400000000000000000000147541446222606700274740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella Blu Luminosità Saturazione Rosso Tonalità Verde Trasparenza Seleziona colore quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.lt.resx000066400000000000000000000206251446222606700274710ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 95, 360 241, 18 95, 336 241, 18 95, 312 241, 18 95, 280 241, 18 95, 256 241, 18 95, 232 241, 18 Atšaukti Gerai Mėlyna Ryškumas Prisotinimas Raudona Atspalvis Žalia 95, 384 241, 18 84, 18 Permatomumas Pasirinkti spalvą quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.no.resx000066400000000000000000000150571446222606700274710ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Alfa Blå Rød Lysintensitet Grønn Fargetone OK Metning Velg farge Avbryt quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.resx000066400000000000000000001104311446222606700270460ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 8, 8 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this MiddleLeft $this hsbSaturation 40, 23 328, 70 256, 18 hsbRed pnlBrightness Top, Right 256, 18 Alpha Top, Right hsbBlue $this System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Microsoft Sans Serif, 8.25pt 256, 18 MiddleLeft Top, Right $this $this System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 23 lblAlpha btnOK 287, 8 45 58 40, 23 8, 280 40, 23 8, 360 1 Microsoft Sans Serif, 8.25pt 12 72, 18 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblBrightness 72, 18 $this 344, 336 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 MiddleLeft 48 Microsoft Sans Serif, 8.25pt Blue System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 52 Top, Left, Right 15 18 Microsoft Sans Serif, 8.25pt MiddleLeft ColorChooser 20 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 label8 8, 256 8, 336 $this System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Microsoft Sans Serif, 8.25pt 40 54 24, 216 72, 18 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Red MiddleLeft 72, 18 pnlColor MiddleLeft System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 49 $this lblHue 57 240, 8 Microsoft Sans Serif, 8.25pt 328, 40 8 72, 18 Brightness Top, Right 80, 384 $this Microsoft Sans Serif, 8.25pt 51 40, 23 hsbAlpha Microsoft Sans Serif, 8.25pt System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 MiddleLeft $this CenterParent $this 9 80, 280 2 80, 336 8, 384 False Label5 24 Label1 Top, Right 53 Top, Left, Right MiddleLeft 7 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 19 Top, Left, Right System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblGreen 39 $this 37 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Microsoft Sans Serif, 8.25pt 80, 312 16 40, 23 $this hsbHue MiddleLeft pnlSelectedColor 24, 216 72, 18 $this Top, Left, Right 11 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 36 6 Top, Left, Right 38 21 35 Label6 Microsoft Sans Serif, 8.25pt Label7 40 344, 384 5 26 13 64, 26 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Label3 344, 280 Top, Right $this System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 72, 18 False 224, 216 $this 256, 18 False 10 25 $this 344, 232 Top, Right 344, 312 0 80, 360 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Microsoft Sans Serif, 8.25pt Top, Right $this 41 8, 232 8, 312 lblRed False 44 256, 18 Top, Right Top, Left, Right 256, 18 Green 80, 256 14 hsbGreen 344, 360 344, 256 Hue OK $this 80, 232 64, 24 Microsoft Sans Serif, 8.25pt 3 4 btnCancel $this Saturation 55 22 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 pnlAlpha $this $this 34 Label2 $this MiddleLeft Top, Left, Right Microsoft Sans Serif, 8.25pt 56 50 Microsoft Sans Serif, 8.25pt System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 400, 428 Microsoft Sans Serif, 8.25pt 64, 24 256, 18 40, 23 Select color 46 lblBlue 328, 8 40, 23 MiddleLeft $this 47 17 Cancel $this System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 MiddleLeft 33 Microsoft Sans Serif, 8.25pt lblSaturation MiddleLeft hsbBrightness 32 5, 13 43 MiddleLeft True quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.ru.resx000066400000000000000000000150461446222606700275010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена Синий Яркость Насыщение Красный Тон Зелёный Прозрачность Выберите цвет quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/ColorChooser.sv.resx000066400000000000000000000147271446222606700275100ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Blå Ljushet Mättnad Röd Nyans Grön Transparens Välj färg quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.Designer.cs000066400000000000000000000062171446222606700300150ustar00rootroot00000000000000namespace QuickRoute.Controls.Forms { partial class LapTimeForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LapTimeForm)); this.cancel = new System.Windows.Forms.Button(); this.ok = new System.Windows.Forms.Button(); this.timeLabel = new System.Windows.Forms.Label(); this.timeTextbox = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.Cancel_Click); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.OK_Click); // // timeLabel // resources.ApplyResources(this.timeLabel, "timeLabel"); this.timeLabel.Name = "timeLabel"; // // timeTextbox // resources.ApplyResources(this.timeTextbox, "timeTextbox"); this.timeTextbox.Name = "timeTextbox"; this.timeTextbox.Enter += new System.EventHandler(this.TimeTextbox_Enter); this.timeTextbox.Leave += new System.EventHandler(this.TimeTextbox_Leave); // // LapTimeForm // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.timeTextbox); this.Controls.Add(this.timeLabel); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "LapTimeForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button cancel; private System.Windows.Forms.Button ok; private System.Windows.Forms.Label timeLabel; private System.Windows.Forms.TextBox timeTextbox; } }quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.cs000066400000000000000000000045271446222606700262600ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.Controls.Forms { public partial class LapTimeForm : Form { private DateTime initialTime; public LapTimeForm() { InitializeComponent(); } public DateTime InitialTime { get { return initialTime; } set { initialTime = value; timeTextbox.Text = FormatTime(initialTime.ToLocalTime(), false); } } public Session Session { get; set; } public DateTime Time { get { var timeString = timeTextbox.Text; var timeSeparator = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator; timeString = timeString.Replace(".", timeSeparator); timeString = timeString.Replace(",", timeSeparator); timeString = timeString.Replace(":", timeSeparator); TimeSpan ts; if (TimeSpan.TryParse(timeString, out ts)) { var dt = initialTime.Date.AddSeconds(ts.TotalSeconds); dt = new DateTime(dt.Ticks, DateTimeKind.Local).ToUniversalTime(); return dt; } DateTime t; if (DateTime.TryParse(timeString, out t)) { return t.ToUniversalTime(); } return initialTime.ToUniversalTime(); } } private string FormatTime(DateTime time, bool includeDate) { var firstPart = includeDate ? time.ToString("G") : time.ToLongTimeString(); return firstPart + time.ToString(".fffffff").TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray()); } private void OK_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void Cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void TimeTextbox_Leave(object sender, EventArgs e) { timeTextbox.Text = FormatTime(Time.ToLocalTime(), Time.Date != initialTime.Date); } private void TimeTextbox_Enter(object sender, EventArgs e) { timeTextbox.SelectAll(); } } }quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.da.resx000066400000000000000000000140411446222606700272070ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd OK &Tid: Tilføj mellemtid quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.de.resx000066400000000000000000000140541446222606700272170ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen &Zeit: Zwischenzeit hinzufügen OK quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.fi.resx000066400000000000000000000144021446222606700272220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta &Aika: Ajan &tyyppi: Kellonaika Aika startista Lisää väliaika quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.fr.resx000066400000000000000000000137411446222606700272400ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler &Temps : Ajouter temps intermédiaires quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.it.resx000066400000000000000000000145411446222606700272440ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella OK &Tempo: &Formato ora: Ora del giorno Tempo dall'inizio Aggiungi tempi parziali quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.lt.resx000066400000000000000000000145551446222606700272540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Atšaukti Gerai &Laikas: Laiko &tipas: Astronominis laikas Laikas nuo starto Pridėti tarpinius laikus quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.no.resx000066400000000000000000000140421446222606700272400ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt &Tid: Legg til mellomtid OK quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.resx000066400000000000000000000257411446222606700266350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Left 96, 57 75, 23 5 Cancel cancel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 Bottom, Left 15, 57 75, 23 4 OK ok System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 3 True 12, 9 33, 13 0 &Time: timeLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 Top, Left, Right 15, 25 156, 20 1 timeTextbox System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 True 6, 13 183, 92 CenterParent Add split time LapTimeForm System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.ru.resx000066400000000000000000000143351446222606700272570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 43, 13 &Время: Добавить перегон quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/LapTimeForm.sv.resx000066400000000000000000000156371446222606700272670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 25, 13 &Tid: 39, 13 2 Tidt&yp: Klockslag Tid från start 3 Lägg till mellantid quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.Designer.cs000066400000000000000000000120501446222606700302240ustar00rootroot00000000000000namespace QuickRoute.Controls.Forms { partial class RouteCutForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RouteCutForm)); this.cancel = new System.Windows.Forms.Button(); this.ok = new System.Windows.Forms.Button(); this.timeLabel = new System.Windows.Forms.Label(); this.timeTextbox = new System.Windows.Forms.TextBox(); this.cutBefore = new System.Windows.Forms.RadioButton(); this.cutAfter = new System.Windows.Forms.RadioButton(); this.SuspendLayout(); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.Cancel_Click); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.OK_Click); // // timeLabel // this.timeLabel.AccessibleDescription = null; this.timeLabel.AccessibleName = null; resources.ApplyResources(this.timeLabel, "timeLabel"); this.timeLabel.Font = null; this.timeLabel.Name = "timeLabel"; // // timeTextbox // this.timeTextbox.AccessibleDescription = null; this.timeTextbox.AccessibleName = null; resources.ApplyResources(this.timeTextbox, "timeTextbox"); this.timeTextbox.BackgroundImage = null; this.timeTextbox.Font = null; this.timeTextbox.Name = "timeTextbox"; this.timeTextbox.Leave += new System.EventHandler(this.TimeTextbox_Leave); this.timeTextbox.Enter += new System.EventHandler(this.TimeTextbox_Enter); // // cutBefore // this.cutBefore.AccessibleDescription = null; this.cutBefore.AccessibleName = null; resources.ApplyResources(this.cutBefore, "cutBefore"); this.cutBefore.BackgroundImage = null; this.cutBefore.Font = null; this.cutBefore.Name = "cutBefore"; this.cutBefore.TabStop = true; this.cutBefore.UseVisualStyleBackColor = true; // // cutAfter // this.cutAfter.AccessibleDescription = null; this.cutAfter.AccessibleName = null; resources.ApplyResources(this.cutAfter, "cutAfter"); this.cutAfter.BackgroundImage = null; this.cutAfter.Font = null; this.cutAfter.Name = "cutAfter"; this.cutAfter.TabStop = true; this.cutAfter.UseVisualStyleBackColor = true; // // RouteCutForm // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.cutAfter); this.Controls.Add(this.cutBefore); this.Controls.Add(this.timeTextbox); this.Controls.Add(this.timeLabel); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Font = null; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RouteCutForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button cancel; private System.Windows.Forms.Button ok; private System.Windows.Forms.Label timeLabel; private System.Windows.Forms.TextBox timeTextbox; private System.Windows.Forms.RadioButton cutBefore; private System.Windows.Forms.RadioButton cutAfter; } }quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.cs000066400000000000000000000051251446222606700264720ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.Controls.Forms { public partial class RouteCutForm : Form { private DateTime initialTime; public RouteCutForm() { InitializeComponent(); } public DateTime InitialTime { get { return initialTime; } set { initialTime = value; timeTextbox.Text = FormatTime(initialTime.ToLocalTime(), false); } } public DateTime Time { get { string timeString = timeTextbox.Text; string timeSeparator = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator; timeString = timeString.Replace(".", timeSeparator); timeString = timeString.Replace(",", timeSeparator); timeString = timeString.Replace(":", timeSeparator); TimeSpan ts; if (TimeSpan.TryParse(timeString, out ts)) { DateTime dt = initialTime.Date.AddSeconds(ts.TotalSeconds); dt = new DateTime(dt.Ticks, DateTimeKind.Local).ToUniversalTime(); return dt; } DateTime t; if (DateTime.TryParse(timeString, out t)) { return t.ToUniversalTime(); } return initialTime.ToUniversalTime(); } } public CutType CutType { get { return (cutBefore.Checked ? CutType.Before : CutType.After); } set { cutBefore.Checked = (value == CutType.Before); cutAfter.Checked = (value == CutType.After); } } private static string FormatTime(DateTime time, bool includeDate) { var firstPart = includeDate ? time.ToString("G") : time.ToLongTimeString(); return firstPart + time.ToString(".fffffff").TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray()); } private void OK_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void Cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void TimeTextbox_Leave(object sender, EventArgs e) { timeTextbox.Text = FormatTime(Time.ToLocalTime(), Time.Date != initialTime.Date); } private void TimeTextbox_Enter(object sender, EventArgs e) { timeTextbox.SelectAll(); } } }quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.da.resx000066400000000000000000000143541446222606700274350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd Slet rute &efter Slet rute &før &Tid: Beskær rute OK quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.de.resx000066400000000000000000000152131446222606700274340ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen 28, 13 &Zeit: 141, 17 Strecke da&nach löschen 132, 17 Strecke da&vor löschen Strecke abschneiden quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.fi.resx000066400000000000000000000142761446222606700274520ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta Poista reitti pisteen &jälkeen Poista reitti pistettä &ennen &Aika: Leikkaa reitti quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.fr.resx000066400000000000000000000142631446222606700274570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler &Heure : Effacer la trace a&vant Effacer la trace &après Couper la trace quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.it.resx000066400000000000000000000154341446222606700274650ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella 43, 13 &Tempo: 166, 17 Elimina il tracciato &precedente 165, 17 Elimina il tracciato &successivo 197, 140 Estrai il percorso selezionato quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.lt.resx000066400000000000000000000153461446222606700274720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Atšaukti Gerai 41, 13 &Laikas: 122, 17 Ištrinti prabėgimus &iki 124, 17 Ištrinti prabėgimus &po Iškirpti prabėgimus quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.no.resx000066400000000000000000000152211446222606700274570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 25, 13 &Tid: 154, 17 Slett ruten &før dette punktet 163, 17 Slett ruten &etter dette punktet Beskjær rute quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.resx000066400000000000000000000316031446222606700270460ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 timeLabel 12, 9 $this ok 156, 20 4 15, 51 $this 3 Cancel 183, 140 1 System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 15, 25 True 107, 17 2 3 timeTextbox System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 5 $this System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 6, 13 $this System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116, 17 Delete route &after 1 True Delete route &before Bottom, Left 15, 74 75, 23 75, 23 &Time: Bottom, Left System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 96, 105 Crop route cutBefore 33, 13 cutAfter cancel CenterParent 15, 105 0 $this 4 0 OK RouteCutForm 2 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True True quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.ru.resx000066400000000000000000000152321446222606700274730ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 43, 13 &Время: 86, 17 Удалить &до 104, 17 Удалить &после Обрезать путь quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/RouteCutForm.sv.resx000066400000000000000000000152121446222606700274730ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 25, 13 &Tid: 157, 17 Ta bort rutten &före denna tid 160, 17 Ta bort rutten &efter denna tid Klipp rutt quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.Designer.cs000066400000000000000000000077241446222606700275240ustar00rootroot00000000000000namespace QuickRoute.Controls.Forms { partial class UrlDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UrlDialog)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.uiInformation = new System.Windows.Forms.Label(); this.urls = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // uiInformation // this.uiInformation.AccessibleDescription = null; this.uiInformation.AccessibleName = null; resources.ApplyResources(this.uiInformation, "uiInformation"); this.uiInformation.BackColor = System.Drawing.SystemColors.Info; this.uiInformation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.uiInformation.Font = null; this.uiInformation.Name = "uiInformation"; // // urls // this.urls.AcceptsReturn = true; this.urls.AccessibleDescription = null; this.urls.AccessibleName = null; resources.ApplyResources(this.urls, "urls"); this.urls.BackgroundImage = null; this.urls.Font = null; this.urls.Name = "urls"; this.urls.Enter += new System.EventHandler(this.urls_Enter); // // UrlDialog // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.urls); this.Controls.Add(this.uiInformation); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "UrlDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.UrlDialog_Load); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.Label uiInformation; private System.Windows.Forms.TextBox urls; } }quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.cs000066400000000000000000000024451446222606700257600ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace QuickRoute.Controls.Forms { public partial class UrlDialog : Form { public UrlDialog() { InitializeComponent(); } public List Urls { get { var list = new List(); list.AddRange(urls.Text.Split(new [] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries)); for(var i = 0; i < list.Count; i++) { if (!list[i].StartsWith("http") && !list[i].StartsWith("ftp")) list[i] = "http://" + list[i]; } return list; } set { urls.Text = string.Join("\r\n", value.ToArray()).Trim(new [] { '\r', '\n'} ); } } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void urls_Enter(object sender, EventArgs e) { urls.SelectAll(); } private void UrlDialog_Load(object sender, EventArgs e) { urls.Focus(); } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.da.resx000066400000000000000000000141331446222606700267140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd Skriv webadressen på de filer du vil tilføje - en pr. linje Tilføj webadresser OK quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.de.resx000066400000000000000000000141651446222606700267250ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen Gib die Internetadressen der Dateien ein, die du hinzufügen möchtest. Eine pro Zeile. URLs hinzufügen OK quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.fi.resx000066400000000000000000000140401446222606700267230ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta Kirjoita lisättävien tiedostojen nettiosoitteet, jokainen omalle rivilleen. Lisää nettiosoitteita quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.fr.resx000066400000000000000000000140231446222606700267350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler Saisir les adresses des fichiers que vous souhaitez ajouter, une par ligne. Ajouter url quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.it.resx000066400000000000000000000140301446222606700267400ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella Digita l'indirizzo web del file che si desidera aggiungere, uno per riga. Aggiungi indirizzo quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.lt.resx000066400000000000000000000142101446222606700267430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Atšaukti Įveskite internetinį adresą failų, kuriuos norėtumėte pridėti, po vieną eilutėje. Pridėti internetinį adresą Gerai quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.no.resx000066400000000000000000000141421446222606700267440ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Skriv inn webadressen til filene du vil legge til – en pr. linje. Legg til webadresser OK quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.resx000066400000000000000000000270501446222606700263330ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 75, 23 $this ok 2 Cancel System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 609, 96 Type the web addresses of the files you would like to add, one per line. Top, Left, Right True Add urls System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Bottom, Left, Right 12, 52 NoControl 0 3 6, 13 $this 609, 40 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 482, 167 633, 189 Bottom, Right 75, 23 $this 3 Bottom, Right 1 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 uiInformation 546, 154 0 CenterParent 465, 154 urls 2 cancel 12, 9 OK UrlDialog 4, 4, 4, 4 1 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this True quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.ru.resx000066400000000000000000000141131446222606700267540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена Укажите URL файлов которые вы хотите добавить (по одному в строке). Добавьте URL quickroute-linux-upstream-2.5/QuickRoute.Controls/Forms/UrlDialog.sv.resx000066400000000000000000000140171446222606700267610ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Skriv in webbadresserna för de filer du vill lägga till, en per rad. Lägg till url:er quickroute-linux-upstream-2.5/QuickRoute.Controls/GradientComboBox.cs000066400000000000000000000031721446222606700261740ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.Drawing; namespace QuickRoute.Controls { public class GradientComboBox : ComboBox { public GradientComboBox() { DrawMode = DrawMode.OwnerDrawFixed; } protected override void OnDrawItem(DrawItemEventArgs ea) { if (ea.Index != -1) { GradientListItem item = (GradientListItem)Items[ea.Index]; Brush b = new SolidBrush(BackColor); ea.Graphics.FillRectangle(b, ea.Bounds); b.Dispose(); Bitmap backBufferBitmap = new Bitmap(ea.Bounds.Width, ea.Bounds.Height); Graphics backBufferGraphics = Graphics.FromImage(backBufferBitmap); item.Gradient.Draw(backBufferGraphics, new Rectangle(0,0,backBufferBitmap.Width,backBufferBitmap.Height), 0, 1, Gradient.Direction.Horizontal); ea.Graphics.DrawImage(backBufferBitmap, ea.Bounds.Location); backBufferBitmap.Dispose(); backBufferGraphics.Dispose(); ea.DrawFocusRectangle(); base.OnDrawItem(ea); } } } public class GradientListItem { private Gradient gradient; private string fileName; public GradientListItem(Gradient gradient, string fileName) { this.gradient = gradient; this.fileName = fileName; } public Gradient Gradient { get { return gradient; } set { gradient = value; } } public string FileName { get { return fileName; } set { fileName = value; } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/GradientListBox.cs000066400000000000000000000046031446222606700260500ustar00rootroot00000000000000using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.Drawing; namespace QuickRoute.Controls { public class GradientListBox : ListBox { private int nameWidth = 100; private int namePadding = 8; public GradientListBox() { DrawMode = DrawMode.OwnerDrawFixed; this.ItemHeight = 20; } public int NameWidth { get { return nameWidth; } set { nameWidth = value; } } public int NamePadding { get { return namePadding; } set { namePadding = value; } } protected override void OnDrawItem(DrawItemEventArgs ea) { if (ea.Index != -1 && Items.Count > 0) { Gradient item = (Gradient)Items[ea.Index]; Bitmap backBufferBitmap = new Bitmap(ea.Bounds.Width, ea.Bounds.Height); Graphics backBufferGraphics = Graphics.FromImage(backBufferBitmap); backBufferGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; Brush b = new SolidBrush(BackColor); ea.Graphics.FillRectangle(b, ea.Bounds); b.Dispose(); ea.DrawBackground(); Rectangle rect = new Rectangle(4, 4, backBufferBitmap.Width - this.NameWidth-4, backBufferBitmap.Height-8); Gradient.FillCheckerboardRectangle(backBufferGraphics, rect, 3); item.Draw(backBufferGraphics, rect, 0, 1, Gradient.Direction.Horizontal); backBufferGraphics.DrawRectangle(Pens.Black, new Rectangle(3, 3, backBufferBitmap.Width - this.NameWidth - 3, backBufferBitmap.Height - 7)); Color textColor; if ((ea.State & DrawItemState.Selected).Equals(DrawItemState.Selected)) { textColor = SystemColors.HighlightText; } else { textColor = this.ForeColor; } Size textSize = TextRenderer.MeasureText(backBufferGraphics, item.Name, this.Font); Point textLocation = new Point(backBufferBitmap.Width - this.NameWidth + this.NamePadding, (ea.Bounds.Height - textSize.Height) / 2); TextRenderer.DrawText(backBufferGraphics, item.Name, this.Font, textLocation, textColor); ea.Graphics.DrawImage(backBufferBitmap, ea.Bounds.Location); backBufferBitmap.Dispose(); backBufferGraphics.Dispose(); ea.DrawFocusRectangle(); base.OnDrawItem(ea); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/000077500000000000000000000000001446222606700242145ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/AdjustRoute.cur000066400000000000000000000005061446222606700272010ustar00rootroot00000000000000 0( @pC fv~~|xp`@w??|?8s`??quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/Cut.cur000066400000000000000000000003061446222606700254610ustar00rootroot00000000000000( ` 00 `@??quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/Lap.cur000066400000000000000000000005061446222606700254440ustar00rootroot00000000000000 0( @1@@   C@@f1v~~|xp`@??>?<|>?8~????quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/MoveMap.cur000066400000000000000000000003061446222606700262720ustar00rootroot00000000000000( ?wg quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/ZoomIn.cur000066400000000000000000000005061446222606700261430ustar00rootroot00000000000000 0( @?9y````y9??quickroute-linux-upstream-2.5/QuickRoute.Controls/Graphics/ZoomOut.cur000066400000000000000000000005061446222606700263440ustar00rootroot00000000000000 0( @??````???quickroute-linux-upstream-2.5/QuickRoute.Controls/LineGraphControl.Designer.cs000066400000000000000000000031731446222606700277600ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class LineGraphControl { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.SuspendLayout(); // // LineGraphControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Name = "LineGraphControl"; this.Paint += new System.Windows.Forms.PaintEventHandler(this.LineGraphControl_Paint); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.LineGraphControl_MouseMove); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.LineGraphControl_MouseDown); this.Resize += new System.EventHandler(this.LineGraphControl_Resize); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.LineGraphControl_MouseUp); this.ResumeLayout(false); } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.Controls/LineGraphControl.cs000066400000000000000000000146631446222606700262270ustar00rootroot00000000000000using System; using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.Drawing; namespace QuickRoute.Controls { public partial class LineGraphControl : UserControl { private LineGraph graph = new LineGraph(); private Bitmap graphBitmap; private Bitmap hoverBitmap; private double? hoverXValue; private readonly Pen haircrossPen = new Pen(Color.FromArgb(128, Color.Red), 1); private readonly DiscAndCircleDrawer haircrossMarker = new DiscAndCircleDrawer(Color.FromArgb(192, Color.Red), 4, Color.FromArgb(192, Color.Black), 6, 2); public event EventHandler GraphMouseHover; public event EventHandler GraphMouseDown; public event EventHandler GraphMouseUp; public LineGraphControl() { InitializeComponent(); } ~LineGraphControl() { haircrossPen.Dispose(); if (graphBitmap != null) graphBitmap.Dispose(); if (hoverBitmap != null) hoverBitmap.Dispose(); } public LineGraph Graph { get { return graph; } set { graph = value; } } public double? HoverXValue { get { return hoverXValue; } set { hoverXValue = value; Draw(); } } private void LineGraphControl_Paint(object sender, PaintEventArgs e) { Draw(e.Graphics); } private void LineGraphControl_Resize(object sender, System.EventArgs e) { Create(); Draw(); } public void Create() { if (graphBitmap != null) graphBitmap.Dispose(); if (hoverBitmap != null) hoverBitmap.Dispose(); if (Width > 0 && Height > 0) { graphBitmap = new Bitmap(Width, Height); hoverBitmap = new Bitmap(Width, Height); Graphics g = Graphics.FromImage(graphBitmap); g.Clear(BackColor); graph.Draw(g, new RectangleF(0, 0, Width, Height)); g.Dispose(); } else { graphBitmap = null; hoverBitmap = null; } } public void Draw(Graphics g) { if (graphBitmap == null) return; if (hoverXValue.HasValue && hoverXValue.Value >= graph.XAxisMinValue && hoverXValue.Value <= graph.XAxisMaxValue) { Graphics hoverGraphics = Graphics.FromImage(hoverBitmap); hoverGraphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; hoverGraphics.Clear(BackColor); hoverGraphics.DrawImage(graphBitmap, 0, 0); PointF centerF = new PointF(graph.ValueToX(hoverXValue.Value), graph.ValueToY(graph.GetYValueFromXValue(hoverXValue.Value))); Point center = new Point((int)centerF.X, (int)centerF.Y); center.Y = Math.Max(graph.GraphDrawingRectangle.Top, Math.Min(graph.GraphDrawingRectangle.Bottom, center.Y)); SizeF size = new SizeF(10, 10); RectangleF rect = new RectangleF(center.X - size.Width / 2, center.Y - size.Height / 2, size.Width, size.Height); hoverGraphics.DrawLine(haircrossPen, center, new Point(center.X, graph.GraphDrawingRectangle.Bottom)); hoverGraphics.DrawLine(haircrossPen, new Point(graph.GraphDrawingRectangle.Left, center.Y), new Point(graph.GraphDrawingRectangle.Right, center.Y)); haircrossMarker.Draw(hoverGraphics, new PointD(center.X, center.Y), 1); g.DrawImage(hoverBitmap, 0, 0); hoverGraphics.Dispose(); } else { g.DrawImage(graphBitmap, new Point(0, 0)); } } public void Draw() { Draw(CreateGraphics()); } private ParameterizedLocation GetParameterizedLocationFromMouseLocation(int x) { double? xValue = graph.XToValue(x); if (xValue < graph.XAxisMinValue || xValue > graph.XAxisMaxValue) xValue = null; ParameterizedLocation pl = null; if (xValue != null) { DateTime time; switch (graph.XAxisAttribute) { case DomainAttribute.TimeOfDay: time = new DateTime((long)(xValue.Value * TimeSpan.TicksPerSecond)).ToUniversalTime(); pl = graph.Session.Route.GetParameterizedLocationFromTime(time, true); break; case DomainAttribute.ElapsedTime: time = graph.Session.Route.FirstWaypoint.Time.AddTicks((long)xValue.Value * TimeSpan.TicksPerSecond); pl = graph.Session.Route.GetParameterizedLocationFromTime(time); break; case DomainAttribute.Distance: pl = graph.Session.Route.GetParameterizedLocationFromDistance(xValue.Value); break; } } return pl; } private void LineGraphControl_MouseMove(object sender, MouseEventArgs e) { if (graph.Session == null) return; hoverXValue = graph.XToValue(e.X); var pl = GetParameterizedLocationFromMouseLocation(e.X); if (pl == null || (hoverXValue.HasValue && (hoverXValue.Value < graph.XAxisMinValue || hoverXValue.Value > graph.XAxisMaxValue))) hoverXValue = null; Draw(); if (GraphMouseHover != null) GraphMouseHover(this, new Canvas.RouteMouseHoverEventArgs(pl, hoverXValue != null)); } private void LineGraphControl_MouseDown(object sender, MouseEventArgs e) { if (graph.Session == null) return; hoverXValue = graph.XToValue(e.X); if (hoverXValue.HasValue && hoverXValue.Value >= graph.XAxisMinValue && hoverXValue.Value <= graph.XAxisMaxValue) { var pl = GetParameterizedLocationFromMouseLocation(e.X); if (pl == null) hoverXValue = null; // prevent marker hovering Draw(); if (GraphMouseDown != null) GraphMouseDown(this, new Canvas.RouteMouseHoverEventArgs(pl, hoverXValue != null)); } } private void LineGraphControl_MouseUp(object sender, MouseEventArgs e) { if (graph.Session == null) return; hoverXValue = graph.XToValue(e.X); if (hoverXValue.HasValue && hoverXValue.Value >= graph.XAxisMinValue && hoverXValue.Value <= graph.XAxisMaxValue) { var pl = GetParameterizedLocationFromMouseLocation(e.X); if (pl == null) hoverXValue = null; // prevent marker hovering Draw(); if (GraphMouseUp != null) GraphMouseUp(this, new Canvas.RouteMouseHoverEventArgs(pl, hoverXValue != null)); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/LineGraphControl.resx000066400000000000000000000132661446222606700266010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.Controls/Properties/000077500000000000000000000000001446222606700246105ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Controls/Properties/AssemblyInfo.cs000066400000000000000000000026351446222606700275400ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.Controls")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.Controls")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("c4390ac1-7f58-4b3b-871e-6d8399c42df4")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyVersion("2.4")] [assembly: AssemblyFileVersion("2.4")] quickroute-linux-upstream-2.5/QuickRoute.Controls/QuickRoute.Controls.csproj000066400000000000000000000354001446222606700275750ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {D5755345-EE87-4B08-95D7-55DDDB331CFB} Library Properties QuickRoute.Controls QuickRoute.Controls v4.5 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt 4 false bin\x86\Release\ TRACE true pdbonly x86 prompt 4 UserControl Canvas.cs UserControl ColorRangeIntervalSlider.cs Component UserControl FileSelectorControl.cs Form Form LapTimeForm.cs Form RouteCutForm.cs Form UrlDialog.cs Component Component UserControl LineGraphControl.cs UserControl ScrollableLabel.cs Component Component Component Component UserControl ZoomWindow.cs Canvas.cs Designer ColorRangeIntervalSlider.cs Designer FileSelectorControl.cs FileSelectorControl.cs Designer FileSelectorControl.cs Designer FileSelectorControl.cs Designer FileSelectorControl.cs Designer FileSelectorControl.cs Designer FileSelectorControl.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer LapTimeForm.cs Designer LapTimeForm.cs Designer LapTimeForm.cs Designer LapTimeForm.cs Designer LapTimeForm.cs Designer LapTimeForm.cs Designer RouteCutForm.cs Designer RouteCutForm.cs Designer RouteCutForm.cs Designer RouteCutForm.cs Designer RouteCutForm.cs Designer RouteCutForm.cs Designer UrlDialog.cs Designer UrlDialog.cs Designer UrlDialog.cs Designer UrlDialog.cs Designer UrlDialog.cs Designer UrlDialog.cs Designer LineGraphControl.cs Designer ScrollableLabel.cs Designer {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61} QuickRoute.BusinessEntities {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E} QuickRoute.Common {2854A1FB-52F7-4197-A24E-E9977FD21563} QuickRoute.Resources Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer quickroute-linux-upstream-2.5/QuickRoute.Controls/ScrollableLabel.Designer.cs000066400000000000000000000041721446222606700275700ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class ScrollableLabel { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.scrollbar = new System.Windows.Forms.VScrollBar(); this.SuspendLayout(); // // scrollbar // this.scrollbar.Dock = System.Windows.Forms.DockStyle.Right; this.scrollbar.Location = new System.Drawing.Point(590, 0); this.scrollbar.Name = "scrollbar"; this.scrollbar.Size = new System.Drawing.Size(19, 59); this.scrollbar.TabIndex = 0; this.scrollbar.ValueChanged += new System.EventHandler(this.scrollbar_ValueChanged); this.scrollbar.Scroll += new System.Windows.Forms.ScrollEventHandler(this.scrollbar_Scroll); // // ScrollableLabel // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.scrollbar); this.Name = "ScrollableLabel"; this.Size = new System.Drawing.Size(609, 59); this.LocationChanged += new System.EventHandler(this.ScrollableLabel_LocationChanged); this.Paint += new System.Windows.Forms.PaintEventHandler(this.ScrollableLabel_Paint); this.Resize += new System.EventHandler(this.ScrollableLabel_Resize); this.ResumeLayout(false); } #endregion private System.Windows.Forms.VScrollBar scrollbar; } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ScrollableLabel.cs000066400000000000000000000071711446222606700260330ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; /* MinHeight * MaxHeight * * */ namespace QuickRoute.Controls { public partial class ScrollableLabel : UserControl { private SizeF textSize; private int minHeight = 16; private int maxHeight = 32; private bool scrollbarVisible; private bool resizingNow; public ScrollableLabel() { InitializeComponent(); } public override string Text { get { return base.Text; } set { base.Text = value; MeasureText(); DrawText(); } } public override bool AutoSize { get { return base.AutoSize; } set { base.AutoSize = value; } } public int MinHeight { get { return minHeight; } set { minHeight = value; } } public int MaxHeight { get { return maxHeight; } set { maxHeight = value; } } private void DrawText() { Graphics g = CreateGraphics(); g.Clear(BackColor); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; RectangleF rect = new RectangleF( (float)Padding.Left, (float)(Padding.Top - (scrollbarVisible ? scrollbar.Value : 0)), textSize.Width, textSize.Height); Brush b = new SolidBrush(ForeColor); g.DrawString(Text, Font, b, rect); b.Dispose(); g.Dispose(); } private void MeasureText() { Graphics g = CreateGraphics(); // measure the string // without scrollbar SizeF characterSize = g.MeasureString("A", Font); SizeF textSizeWithoutScrollbar = g.MeasureString(Text, Font, Width - Padding.Horizontal); // with scrollbar SizeF textSizeWithScrollbar = g.MeasureString(Text, Font, Width - Padding.Horizontal - scrollbar.Width); // do we need to use a scrollbar? scrollbarVisible = (int)textSizeWithoutScrollbar.Height > maxHeight; if (scrollbarVisible) { textSize = textSizeWithScrollbar; } else { textSize = textSizeWithoutScrollbar; } int proposedHeight = Padding.Vertical + (int)Math.Ceiling(textSize.Height); proposedHeight = Math.Min(Math.Max(proposedHeight, minHeight), maxHeight); resizingNow = true; Height = proposedHeight; resizingNow = false; if (scrollbarVisible) { scrollbar.Maximum = (int)textSizeWithScrollbar.Height; scrollbar.LargeChange = maxHeight; scrollbar.SmallChange = (int)characterSize.Height; } g.Dispose(); scrollbar.Visible = scrollbarVisible; scrollbar.Left = Width - scrollbar.Width; scrollbar.Height = Height; } private void ScrollableLabel_Paint(object sender, PaintEventArgs e) { DrawText(); } private void ScrollableLabel_Resize(object sender, EventArgs e) { if (!resizingNow) { MeasureText(); DrawText(); } } private void scrollbar_Scroll(object sender, ScrollEventArgs e) { DrawText(); } private void scrollbar_ValueChanged(object sender, EventArgs e) { DrawText(); } private void ScrollableLabel_LocationChanged(object sender, EventArgs e) { DrawText(); } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ScrollableLabel.resx000066400000000000000000000132661446222606700264110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.Controls/ToolstripColorRangeIntervalSlider.cs000066400000000000000000000104311446222606700316250ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms.Design; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; namespace QuickRoute.Controls { [DesignerCategory("code")] [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)] public class ToolstripColorRangeIntervalSlider : ToolStripControlHost { // add events that are subscribable from the designer. public event EventHandler ColorRangeStartValueChanged; public event EventHandler ColorRangeEndValueChanged; public event EventHandler ColorRangeStartValueChanging; public event EventHandler ColorRangeEndValueChanging; public event MouseEventHandler ColorRangeClicked; public ToolstripColorRangeIntervalSlider() : base(CreateControlInstance()) { } /// /// Export a strongly typed property called colorRangeIntervalSlider - handy to prevent casting everywhere. /// public ColorRangeIntervalSlider SliderControl { get { return Control as ColorRangeIntervalSlider; } } private static Control CreateControlInstance() { ColorRangeIntervalSlider cris = new ColorRangeIntervalSlider(); cris.AutoSize = false; cris.Size = new Size(200, 24); // Add other initialization code here. return cris; } /// /// Attach to events we want to re-wrap /// /// protected override void OnSubscribeControlEvents(Control control) { base.OnSubscribeControlEvents(control); SliderControl.ColorRangeStartValueChanged += new EventHandler(ColorRangeIntervalSlider_ColorRangeStartValueChanged); SliderControl.ColorRangeEndValueChanged += new EventHandler(ColorRangeIntervalSlider_ColorRangeEndValueChanged); SliderControl.ColorRangeStartValueChanging += new EventHandler(ColorRangeIntervalSlider_ColorRangeStartValueChanging); SliderControl.ColorRangeEndValueChanging += new EventHandler(ColorRangeIntervalSlider_ColorRangeEndValueChanging); SliderControl.ColorRangeClicked += new MouseEventHandler(ColorRangeIntervalSlider_ColorRangeClicked); } /// /// Detach from events. /// /// protected override void OnUnsubscribeControlEvents(Control control) { base.OnUnsubscribeControlEvents(control); SliderControl.ColorRangeStartValueChanged -= new EventHandler(ColorRangeIntervalSlider_ColorRangeStartValueChanged); SliderControl.ColorRangeEndValueChanged -= new EventHandler(ColorRangeIntervalSlider_ColorRangeEndValueChanged); SliderControl.ColorRangeStartValueChanging -= new EventHandler(ColorRangeIntervalSlider_ColorRangeStartValueChanging); SliderControl.ColorRangeEndValueChanging -= new EventHandler(ColorRangeIntervalSlider_ColorRangeEndValueChanging); SliderControl.ColorRangeClicked -= new MouseEventHandler(ColorRangeIntervalSlider_ColorRangeClicked); } void ColorRangeIntervalSlider_ColorRangeStartValueChanged(object sender, EventArgs e) { if (this.ColorRangeStartValueChanged != null) this.ColorRangeStartValueChanged(sender, e); } void ColorRangeIntervalSlider_ColorRangeEndValueChanged(object sender, EventArgs e) { if (this.ColorRangeEndValueChanged != null) this.ColorRangeEndValueChanged(sender, e); } void ColorRangeIntervalSlider_ColorRangeStartValueChanging(object sender, EventArgs e) { if (this.ColorRangeStartValueChanging != null) this.ColorRangeStartValueChanging(sender, e); } void ColorRangeIntervalSlider_ColorRangeEndValueChanging(object sender, EventArgs e) { if (this.ColorRangeEndValueChanging != null) this.ColorRangeEndValueChanging(sender, e); } void ColorRangeIntervalSlider_ColorRangeClicked(object sender, MouseEventArgs e) { if (this.ColorRangeClicked != null) this.ColorRangeClicked(sender, e); } // set other defaults that are interesting protected override Size DefaultSize { get { return new Size(200, 24); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ToolstripCustomUpDown.cs000066400000000000000000000044221446222606700273340ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms.Design; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; namespace QuickRoute.Controls { [DesignerCategory("code")] [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)] public class ToolstripCustomUpDown : ToolStripControlHost { public ToolstripCustomUpDown() : base(CreateControlInstance()) { this.Enter += new EventHandler(ToolstripCustomUpDown_Enter); } void ToolstripCustomUpDown_Enter(object sender, EventArgs e) { CustomUpDownControl.Select(0, CustomUpDownControl.Text.Length); CustomUpDownControl.Focus(); } public CustomUpDown CustomUpDownControl { get { return Control as CustomUpDown; } } private static Control CreateControlInstance() { CustomUpDown nud = new CustomUpDown(); nud.AutoSize = false; nud.Size = new Size(40, 24); // Add other initialization code here. return nud; } /// /// Attach to events we want to re-wrap /// /// protected override void OnSubscribeControlEvents(Control control) { base.OnSubscribeControlEvents(control); CustomUpDownControl.ValueChanged += new System.EventHandler(CustomUpDownControl_ValueChanged); } /// /// Detach from events. /// /// protected override void OnUnsubscribeControlEvents(Control control) { base.OnUnsubscribeControlEvents(control); CustomUpDownControl.ValueChanged -= new System.EventHandler(CustomUpDownControl_ValueChanged); } void CustomUpDownControl_ValueChanged(object sender, EventArgs e) { if (this.ValueChanged != null) this.ValueChanged(sender, e); } // add events that are subscribable from the designer. public event EventHandler ValueChanged; // set other defaults that are interesting protected override Size DefaultSize { get { return new Size(40, 24); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ToolstripNumericUpDown.cs000066400000000000000000000046701446222606700274710ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms.Design; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; namespace QuickRoute.Controls { [DesignerCategory("code")] [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)] public class ToolstripNumericUpDown : ToolStripControlHost { public ToolstripNumericUpDown() : base(CreateControlInstance()) { this.Enter += new EventHandler(ToolstripNumericUpDown_Enter); } void ToolstripNumericUpDown_Enter(object sender, EventArgs e) { NumericUpDownControl.Select(0, NumericUpDownControl.Text.Length); NumericUpDownControl.Focus(); } /// /// Export a strongly typed property called colorRangeIntervalSlider - handy to prevent casting everywhere. /// public NumericUpDown NumericUpDownControl { get { return Control as NumericUpDown; } } private static Control CreateControlInstance() { NumericUpDown nud = new NumericUpDown(); nud.AutoSize = false; nud.Size = new Size(40, 24); // Add other initialization code here. return nud; } /// /// Attach to events we want to re-wrap /// /// protected override void OnSubscribeControlEvents(Control control) { base.OnSubscribeControlEvents(control); NumericUpDownControl.ValueChanged += new System.EventHandler(NumericUpDownControl_ValueChanged); } /// /// Detach from events. /// /// protected override void OnUnsubscribeControlEvents(Control control) { base.OnUnsubscribeControlEvents(control); NumericUpDownControl.ValueChanged -= new System.EventHandler(NumericUpDownControl_ValueChanged); } void NumericUpDownControl_ValueChanged(object sender, EventArgs e) { if (this.ValueChanged != null) this.ValueChanged(sender, e); } // add events that are subscribable from the designer. public event EventHandler ValueChanged; // set other defaults that are interesting protected override Size DefaultSize { get { return new Size(40, 24); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ToolstripTrackBar.cs000066400000000000000000000050261446222606700264170ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms.Design; using System.ComponentModel; using System.Windows.Forms; using System.Drawing; namespace QuickRoute.Controls { [DesignerCategory("code")] [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip | ToolStripItemDesignerAvailability.StatusStrip)] public class ToolstripTrackBar : ToolStripControlHost { public ToolstripTrackBar() : base(CreateControlInstance()) { } /// /// Export a strongly typed property called colorRangeIntervalSlider - handy to prevent casting everywhere. /// public TrackBar TrackBarControl { get { return Control as TrackBar; } } private static Control CreateControlInstance() { TrackBar tb = new TrackBar(); tb.AutoSize = false; tb.Size = new Size(60, 24); // Add other initialization code here. return tb; } /// /// Attach to events we want to re-wrap /// /// protected override void OnSubscribeControlEvents(Control control) { base.OnSubscribeControlEvents(control); TrackBarControl.ValueChanged += new System.EventHandler(TrackBarControl_ValueChanged); TrackBarControl.MouseDown += new System.Windows.Forms.MouseEventHandler(TrackBarControl_MouseDown); } /// /// Detach from events. /// /// protected override void OnUnsubscribeControlEvents(Control control) { base.OnUnsubscribeControlEvents(control); TrackBarControl.ValueChanged -= new System.EventHandler(TrackBarControl_ValueChanged); TrackBarControl.MouseDown -= new System.Windows.Forms.MouseEventHandler(TrackBarControl_MouseDown); } void TrackBarControl_ValueChanged(object sender, EventArgs e) { if (this.ValueChanged != null) this.ValueChanged(sender, e); } void TrackBarControl_MouseDown(object sender, MouseEventArgs e) { if (this.MouseDown != null) this.MouseDown(sender, e); } // add events that are subscribable from the designer. public event EventHandler ValueChanged; public new event MouseEventHandler MouseDown; // set other defaults that are interesting protected override Size DefaultSize { get { return new Size(60, 24); } } } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ZoomWindow.Designer.cs000066400000000000000000000017721446222606700266650ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class ZoomWindow { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.Controls/ZoomWindow.cs000066400000000000000000000022211446222606700251140ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; namespace QuickRoute.Controls { public partial class ZoomWindow : UserControl { private PointD center; private double zoom = 1; public PointD Center { get { return center; } set { center = value; } } public double Zoom { get { return zoom; } set { zoom = value; } } public ZoomWindow() { InitializeComponent(); } public void Draw(Document document) { Image image = document.Map.Image; Graphics g = this.CreateGraphics(); RectangleF destRect = new RectangleF(0F, 0F, (float)this.Width, (float)this.Height); RectangleF srcRect = new RectangleF( (float)(center.X - this.Width / zoom / 2), (float)(center.Y - this.Height / zoom / 2), (float)(this.Width / zoom), (float)(this.Height / zoom)); g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel); } } } quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/000077500000000000000000000000001446222606700242215ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/GradientEditorControl.Designer.cs000066400000000000000000000125101446222606700325530ustar00rootroot00000000000000namespace QuickRoute.PropertyControls { partial class GradientEditorControl { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.uiInformation = new System.Windows.Forms.Label(); this.gradientNameTextbox = new System.Windows.Forms.TextBox(); this.gradientNameLabel = new System.Windows.Forms.Label(); this.gradientPanel = new System.Windows.Forms.Panel(); this.SuspendLayout(); // // uiInformation // this.uiInformation.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.uiInformation.BackColor = System.Drawing.SystemColors.Info; this.uiInformation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.uiInformation.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.uiInformation.Location = new System.Drawing.Point(0, 189); this.uiInformation.Name = "uiInformation"; this.uiInformation.Padding = new System.Windows.Forms.Padding(4); this.uiInformation.Size = new System.Drawing.Size(297, 63); this.uiInformation.TabIndex = 7; this.uiInformation.Text = "Click anywhere in the gradient area to add a color marker. Drag a color marker to" + " move its position. Double click a color marker to change its color. Right-click" + " a marker to delete it."; // // gradientNameTextbox // this.gradientNameTextbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gradientNameTextbox.Location = new System.Drawing.Point(0, 16); this.gradientNameTextbox.Name = "gradientNameTextbox"; this.gradientNameTextbox.Size = new System.Drawing.Size(297, 20); this.gradientNameTextbox.TabIndex = 5; this.gradientNameTextbox.TextChanged += new System.EventHandler(gradientNameTextbox_TextChanged); this.gradientNameTextbox.Enter += new System.EventHandler(gradientNameTextbox_Enter); // // gradientNameLabel // this.gradientNameLabel.AutoSize = true; this.gradientNameLabel.ImeMode = System.Windows.Forms.ImeMode.NoControl; this.gradientNameLabel.Location = new System.Drawing.Point(-3, 0); this.gradientNameLabel.Name = "gradientNameLabel"; this.gradientNameLabel.Size = new System.Drawing.Size(38, 13); this.gradientNameLabel.TabIndex = 4; this.gradientNameLabel.Text = "&Name:"; // // gradientPanel // this.gradientPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gradientPanel.Location = new System.Drawing.Point(0, 59); this.gradientPanel.Name = "gradientPanel"; this.gradientPanel.Size = new System.Drawing.Size(297, 68); this.gradientPanel.TabIndex = 6; this.gradientPanel.Resize += new System.EventHandler(gradientPanel_Resize); this.gradientPanel.Paint += new System.Windows.Forms.PaintEventHandler(gradientPanel_Paint); this.gradientPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(gradientPanel_MouseMove); this.gradientPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(gradientPanel_MouseDown); this.gradientPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(gradientPanel_MouseUp); this.gradientPanel.MouseLeave += new System.EventHandler(gradientPanel_MouseLeave); this.gradientPanel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(gradientPanel_MouseDoubleClick); // // GradientEditorControl // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.uiInformation); this.Controls.Add(this.gradientNameTextbox); this.Controls.Add(this.gradientNameLabel); this.Controls.Add(this.gradientPanel); this.Name = "GradientEditorControl"; this.Size = new System.Drawing.Size(297, 252); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label uiInformation; private System.Windows.Forms.TextBox gradientNameTextbox; private System.Windows.Forms.Label gradientNameLabel; private System.Windows.Forms.Panel gradientPanel; } } quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/GradientEditorControl.cs000066400000000000000000000211501446222606700310140ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.Windows.Forms.Design; using QuickRoute.Controls.Forms; namespace QuickRoute.PropertyControls { public partial class GradientEditorControl : UserControl { private Padding gradientPadding = new Padding(6, 1, 6, 17); private Size colorEntryMarkerSize = new Size(11, 16); private Rectangle gradientRectangle; private GradientColorEntry activeGradientColorEntry; private bool draggingGradientColorEntryNow = false; private Bitmap gradientPanelBackBuffer; private Gradient gradient; private IWindowsFormsEditorService editorService; public Gradient Gradient { get { return gradient; } set { gradient = value; } } public GradientEditorControl(Gradient gradient, IWindowsFormsEditorService editorService) { this.gradient = gradient; this.editorService = editorService; InitializeComponent(); } #region Private methods private void CreateGradientRectangle() { gradientRectangle = new Rectangle(gradientPadding.Left, gradientPadding.Top, gradientPanel.Width - gradientPadding.Horizontal, gradientPanel.Height - gradientPadding.Vertical); } private void CreateGradientBackBuffer() { gradientPanelBackBuffer = new Bitmap(gradientPanel.Width, gradientPanel.Height); } private void DrawGradient() { Graphics graphics = Graphics.FromImage(gradientPanelBackBuffer); graphics.Clear(gradientPanel.BackColor); if (gradient != null) { Gradient.FillCheckerboardRectangle(graphics, gradientRectangle, 8); gradient.Draw(graphics, gradientRectangle, 0.0, 1.0, Gradient.Direction.Horizontal); graphics.DrawRectangle(Pens.Black, new Rectangle(gradientRectangle.Left - 1, gradientRectangle.Top - 1, gradientRectangle.Width + 2, gradientRectangle.Height + 1)); DrawColorEntryMarkers(); } graphics.Dispose(); } private void DrawColorEntryMarkers() { Graphics graphics = Graphics.FromImage(gradientPanelBackBuffer); Brush b = new SolidBrush(gradientPanel.BackColor); graphics.FillRectangle(b, new Rectangle(0, gradientRectangle.Bottom + 1, gradientPanel.Width, gradientPanel.Height - gradientRectangle.Bottom)); b.Dispose(); int x; foreach (GradientColorEntry colorEntry in gradient.ColorEntries) { if (!colorEntry.Equals(activeGradientColorEntry)) { x = gradientRectangle.Left + (int)(colorEntry.Location * gradientRectangle.Width); DrawColorEntryMarker(graphics, new Point(x, gradientRectangle.Bottom + 1), colorEntryMarkerSize, colorEntry.Color, Color.Black); } } if (activeGradientColorEntry != null) { x = gradientRectangle.Left + (int)(activeGradientColorEntry.Location * gradientRectangle.Width); DrawColorEntryMarker(graphics, new Point(x, gradientRectangle.Bottom + 1), colorEntryMarkerSize, activeGradientColorEntry.Color, Color.Blue); } graphics.Dispose(); } private void CopyBackBufferToScreen() { // copy back buffer to screen gradientPanel.CreateGraphics().DrawImageUnscaled(gradientPanelBackBuffer, 0, 0); } private void DrawColorEntryMarker(Graphics graphics, Point point, Size size, Color color, Color borderColor) { Point[] markerPoints = new Point[5]; markerPoints[0] = new Point(point.X, point.Y); markerPoints[1] = new Point(point.X + size.Width / 2, point.Y + size.Width / 2); markerPoints[2] = new Point(point.X + size.Width / 2, point.Y + size.Height - 1); markerPoints[3] = new Point(point.X - size.Width / 2, point.Y + size.Height - 1); markerPoints[4] = new Point(point.X - size.Width / 2, point.Y + size.Width / 2); Brush b = new SolidBrush(borderColor); graphics.FillPolygon(b, markerPoints); b.Dispose(); Pen p = new Pen(borderColor); graphics.DrawPolygon(p, markerPoints); p.Dispose(); Rectangle rect = new Rectangle(point.X - size.Width / 2 + 1, point.Y + size.Width / 2 + 1, size.Width - 2, size.Height - size.Width / 2 - 2); Gradient.FillCheckerboardRectangle(graphics, rect, rect.Width / 3); b = new SolidBrush(color); graphics.FillRectangle(b, rect); b.Dispose(); } private GradientColorEntry GetGradientColorEntryFromLocation(int x) { int tmpX; foreach (GradientColorEntry colorEntry in gradient.ColorEntries) { tmpX = gradientRectangle.Left + (int)(colorEntry.Location * gradientRectangle.Width); if (Math.Abs(x - tmpX) <= colorEntryMarkerSize.Width / 2) { return colorEntry; } } return null; } private double GetColorEntryLocationFromX(int x) { return Math.Min(1, Math.Max(0, (double)(x - gradientRectangle.Left) / (gradientRectangle.Width))); } #endregion #region Event handlers private void gradientPanel_Resize(object sender, EventArgs e) { CreateGradientRectangle(); CreateGradientBackBuffer(); DrawGradient(); } private void gradientPanel_Paint(object sender, PaintEventArgs e) { CopyBackBufferToScreen(); } private void gradientPanel_MouseMove(object sender, MouseEventArgs e) { if (gradient == null) return; if (draggingGradientColorEntryNow) { // drag gradient color entry activeGradientColorEntry.Location = GetColorEntryLocationFromX(e.X); DrawGradient(); CopyBackBufferToScreen(); } else { // check if mouse pointer is over gradient entry marker GradientColorEntry previousActiveGradientColorEntry = activeGradientColorEntry; activeGradientColorEntry = GetGradientColorEntryFromLocation(e.X); if ((previousActiveGradientColorEntry != null && !previousActiveGradientColorEntry.Equals(activeGradientColorEntry)) || (activeGradientColorEntry != null && !activeGradientColorEntry.Equals(previousActiveGradientColorEntry))) { DrawColorEntryMarkers(); CopyBackBufferToScreen(); } } } private void gradientPanel_MouseDown(object sender, MouseEventArgs e) { if (gradient == null) return; activeGradientColorEntry = GetGradientColorEntryFromLocation(e.X); if (activeGradientColorEntry != null) { if (e.Button == MouseButtons.Left) { // drag draggingGradientColorEntryNow = true; } else if (e.Button == MouseButtons.Right) { // delete gradient.ColorEntries.Remove(activeGradientColorEntry); } } else { if (e.Button == MouseButtons.Left) { // add double location = GetColorEntryLocationFromX(e.X); Color color = gradient.GetColor(location); gradient.ColorEntries.Add(new GradientColorEntry(color, location)); } } DrawGradient(); CopyBackBufferToScreen(); } private void gradientPanel_MouseUp(object sender, MouseEventArgs e) { if (gradient == null) return; draggingGradientColorEntryNow = false; DrawGradient(); CopyBackBufferToScreen(); } private void gradientPanel_MouseLeave(object sender, EventArgs e) { if (gradient == null) return; activeGradientColorEntry = null; DrawColorEntryMarkers(); } private void gradientPanel_MouseDoubleClick(object sender, MouseEventArgs e) { if (gradient == null) return; activeGradientColorEntry = GetGradientColorEntryFromLocation(e.X); if (activeGradientColorEntry != null) { GradientColorEntry colorEntry = activeGradientColorEntry; using (var cc = new ColorChooser { Color = colorEntry.Color }) { if (cc.ShowDialog() == DialogResult.OK) { colorEntry.Color = cc.Color; DrawGradient(); CopyBackBufferToScreen(); } } } } private void gradientNameTextbox_TextChanged(object sender, EventArgs e) { gradient.Name = gradientNameTextbox.Text; } private void gradientNameTextbox_Enter(object sender, EventArgs e) { gradientNameTextbox.SelectAll(); } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/GradientEditorControl.resx000066400000000000000000000132661446222606700314010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/GradientViewer.Designer.cs000066400000000000000000000020001446222606700312160ustar00rootroot00000000000000namespace QuickRoute.Controls { partial class GradientViewer { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/GradientViewer.cs000066400000000000000000000060251446222606700274720ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.Windows.Forms.Design; using System.Drawing.Design; using QuickRoute.PropertyControls; namespace QuickRoute.Controls { public partial class GradientViewer : UserControl { private IWindowsFormsEditorService editorService = null; private Gradient gradient; // This constructor takes a Gradient value from the // design-time environment, which will be used to display // the initial state. public GradientViewer(Gradient gradient, IWindowsFormsEditorService editorService) { // This call is required by the designer. InitializeComponent(); // Cache the light shape value provided by the // design-time environment. this.gradient = gradient; // Cache the reference to the editor service. this.editorService = editorService; } // Gradient is the property for which this control provides // a custom user interface in the Properties window. [Category("Gradient")] [Browsable(true)] [EditorAttribute(typeof(GradientEditor), typeof(UITypeEditor))] public Gradient Gradient { get { return this.gradient; } set { this.gradient = value; } } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); gradient.Draw(this.CreateGraphics(), this.Bounds, 0, 1, Gradient.Direction.Horizontal); } } internal class GradientEditor : UITypeEditor { IWindowsFormsEditorService editorService; public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) { return UITypeEditorEditStyle.DropDown; } public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (provider != null) { editorService = provider.GetService( typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; } if (editorService != null) { GradientEditorControl editorControl = new GradientEditorControl((Gradient)value, editorService); editorService.DropDownControl(editorControl); } return value; } // This method indicates to the design environment that // the type editor will paint additional content in the // LightShape entry in the PropertyGrid. public override bool GetPaintValueSupported(ITypeDescriptorContext context) { return true; } // This method paints a graphical representation of the // selected value of the LightShpae property. public override void PaintValue(PaintValueEventArgs e) { Gradient gradient = (Gradient)e.Value; gradient.Draw(e.Graphics, e.Bounds, 0, 1, Gradient.Direction.Horizontal); } } } quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/Properties/000077500000000000000000000000001446222606700263555ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/Properties/AssemblyInfo.cs000066400000000000000000000026551446222606700313070ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.PropertyControls")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.PropertyControls")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("3986604e-91d1-4047-bfda-df7757125bb7")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyVersion("2.4")] [assembly: AssemblyFileVersion("2.4")] quickroute-linux-upstream-2.5/QuickRoute.PropertyControls/QuickRoute.PropertyControls.csproj000066400000000000000000000103001446222606700330770ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {4900715B-572B-4279-B704-29B0640612ED} Library Properties QuickRoute.PropertyControls QuickRoute.PropertyControls v4.5 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt 4 false bin\x86\Release\ TRACE true pdbonly x86 prompt 4 UserControl GradientEditorControl.cs UserControl GradientViewer.cs GradientEditorControl.cs Designer {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61} QuickRoute.BusinessEntities {D5755345-EE87-4B08-95D7-55DDDB331CFB} QuickRoute.Controls quickroute-linux-upstream-2.5/QuickRoute.Resources/000077500000000000000000000000001446222606700226235ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Resources/Images.Designer.cs000066400000000000000000000060131446222606700261160ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.Resources { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Images { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Images() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickRoute.Resources.Images", typeof(Images).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } public static System.Drawing.Bitmap HeaderLogo { get { object obj = ResourceManager.GetObject("HeaderLogo", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } } } quickroute-linux-upstream-2.5/QuickRoute.Resources/Images.resx000066400000000000000000000140741446222606700247410ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Resources/HeaderLogo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a quickroute-linux-upstream-2.5/QuickRoute.Resources/Properties/000077500000000000000000000000001446222606700247575ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Resources/Properties/AssemblyInfo.cs000066400000000000000000000026371446222606700277110ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.Resources")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.Resources")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("17dcde66-2a90-4d96-a643-7da90f891e8a")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("2.4")] [assembly: AssemblyVersion("2.5")] [assembly: AssemblyFileVersion("2.5")] quickroute-linux-upstream-2.5/QuickRoute.Resources/QuickRoute.Resources.csproj000066400000000000000000000120301446222606700301050ustar00rootroot00000000000000 Debug AnyCPU 9.0.30729 2.0 {2854A1FB-52F7-4197-A24E-E9977FD21563} Library Properties QuickRoute.Resources QuickRoute.Resources v2.0 512 3.5 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ DEBUG;TRACE full x86 prompt bin\x86\Release\ TRACE true pdbonly x86 prompt True True Images.resx True True Strings.resx True True Strings.sv.resx PublicResXFileCodeGenerator Images.Designer.cs Designer Designer Designer Designer PublicResXFileCodeGenerator Designer Strings.Designer.cs Designer Designer PublicResXFileCodeGenerator Strings.sv.Designer.cs Designer Designer quickroute-linux-upstream-2.5/QuickRoute.Resources/Resources/000077500000000000000000000000001446222606700245755ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Resources/Resources/HeaderLogo.png000066400000000000000000000062071446222606700273210ustar00rootroot00000000000000PNG  IHDR*2*FI pHYs+gAMA|Q cHRMz%u0`:o_F IDATxb?HI~v R P,R/@@#Nb$%D) Cc`1a`- u s @D9@- es &: ;;3Q,@1hPT1g`f@_>{V3@g@ t295сUA0dD8?u8 R 7Lb85.@t(Ё@@|FVsf`7nߧ `r8&::+0'n`8AcC,(q3&009'Og8<*=t I+sC٠ 9 :` b ] t$0 "?w_>aXߣ% - a%r0}q 였!?1 UOrxh="2%ȭ< +%Y}zx:z@Lh A dfeg:?{H<4l!GP5 /ycUv`ff`aZf A5࢏= &4H!:y9qc0a#R`ⵠX@`dUcUh Ą oN(qhwTG@2ρi\$ ubV,p@! *Y2 @(f~ :IPuz^p@PCB2kABU9T١:Ãّ  /ΓSOcq,(W?sP:s@LH q~1qY H?^ .z@(.aH ׃;P6? ~ ` Ŀ06Q#4+&CŠf/0m1̡`(r"ȑ@ܧ#A yPW*#-!n%I9\s(0âAt A /`d:XIL`G3)XUܟOj  6glPa1Ap7@@1" F,c,*X3;.ibA\ڐ4ȁ  _Tw(+*CvV;ԁ e @!f@Mtq?CAC#F P  .&D(>u"(31r+P/^BՀiO#4@-& f3J0Z߾4@1!g2:VJKT +50D,v `}gx@PDFKX Pp)Ǩs F0ް d,  >ֻY y] VV /]B=PL GP@ۿ<`d>n?a=bBwuC  o`99R虘(H `T06)A/ ΄ج$& #CBD:rh@541psc`~@}` Zxԭ:qTF_O{x-^gx8mKւ3 Lބ &x-. 7A Z3 ;2`Cj$?:ܚbho*_7F{pn ͵?!8|W s^5~P̊qcVP`w&ph8;>@#@t 4p>Xl lEZHbpGac30~bӞ>:^߰#@;rØ5m %Au_4́АM_V :o' UT#`a$!( $ O=ѼL jv(ᦋ>v>3@N@ {bgDe&ǑXL0n`/E2BfbhCByhDnj]zH&7av io'~j` 1!FĔfg|xF:a4·͎@cMiЄ3C'ZRmLXa% =ѷ-?ÊKPǡ7g}!Yg>`X.)Z`{]BQ8G[\'!Bo󀛁CUu?m P-96 qyV~<_f~cf`fM@" @t QhTPa&P-`Ʀq>@Ǐ P4  ڬOpׯ;@U+@ݡf# >Zh`Ah!{tX,@GLFZoFZIENDB`quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.Designer.cs000066400000000000000000002711701446222606700263520ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.Resources { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Strings { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Strings() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickRoute.Resources.Strings", typeof(Strings).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to Add files. /// public static string AddFiles { get { return ResourceManager.GetString("AddFiles", resourceCulture); } } /// /// Looks up a localized string similar to Altitude. /// public static string Altitude { get { return ResourceManager.GetString("Altitude", resourceCulture); } } /// /// Looks up a localized string similar to Change. /// public static string Change { get { return ResourceManager.GetString("Change", resourceCulture); } } /// /// Looks up a localized string similar to Copy to clipboard. /// public static string CopyToClipboard { get { return ResourceManager.GetString("CopyToClipboard", resourceCulture); } } /// /// Looks up a localized string similar to Delete lap {0}. /// public static string DeleteLapX { get { return ResourceManager.GetString("DeleteLapX", resourceCulture); } } /// /// Looks up a localized string similar to Direction deviation. /// public static string Direction { get { return ResourceManager.GetString("Direction", resourceCulture); } } /// /// Looks up a localized string similar to Distance. /// public static string Distance { get { return ResourceManager.GetString("Distance", resourceCulture); } } /// /// Looks up a localized string similar to http://www.matstroeng.se/doma. /// public static string DomaWebsiteUrl { get { return ResourceManager.GetString("DomaWebsiteUrl", resourceCulture); } } /// /// Looks up a localized string similar to http://www.matstroeng.se/quickroute/en/donation.php. /// public static string DonationUrl { get { return ResourceManager.GetString("DonationUrl", resourceCulture); } } /// /// Looks up a localized string similar to Downloading image. /// public static string DownloadingImage { get { return ResourceManager.GetString("DownloadingImage", resourceCulture); } } /// /// Looks up a localized string similar to Click on a point on the route and drag it to the corresponding location on the map. At least two points along the route, preferable well interspaced, need to be adjusted. If needed, more points can be used. Hold down Ctrl and click on an adjusted point to remove it. Right-click and drag to move the map. When adjustment is finished, select the pointer tool to display the color-coded route line.. /// public static string DynamicHelp_MouseTool_AdjustRoute { get { return ResourceManager.GetString("DynamicHelp_MouseTool_AdjustRoute", resourceCulture); } } /// /// Looks up a localized string similar to Click on a point on the route to remove the preceding or succeeding part of the route. Right-click and drag to move the map.. /// public static string DynamicHelp_MouseTool_Cut { get { return ResourceManager.GetString("DynamicHelp_MouseTool_Cut", resourceCulture); } } /// /// Looks up a localized string similar to Click on a point on the route to add a split time. Hold down Ctrl and click on a split time to remove it. Hold down Shift and click the route to add a split at a specific time. Right-click and drag to move the map.. /// public static string DynamicHelp_MouseTool_Lap { get { return ResourceManager.GetString("DynamicHelp_MouseTool_Lap", resourceCulture); } } /// /// Looks up a localized string similar to Hover the mouse pointer over the route to view current time, distance, pace etc.. /// public static string DynamicHelp_MouseTool_Pointer { get { return ResourceManager.GetString("DynamicHelp_MouseTool_Pointer", resourceCulture); } } /// /// Looks up a localized string similar to Select the area where the map image should be enlarged.. /// public static string DynamicHelp_MouseTool_ZoomIn { get { return ResourceManager.GetString("DynamicHelp_MouseTool_ZoomIn", resourceCulture); } } /// /// Looks up a localized string similar to Click the center point where the map image should be scaled down.. /// public static string DynamicHelp_MouseTool_ZoomOut { get { return ResourceManager.GetString("DynamicHelp_MouseTool_ZoomOut", resourceCulture); } } /// /// Looks up a localized string similar to E. /// public static string EastAbbreviated { get { return ResourceManager.GetString("EastAbbreviated", resourceCulture); } } /// /// Looks up a localized string similar to Elapsed time. /// public static string ElapsedTime { get { return ResourceManager.GetString("ElapsedTime", resourceCulture); } } /// /// Looks up a localized string similar to Error when trying to export image file. /// public static string Error_ExportImage { get { return ResourceManager.GetString("Error_ExportImage", resourceCulture); } } /// /// Looks up a localized string similar to Error when trying to export route file. /// public static string Error_ExportRoute { get { return ResourceManager.GetString("Error_ExportRoute", resourceCulture); } } /// /// Looks up a localized string similar to Google Earth does not seem to be installed on this computer. Download it from earth.google.com.. /// public static string Error_GoogleEarthNotInstalledMessage { get { return ResourceManager.GetString("Error_GoogleEarthNotInstalledMessage", resourceCulture); } } /// /// Looks up a localized string similar to Google Earth is not installed. /// public static string Error_GoogleEarthNotInstalledTitle { get { return ResourceManager.GetString("Error_GoogleEarthNotInstalledTitle", resourceCulture); } } /// /// Looks up a localized string similar to The file is not a valid QuickRoute file.. /// public static string Error_InvalidQuickRouteFile { get { return ResourceManager.GetString("Error_InvalidQuickRouteFile", resourceCulture); } } /// /// Looks up a localized string similar to Error when communicating with map publishing server. /// public static string Error_MapPublishCommunication { get { return ResourceManager.GetString("Error_MapPublishCommunication", resourceCulture); } } /// /// Looks up a localized string similar to Error when trying to create a new document. /// public static string Error_NewDocument { get { return ResourceManager.GetString("Error_NewDocument", resourceCulture); } } /// /// Looks up a localized string similar to Error when trying to open document. /// public static string Error_OpenDocument { get { return ResourceManager.GetString("Error_OpenDocument", resourceCulture); } } /// /// Looks up a localized string similar to Error when trying to save document. /// public static string Error_SaveDocument { get { return ResourceManager.GetString("Error_SaveDocument", resourceCulture); } } /// /// Looks up a localized string similar to Export route to GPX. /// public static string ExportGPXTitle { get { return ResourceManager.GetString("ExportGPXTitle", resourceCulture); } } /// /// Looks up a localized string similar to Export Image. /// public static string ExportImageTitle { get { return ResourceManager.GetString("ExportImageTitle", resourceCulture); } } /// /// Looks up a localized string similar to Export to KMZ. /// public static string ExportKMZTitle { get { return ResourceManager.GetString("ExportKMZTitle", resourceCulture); } } /// /// Looks up a localized string similar to Export route data. /// public static string ExportRouteDataTitle { get { return ResourceManager.GetString("ExportRouteDataTitle", resourceCulture); } } /// /// Looks up a localized string similar to All files (*.*)|*.*. /// public static string FileFilter_AllFiles { get { return ResourceManager.GetString("FileFilter_AllFiles", resourceCulture); } } /// /// Looks up a localized string similar to All QuickRoute files (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg. /// public static string FileFilter_AllQuickRouteFiles { get { return ResourceManager.GetString("FileFilter_AllQuickRouteFiles", resourceCulture); } } /// /// Looks up a localized string similar to Garmin FIT (*.fit)|*.fit. /// public static string FileFilter_FitFiles { get { return ResourceManager.GetString("FileFilter_FitFiles", resourceCulture); } } /// /// Looks up a localized string similar to Frwd text files (*.txt)|*.txt. /// public static string FileFilter_FrwdTxtFiles { get { return ResourceManager.GetString("FileFilter_FrwdTxtFiles", resourceCulture); } } /// /// Looks up a localized string similar to Gpx (*.gpx)|*.gpx. /// public static string FileFilter_GpxFiles { get { return ResourceManager.GetString("FileFilter_GpxFiles", resourceCulture); } } /// /// Looks up a localized string similar to Image files (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff. /// public static string FileFilter_ImageFiles { get { return ResourceManager.GetString("FileFilter_ImageFiles", resourceCulture); } } /// /// Looks up a localized string similar to Jpeg (*.jpg; *.jpeg)|*.jpg;*.jpeg. /// public static string FileFilter_JpegFiles { get { return ResourceManager.GetString("FileFilter_JpegFiles", resourceCulture); } } /// /// Looks up a localized string similar to Jpeg files exported from QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg. /// public static string FileFilter_JpegFilesExportedFromQuickRoute { get { return ResourceManager.GetString("FileFilter_JpegFilesExportedFromQuickRoute", resourceCulture); } } /// /// Looks up a localized string similar to Kmz files (*.kmz)|*.kmz. /// public static string FileFilter_KmzFiles { get { return ResourceManager.GetString("FileFilter_KmzFiles", resourceCulture); } } /// /// Looks up a localized string similar to Navilock act files (*.act)|*.act. /// public static string FileFilter_NavilockActFiles { get { return ResourceManager.GetString("FileFilter_NavilockActFiles", resourceCulture); } } /// /// Looks up a localized string similar to Png (*.png)|*.png. /// public static string FileFilter_PngFiles { get { return ResourceManager.GetString("FileFilter_PngFiles", resourceCulture); } } /// /// Looks up a localized string similar to QuickRoute 1.0 xml files (*.xml)|*.xml. /// public static string FileFilter_QuickRoute10Files { get { return ResourceManager.GetString("FileFilter_QuickRoute10Files", resourceCulture); } } /// /// Looks up a localized string similar to QuickRoute files (*.qrt)|*.qrt. /// public static string FileFilter_QuickRouteFiles { get { return ResourceManager.GetString("FileFilter_QuickRouteFiles", resourceCulture); } } /// /// Looks up a localized string similar to Route data files (*.xml)|*.xml. /// public static string FileFilter_RouteDataFiles { get { return ResourceManager.GetString("FileFilter_RouteDataFiles", resourceCulture); } } /// /// Looks up a localized string similar to Garmin Training Center history files (*.tcx)|*.tcx. /// public static string FileFilter_TcxFiles { get { return ResourceManager.GetString("FileFilter_TcxFiles", resourceCulture); } } /// /// Looks up a localized string similar to Tiff (*.tiff; *.tif)|*.tiff;*.tif. /// public static string FileFilter_TiffFiles { get { return ResourceManager.GetString("FileFilter_TiffFiles", resourceCulture); } } /// /// Looks up a localized string similar to Heart rate. /// public static string HeartRate { get { return ResourceManager.GetString("HeartRate", resourceCulture); } } /// /// Looks up a localized string similar to http://www.matstroeng.se/quickroute/en/help. /// public static string HelpUrl { get { return ResourceManager.GetString("HelpUrl", resourceCulture); } } /// /// Looks up a localized string similar to Histogram. /// public static string Histogram { get { return ResourceManager.GetString("Histogram", resourceCulture); } } /// /// Looks up a localized string similar to Image size. /// public static string ImageSize { get { return ResourceManager.GetString("ImageSize", resourceCulture); } } /// /// Looks up a localized string similar to infinite. /// public static string Infinite { get { return ResourceManager.GetString("Infinite", resourceCulture); } } /// /// Looks up a localized string similar to Invalid map image. /// public static string InvalidMapImage { get { return ResourceManager.GetString("InvalidMapImage", resourceCulture); } } /// /// Looks up a localized string similar to Invalid route. /// public static string InvalidRoute { get { return ResourceManager.GetString("InvalidRoute", resourceCulture); } } /// /// Looks up a localized string similar to Lap {0}. /// public static string LapX { get { return ResourceManager.GetString("LapX", resourceCulture); } } /// /// Looks up a localized string similar to Location. /// public static string Location { get { return ResourceManager.GetString("Location", resourceCulture); } } /// /// Looks up a localized string similar to Map. /// public static string Map { get { return ResourceManager.GetString("Map", resourceCulture); } } /// /// Looks up a localized string similar to The map image file does not exist.. /// public static string MapImageFileDoesNotExist { get { return ResourceManager.GetString("MapImageFileDoesNotExist", resourceCulture); } } /// /// Looks up a localized string similar to The map was not published. /// public static string MapPublish_FailureTitle { get { return ResourceManager.GetString("MapPublish_FailureTitle", resourceCulture); } } /// /// Looks up a localized string similar to The map was published at {0}.. /// public static string MapPublish_Success { get { return ResourceManager.GetString("MapPublish_Success", resourceCulture); } } /// /// Looks up a localized string similar to The map was published. /// public static string MapPublish_SuccessTitle { get { return ResourceManager.GetString("MapPublish_SuccessTitle", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration. /// public static string MapReadingDuration { get { return ResourceManager.GetString("MapReadingDuration", resourceCulture); } } /// /// Looks up a localized string similar to There are no valid QuickRoute files specified.. /// public static string MultipleFileExporterNoValidFiles { get { return ResourceManager.GetString("MultipleFileExporterNoValidFiles", resourceCulture); } } /// /// Looks up a localized string similar to The following files do not contain QuickRoute data and could not be included: /// ///{0}. /// public static string MultipleFileExporterSomeInvalidFiles { get { return ResourceManager.GetString("MultipleFileExporterSomeInvalidFiles", resourceCulture); } } /// /// Looks up a localized string similar to New gradient. /// public static string NewGradient { get { return ResourceManager.GetString("NewGradient", resourceCulture); } } /// /// Looks up a localized string similar to New map. /// public static string NewMap { get { return ResourceManager.GetString("NewMap", resourceCulture); } } /// /// Looks up a localized string similar to QuickRoute version {0} is now avaliable.. /// public static string NewVersionAvailable { get { return ResourceManager.GetString("NewVersionAvailable", resourceCulture); } } /// /// Looks up a localized string similar to Features in the new version:. /// public static string NewVersionFeatures { get { return ResourceManager.GetString("NewVersionFeatures", resourceCulture); } } /// /// Looks up a localized string similar to No. /// public static string No { get { return ResourceManager.GetString("No", resourceCulture); } } /// /// Looks up a localized string similar to [No GPS devices connected]. /// public static string NoGPSDevicesConnected { get { return ResourceManager.GetString("NoGPSDevicesConnected", resourceCulture); } } /// /// Looks up a localized string similar to There are no GPS devices connected.. /// public static string NoGPSDevicesConnectedMessageBox { get { return ResourceManager.GetString("NoGPSDevicesConnectedMessageBox", resourceCulture); } } /// /// Looks up a localized string similar to N. /// public static string NorthAbbreviated { get { return ResourceManager.GetString("NorthAbbreviated", resourceCulture); } } /// /// Looks up a localized string similar to [no second color]. /// public static string NoSecondaryColorCoding { get { return ResourceManager.GetString("NoSecondaryColorCoding", resourceCulture); } } /// /// Looks up a localized string similar to not connected. /// public static string NotConnected { get { return ResourceManager.GetString("NotConnected", resourceCulture); } } /// /// Looks up a localized string similar to Open in Google Earth. /// public static string OpenInGoogleEarth { get { return ResourceManager.GetString("OpenInGoogleEarth", resourceCulture); } } /// /// Looks up a localized string similar to Open multiple QuickRoute files in Google Earth. /// public static string OpenMultipleFilesInGoogleEarth { get { return ResourceManager.GetString("OpenMultipleFilesInGoogleEarth", resourceCulture); } } /// /// Looks up a localized string similar to Open QuickRoute file. /// public static string OpenQuickRouteFileTitle { get { return ResourceManager.GetString("OpenQuickRouteFileTitle", resourceCulture); } } /// /// Looks up a localized string similar to Pace. /// public static string Pace { get { return ResourceManager.GetString("Pace", resourceCulture); } } /// /// Looks up a localized string similar to pixels. /// public static string Pixels { get { return ResourceManager.GetString("Pixels", resourceCulture); } } /// /// Looks up a localized string similar to Print.... /// public static string Print { get { return ResourceManager.GetString("Print", resourceCulture); } } /// /// Looks up a localized string similar to Save changes to {0}?. /// public static string PromptSaveChanges { get { return ResourceManager.GetString("PromptSaveChanges", resourceCulture); } } /// /// Looks up a localized string similar to QuickRoute. /// public static string QuickRoute { get { return ResourceManager.GetString("QuickRoute", resourceCulture); } } /// /// Looks up a localized string similar to QuickRoute data. /// public static string QuickRouteKmlData { get { return ResourceManager.GetString("QuickRouteKmlData", resourceCulture); } } /// /// Looks up a localized string similar to QuickRoute session at {0}. /// public static string QuickRouteSession { get { return ResourceManager.GetString("QuickRouteSession", resourceCulture); } } /// /// Looks up a localized string similar to Replay. /// public static string Replay { get { return ResourceManager.GetString("Replay", resourceCulture); } } /// /// Looks up a localized string similar to Position. /// public static string ReplayPosition { get { return ResourceManager.GetString("ReplayPosition", resourceCulture); } } /// /// Looks up a localized string similar to Tail. /// public static string ReplayTail { get { return ResourceManager.GetString("ReplayTail", resourceCulture); } } /// /// Looks up a localized string similar to Route. /// public static string Route { get { return ResourceManager.GetString("Route", resourceCulture); } } /// /// Looks up a localized string similar to The route file does not exist.. /// public static string RouteFileDoesNotExist { get { return ResourceManager.GetString("RouteFileDoesNotExist", resourceCulture); } } /// /// Looks up a localized string similar to There are no waypoints in the file.. /// public static string RouteImportError_NoWaypoints { get { return ResourceManager.GetString("RouteImportError_NoWaypoints", resourceCulture); } } /// /// Looks up a localized string similar to There are no waypoints with times in the file.. /// public static string RouteImportError_NoWaypointTimes { get { return ResourceManager.GetString("RouteImportError_NoWaypointTimes", resourceCulture); } } /// /// Looks up a localized string similar to Altitude. /// public static string RoutePropertyName_Altitude { get { return ResourceManager.GetString("RoutePropertyName_Altitude", resourceCulture); } } /// /// Looks up a localized string similar to Altitude difference (lap). /// public static string RoutePropertyName_AltitudeDifference { get { return ResourceManager.GetString("RoutePropertyName_AltitudeDifference", resourceCulture); } } /// /// Looks up a localized string similar to Altitude difference (total). /// public static string RoutePropertyName_AltitudeDifferenceFromStart { get { return ResourceManager.GetString("RoutePropertyName_AltitudeDifferenceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Ascent (lap). /// public static string RoutePropertyName_Ascent { get { return ResourceManager.GetString("RoutePropertyName_Ascent", resourceCulture); } } /// /// Looks up a localized string similar to Ascent (total). /// public static string RoutePropertyName_AscentFromStart { get { return ResourceManager.GetString("RoutePropertyName_AscentFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average direction deviation (lap). /// public static string RoutePropertyName_AverageDirectionDeviationToNextLap { get { return ResourceManager.GetString("RoutePropertyName_AverageDirectionDeviationToNextLap", resourceCulture); } } /// /// Looks up a localized string similar to Average direction deviation (total). /// public static string RoutePropertyName_AverageDirectionDeviationToNextLapFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageDirectionDeviationToNextLapFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average heart rate (lap). /// public static string RoutePropertyName_AverageHeartRate { get { return ResourceManager.GetString("RoutePropertyName_AverageHeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Average heart rate (total). /// public static string RoutePropertyName_AverageHeartRateFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageHeartRateFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average inclination (lap). /// public static string RoutePropertyName_AverageInclination { get { return ResourceManager.GetString("RoutePropertyName_AverageInclination", resourceCulture); } } /// /// Looks up a localized string similar to Average inclination (total). /// public static string RoutePropertyName_AverageInclinationFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageInclinationFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average map reading time (lap). /// public static string RoutePropertyName_AverageMapReadingTime { get { return ResourceManager.GetString("RoutePropertyName_AverageMapReadingTime", resourceCulture); } } /// /// Looks up a localized string similar to Average map reading time (total). /// public static string RoutePropertyName_AverageMapReadingTimeFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageMapReadingTimeFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when not reading map (leg). /// public static string RoutePropertyName_AveragePaceWhenNotReadingMap { get { return ResourceManager.GetString("RoutePropertyName_AveragePaceWhenNotReadingMap", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when not reading map (total). /// public static string RoutePropertyName_AveragePaceWhenNotReadingMapFromStart { get { return ResourceManager.GetString("RoutePropertyName_AveragePaceWhenNotReadingMapFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when reading map (leg). /// public static string RoutePropertyName_AveragePaceWhenReadingMap { get { return ResourceManager.GetString("RoutePropertyName_AveragePaceWhenReadingMap", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when reading map (total). /// public static string RoutePropertyName_AveragePaceWhenReadingMapFromStart { get { return ResourceManager.GetString("RoutePropertyName_AveragePaceWhenReadingMapFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average route pace (lap). /// public static string RoutePropertyName_AverageRoutePace { get { return ResourceManager.GetString("RoutePropertyName_AverageRoutePace", resourceCulture); } } /// /// Looks up a localized string similar to Average route pace (total). /// public static string RoutePropertyName_AverageRoutePaceFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageRoutePaceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average route speed (lap). /// public static string RoutePropertyName_AverageRouteSpeed { get { return ResourceManager.GetString("RoutePropertyName_AverageRouteSpeed", resourceCulture); } } /// /// Looks up a localized string similar to Average route speed (total). /// public static string RoutePropertyName_AverageRouteSpeedFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageRouteSpeedFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line pace (lap). /// public static string RoutePropertyName_AverageStraightLinePace { get { return ResourceManager.GetString("RoutePropertyName_AverageStraightLinePace", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line pace (total). /// public static string RoutePropertyName_AverageStraightLinePaceFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageStraightLinePaceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line speed (lap). /// public static string RoutePropertyName_AverageStraightLineSpeed { get { return ResourceManager.GetString("RoutePropertyName_AverageStraightLineSpeed", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line speed (total). /// public static string RoutePropertyName_AverageStraightLineSpeedFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageStraightLineSpeedFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average time between map readings (lap). /// public static string RoutePropertyName_AverageTimeBetweenMapReadings { get { return ResourceManager.GetString("RoutePropertyName_AverageTimeBetweenMapReadings", resourceCulture); } } /// /// Looks up a localized string similar to Average time between map readings (total). /// public static string RoutePropertyName_AverageTimeBetweenMapReadingsFromStart { get { return ResourceManager.GetString("RoutePropertyName_AverageTimeBetweenMapReadingsFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Control approaching time. /// public static string RoutePropertyName_CircleTimeAtEndOfSpan { get { return ResourceManager.GetString("RoutePropertyName_CircleTimeAtEndOfSpan", resourceCulture); } } /// /// Looks up a localized string similar to Sum of control approaching times. /// public static string RoutePropertyName_CircleTimeAtEndOfSpanFromStart { get { return ResourceManager.GetString("RoutePropertyName_CircleTimeAtEndOfSpanFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Control leaving time. /// public static string RoutePropertyName_CircleTimeAtStartOfSpan { get { return ResourceManager.GetString("RoutePropertyName_CircleTimeAtStartOfSpan", resourceCulture); } } /// /// Looks up a localized string similar to Sum of control leaving times. /// public static string RoutePropertyName_CircleTimeAtStartOfSpanFromStart { get { return ResourceManager.GetString("RoutePropertyName_CircleTimeAtStartOfSpanFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Current position approaching time. /// public static string RoutePropertyName_CircleTimeBackward { get { return ResourceManager.GetString("RoutePropertyName_CircleTimeBackward", resourceCulture); } } /// /// Looks up a localized string similar to Current position leaving time. /// public static string RoutePropertyName_CircleTimeForward { get { return ResourceManager.GetString("RoutePropertyName_CircleTimeForward", resourceCulture); } } /// /// Looks up a localized string similar to Descent (lap). /// public static string RoutePropertyName_Descent { get { return ResourceManager.GetString("RoutePropertyName_Descent", resourceCulture); } } /// /// Looks up a localized string similar to Descent (total). /// public static string RoutePropertyName_DescentFromStart { get { return ResourceManager.GetString("RoutePropertyName_DescentFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Direction. /// public static string RoutePropertyName_Direction { get { return ResourceManager.GetString("RoutePropertyName_Direction", resourceCulture); } } /// /// Looks up a localized string similar to Direction deviation. /// public static string RoutePropertyName_DirectionDeviationToNextLap { get { return ResourceManager.GetString("RoutePropertyName_DirectionDeviationToNextLap", resourceCulture); } } /// /// Looks up a localized string similar to Time (lap). /// public static string RoutePropertyName_ElapsedTime { get { return ResourceManager.GetString("RoutePropertyName_ElapsedTime", resourceCulture); } } /// /// Looks up a localized string similar to Time (total). /// public static string RoutePropertyName_ElapsedTimeFromStart { get { return ResourceManager.GetString("RoutePropertyName_ElapsedTimeFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Heart rate. /// public static string RoutePropertyName_HeartRate { get { return ResourceManager.GetString("RoutePropertyName_HeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Image X position. /// public static string RoutePropertyName_ImageX { get { return ResourceManager.GetString("RoutePropertyName_ImageX", resourceCulture); } } /// /// Looks up a localized string similar to Image Y position. /// public static string RoutePropertyName_ImageY { get { return ResourceManager.GetString("RoutePropertyName_ImageY", resourceCulture); } } /// /// Looks up a localized string similar to Inclination. /// public static string RoutePropertyName_Inclination { get { return ResourceManager.GetString("RoutePropertyName_Inclination", resourceCulture); } } /// /// Looks up a localized string similar to Lap number. /// public static string RoutePropertyName_LapNumber { get { return ResourceManager.GetString("RoutePropertyName_LapNumber", resourceCulture); } } /// /// Looks up a localized string similar to Latitude. /// public static string RoutePropertyName_Latitude { get { return ResourceManager.GetString("RoutePropertyName_Latitude", resourceCulture); } } /// /// Looks up a localized string similar to Location. /// public static string RoutePropertyName_Location { get { return ResourceManager.GetString("RoutePropertyName_Location", resourceCulture); } } /// /// Looks up a localized string similar to Longitude. /// public static string RoutePropertyName_Longitude { get { return ResourceManager.GetString("RoutePropertyName_Longitude", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration. /// public static string RoutePropertyName_MapReadingDuration { get { return ResourceManager.GetString("RoutePropertyName_MapReadingDuration", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration (total). /// public static string RoutePropertyName_MapReadingDurationFromStart { get { return ResourceManager.GetString("RoutePropertyName_MapReadingDurationFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration (lap). /// public static string RoutePropertyName_MapReadingDurationInSpan { get { return ResourceManager.GetString("RoutePropertyName_MapReadingDurationInSpan", resourceCulture); } } /// /// Looks up a localized string similar to Map reading percentage (lap). /// public static string RoutePropertyName_MapReadingPercentage { get { return ResourceManager.GetString("RoutePropertyName_MapReadingPercentage", resourceCulture); } } /// /// Looks up a localized string similar to Map reading percentage (total). /// public static string RoutePropertyName_MapReadingPercentageFromStart { get { return ResourceManager.GetString("RoutePropertyName_MapReadingPercentageFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Reading map. /// public static string RoutePropertyName_MapReadingState { get { return ResourceManager.GetString("RoutePropertyName_MapReadingState", resourceCulture); } } /// /// Looks up a localized string similar to Maximum heart rate (lap). /// public static string RoutePropertyName_MaxHeartRate { get { return ResourceManager.GetString("RoutePropertyName_MaxHeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Maximum heart rate (total). /// public static string RoutePropertyName_MaxHeartRateFromStart { get { return ResourceManager.GetString("RoutePropertyName_MaxHeartRateFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Minimum heart rate (lap). /// public static string RoutePropertyName_MinHeartRate { get { return ResourceManager.GetString("RoutePropertyName_MinHeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Minimum heart rate (total). /// public static string RoutePropertyName_MinHeartRateFromStart { get { return ResourceManager.GetString("RoutePropertyName_MinHeartRateFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Time to start of next map reading. /// public static string RoutePropertyName_NextMapReadingStart { get { return ResourceManager.GetString("RoutePropertyName_NextMapReadingStart", resourceCulture); } } /// /// Looks up a localized string similar to Number of map readings (lap). /// public static string RoutePropertyName_NumberOfMapReadings { get { return ResourceManager.GetString("RoutePropertyName_NumberOfMapReadings", resourceCulture); } } /// /// Looks up a localized string similar to Number of map readings (total). /// public static string RoutePropertyName_NumberOfMapReadingsFromStart { get { return ResourceManager.GetString("RoutePropertyName_NumberOfMapReadingsFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Pace. /// public static string RoutePropertyName_Pace { get { return ResourceManager.GetString("RoutePropertyName_Pace", resourceCulture); } } /// /// Looks up a localized string similar to Time to end of previous map reading. /// public static string RoutePropertyName_PreviousMapReadingEnd { get { return ResourceManager.GetString("RoutePropertyName_PreviousMapReadingEnd", resourceCulture); } } /// /// Looks up a localized string similar to Route distance (lap). /// public static string RoutePropertyName_RouteDistance { get { return ResourceManager.GetString("RoutePropertyName_RouteDistance", resourceCulture); } } /// /// Looks up a localized string similar to Route distance (total). /// public static string RoutePropertyName_RouteDistanceFromStart { get { return ResourceManager.GetString("RoutePropertyName_RouteDistanceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Difference between the route and the straight line distance (lap). /// public static string RoutePropertyName_RouteToStraightLine { get { return ResourceManager.GetString("RoutePropertyName_RouteToStraightLine", resourceCulture); } } /// /// Looks up a localized string similar to Difference between the route and the straight line distance (total). /// public static string RoutePropertyName_RouteToStraightLineFromStart { get { return ResourceManager.GetString("RoutePropertyName_RouteToStraightLineFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Speed. /// public static string RoutePropertyName_Speed { get { return ResourceManager.GetString("RoutePropertyName_Speed", resourceCulture); } } /// /// Looks up a localized string similar to Straight line distance (lap). /// public static string RoutePropertyName_StraightLineDistance { get { return ResourceManager.GetString("RoutePropertyName_StraightLineDistance", resourceCulture); } } /// /// Looks up a localized string similar to Straight line distance (total). /// public static string RoutePropertyName_StraightLineDistanceFromStart { get { return ResourceManager.GetString("RoutePropertyName_StraightLineDistanceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Time of day. /// public static string RoutePropertyName_Time { get { return ResourceManager.GetString("RoutePropertyName_Time", resourceCulture); } } /// /// Looks up a localized string similar to Altitude: {0} masl. /// public static string RoutePropertyNameAndValue_Altitude { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Altitude", resourceCulture); } } /// /// Looks up a localized string similar to Altitude difference (lap): {0} m. /// public static string RoutePropertyNameAndValue_AltitudeDifference { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AltitudeDifference", resourceCulture); } } /// /// Looks up a localized string similar to Altitude difference (total): {0} m. /// public static string RoutePropertyNameAndValue_AltitudeDifferenceFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AltitudeDifferenceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Ascent (lap): {0} m. /// public static string RoutePropertyNameAndValue_Ascent { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Ascent", resourceCulture); } } /// /// Looks up a localized string similar to Ascent (total): {0} m. /// public static string RoutePropertyNameAndValue_AscentFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AscentFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average direction deviation (lap): {0}°. /// public static string RoutePropertyNameAndValue_AverageDirectionDeviationToNextLap { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageDirectionDeviationToNextLap", resourceCulture); } } /// /// Looks up a localized string similar to Average direction deviation (total): {0}°. /// public static string RoutePropertyNameAndValue_AverageDirectionDeviationToNextLapFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageDirectionDeviationToNextLapFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average heart rate (lap): {0} bpm. /// public static string RoutePropertyNameAndValue_AverageHeartRate { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageHeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Average heart rate (total): {0} bpm. /// public static string RoutePropertyNameAndValue_AverageHeartRateFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageHeartRateFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average inclination (lap): {0}°. /// public static string RoutePropertyNameAndValue_AverageInclination { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageInclination", resourceCulture); } } /// /// Looks up a localized string similar to Average inclination (total): {0}°. /// public static string RoutePropertyNameAndValue_AverageInclinationFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageInclinationFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average map reading time (lap): {0}. /// public static string RoutePropertyNameAndValue_AverageMapReadingTime { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageMapReadingTime", resourceCulture); } } /// /// Looks up a localized string similar to Average map reading time (total): {0}. /// public static string RoutePropertyNameAndValue_AverageMapReadingTimeFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageMapReadingTimeFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when not reading map (leg): {0} min/km. /// public static string RoutePropertyNameAndValue_AveragePaceWhenNotReadingMap { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AveragePaceWhenNotReadingMap", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when not reading map (total): {0} min/km. /// public static string RoutePropertyNameAndValue_AveragePaceWhenNotReadingMapFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AveragePaceWhenNotReadingMapFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when reading map (leg): {0} min/km. /// public static string RoutePropertyNameAndValue_AveragePaceWhenReadingMap { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AveragePaceWhenReadingMap", resourceCulture); } } /// /// Looks up a localized string similar to Average pace when reading map (total): {0} min/km. /// public static string RoutePropertyNameAndValue_AveragePaceWhenReadingMapFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AveragePaceWhenReadingMapFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average route pace (lap): {0} min/km. /// public static string RoutePropertyNameAndValue_AverageRoutePace { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageRoutePace", resourceCulture); } } /// /// Looks up a localized string similar to Average route pace (total): {0} min/km. /// public static string RoutePropertyNameAndValue_AverageRoutePaceFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageRoutePaceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average route speed (lap): {0} km/h. /// public static string RoutePropertyNameAndValue_AverageRouteSpeed { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageRouteSpeed", resourceCulture); } } /// /// Looks up a localized string similar to Average route speed (total): {0} km/h. /// public static string RoutePropertyNameAndValue_AverageRouteSpeedFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageRouteSpeedFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line pace (lap): {0} min/km. /// public static string RoutePropertyNameAndValue_AverageStraightLinePace { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageStraightLinePace", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line pace (total): {0} min/km. /// public static string RoutePropertyNameAndValue_AverageStraightLinePaceFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageStraightLinePaceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line speed (lap): {0} km/h. /// public static string RoutePropertyNameAndValue_AverageStraightLineSpeed { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageStraightLineSpeed", resourceCulture); } } /// /// Looks up a localized string similar to Average straight line speed (total): {0} km/h. /// public static string RoutePropertyNameAndValue_AverageStraightLineSpeedFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageStraightLineSpeedFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Average time between map readings (lap): {0}. /// public static string RoutePropertyNameAndValue_AverageTimeBetweenMapReadings { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageTimeBetweenMapReadings", resourceCulture); } } /// /// Looks up a localized string similar to Average time between map readings (total): {0}. /// public static string RoutePropertyNameAndValue_AverageTimeBetweenMapReadingsFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_AverageTimeBetweenMapReadingsFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Control approaching time: {0}. /// public static string RoutePropertyNameAndValue_CircleTimeAtEndOfSpan { get { return ResourceManager.GetString("RoutePropertyNameAndValue_CircleTimeAtEndOfSpan", resourceCulture); } } /// /// Looks up a localized string similar to Sum of control approaching times: {0}. /// public static string RoutePropertyNameAndValue_CircleTimeAtEndOfSpanFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_CircleTimeAtEndOfSpanFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Control leaving time: {0}. /// public static string RoutePropertyNameAndValue_CircleTimeAtStartOfSpan { get { return ResourceManager.GetString("RoutePropertyNameAndValue_CircleTimeAtStartOfSpan", resourceCulture); } } /// /// Looks up a localized string similar to Sum of control leaving times: {0}. /// public static string RoutePropertyNameAndValue_CircleTimeAtStartOfSpanFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_CircleTimeAtStartOfSpanFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Current position approaching time: {0}. /// public static string RoutePropertyNameAndValue_CircleTimeBackward { get { return ResourceManager.GetString("RoutePropertyNameAndValue_CircleTimeBackward", resourceCulture); } } /// /// Looks up a localized string similar to Current positionleaving time: {0}. /// public static string RoutePropertyNameAndValue_CircleTimeForward { get { return ResourceManager.GetString("RoutePropertyNameAndValue_CircleTimeForward", resourceCulture); } } /// /// Looks up a localized string similar to Descent (lap): {0} m. /// public static string RoutePropertyNameAndValue_Descent { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Descent", resourceCulture); } } /// /// Looks up a localized string similar to Descent (total): {0} m. /// public static string RoutePropertyNameAndValue_DescentFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_DescentFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Direction: {0}°. /// public static string RoutePropertyNameAndValue_Direction { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Direction", resourceCulture); } } /// /// Looks up a localized string similar to Direction deviation: {0}°. /// public static string RoutePropertyNameAndValue_DirectionDeviationToNextLap { get { return ResourceManager.GetString("RoutePropertyNameAndValue_DirectionDeviationToNextLap", resourceCulture); } } /// /// Looks up a localized string similar to Time (lap): {0}. /// public static string RoutePropertyNameAndValue_ElapsedTime { get { return ResourceManager.GetString("RoutePropertyNameAndValue_ElapsedTime", resourceCulture); } } /// /// Looks up a localized string similar to Time (total): {0}. /// public static string RoutePropertyNameAndValue_ElapsedTimeFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_ElapsedTimeFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Heart rate: {0} bpm. /// public static string RoutePropertyNameAndValue_HeartRate { get { return ResourceManager.GetString("RoutePropertyNameAndValue_HeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Image X position: {0}. /// public static string RoutePropertyNameAndValue_ImageX { get { return ResourceManager.GetString("RoutePropertyNameAndValue_ImageX", resourceCulture); } } /// /// Looks up a localized string similar to Image Y position: {0}. /// public static string RoutePropertyNameAndValue_ImageY { get { return ResourceManager.GetString("RoutePropertyNameAndValue_ImageY", resourceCulture); } } /// /// Looks up a localized string similar to Inclination: {0}°. /// public static string RoutePropertyNameAndValue_Inclination { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Inclination", resourceCulture); } } /// /// Looks up a localized string similar to Lap number: {0}. /// public static string RoutePropertyNameAndValue_LapNumber { get { return ResourceManager.GetString("RoutePropertyNameAndValue_LapNumber", resourceCulture); } } /// /// Looks up a localized string similar to Latitude: {0}. /// public static string RoutePropertyNameAndValue_Latitude { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Latitude", resourceCulture); } } /// /// Looks up a localized string similar to Location: {0}. /// public static string RoutePropertyNameAndValue_Location { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Location", resourceCulture); } } /// /// Looks up a localized string similar to Longitude: {0}. /// public static string RoutePropertyNameAndValue_Longitude { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Longitude", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration: {0}. /// public static string RoutePropertyNameAndValue_MapReadingDuration { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MapReadingDuration", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration (total): {0}. /// public static string RoutePropertyNameAndValue_MapReadingDurationFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MapReadingDurationFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Map reading duration (lap): {0}. /// public static string RoutePropertyNameAndValue_MapReadingDurationInSpan { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MapReadingDurationInSpan", resourceCulture); } } /// /// Looks up a localized string similar to Map reading percentage (lap): {0}. /// public static string RoutePropertyNameAndValue_MapReadingPercentage { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MapReadingPercentage", resourceCulture); } } /// /// Looks up a localized string similar to Map reading percentage (total): {0}. /// public static string RoutePropertyNameAndValue_MapReadingPercentageFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MapReadingPercentageFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Reading map: {0}. /// public static string RoutePropertyNameAndValue_MapReadingState { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MapReadingState", resourceCulture); } } /// /// Looks up a localized string similar to Maximum heart rate (lap): {0} bpm. /// public static string RoutePropertyNameAndValue_MaxHeartRate { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MaxHeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Maximum heart rate (total): {0} bpm. /// public static string RoutePropertyNameAndValue_MaxHeartRateFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MaxHeartRateFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Minimum heart rate (lap): {0} bpm. /// public static string RoutePropertyNameAndValue_MinHeartRate { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MinHeartRate", resourceCulture); } } /// /// Looks up a localized string similar to Minimum heart rate (total): {0} bpm. /// public static string RoutePropertyNameAndValue_MinHeartRateFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_MinHeartRateFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Time to start of next map reading: {0}. /// public static string RoutePropertyNameAndValue_NextMapReadingStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_NextMapReadingStart", resourceCulture); } } /// /// Looks up a localized string similar to Number of map readings (lap): {0}. /// public static string RoutePropertyNameAndValue_NumberOfMapReadings { get { return ResourceManager.GetString("RoutePropertyNameAndValue_NumberOfMapReadings", resourceCulture); } } /// /// Looks up a localized string similar to Number of map readings (total): {0}. /// public static string RoutePropertyNameAndValue_NumberOfMapReadingsFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_NumberOfMapReadingsFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Pace: {0} min/km. /// public static string RoutePropertyNameAndValue_Pace { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Pace", resourceCulture); } } /// /// Looks up a localized string similar to Time to end of previous map reading: {0}. /// public static string RoutePropertyNameAndValue_PreviousMapReadingEnd { get { return ResourceManager.GetString("RoutePropertyNameAndValue_PreviousMapReadingEnd", resourceCulture); } } /// /// Looks up a localized string similar to Route distance (lap): {0} m. /// public static string RoutePropertyNameAndValue_RouteDistance { get { return ResourceManager.GetString("RoutePropertyNameAndValue_RouteDistance", resourceCulture); } } /// /// Looks up a localized string similar to Route distance (total): {0} m. /// public static string RoutePropertyNameAndValue_RouteDistanceFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_RouteDistanceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Difference between the route and the straight line distance (lap): {0}. /// public static string RoutePropertyNameAndValue_RouteToStraightLine { get { return ResourceManager.GetString("RoutePropertyNameAndValue_RouteToStraightLine", resourceCulture); } } /// /// Looks up a localized string similar to Difference between the route and the straight line distance (total): {0}. /// public static string RoutePropertyNameAndValue_RouteToStraightLineFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_RouteToStraightLineFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Speed: {0} km/h. /// public static string RoutePropertyNameAndValue_Speed { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Speed", resourceCulture); } } /// /// Looks up a localized string similar to Straight line distance (lap): {0} m. /// public static string RoutePropertyNameAndValue_StraightLineDistance { get { return ResourceManager.GetString("RoutePropertyNameAndValue_StraightLineDistance", resourceCulture); } } /// /// Looks up a localized string similar to Straight line distance (total): {0} m. /// public static string RoutePropertyNameAndValue_StraightLineDistanceFromStart { get { return ResourceManager.GetString("RoutePropertyNameAndValue_StraightLineDistanceFromStart", resourceCulture); } } /// /// Looks up a localized string similar to Time of day: {0}. /// public static string RoutePropertyNameAndValue_Time { get { return ResourceManager.GetString("RoutePropertyNameAndValue_Time", resourceCulture); } } /// /// Looks up a localized string similar to Routes. /// public static string Routes { get { return ResourceManager.GetString("Routes", resourceCulture); } } /// /// Looks up a localized string similar to Route segment {0}. /// public static string RouteSegmentX { get { return ResourceManager.GetString("RouteSegmentX", resourceCulture); } } /// /// Looks up a localized string similar to Save QuickRoute file as. /// public static string SaveAsTitle { get { return ResourceManager.GetString("SaveAsTitle", resourceCulture); } } /// /// Looks up a localized string similar to Select columns. /// public static string SelectLapInfoColumns { get { return ResourceManager.GetString("SelectLapInfoColumns", resourceCulture); } } /// /// Looks up a localized string similar to Select map image file. /// public static string SelectMapImageFile { get { return ResourceManager.GetString("SelectMapImageFile", resourceCulture); } } /// /// Looks up a localized string similar to Select information. /// public static string SelectMomentaneousInfoProperties { get { return ResourceManager.GetString("SelectMomentaneousInfoProperties", resourceCulture); } } /// /// Looks up a localized string similar to Select route file. /// public static string SelectRouteFile { get { return ResourceManager.GetString("SelectRouteFile", resourceCulture); } } /// /// Looks up a localized string similar to {0} x {1} pixels. /// public static string SizeInPixels { get { return ResourceManager.GetString("SizeInPixels", resourceCulture); } } /// /// Looks up a localized string similar to Smoothing interval for {0}. /// public static string SmoothingIntervalForX { get { return ResourceManager.GetString("SmoothingIntervalForX", resourceCulture); } } /// /// Looks up a localized string similar to S. /// public static string SouthAbbreviated { get { return ResourceManager.GetString("SouthAbbreviated", resourceCulture); } } /// /// Looks up a localized string similar to Speed. /// public static string Speed { get { return ResourceManager.GetString("Speed", resourceCulture); } } /// /// Looks up a localized string similar to Time. /// public static string Time { get { return ResourceManager.GetString("Time", resourceCulture); } } /// /// Looks up a localized string similar to Total. /// public static string Total { get { return ResourceManager.GetString("Total", resourceCulture); } } /// /// Looks up a localized string similar to The language change will take effect next time QuickRoute is started.. /// public static string UICultureChangeTakesEffectAtNextRestart { get { return ResourceManager.GetString("UICultureChangeTakesEffectAtNextRestart", resourceCulture); } } /// /// Looks up a localized string similar to An unexpected error occured.. /// public static string UnexpectedExceptionMessage { get { return ResourceManager.GetString("UnexpectedExceptionMessage", resourceCulture); } } /// /// Looks up a localized string similar to masl. /// public static string Unit_Altitude { get { return ResourceManager.GetString("Unit_Altitude", resourceCulture); } } /// /// Looks up a localized string similar to °. /// public static string Unit_Direction { get { return ResourceManager.GetString("Unit_Direction", resourceCulture); } } /// /// Looks up a localized string similar to m. /// public static string Unit_Distance { get { return ResourceManager.GetString("Unit_Distance", resourceCulture); } } /// /// Looks up a localized string similar to bpm. /// public static string Unit_HeartRate { get { return ResourceManager.GetString("Unit_HeartRate", resourceCulture); } } /// /// Looks up a localized string similar to min/km. /// public static string Unit_Pace { get { return ResourceManager.GetString("Unit_Pace", resourceCulture); } } /// /// Looks up a localized string similar to km/h. /// public static string Unit_Speed { get { return ResourceManager.GetString("Unit_Speed", resourceCulture); } } /// /// Looks up a localized string similar to Time. /// public static string Unit_Time { get { return ResourceManager.GetString("Unit_Time", resourceCulture); } } /// /// Looks up a localized string similar to The file format of {0} is not recognized.. /// public static string UnrecognizedFileFormat { get { return ResourceManager.GetString("UnrecognizedFileFormat", resourceCulture); } } /// /// Looks up a localized string similar to Untitled. /// public static string Untitled { get { return ResourceManager.GetString("Untitled", resourceCulture); } } /// /// Looks up a localized string similar to Untitled {0}. /// public static string UntitledX { get { return ResourceManager.GetString("UntitledX", resourceCulture); } } /// /// Looks up a localized string similar to Version {0}. /// public static string Version { get { return ResourceManager.GetString("Version", resourceCulture); } } /// /// Looks up a localized string similar to matstroeng.se/quickroute/en. /// public static string WebsiteShortUrl { get { return ResourceManager.GetString("WebsiteShortUrl", resourceCulture); } } /// /// Looks up a localized string similar to http://www.matstroeng.se/quickroute/en. /// public static string WebsiteUrl { get { return ResourceManager.GetString("WebsiteUrl", resourceCulture); } } /// /// Looks up a localized string similar to W. /// public static string WestAbbreviated { get { return ResourceManager.GetString("WestAbbreviated", resourceCulture); } } /// /// Looks up a localized string similar to Yes. /// public static string Yes { get { return ResourceManager.GetString("Yes", resourceCulture); } } } } quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.da.resx000066400000000000000000001133771446222606700255560ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Højde Distance Ø Forbrugt tid Eksporter billede Eksporter rute til GPX Puls Søjlediagram Ugyldigt kortbillede Ugyldig rute Sted Kortbilledet eksisterer ikke. Ny gradient [Ingen GPS-enheder tilsluttet] Der er ingen GPS-enheder tilsluttet. N Åbn QuickRoute fil Tempo Gem ændringer i {0}? QuickRoute Rutefilen eksisterer ikke. Gem QuickRoute-fil som Vælg kortbilledfil Vælg rutefil S Hastighed Tid Totalt Sprogændringen træder i kraft næste gang QuickRoute startes. Uden navn Version {0} V Kopier til skrivebordet Nyt kort Retningsafvigelse Eksporter til KMZ Eksporter rutedata Kort QuickRoute løbepas {0} QuickRoute data Position Hale Ruter Tilføj ruter En uventet fejl opstod. Unavngivet {0} Åbn i Google Earth QuickRoute version {0} er nu tilgængelig. Funktioner i den nye version: Åbn flere QuickRoute filer i Google Earth Mellemtid {0} Der er ingen gyldig QuickRoute-fil angivet. De følgende filer indeholder ingen QuickRoute data og kan ikke inkluderes: {0} Ukendt filformat for {0} Vælg kolonner Udjævningsinterval for {0} Vælg information Fejl ved læsning af billedfil Fejl ved eksport af rutefil Fejl ved oprettelse af nyt dokument Fejl ved åbning af dokument Fejl ved lagring af dokument Fejl ved kommunikation med kortpubliceringsserver Google Earth er ikke installeret på denne computer. Download programmet fra earth.google.com Google Earth er ikke installeret Filen er ikke en gyldig QuickRoute fil. Slet mellemtid {0} Udskriv... Kortlæsningstid Ja Nej [ingen sekundær farve] ikke forbundet Billedstørrelse pixels Ændre Downloader billede Der er ingen rutepunkter i filen. Der er ingen rutepunkter med tider i filen. moh m slag/min min/km km/t Alle filer (*.*)|*.* Frwd tekstfiler (*.txt)|*.txt Billedfiler (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff QuickRoute 1.0 xml filer (*.xml)|*.xml QuickRoute filer (*.qrt)|*.qrt Garmin Training Center history-filer (*.tcx)|*.tcx Navlock act filer (*.act)|*.act Kortet blev ikke offentliggjort Kortet blev offentliggjort på {0} Kortet blev offentliggjort KMZ filer (*.kmz)|*.kmz Route data filer (*.xml)|*.xml JPEG filer eksporteret fra QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Alle QuickRoute filer (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.qrt;*.xml;*.jpg;*.jpeg Højde: {0} masl Højdeforskel (delstræk): {0} m Højdeforskel (total): {0} m Stigning (delstræk): {0} m Stigning (total): {0} m Gennemsnitlig retningsafvigelse (delstræk): {0}° Gennemsnitlig retningsafvigelse (total): {0}° Gennemsnitlig puls (delstræk): {0} bpm Gennemsnitlig puls (total): {0} bpm Gennemsnitlig hældning (delstræk): {0}° Gennemsnitlig hældning (total): {0}° Gennemsnitstempo (delstræk): {0} min/km Gennemsnitstempo (total): {0} min/km Gennemsnitshastighed (delstræk): {0} km/t Gennemsnitshastighed (total): {0} km/t Gennemsnitstempo i luftlinje (delstræk): {0} min/km Gennemsnitstempo i luftlinje (total): {0} min/km Gennemsnitstempo i luftlinje (delstræk): {0} km/t Gennemsnitstempo i luftlinje (total): {0} km/t Faldhøjde (delstræk): {0} m Faldhøjde (total): {0} m Retning: {0}° Retningsafvigelse: {0}° Tid (delstræk): {0} Tid (total): {0} Puls: {0} bpm Hældning: {0}° Mellemtid nummer: {0} Sted: {0} Tid Klik på et punkt på ruten og træk det til det tilsvarende punkt på kortet. Mindst to punkter langs ruten - helst med god afstend - skal tilpasses. Hold Ctrl nede og klik på et tilpasset punkt for at fjerne det. Højreklik og træk for at flytte kortet. Når tilpasningen er tilendebrgat, vælg pilværktøjet for at vise den farvekodede rutelinje. Klik på et punkt på ruten for at fjerne den følgende eller foregående del af ruten. Højreklik og træk for at flytte kortet. Klik på et punkt på ruten for at tilføje en mellemtid. Hold Ctrl nede og klik på en mellemtid for at fjerne den. Hold Shift nede og klik på ruten for at tilføje en mellemtid på et bestemt tidspunkt. Højreklik og træk for at flytte kortet. Hold musepilen over ruten for at vise aktuel tid, distance, hastighed etc. Vælg det område hvor kortbilledet skal forstørres. Klik i midten af det område hvor kortbilledet skal formindskes. Rute Rute segment {0} Gentag Uendeligt Maksimumpuls (delstræk): {0} bpm Maksimumpuls (total): {0} bpm Minimumpuls (delstræk): {0} bpm Minimumpuls (total): {0} bpm Tempo: {0} min/km Rutelængde (delstræk): {0} m Rutelængde (total): {0} m Forskel mellem ruten og luftlinje (delstræk): {0} Forskel mellem ruten og luftlinje (total): {0} Hastighed: {0} km/h Luftlinje (delstræk): {0} m Luftlinje (total): {0} m Tidspunkt: {0} Højde Højdeforskel (delstræk) Højdeforskel (total) Stigning (delstræk) Stigning (total) Gennemsnitlig retningsafvigelse (delstræk) Gennemsnitlig retningsafvigelse (total) Gennemsnitspuls (delstræk) Gennemsnitspuls (total) Gennemsnitshældning (delstræk) Gennemsnitshældning (total) Gennemsnitligt rutetempo (delstræk) Gennemsnitligt rutetempo (total) Gennemsnitshastighed (delstræk) Gennemsnitshastighed (total) Gennemsnitligt luftlinjetempo (delstræk) Gennemsnitligt luftlinjetempo (total) Gennemsnitlig luftlinjehastighed (delstræk) Gennemsnitlig luftlinjehastighed (total) Fald (delstræk) Fald (total) Retning Retningsafvigelse Tid (delstræk) Tid (total) Puls Hældning Delstræk nummer Sted Maksimum puls (delstræk) Maksimum puls (total) Minimumpuls (delstræk) Minimumpuls (total) Tempo Rutelængde (delstræk) Rutelængde (total) Forskel melllem rutelængde og luftlinje (delstræk) Forskel mellem rutelængde og luftlinje (total) Hastighed Luftlinje (delstræk) Luftlinje (total) Tidspunkt Billedposition X: {0} Billedposition Y: {0} Breddegrad: {0} Længdegrad: {0} Billedposition X Billedposition Y Breddegrad Længdegrad Tidsforbrug sidste stykke før aktuel position Tidsforbrug sidste stykke før aktuel position: {0} Tidsforbrug første stykke efter aktuel position Tidsforbrug første stykke efter aktuel position: {0} Tidsforbrug ud fra post Tidsforbrug ud fra post: {0} Tidsforbrug ind mod post Tidsforbrug ind mod post: {0} Sum af tidsforbrug ud fra poster Totaltidsforbrug ud fra poster: {0} Sum af tidsforbrug ind mod poster Totaltidsforbrug ind mod poster: {0} Gennemsnitlig tid mellem kortlæsning (delstræk) Gennemsnitlig tid mellem kortlæsning (delstræk): {0} Gennemsnitlig tid mellem kortlæsning (total) Gennemsnitlig tid mellem kortlæsning (total): {0} Gennemsnitlig kortlæsningstid (delstræk) Gennemsnitlig kortslæsningstid (delstræk): {0} Gennemsnitlig kortlæsningstid (total) Gennemsnitlig kortlæsningstid (total): {0} Kortlæsningstid Kortlæsningstid: {0} Kortlæsningstid (delstræk) Kortlæsningstid (delstræk): {0} Kortlæsningstid (total) Kortlæsningstid (total): {0} Kortlæsningsprocent (delstræk) Kortlæsningsprocent (delstræk): {0} Kortlæsningstid (total) Kortlæsningstid (total): {0} Kortlæsning Kortlæsning: {0} Tid fra afslutning af sidste kortlæsning Tid fra afslutning af sidste kortlæsning: {0} Tid før begyndelsen af næste kortlæsning Tid før begyndelsen af næste kortlæsning: {0} Antal kortlæsninger (delstræk) Antal kortlæsninger (delstræk): {0} Antal kortlæsninger (total) Antal kortlæsninger (total): {0} Gennemsnitshastighed under kortlæsning (delstræk) Gennemsnitshastighed under kortlæsning (delstræk): {0} min/km Gennemsnitshastighed under kortlæsning (total) Gennemsnitshastighed under kortlæsning (total): {0} min/km Gennemsnitshastighed når der ikke læses kort (delstræk) Gennemsnitshastighed når der ikke læses kort (delstræk): {0} min/km Gennemsnitshastighed når der ikke læses kort (total) Gennemsnitshastighed når der ikke læses kort (total): {0} min/km quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.de.resx000066400000000000000000001003641446222606700255520ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Höhe Distanz http://www.matstroeng.se/quickroute/de/donation.php Klicke auf einen Punkt entlang der Strecke und ziehe ihn auf die passende Stelle auf der Karte. Mindestens zwei Punkte sind erforderlich, bevorzugt in einem gleichmäßigen Abstand. Wenn benötigt, können weitere Punkt hinzugefügt werden. Drücke und halte Strg und klicke auf einen Punkt um ihn zu entfernen. Mit Rechtsklick auf die Karte und ziehen der Maus kannst du die Karte verschieben. Wenn du mit der Anpassung fertig bist, wähle das Mauszeiger-Werkzeug um die farbcodierte Strecke zu betrachten. Klicke auf einen Punkt entlang der Strecke um den vorhergehenden oder nachfolgenden Teil zu entfernen. Mit Rechtsklick auf die Karte und ziehen der Maus kannst du die Karte verschieben. Klicke auf einen Punkt entlang der Strecke um eine Zwischenzeit einzufügen. Drücke und halte Strg und klicke auf eine Zwischenzeit um sie zu entfernen. Drücke und halte Shift und klicke auf die Strecke um eine Zwischenzeit an einer bestimmten Zeit einzufügen. Mit Rechtsklick auf die Karte und ziehen der Maus kannst du die Karte verschieben. Ziehe die Maus über die Strecke um Zeit, Distanz, KM-Schnitt, usw. anzuzeigen. Wähle den Teil der Karte, der vergrößert werden soll. Klicke auf den Mittelpunkt, an dem die Karte verkleinert werden soll. O Laufzeit Fehler beim Exportieren der Bilddatei Fehler beim Exportieren der Streckendatei Fehler beim Erstellen eines neuen Dokuments Fehler beim Öffnen des Dokuments Fehler beim Speichern des Dokuments Bild exportieren Strecke als GPX exportieren Herzfrequenz http://www.matstroeng.se/quickroute/de/help Balkendiagramm Ungültige Bilddatei Ungültige Strecke Position Die Bilddatei existiert nicht. Neuer Verlauf [Kein GPS-Gerät gefunden] Es wurde kein GPS-Gerät gefunden. N QuickRoute-Datei öffnen KM-Schnitt Änderungen in {0} speichern? QuickRoute Streckendatei existiert nicht. Es sind keine Wegpunkte in der Datei vorhanden. Es sind keine Wegpunkte mit Zeiten in der Datei vorhanden. QuickRoute-Datei speichern unter Kartendatei wählen Streckendatei wählen S Geschwindigkeit Zeit Gesamt Die Änderung der Sprache wird beim nächsten Start von QuickRoute übernommen. m.ü.M. m bpm min/km km/h Unbenannt Version {0} matstroeng.se/quickroute/de http://www.matstroeng.se/quickroute/de W Alle Dateien (*.*)|*.* Frwd Textdateien (*.txt)|*.txt Bilddateien (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff JPEG (*.jpg; *.jpeg)|*.jpg;*.jpeg PNG (*.png)|*.png QuickRoute 1.0 XML Dateien (*.xml)|*.xml QuickRoute-Dateien (*.qrt)|*.qrt Garmin Training Center Dateien (*.tcx)|*.tcx TIFF (*.tiff; *.tif)|*.tiff;*.tif In Zwischenablage kopieren Navilock act Dateien (*.act)|*.act Neue Karte Fehler beim Kommunizieren mit dem Server zum Veröffentlichen der Karte Die Karte wurde nicht veröffentlicht Die Karte wurde unter {0} veröffentlicht. Die Karte wurde veröffentlicht Richtungsabweichung ° {0} x {1} Pixel http://www.matstroeng.se/doma Google Earth ist anscheinend nicht installiert. Es kann von earth.google.com heruntergeladen werden. Google Earth ist nicht installiert. Exportieren als KMZ Streckendaten exportieren GPX (*.gpx)|*.gpx KMZ (*.kmz)|*.kmz Streckendaten Dateien (*.xml)|*.xml Karte QuickRoute Einheit bei {0} Strecke Streckenabschnitt {0} Wiederholung unendlich QuickRoute Daten Position Schweif Strecken Dateien hinzufügen Von QuickRoute exportierte JPEG Dateien (*.jpg; *.jpeg)|*.jpg;*.jpeg Ein unerwarteter Fehler ist aufgetreten. Unbenannt {0} In Google Earth öffnen QuickRoute Version {0} ist verfügbar. Features in der neuen Version: Mehrere QuickRoute-Dateien in Google Earth öffnen Zwischenzeit {0} Es wurden keine gültigen QuickRoute-Dateien angegeben. Die folgende Datei enthält keine gültigen QuickRoute Daten und kann nicht verwendet werden: {0} Alle QuickRoute-Dateien (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Das Dateiformat von {0} wurde nicht erkannt. Die Datei ist keine gültige QuickRoute-Datei. Spalten wählen Glättungsintervall für {0} Höhe: {0} m.ü.M. Höhenunterschied (Zwischenzeit): {0} m Höhenunterschied (Gesamt): {0} m Anstieg (Zwischenzeit): {0} m Anstieg (Gesamt): {0} m Durchschnittliche Richtungsabweichung (Zwischenzeit): {0}° Durchschnittliche Richtungsabweichung (Gesamt): {0}° Durchschnittliche Herzfrequenz (Zwischenzeit): {0} bpm Durchschnittliche Herzfrequenz (Gesamt): {0} bpm Durchschnittliche Steigung (Zwischenzeit): {0}° Durchschnittliche Steigung (Gesamt): {0}° Durchschnittlicher KM-Schnitt auf der Strecke (Zwischenzeit): {0} min/km Durchschnittlicher KM-Schnitt auf der Strecke (Gesamt): {0} min/km Durchschnittsgeschwindigkeit auf der Strecke (Zwischenzeit): {0} km/h Durchschnittsgeschwindigkeit auf der Strecke (Gesamt): {0} km/h Durchschnittlicher KM-Schnitt unter der Linie (Zwischenzeit): {0} min/km Durchschnittlicher KM-Schnitt unter der Linie (Gesamt): {0} min/km Durchschnittsgeschwindigkeit unter der Linie (Zwischenzeit): {0} km/h Durchschnittsgeschwindigkeit unter der Linie (Gesamt): {0} km/h Abstieg (Zwischenzeit): {0} m Abstieg (Gesamt): {0} m Richtung: {0}° Richtungsabweichung: {0}° Zeit (Zwischenzeit): {0} Zeit (Gesamt): {0} Herzfrequenz: {0} bpm Steigung: {0}° Zwischenzeit: {0} Position: {0} Maximale Herzfrequenz (Zwischenzeit): {0} bpm Maximale Herzfrequenz (Gesamt): {0} bpm Minimale Herzfrequenz (Zwischenzeit): {0} bpm Minimale Herzfrequenz (Gesamt): {0} bpm KM-Schnitt: {0} min/km Streckenlänge (Zwischenzeit): {0} m Streckenlänge (Gesamt): {0} m Unterschied zwischen Streckenlänge und Distanz unter der Linie (Zwischenzeit): {0} Unterschied zwischen Streckenlänge und Distanz unter der Linie (Gesamt): {0} Geschwindigkeit: {0} km/h Distanz unter der Linie (Zwischenzeit): {0} m Distanz unter der Linie (Gesamt): {0} m Uhrzeit: {0} Höhe Höhenunterschied (Zwischenzeit) Höhenunterschied (Gesamt) Anstieg (Zwischenzeit) Anstieg (Gesamt) Durchschnittliche Richtungsabweichung (Zwischenzeit) Durchschnittliche Richtungsabweichung (Gesamt) Durchschnittliche Herzfrequenz (Zwischenzeit) Durchschnittliche Herzfrequenz (Gesamt) Durchschnittliche Steigung (Zwischenzeit) Durchschnittliche Steigung (Gesamt) Durchschnittlicher KM-Schnitt auf der Strecke (Zwischenzeit) Durchschnittlicher KM-Schnitt auf der Strecke (Gesamt) Durchschnittsgeschwindigkeit auf der Strecke (Zwischenzeit) Durchschnittsgeschwindigkeit auf der Strecke (Gesamt) Durchschnittlicher KM-Schnitt unter der Linie (Zwischenzeit) Durchschnittlicher KM-Schnitt unter der Linie (Gesamt) Durchschnittsgeschwindigkeit unter der Linie (Zwischenzeit) Durchschnittsgeschwindigkeit unter der Linie (Gesamt) Abstieg (Zwischenzeit) Abstieg (Gesamt) Richtung Richtungsabweichung Zeit (Zwischenzeit) Zeit (Gesamt) Herzfrequenz Steigung Zwischenzeit Position Maximale Herzfrequenz (Zwischenzeit) Maximale Herzfrequenz (Gesamt) Minimale Herzfrequenz (Zwischenzeit) Minimale Herzfrequenz (Gesamt) KM-Schnitt Streckenlänge (Zwischenzeit) Streckenlänge (Gesamt) Unterschied zwischen Streckenlänge und Distanz unter der Linie (Zwischenzeit) Unterschied zwischen Streckenlänge und Distanz unter der Linie (Gesamt) Geschwindigkeit Distanz unter der Linie (Zwischenzeit) Distanz unter der Linie (Gesamt) Uhrzeit Eigenschaften wählen Horizontaler Punkt: {0} Vertikaler Punkt: {0} Breitengrad: {0} Längengrad: {0} Horizontaler Punkt Vertikaler Punkt Breitengrad Längengrad Bildgrösse Pixel Ändern quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.fi.resx000066400000000000000000000772351446222606700255720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Korkeus Matka http://www.matstroeng.se/quickroute/en/donation.php I Kulunut aika Vie kuva Vie reitti GPX:nä Syke http://www.matstroeng.se/quickroute/en/help Pylväskaavio Ei-toimiva karttakuva Ei-toimiva reitti Sijainti Karttakuvaa ei löydy. Uusi liukuväri (GPS-laitetta ei ole kytketty) GPS-laitteita ei ole kytketty P Avaa QuickRoute -tiedosto Vauhti Tallenna muutokset tiedostoon {0}? Reittitiedostoa ei löydy. Tallenna QuickRoute -tiedosto Valitse karttatiedosto Valitse rettitiedosto E Nopeus Aika Yhteensä Kielimuutos tulee voimaan, kun käynnistät QuickRouten seuraavan kerran. Nimetön Versio {0} L Kopioi leikepöydälle Uusi kartta Suuntapoikkeama {0} x {1} pikseliä Vie KMZ-muodossa Vie reittidata Kartta QuickRoute -sessio {0} Reitti Reittiosuus {0} Uusinta ääretön QuickRoute -data Paikka Häntä Reitit Lisää tiedostoja Odottamaton virhe tapahtui. Nimetön {0} Avaa Google Earthissa QuickRoute -versio {0} on saatavilla. Uuden version toimintoja: Avaa useampi QuickRoute -tiedosto Google Earthissa Kierros {0} Et ole määritellyt valideja QuickRoute -tiedostoja. Seuraavissa tiedostoissa ei ole QuickRoute -dataa eikä niitä voida sisällyttää: {0} Tiedoston {0} formaattia ei tunnistettu. Valitse sarakkeet Tasausintervalli tiedostolle {0} Valitse tieto Poista kierros {0} Tulosta... Klikkaa kohtaa reitillä ja vedä se oikeaan kohtaan kartalla. Vähintään kaksi toisistaan etäällä olevaa pistettä pitää määritellä. Voit käyttää myös useampaa pistettä. Pidä CTRL pohjassa ja klikkaa määriteltyä pistettä poistaaksesi sen. Siirtääksesi karttaa tartu ja raahaa hiiren oikealla napilla. Kun olet lopettanut määrittelyn, valitse osoitintyökalu nähdäksesi värikoodatun reittiviivan. Klikkaa kohtaa reitillä poistaaksesi aiemman tai myöhemmän osan reitistä. Siirtääksesi karttaa tartu ja raahaa hiiren oikealla napilla. Klikkaa kohtaa reitillä lisätäksei väliajan. Pidä CTRL pohjassa ja klikkaa määriteltyä pistettä poistaaksesi sen. Pidä SHIFT pohjassa ja klikkaa reittiä lisätäksesi väliajan tiettyyn aikaan. Siirtääksesi karttaa tartu ja raahaa hiiren oikealla napilla. Vie hiiren osoitin reitin päälle nähdäksesi ajan, matkan, vauhdin jne. Valitse suurennettava alue kartalta. Klikkaa kohtaa, johon haluat pienennettävän kartan keskikohdan. Virhe kuvatiedoston viennissä Virhe reittitiedoston viennissä Virhe luodessa uutta dokumenttia Virhe avattaessa dokumenttia Virhe tallennettaessa dokumenttia Tiedostossa ei ole reittipisteitä (waypoints) Tiedostossa ei ole reittipisteitä (waypoints) näillä ajoilla m Kaikki tiedostot (*.*)|*.* FRWD-tekstitiedostot (*.txt)|*.txt Kuvatiedostot (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff QuickRoute 1.0 xml-tiedostot (*.xml)|*.xml QuickRoute -tiedostot (*.qrt)|*.qrt Garmin Training Center -historiatiedostot (*.tcx)|*.tcx Navilock ACT-tiedostot (*.act)|*.act Virhe kartta-arkiston palvelinkommunikaatiossa Tätä karttaa ei ole julkaistu Tämä kartta julkaistiin {0}. Tämä kartta on julkaistu Google Earth ei näytä olevan asennettuna tähän tietokoneeseen. Lataa se osoitteesta: earth.google.com Google Earthia ei ole asennettu KMZ-tiedostot (*.kmz)|*.kmz Reittidatatiedostot (*.xml)|*.xml Jpeg -tiedostot QuickRoutesta (*.jpg; *.jpeg)|*.jpg;*.jpeg Kaikki QuickRoute -tiedostot (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Tämä ei ole toimiva QuickRoute -tiedosto Korkeus merenpinnasta: {0} m Korkeusero (väli): {0} m Korkeusero (yhteensä): {0} m Noususumma (väli): {0} m Noususumma (yhteensä): {0} m Suuntapoikkeaman keskiarvo (väli): {0}° Suuntapoikkeaman keskiarvo (yhteensä): {0}° Keskisyke (väli): {0} bpm Keskisyke (yhteensä): {0} bpm Keskikaltevuus (väli): {0}° Keskikaltevuus (yhteensä): {0}° Keskivauhti (väli): {0} min/km Keskivauhti (yhteensä): {0} min/km Keskinopeus (väli): {0} min/km Keskinopeus (yhteensä): {0} min/km Keskivauhti suoraa viivaa (väli): {0} min/km Keskivauhti suoraa viivaa (yhteensä): {0} min/km Keskinopeus suoraa viivaa (väli): {0} min/km Keskinopeus suoraa viivaa (yhteensä): {0} min/km Laskusumma (väli): {0} m Laskusumma (yhteensä): {0} m Suunta: {0}° Suuntapoikkeama: {0}° Aika (väli): {0} Aika (yhteensä): {0} Syke: {0} bpm Kaltevuus: {0}° Välin numero: {0} Sijainti: {0} Maksimisyke (väli): {0} bpm Maksimisyke (yhteensä): {0} bpm Minimisyke (väli): {0} bpm Minimisyke (yhteensä): {0} bpm Vauhti: {0} min/km Reitin pituus (väli): {0} m Reitin pituus (yhteensä): {0} m Reitin ja suoran viivan ero (väli): {0} Reitin ja suoran viivan ero (yhteensä): {0} Nopeus: {0} km/h Suoran viivan pituus (väli): {0} m Suoran viivan pituus (yhteensä): {0} m Kellonaika: {0} Korkeus Korkeusero (väli) Korkeusero (yhteensä) Noususumma (väli) Noususumma (yhteensä) Suuntapoikkeaman keskiarvo (väli) Suuntapoikkeaman keskiarvo (yhteensä) Keskisyke (väli) Keskisyke (yhteensä) Keskikaltevuus (väli) Keskikaltevuus (yhteensä) Keskivauhti (väli) Keskivauhti (yhteensä) Keskinopeus (väli) Keskinopeus (yhteensä) Keskivauhti suoraviivaa (väli) Keskivauhti suoraviivaa (yhteensä) Keskinopeus suoraa viivaa (väli) Keskinopeus suoraa viivaa (yhteensä) Laskusumma (väli) Laskusumma (yhteensä) Suunta Suuntapoikkeama Aika (väli) Aika (yhteensä) Syke Kaltevuus Väli Sijainti Maksimisyke (väli) Maksimisyke (yhteensä) Minimisyke (väli) Minimisyke (yhteensä) Vauhti Reitin pituus (väli) Reitin pituus (yhteensä) Reitin ja suoran viivan ero (väli) Reitin ja suoran viivan ero (yhteensä) Nopeus Suoran viivan pituus (väli) Suoran viivan pituus (yhteensä) Kellonaika Karttakuvan X-sijainti: {0} Karttakuvan Y-sijainti: {0} Leveysaste: {0} Pituusaste: {0} Karttakuvan X-sijainti Karttakuvan Y-sijainti Leveysaste Pituusaste Ympyräaika (taaksepäin) Ympyräaika (taaksepäin): {0} Ympyräaika (eteenpäin) Ympyräaika (eteenpäin): {0} Ympyräaika välin alussa (edelliseltä rastilta lähtö) Ympyräaika välin alussa (edelliseltä rastilta lähtö): {0} Ympyräaika välin lopussa (tälle rastille tulo) Ympyräaika välin lopussa (tälle rastille tulo): {0} Ympyräaikojen summa välien aluissa (rastilta lähtö) Ympyräaikojen summa välien aluissa (rastilta lähtö): {0} Ympyräaikojen summa välien lopuissa (rastille tulo) Ympyräaikojen summa välien lopuissa (rastille tulo): {0} Kuvan koko pikseliä Muuta quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.fr.resx000066400000000000000000001042171446222606700255720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cliquer sur un point de la trace et le déplacer sur l'emplacement correspondant sur la carte. Un minimum de deux points sur la trace (de préférence éloignés), est nécessaire pour ajuster la trace. Si besoin, d'autres points peuvent être utilisés. Appuyer sur 'Ctrl' et cliquer sur un point pour le supprimer. Un clic droit permet de déplacer la carte. Quand l'ajustement est terminé, sélectionner le curseur 'Pointeur' pour voir apparaitre la trace colorisée. Cliquer sur la trace pour supprimer la partie avant ou après le curseur. Un clic droit permet de déplacer la carte. Cliquer sur la trace pour ajouter un temps intermédiaire. Appuyer sur 'Ctrl' et cliquer sur un point pour le supprimer. Appuyer sur 'Shift' et cliquer sur la route pour ajouter un temps intermédiaire à un temps spécifique. Un clic droit permet de déplacer la carte. Survoler la trace avec la souris pour afficher l'heure, les distances, l'allure,.... Sélectionner la zone qui doit être zoomée. Cliquer sur le point qui doit être au centre du zoom - Temps passé Erreur lors de l'export du fichier image Erreur lors de l'export du fichier trace Erreur lors de la création du nouveau document Erreur lors de l'ouverture du document Erreur lors de l'enregistrement du document Exporter l'image Exporter la trace en GPX Fréquence Cardiaque Histogramme Fichier carte invalide Trace invalide Emplacement Le fichier image n'existe pas. [Pas de GPS connecté] Il n'y a pas de GPS connecté. Ouvrir un fichier QuickRoute Allure Enregistrer les changements {0} ? Le fichier trace n'existe pas. Il n'y a pas de waypoints dans le fichier. Il n'y a pas de waypoints avec temps dans le fichier. Enregistrer fichier QuickRoute sous Sélectionner le fichier image Sélectionner le fichier trace Vitesse Heure Le changement de la langue sera effectué au prochain chargement de QuickRoute. Tous les fichiers (*.*)|*.* Fichier TXT FRWD (*.txt)|*.txt Fichiers image (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Fichier QuickRoute xml 1.0 (*.xml)|*.xml Fichier QuickRoute (*.qrt)|*.qrt Fichier historique Garmin TrainingCenter (*.tcx)|*.tcx Copier dans le presse papier Fichier Navilock act (*.act)|*.act Nouvelle carte Erreur lors de la communication avec le serveur DOMA La carte n'a pas été publiée La carte a été publiée à {0}. Le carte a été publiée Déviation de la direction GoogleEarth ne semble pas installé sur cet ordinateur. Téléchargez-le depuis earth.google.com GoogleEarth n'est pas installé Exporter en KMZ Exporter les données de la trace Fichier des données de la trace (*.xml)|*.xml Carte Session QuickRoute à {0} Trace Portion de la trace {0} infini Données QuickRoute Trainée Traces Ajouter des fichiers Fichier Jpeg exporté depuis QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Une erreur inattendue c'est produite. Ouvrir dans GoogleEarth La version {0} de QuickRoute est disponible. Nouveautés de cette version : Ouvrir plusieurs fichiers QuickRoute dans Google Earth Il n'y a aucun fichier QuickRoute valide. Le fichier suivant ne contient pas de données QuickRoute et ne peut être ajouté : {0} Tous les fichiers QuickRoute (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Le format du fichier {0} n'est pas reconnu. Ce fichier n'est pas un fichier QuickRoute valide. Sélectionner les colonnes Lisser les intervalles pour {0} Différence d'altitude (lap): {0} m Différence d'altitude (total): {0} m Ascension (lap): {0} m Ascension (total): {0} m Dérive moyenne de la direction (lap): {0}° Dérive moyenne de la direction (total): {0}° FC moyenne (lap): {0} bpm FC moyenne (total): {0} bpm Pente moyenne (lap): {0}° Pente moyenne (total): {0}° Allure moyenne (lap): {0} min/km Allure moyenne (total): {0} min/km Vitesse moyenne (lap): {0} km/h Vitesse moyenne (total): {0} km/h Allure moyenne en ligne droite (lap): {0} min/km Allure moyenne en ligne droite (total): {0} min/km Vitesse moyenne en ligne droite (lap): {0} km/h Vitesse moyenne en ligne droite (total): {0} km/h Descente (lap): {0} m Descente (total): {0} m Direction: {0}° Déviation de la direction: {0}° Durée (lap): {0} Durée (total): {0} Fréquence cardiaque: {0} bpm Pente: {0}° lap N°: {0} Emplacement: {0} FCmax (lap): {0} bpm FCmax (total): {0} bpm FCmin (lap): {0} bpm FCmin (total): {0} bpm Allure: {0} min/km Distance (lap): {0} m Distance (total): {0} m Différence de longueur entre la trace et la ligne droite (lap): {0} Différence de longueur entre la trace et la ligne droite (total): {0} Vitesse: {0} km/h Distance en ligne droite (lap): {0} m Distance en ligne droite (total): {0} m Heure: {0} Différence d'altitude (lap) Différence d'altitude (total) Ascension (lap) Ascension (total) Déviation moyenne de la direction (lap) Déviation moyenne de la direction (total) FC moyenne (lap) FC moyenne (total) Pente moyenne (lap) Pente moyenne (total) Allure moyenne (lap) Allure moyenne (total) Vitesse moyenne (lap) Vitesse moyenne (total) Allure moyenne en ligne droite (lap) Allure moyenne en ligne droite (total) Vitesse moyenne en ligne droite (lap) Vitesse moyenne en ligne droite (total) Descente (lap) Descente (total) Déviation de la direction Durée (lap) Durée (total) FC Pente N° de lap Emplacement FCmax (lap) FCmax (total) FCmin (lap) FCmin (total) Allure Distance (lap) Distance (total) Différence de longueur entre la trace et la ligne droite (lap) Différence de longueur entre la trace et la ligne droite (total) Vitesse Distance en ligne droite (lap) Distance en ligne droite (total) Heure Sélectionner l'information Position en X de l'image: {0} Position en Y de l'image: {0} Position en X de l'image Position en Y de l'image mètres Sans Titre Sans titre {0} Altitude: {0} mètres Fichier Kmz (*.kmz)|*.kmz Temps d'approche de cette position Temps d'approche de cette position: {0} Temps d'éloignement de cette position Temps d'éloignement de cette position: {0} Temps de sortie de poste Temps de sortie de poste: {0} Temps d'approche de poste Temps d'approche de poste: {0} Somme des temps de sorties de postes Somme des temps de sorties de postes: {0} Somme des temps d'approches de postes Somme des temps d'approches de postes: {0} Effacer lap {0} Imprimer... Durée de lecture Oui Pas Temps Temps moyen entre les lectures (lap) Temps moyen entre les lectures (lap): {0} Temps moyen entre les lectures (total) Temps moyen entre les lectures (total): {0} Temps moyen de lecture (lap) Temps moyen de lecture (lap): {0} Temps moyen de lecture (total) Temps moyen de lecture (total): {0} Durée de lecture Durée de lecture: {0} Durée de lecture (lap) Durée de lecture (lap): {0} Durée de lecture (total) Durée de lecture (total): {0} Pourcentage de lecture (lap) Pourcentage de lecture (lap): {0} Pourcentage de lecture (total) Pourcentage de lecture (total): {0} Reading map Reading map: {0} Temps depuis la dernière lecture Temps depuis la dernière lecture: {0} Temps avant la prochaine lecture Temps avant la prochaine lecture: {0} Nombre de lectures (lap) Nombre de lectures (lap): {0} Nombre de lectures (total) Nombre de lectures (total): {0} Taille de l'image pixels Changer quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.it.resx000066400000000000000000001031761446222606700256020ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Altitudine Distanza http://www.matstroeng.se/quickroute/en/donation.php Clik su un punto del percorsoe spostalo sulla corrispettiva posizione sulla mappa. Almeno due punti sulla traccia, preferibilmente ben distanziati, sono necessari per una corretta posizione. Se necessario utilizza più punti. Blocca il tasto Ctrl e fai clik su un punto per rimuoverlo. Premi il tasto destro e trascinalo per muovere la mappa. Quando le modifiche sono finite, seleziona lo strumento puntatore per visualizzare la traccia colorata. Clicca su un punto del percorso per rimuovere la precedente o successiva parte del percorso. Premi il tasto destro e trascinalo per spostare la carta. Seleziona un punto della traccia per aggiungere un tempo parziale. Premi il tasto Ctrl e clik per rimuovere il tempo parziale. Premi il tasto Shift e clik sulla traccia per aggiungere un tempo parziale ad un tempo specifico. Premi il tasto destro e trascinalo per spostare la carta. Al passaggio del puntatore sul percorso puoi vedere il tempo, distanza, ritmo, ecc.. Seleziona la area della mappa che dve essere allargata. Seleziona il punto centrala dove la mappa deve essere ridotta. E Tempo trascorso Errore durante il tentativo di esportare l'immagine Errore durante il tentativo di esportare il percorso Errore durante il tentativo di creare il nuovo documento Errore durante il tentativo di aprire il documento Errore durante il tentativo di salvare il documento Esporta immagine Esporta percorso dal GPX Frequenza cardiaca http://www.matstroeng.se/quickroute/en/features.phhttp://www.matstroeng.se/quickroute/en/help Istogramma Immagine non valida Percorso invalido Posizione Il file immagine della mappa non esiste Nuova sfumatura [Il dispositivo GPS non è connesso] Non ci sono dispositivi GPS connessi. N Apri un file di QuickRoute Ritmo Salvo i cambiamenti in {0}? QuickRoute Il file del percorso non esiste. Non ci sono waypoints nel file. Non ci sono waypoints con tempo nel file. Salva il file QuickRoute con nome Seleziona l'immagine della mappa Seleziona il file del percorso S Velocità Tempo Totale Il cambiamento della lingua sarà effettivo al prossimo riavvio del programma. mslm m bmp min/km km/h Senza titolo Versione {0} matstroeng.se/quickroute/en http://www.matstroeng.se/quickroute/en/ O Tutti i file (*.*)|*.* Frwd file di testo (*.txt)|*.txt File immagine (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Jpeg (*.jpg; *.jpeg)|*.jpg;*.jpeg Png (*.png)|*.png File xml QuickRoute 1.0 (*.xml)|*.xml File QuickRoute (*.qrt)|*.qrt File history Garmin Training Center (*.tcx)|*.tcx Tiff (*.tiff; *.tif)|*.tiff;*.tif Copia negli appunti File Navilock act (*.act)|*.act Nuova mappa Errore duranta la comunicazione con il server per la pubblicazione della mappa La mappa non è stata pubblicata La mappa è stata pubblicata a {0}. La mappa è stata pubblicata Deviazione della direzione ° {0} x {1} pixel http:www.matstroeng.se/doma Google Earth non sembra essere installato su questo computer. Scaricalo da earth.google.com Google Heart non è installato Esporta nel formato KMZ Esporta le informazioni del percorso Gpx (*.gpx)|*.gpx File Kmz (*.kmz)|*.kmz File di percorso (*.xml)|*.xml Mappa QuickRoute sessione a {0} Percorso Segmento del percorso {0} Ripeti infinito QuickRoute dati Posizione Coda Percorsi Aggiungi file File Jpeg esportato da QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Si è verificato un errore inaspettato Senza titolo {0} Apri in Google Heart E' disponibile la versione {0} di QuickRoute Nuove caratteristiche della versione Apri molti file di QuickRoute in Google Heart Giro {0} Non è stato specificato un file di QuickRoute valido. I seguenti file non contengono informazioni di QuickRoute e non possono includere: {0} Tutti i file QuickRoute (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Il formato del file {0} non è riconosciuto Il file non è valido per QuickRoute. Seleziona colonne Intervallo di sfuocatura per {0} Altitudine: {0} mslm Seleziona informazioni Cancella giro {0} Stampa... Differenza di altitudine (giro): {0} m Differenza di altitudine (totale): {0} m Salita (giro): {0} m Salita (totale): {0} m Deviazione media della direzione (giro): {0}° Deviazione media della direzione (totale): {0}° Freuenza cardiaca media (giro): {0} bpm Freuenza cardiaca media (totale): {0} bpm Pendenza media (giro): {0}° Pendenza media (totale): {0}° Ritmo medio del percorso (giro): {0} min/km Ritmo medio del percorso (totale): {0} min/km Velocità media del percorso (giro): {0} min/km Velocità media del percorso (totale): {0} min/km Ritmo medio del percorso del percorso in linea reta (giro): {0} min/km Ritmo medio del percorso in linea reta (totale): {0} min/km Velocità media del percorso in linea reta (giro): {0} min/km Velocità media del percorso in linea reta (totale): {0} min/km Discesa (giro): {0} m Discesa (totale): {0} m Direzione: {0}° Deviazione della direzione: {0}° Tempo (giro): {0} Tempo (totale): {0} Battito cardiaco: {0} bpm Inclinazione: {0}° Numero giro: {0} Posizione: {0} Frequenza cardiaca massima (giro): {0} bpm Frequenza cardiaca massima (totale): {0} bpm Frequenza cardiaca minima (giro): {0} bpm Frequenza cardiaca massima (totale): {0} bpm Ritmo: {0} min/km Distanza del percorso (giro): {0} m Distanza del percorso (totale): {0} m Differenza tra il percorso e la distanza della retta (giro): {0} Differenza tra il percorso e la distanza della retta (totale): {0} Velocità: {0} km/h Distanza linea retta (giro): {0} m Distanza linea retta (totale): {0} m Ora del giorno: {0} Altitudine Differenza di altitudine (giro) Differenza di altitudine (totale) Salita (giro) Salita (totale) Deviazione media della direzione (giro) Deviazione media della direzione (totale) Freuenza cardiaca media (giro) Freuenza cardiaca media (totale) Pendenza media (giro) Pendenza media (totale) Ritmo medio del percorso (giro) Ritmo medio del percorso (totale) Velocità media del percorso (giro) Velocità media del percorso (totale) Ritmo medio del percorso in linea reta (giro) Ritmo medio del percorso in linea reta (totale) Velocità media del percorso in linea reta (giro) Velocità media del percorso in linea reta (totale) Discesa (giro) Discesa (totale) Direzione Deviazione della direzione Tempo (giro) Tempo (totale) Frequenza cardiaca Inclinazione Numero giro Posizione Frequenza cardiaca massima (giro) Frequenza cardiaca massima (totale) Frequenza cardiaca minima (giro) Frequenza cardiaca massima (totale) Ritmo Distanza del perscorso (giro) Distanza del perscorso (totale) Differenza tra il percorso e la distanza della retta (giro) Differenza tra il percorso e la distanza della retta (totale) Velocità Distanza linea retta (giro) Distanza linea retta (totale) Ora del giorno Posizione X dell'immagine: {0} Posizione Y dell'immagine: {0} Latitudine: {0} Longitudine: {0} Posizione X dell'immagine Posizione Y dell'immagine Latitudine Longitudine Posizione attuale vicino al tempo Posizione attuale vicino al tempo: {0} Posizione attuale partenza del tempo Posizione attuale partenza del tempo: {0} Tempo di allontanamento dal punto di controllo Tempo di allontanamento dal punto di controllo: {0} Tempo di avvicinamento alla posizione attuale Tempo di avvicinamento alla posizione attuale: {0} Somma dei tempi di allontanamento dal punto di controllo Somma dei tempi di allontanamento dal punto di controllo: {0} Somma dei tempi di avvicinamento al punto di controllo Somma dei tempi di avvicinamento al punto di controllo: {0} quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.lt.resx000066400000000000000000001006741446222606700256050ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Aukštis Atstumas dovanos internetinis puslapis Paspauskite ant prabėgimo linijos ir tempkite ją iki atitinkamos vietos ant žemėlapio. Mažiausiai du taškai trasoje (pageidautina skirtingose pusėse) turi būti taip atitaikyti su žemėlapiu. Jei yra būtinybė, tokių taškų gali būti daugiau. Norėdami panaikinti tempimo tašką, paspauskite ir laikykite Ctrl ir tada paskauskite ant to taško. Norėdami pajudinti žemėlapį, paspauskite dešinį palės klavišą ir tempkite. Kai taškų atitaikymas yra baigtas, paspauskite ant rodyklės ženklo - tada matysite spalvotą prabėgimų liniją. Paspauskite ant prabėgimų ten, nuo kur norite pašalinti ankstesnę ar vėlesnę prabėgimų dalį. Norėdami pajudinti žemėlapį, paspauskite dešinį palės klavišą ir tempkite. Paspauskite ant taško prabėgimuose norėdami pridėti tarpinį laiką. Norėdami panaikinti tarpinį laiką paspauskite ir laikykite Ctrl ir paspauskite ant taško, kurį norite panaikinti. Norėdami pridėti tarpinį laiką specifiniu laiko momentu, paspauskite ir laikykite Shift ir paspauskite ant prabėgimų. Norėdami pajudinti žemėlapį, paspauskite dešinį palės klavišą ir tempkite. Slankiokite su pele ant prabėgimų norėdami matyti tuo momentu esantį atstumą, laiką greitį ir t.t. Pasirinkite vietą, kur žemėlapis turėtų būti padidintas. Paspauskite vidurio tašką kur žemėlapis turėtų būti sumažintas. R Praėjęs laikas Klaida perkeliant žemėlapio failą Klaida perkeliant prabėgimų failą Klaida bandant sukurti naują dokumentą Klaida bandant atidaryti dokumentą Klaida bandant išsaugoti dokumentą Perkelti vaizdą Perkelti trasą į GPX Širdies pulsas Pagalba Histograma Netinkamas žemėlapio vaizdas Netinkama trasa Vieta Neegzistuojantis žemėlapio failas Naujas nuolydis [GPS laikrodis nėra prijungtas] GPS laikrodis nėra prijungtas. Š Atidaryti QuickRoute failą Tempas Išsaugoti pakeitimus {0}? Neegzistuojantis trasos failas. Šiame faile prabėgimų nėra. Šiame faile nėra prabėgimų su laikais. Išsaugoti QuickRoute failą kaip Pasirinkti žemėlapio vaizdo failą Pasirinkti trasos failą P Greitis Laikas Iš viso Kalba bus pakeista kitą kartą įjungus QuickRoute. mvjl m dpm Be pavadinimo Versija {0} V Visi failai (*.*)|*.* Vaizdiniai failai (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Nukopijuoti į iškarpinę Naujas žemėlapis Klaida susisiekiant su žemėlapį publikuojančiu serveriu Žemėlapis nepublikuotas Žemėlapis išpublikuotas {0}. Žemėlapis išpublikuotas Krypties nuokrypis {0} x {1} pikselių Google Earth programa nėra įdiegta į šį kompiuterį. Tai galite padaryti šiuo adresu earth.google.com. Google Earth programa nėra įdiegta Perkelti į KMZ Perkelti trasos duomenis Prabėgimų duomenų failai (*.xml)|*.xml Žemėlapis QuickRoute treniruotė {0} Trasa Trasos dalis {0} Trasos pakartojimas neribotas ilgis QuickRoute duomenys Vieta Uodega Prabėgimai Pridėti failus Jpeg failai perkelti iš QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Atsirado nenumatyta klaida. Be pavadinimo {0} Atidaryti Google Earth programoje Jau galima QuickRoute {0} versija. Naujos versijos ypatybės: Atidaromi keli QuickRoute failai Google Earth programoje Etapai {0} Nėra pasirinktas tinkamas QuickRoute failas. Šiame faile nėra QuickRoute duomenų ir jis negali būti pridėtas: {0} Visi QuickRoute failai (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Neatpažintas failo {0} formatas. Šis failas nėra tinkamas QuickRoute failas. Pasirinkti stulpelį Švelninimo intervalas {0} Aukštis: {0} mvjl Aukščio skirtumas (etapas): {0} m Aukščio skirtumas (iš viso): {0} m Pakilimas (etapas): {0} m Pakilimas (iš viso): {0} m Vidutinis krypties nuokrypis (etapas): {0}° Vidutinis krypties nuokrypis (iš viso): {0}° Vidutinis širdies pulsas (etapas): {0} dpm Vidutinis širdies pulsas (iš viso): {0} dpm Vidutinis nuolydis (etapas): {0}° Vidutinis nuolydis (iš viso): {0}° Vidutinis bėgimo tempas (etapas): {0} min/km Vidutinis bėgimo tempas (iš viso): {0} min/km Vidutinis bėgimo greitis (etapas): {0} km/h Vidutinis bėgimo greitis (iš viso): {0} km/h Vidutinis tempas tiesia linija (etapas): {0} min/km Vidutinis tempas tiesia linija (iš viso): {0} min/km Vidutinis greitis tiesia linija (etapas): {0} km/h Vidutinis greitis tiesia linija (iš viso): {0} km/h Nusileidimas (etapas): {0} m Nusileidimas (iš viso): {0} m Kryptis: {0}° Krypties nuokrypis: {0}° Laikas (etapas): {0} Laikas (iš viso): {0} Širdies pulsas: {0} dpm Nuolydis: {0}° Etapo numeris: {0} Vieta: {0} Maksimalus širdies pulsas (etapas): {0} dpm Maksimalus širdies pulsas (iš viso): {0} dpm Minimalus širdies pulsas (etapas): {0} dpm Minimalus širdies pulsas (iš viso): {0} dpm Tempas: {0} min/km Prabėgimo atstumas (etapas): {0} m Prabėgimo atstumas (iš viso): {0} m Atstumo skirtumas tarp tiesios linijos ir prabėgimo (etapas): {0} Atstumo skirtumas tarp tiesios linijos ir prabėgimo (iš viso): {0} Greitis:{0} km/h Tiesios linijos atstumas (etapas): {0} m Tiesios linijos atstumas (iš viso): {0} m Astronominis laikas: {0} Aukštis Aukščio skirtumas (etapas) Aukščio skirtumas (iš viso) Pakilimas (etapas) Pakilimas (iš viso) Vidutinis krypties nuokrypis (etapas) Vidutinis krypties nuokrypis (iš viso) Vidutinis širdies pulsas (etapas) Vidutinis širdies pulsas (iš viso) Vidutinis nuolydis (etapas) Vidutinis nuolydis (iš viso) Vidutinis bėgimo tempas (etapas) Vidutinis bėgimo tempas (iš viso) Vidutinis bėgimo greitis (etapas) Vidutinis bėgimo greitis (iš viso) Vidutinis tempas tiesia linija (etapas) Vidutinis tempas tiesia linija (iš viso) Vidutinis greitis tiesia linija (etapas) Vidutinis greitis tiesia linija (iš viso) Nusileidimas (etapas) Nusileidimas (iš viso) Kryptis Krypties nuokrypis Laikas (etapas) Laikas (iš viso) Širdies pulsas Nuolydis Etapo numeris Vieta Maksimalus širdies pulsas (etapas) Maksimalus širdies pulsas (iš viso) Minimalus širdies pulsas (etapas) Minimalus širdies pulsas (iš viso) Tempas Prabėgimo atstumas (etapas) Prabėgimo atstumas (iš viso) Atstumo skirtumas tarp tiesios linijos ir prabėgimo (etapas) Atstumo skirtumas tarp tiesios linijos ir prabėgimo (iš viso) Greitis Tiesios linijos atstumas (etapas) Tiesios linijos atstumas (iš viso) Astronominis laikas Pasirinkti informaciją Vaizdo X vieta: {0} Vaizdo Y vieta: {0} Platuma: {0} Ilguma: {0} Vaizdo X vieta Vaizdo Y vieta Platuma Ilguma Ištrinti {0} etapą Spausdinti... Frwd tekstiniai failai (*.txt)|*.txt QuickRoute 1.0 xml failai (*.xml)|*.xml QuickRoute failai (*.qrt)|*.qrt Garmin Training Center duomenų failai (*.tcx)|*.tcx Navilock act failai (*.act)|*.act Kmz failai (*.kmz)|*.kmz Kontrolinio punkto paėmimo laikas Kontrolinio punkto paėmimo laikas: {0} Kontrolinio punkto palikimo laikas Kontrolinio punkto palikimo laikas: {0} Kontrolinio punkto palikimo laikas Kontrolinio punkto palikimo laikas: {0} Kontrolinio punkto paėmimo laikas Kontrolinio punkto paėmimo laikas: {0} Suminis kontrolinio punkto palikimo laikas Suminis kontrolinio punkto palikimo laikas: {0} Suminis kontrolinio punkto paėmimo laikas Suminis kontrolinio punkto paėmimo laikas: {0} quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.no.resx000066400000000000000000001017701446222606700256000ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Ø Puls Åpne QuickRoute-fil Tempo Lagre endringene i {0}? QuickRoute Rutefilen finnes ikke. Lagre QuickRoute-fil som Velg kartfil Velg rute-fil S Tidspunkt Totalt Språkendringen trer i kraft neste gang QuickRoute startes. Versjon {0} http://www.matstroeng.se/quickroute/no V Nytt kart Retningsavvik QuickRoute-økt {0} Rute Rutesegment {0} Spill av på nytt uendelig QuickRoute-data Posisjon Hale Ruter Åpne i Google Earth QuickRoute-versjon {0} er nå tilgjengelig. Åpne flere QuickRoute-filer i Google Earth Velg kolonner Utjevningsnivå for {0} Velg informasjon Høyde Distanse http://www.matstroeng.se/quickroute/no/donation.php Forbrukt tid Feil ved eksport av bildefil Feil ved eksport av rute-fil Feil ved generering av nytt dokument Feil ved åpning av fil Feil ved lagring av fil Eksporter bilde Eksporter rute til GPX-fil http://www.matstroeng.se/quickroute/no/help Søylediagram Ugyldig kartfil Ugyldig rute Plassering Kartfilen finnes ikke. Nytt fargeoppsett [Ingen GPS-enhet tilkoblet] Det er ingen GPS-enhet tilkoblet. N Det finnes ingen veipunkter i filen. Det finnes ingen veipunkter med tidspunkt i filen. Hastighet moh m slag/min min/km km/t Ikke navngitt matstroeng.se/quickroute/no Alle filer (*.*)|*.* Flate tekst-filer (*.txt)|*.txt Bilde-filer (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Jpeg (*.jpg; *.jpeg)|*.jpg;*.jpeg Png (*.png)|*.png QuickRoute 1.0 xml-filer (*.xml)|*.xml QuickRoute-filer (*.qrt)|*.qrt Garmin Training Center history-filer (*.tcx)|*.tcx Tiff (*.tiff; *.tif)|*.tiff;*.tif Kopier til utklippstavle Navilock act-filer (*.act)|*.act Feil ved kommunikasjon mot kartpubliseringsserver Kartet ble ikke publisert Kartet ble publisert på {0}. Kartet ble publisert ° {0} x {1} piksler http://www.matstroeng.se/doma Det virker som om Google Earth ikke er installert på denne maskinen. Du kan laste det ned fra earth.google.com. Google Earth er ikke installert Eksporter til KMZ Eksporter rutedata Gpx (*.gpx)|*.gpx Kmz-filer (*.kmz)|*.kmz Rute-datafiler (*.xml)|*.xml Kart Legg til filer Jpeg-filer eksportert fra QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Det oppsto en uventet feil. Navnløs fil {0} Funksjoner og egenskaper i den nye versjonen: Mellomtid {0} Det er ikke angitt noen QuickRoute-fil. Følgende filer inneholder ingen QuickRoute-data, og kan ikke inkluderes: {0} Alle QuickRoute-filer (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Ukjent filformat for {0}. Filen er ikke en gyldig QuickRoute-fil. Høyde: {0} moh Høydeforskjell (strekk): {0} m Høydeforskjell (totalt): {0} m Stigning (strekk): {0} m Stigning (totalt): {0} m Gjennomsnittlig retningsavvik (strekk): {0}° Gjennomsnittlig retningsavvik (totalt): {0}° Gjennomsnittlig puls (strekk): {0} slag/min Gjennomsnittlig puls (totalt): {0} slag/min Gjennomsnittlig helling (strekk): {0}° Gjennomsnittlig helling (totalt): {0}° Gjennomsnittstempo (strekk): {0} min/km Gjennomsnittstempo (totalt): {0} min/km Gjennomsnittshastighet (strekk): {0} km/t Gjennomsnittshastighet (totalt): {0} km/t Gjennomsnittstempo i luftlinje (strekk): {0} min/km Gjennomsnittstempo i luftinje (totalt): {0} min/km Gjennomsnittshastighet i luftinje (strekk): {0} km/t Gjennomsnittshastighet i luftlinje (totalt): {0} km/t Fallhøyde (strekk): {0} m Fallhøyde (totalt): {0} m Retning: {0}° Retningsavvik: {0}° Tid (strekk): {0} Tid (totalt): {0} Puls: {0} slag/min Helling: {0}° Mellomtid nr.: {0} Plassering: {0} Maks-puls (strekk): {0} slag/min Maks-puls (totalt): {0} slag/min Min-puls (strekk): {0} slag/min Min-puls (totalt): {0} slag/min Tempo: {0} min/km Rutens distanse (strekk): {0} m Rutens distanse (totalt): {0} m Distanseforskjell mellom rute og luftlinje (strekk): {0} Distanseforskjell mellom rute og luftlinje (totalt): {0} Hastighet: {0} km/t Distanse i luftlinje (strekk): {0} m Distanse i luftlinje (totalt): {0} m Tid på dagen: {0} Høyde Høydeforskjell (strekk) Høydeforskjell (totalt) Stigning (strekk) Stigning (totalt) Gjennomsnittlig retningsavvik (strekk) Gjennomsnittlig retningsavvik (totalt) Gjennomsnittspuls (strekk) Gjennomsnittspuls (totalt) Gjennomsnittlig helling (strekk) Gjennomsnittlig helling (totalt) Gjennomsnittlig tempo langs ruten (strekk) Gjennomsnittlig tempo langs ruten (totalt) Gjennomsnittshastighet langs ruten (strekk) Gjennomsnittshastighet langs ruten (totalt) Gjennomsnittlig tempo i luftlinje (strekk) Gjennomsnittlig tempo i luftlinje (totalt) Gjennomsnittshastighet i luftlinje (strekk) Gjennomsnittshastighet i luftlinje (totalt) Fallhøyde (strekk) Fallhøyde (totalt) Retning Retningsavvik Tid (strekk) Tid (totalt) Puls Helling Mellomtidsnr. Plassering Maks-puls (strekk) Maks-puls (totalt) Min-puls (strekk) Min-puls (totalt) Tempo Bildets X-posisjon: {0} Bildets Y-posisjon: {0} Breddegrad: {0} Lengdegrad: {0} Klikk på et punkt på ruten (sporet) og dra dette til det korresponderende punktet på kartet. Minst to punkter langs ruten, fortrinnsvis langt fra hverandre, må justeres på denne måten. Om ønskelig, kan det brukes flere punkter. Hold Ctrl-tasten nede og klikk på et justeringspunkt for å slette det. Høyreklikk og dra for å forskyve kartet. Når du er ferdig med å justere, velg pekeverktøyet for å vise fargekodene langs ruten. Klikk på et punkt på ruten for å fjerne den delen av ruten som ligger før eller etter dette punktet. Høyreklikk og dra for å forskyve kartet. Klikk på et punkt på ruten for å legge til en mellomtid. Hold Ctrl-tasten nede og klikk på et mellomtids-punkt for å fjerne dette. Hold Shift-tasten nede og klikk på ruten for å legge til en mellomtid på et bestemt tidspunkt. Høyreklikk og dra for å forskyve kartet. Hold musepekeren over ruten for å vise aktuell tid, distanse, tempo, osv. Velg et område på kartet som skal forstørres. Klikk i midten av det området som skal forstørres. Rutens distanse (strekk) Rutens distanse (totalt) Distanseforskjell mellom rute og luftlinje (strekk) Distanseforskjell mellom rute og luftlinje (totalt) Hastighet Distanse i luftlinje (strekk) Distanse i luftlinje (totalt) Tid på dagen Bildets X-posisjon Bildets Y-posisjon Breddegrad Lengdegrad Tid inn mot gjeldende plassering Tid inn mot gjeldende plassering: {0} Tid ut fra gjeldende plassering Tid ut fra gjeldende plassering: {0} Tid ut fra post Tid ut fra post: {0} Tid inn mot post Tid inn mot post: {0} Total tid ut fra poster Total tid ut fra poster: {0} Total tid inn mot poster Total tid inn mot poster: {0} Slett strekk/runde {0} Skriv ut... Bildestørrelse piksler Endre Laster ner bilde quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.resx000066400000000000000000001224121446222606700251610ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Altitude Distance http://www.matstroeng.se/quickroute/en/donation.php Click on a point on the route and drag it to the corresponding location on the map. At least two points along the route, preferable well interspaced, need to be adjusted. If needed, more points can be used. Hold down Ctrl and click on an adjusted point to remove it. Right-click and drag to move the map. When adjustment is finished, select the pointer tool to display the color-coded route line. Click on a point on the route to remove the preceding or succeeding part of the route. Right-click and drag to move the map. Click on a point on the route to add a split time. Hold down Ctrl and click on a split time to remove it. Hold down Shift and click the route to add a split at a specific time. Right-click and drag to move the map. Hover the mouse pointer over the route to view current time, distance, pace etc. Select the area where the map image should be enlarged. Click the center point where the map image should be scaled down. E Elapsed time Error when trying to export image file Error when trying to export route file Error when trying to create a new document Error when trying to open document Error when trying to save document Export Image Export route to GPX Heart rate http://www.matstroeng.se/quickroute/en/help Histogram Invalid map image Invalid route Location The map image file does not exist. New gradient [No GPS devices connected] There are no GPS devices connected. N Open QuickRoute file Pace Save changes to {0}? QuickRoute The route file does not exist. There are no waypoints in the file. There are no waypoints with times in the file. Save QuickRoute file as Select map image file Select route file S Speed Time Total The language change will take effect next time QuickRoute is started. masl m bpm min/km km/h Untitled Version {0} matstroeng.se/quickroute/en http://www.matstroeng.se/quickroute/en W All files (*.*)|*.* Frwd text files (*.txt)|*.txt Image files (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Jpeg (*.jpg; *.jpeg)|*.jpg;*.jpeg Png (*.png)|*.png QuickRoute 1.0 xml files (*.xml)|*.xml QuickRoute files (*.qrt)|*.qrt Garmin Training Center history files (*.tcx)|*.tcx Tiff (*.tiff; *.tif)|*.tiff;*.tif Copy to clipboard Navilock act files (*.act)|*.act New map Error when communicating with map publishing server The map was not published The map was published at {0}. The map was published Direction deviation ° {0} x {1} pixels http://www.matstroeng.se/doma Google Earth does not seem to be installed on this computer. Download it from earth.google.com. Google Earth is not installed Export to KMZ Export route data Gpx (*.gpx)|*.gpx Kmz files (*.kmz)|*.kmz Added 2009-12-05 Route data files (*.xml)|*.xml Map QuickRoute session at {0} Route Route segment {0} Replay infinite QuickRoute data Position Tail Routes Add files Jpeg files exported from QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg An unexpected error occured. Untitled {0} Open in Google Earth QuickRoute version {0} is now avaliable. Features in the new version: Open multiple QuickRoute files in Google Earth Lap {0} There are no valid QuickRoute files specified. The following files do not contain QuickRoute data and could not be included: {0} All QuickRoute files (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg The file format of {0} is not recognized. The file is not a valid QuickRoute file. Select columns Smoothing interval for {0} Altitude: {0} masl Altitude difference (lap): {0} m Altitude difference (total): {0} m Ascent (lap): {0} m Ascent (total): {0} m Average direction deviation (lap): {0}° Average direction deviation (total): {0}° Average heart rate (lap): {0} bpm Average heart rate (total): {0} bpm Average inclination (lap): {0}° Average inclination (total): {0}° Average route pace (lap): {0} min/km Average route pace (total): {0} min/km Average route speed (lap): {0} km/h Average route speed (total): {0} km/h Average straight line pace (lap): {0} min/km Average straight line pace (total): {0} min/km Average straight line speed (lap): {0} km/h Average straight line speed (total): {0} km/h Descent (lap): {0} m Descent (total): {0} m Direction: {0}° Direction deviation: {0}° Time (lap): {0} Time (total): {0} Heart rate: {0} bpm Inclination: {0}° Lap number: {0} Location: {0} Maximum heart rate (lap): {0} bpm Maximum heart rate (total): {0} bpm Minimum heart rate (lap): {0} bpm Minimum heart rate (total): {0} bpm Pace: {0} min/km Route distance (lap): {0} m Route distance (total): {0} m Difference between the route and the straight line distance (lap): {0} Difference between the route and the straight line distance (total): {0} Speed: {0} km/h Straight line distance (lap): {0} m Straight line distance (total): {0} m Time of day: {0} Altitude Altitude difference (lap) Altitude difference (total) Ascent (lap) Ascent (total) Average direction deviation (lap) Average direction deviation (total) Avg. heart rate Average heart rate (total) Average inclination (lap) Average inclination (total) Avg. route pace Average route pace (total) Average route speed (lap) Average route speed (total) Avg. straight line pace Average straight line pace (total) Average straight line speed (lap) Average straight line speed (total) Descent (lap) Descent (total) Direction Direction deviation Time (lap) Time (total) Heart rate Inclination Lap num. Location Maximum heart rate (lap) Maximum heart rate (total) Minimum heart rate (lap) Minimum heart rate (total) Pace Route dist. (lap) Route distance (total) Diff. between the route and the straight line dist. Difference between the route and the straight line distance (total) Speed Straight line dist. Straight line distance (total) Time of day Select information Image X position: {0} Image Y position: {0} Latitude: {0} Longitude: {0} Image X position Image Y position Latitude Longitude Current position approaching time Added 2009-11-17 Current position approaching time: {0} Added 2009-11-17 Current position leaving time Added 2009-11-17 Current positionleaving time: {0} Added 2009-11-17 Control leaving time Added 2009-11-17 Control leaving time: {0} Added 2009-11-17 Control approaching time Added 2009-11-17 Control approaching time: {0} Added 2009-11-17 Sum of control leaving times Added 2009-11-17 Sum of control leaving times: {0} Added 2009-11-17 Sum of control approaching times Added 2009-11-17 Sum of control approaching times: {0} Added 2009-11-17 Delete lap {0} Added 2009-11-26 Print... Added 2009-11-27 Map reading duration Added 2011-01-13 Yes Added 2011-01-13 No Added 2011-01-13 Time Added 2011-01-13 Average time between map readings (lap) Added 2011-01-15 Average time between map readings (lap): {0} Added 2011-01-15 Average time between map readings (total) Added 2011-01-15 Average time between map readings (total): {0} Added 2011-01-15 Average map reading time (lap) Added 2011-01-15 Average map reading time (lap): {0} Added 2011-01-15 Average map reading time (total) Added 2011-01-15 Average map reading time (total): {0} Added 2011-01-15 Map reading duration Added 2011-01-15 Map reading duration: {0} Added 2011-01-15 Map reading duration (lap) Added 2011-01-15 Map reading duration (lap): {0} Added 2011-01-15 Map reading duration (total) Added 2011-01-15 Map reading duration (total): {0} Added 2011-01-15 Map reading percentage (lap) Added 2011-01-15 Map reading percentage (lap): {0} Added 2011-01-15 Map reading percentage (total) Added 2011-01-15 Map reading percentage (total): {0} Added 2011-01-15 Reading map Added 2011-01-15 Reading map: {0} Added 2011-01-15 Time to end of previous map reading Added 2011-01-15 Time to end of previous map reading: {0} Added 2011-01-15 Time to start of next map reading Added 2011-01-15 Time to start of next map reading: {0} Added 2011-01-15 Number of map readings (lap) Added 2011-01-15 Number of map readings (lap): {0} Added 2011-01-15 Number of map readings (total) Added 2011-01-15 Number of map readings (total): {0} Added 2011-01-15 Average pace when reading map (leg) Added 2011-01-23 Average pace when reading map (leg): {0} min/km Added 2011-01-23 Average pace when reading map (total) Added 2011-01-23 Average pace when reading map (total): {0} min/km Added 2011-01-23 Average pace when not reading map (leg) Added 2011-01-23 Average pace when not reading map (leg): {0} min/km Added 2011-01-23 Average pace when not reading map (total) Added 2011-01-23 Average pace when not reading map (total): {0} min/km Added 2011-01-23 [no second color] Added 2011-01-23 not connected Added 2011-07-15 Image size Added 2011-12-10 pixels Added 2011-12-10 Change Added 2011-12-10 Downloading image Added 2011-12-10 Garmin FIT (*.fit)|*.fit Added 2011-12-25 quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.ru.resx000066400000000000000000001117711446222606700256140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Высота Расстояние http://www.matstroeng.se/quickroute/en/donation.php Кликните в точку на пути и перетащите её на соответствущее место на карте. По меньшей мере две точки пути (желательно на большом расстоянии друг от друга) должны быть привязаны к карте. Если необходимо, можно привязать большее число точек. Чтобы удалить точку кликните по ней, удерживая клавишу Ctrl. Перетаскивать карту можно в помощью правой кнопки мыши. Чтобы перейти в режим визуализации данных пути, после окончания привязки выберите инструмент "указатель". Кликните на точку не пути, чтобы удалить часть пути до или после этой точки. Перетаскивать карту можно в помощью правой кнопки мыши. Кликните в точку на пути чтобы добавить перегон. Чтобы удалить перегон кликните по по точке, удерживая клавишу Ctrl. Чтобы добавить отсечку, соответствующую определённому времени, кликните по карте удерживая клавишу Shift. Перетаскивать карту можно в помощью правой кнопки мыши. Чтобы узнать время, расстояние,темп и т.д. в определённой точке пути наведите на неё указатель мыши. Выделите область карты, которую надо приблизить. Кликните в центр области карты которую надо отдалить. В Общее время Ошибка при попытке экспортировать файл изображения Ошибка при попытке экспортировать файл пути Ошибка при попытке создать новый документ Ошибка при попытке открыть документ Ошибка при попытке сохранить документ Экспорт изображения Экспорт пути в GPX ЧСС http://www.matstroeng.se/quickroute/en/help Гистограмма Невалидное изображение карты Невалидный путь Положение Файл с изображением карты не найден Новый градиент [Устройства GPS не найдены] Устройства GPS не найдены. С Открыть файл QuickRoute Темп Сохранить изменение в {0}? QuickRoute Файл с путём не существует. Файл не содержит путевых отметок. Файл не содержит путевых отметок с записью времени. Сохранить файл QuickRoute как Выберите файл с изображением карты Выберите файл с путём Ю Скорость Время Итог Изменение языка вступит в силу при следующем запуске QuickRoute м м уд/мин мин/км км/ч Безымянный Версия {0} matstroeng.se/quickroute/en http://www.matstroeng.se/quickroute/en З Все файлы (*.*)|*.* Текстовые файлы Frwd (*.txt)|*.txt Файлы изображений (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Файлы Jpeg (*.jpg; *.jpeg)|*.jpg;*.jpeg Файлы PNG (*.png)|*.png Файлы QuickRoute XML 1.0 (*.xml)|*.xml Файлы QuickRoute files (*.qrt)|*.qrt Файлы истории Garmin Training Center (*.tcx)|*.tcx Файлы Tiff (*.tiff; *.tif)|*.tiff;*.tif Копировать в буфер Файлы Navilock act (*.act)|*.act Новая карта Ошибка при взаимодействии с сервером публикации карт Карта не была опубликована Карта успешно опубликована на {0}. Карта опубликована Отклонение ° {0} x {1} пикселей http://www.matstroeng.se/doma По-видимому программа Google Earth не устновлена на данном компьютере. Загрузите её с сайта earth.google.com Программа Google Earth не устновлена Экспорт в KMZ Экспорт пути Файлы GPX (*.gpx)|*.gpx Файлы KMZ (*.kmz)|*.kmz Файлы путей (*.xml)|*.xml Карта Сессия QuickRoute в {0} Путь Сегмент пути {0} Воспроизведение бесконечно Данные QuickRoute Позиция Остаток Пути Добавить файлы Файлы JPEG экспортированные из QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Произошла непредвиденная ошибка. Безымянный {0} Открыть в Google Earth Доступна программа QuickRoute версии {0} Функциональность новой версии: Открыть несколько файлов QuickRoute в Google Earth Перегон {0} Не указано ни одного корректного файла QuickRoute. Указанныне ниже файлы не содержат данных QuickRoute и не могут быть включены: {0} Все файлы QuickRoute (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Формат файла {0} не распознан. Файл не является корректным файлом формата QuickRoute. Настроить таблицу... Сглаживающий интеравал для {0} Высота: {0} м Разница высот (на перегоне): {0} м Разница высот (общая): {0} м Подъём (на перегоне): {0} м Подъём (общий): {0} м Среднее отклонение (на перегоне): {0}° Среднее отклонение (общее): {0}° Средняя ЧСС (на перегоне): {0} уд/мин Средняя ЧСС (общая): {0} уд/мин Средний уклон (на перегоне): {0}° Средний уклон (общий): {0}° Средний темп вдоль пути (на перегоне): {0} мин/км Средний темп вдоль пути (общий): {0} мин/км Средняя скорость вдоль пути (на перегоне): {0} км/ч Средняя скорость вдоль пути (общая): {0} км/ч Средний темп по прямой (на перегоне): {0} мин/км Средний темп по прямой (общий): {0} мин/км Средняя скорость по прямой (на перегоне): {0} км/ч Средняя скорость по прямой (общая): {0} км/ч Спуск (на перегоне): {0} м Спуск (общий): {0} м Направление: {0}° Отклонение: {0}° Время (на перегоне): {0} Время (общее): {0} ЧСС: {0} уд/мин Уклон: {0}° Номер перегона: {0} Положение: {0} Максимальная ЧСС (на перегоне): {0} уд/мин Максимальная ЧСС (общая): {0} уд/мин Минимальная ЧСС (на перегоне): {0} уд/мин Минимальная ЧСС (общая): {0} уд/мин Темп: {0} мин/км Длина пути (на перегоне): {0} м Длина пути (общая): {0} м Разница между расстоянием вдоль пути и по прямой (на перегоне): {0} Разница между расстоянием вдоль пути и по прямой (общая): {0} Скорость: {0} км/ч Расстояние по прямой (на перегоне): {0} м Расстояние по прямой (общее): {0} м Время суток: {0} Высота Разница высот (на перегоне) Разница высот (общая) Подъём (на перегоне) Подъём (общий) Среднее отклонение (на перегоне) Среднее отклонение (общее) Средняя ЧСС (на перегоне) Средняя ЧСС (общая) Средний уклон (на перегоне) Средний уклон (общий) Средний темп вдоль пути (на перегоне) Средний темп вдоль пути (общий) Средняя скорость вдоль пути (на перегоне) Средняя скорость вдоль пути (общая) Средний темп по прямой (на перегоне) Средний темп по прямой (общий) Средняя скорость по прямой (на перегоне) Средняя скорость по прямой (общая) Спуск (на перегоне) Спуск (общий) Направление Отклонение Время (на перегоне) Время (общее) ЧСС Уклон Номер перегона Положение Максимальная ЧСС (на перегоне) Максимальная ЧСС (общая) Минимальная ЧСС (на перегоне) Минимальная ЧСС (общая) Темп Длина пути (на перегоне) Длина пути (общая) Разница между расстоянием вдоль пути и по прямой (на перегоне) Разница между расстоянием вдоль пути и по прямой (общая) Скорость Расстояние по прямой (на перегоне) Расстояние по прямой (общее) Время суток Настроить область значений... X: {0} Y: {0} Широта: {0} Долгота: {0} X Y Широта Долгота Время выхода в текущую точку Время выхода в текущую точку: {0} Время ухода из текущей точки Время ухода из текущей точки: {0} Время ухода с КП Время ухода с КП: {0} Время выхода на КП Время выхода на КП: {0} Сумма времен ухода с КП Сумма времен ухода с КП: {0} Сумма времен выхода на КП Сумма времен выхода на КП: {0} Удалить перегон {0} Печать… quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.sv.Designer.cs000066400000000000000000000000001446222606700267570ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Resources/Strings.sv.resx000066400000000000000000001161701446222606700256140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Höjd Distans http://www.matstroeng.se/quickroute/sv/donation.php Klicka på en punkt på rutten och dra den till motsvarande ställe på kartan. Åtminstone två punkter, gärna med stort mellanrum, behöver passas in. Vid behov kan ytterligare inpassning göras. Håll ner Ctrl och klicka på en inpassad punkt för att ta bort den. Högerklicka och dra för att flytta kartan. När inpassningen är färdig, klicka på pekarverktyget för att visa den färgkodade ruttlinjen. Klicka på en punkt på rutten för att ta bort den del som ligger före eller efter denna punkt. Högerklicka och dra för att flytta kartan. Klicka på en punkt på rutten för att lägga till en mellantid. Håll ner Ctrl och klicka på en mellantid för att ta bort den. Håll ner Skift och klicka på rutten för att lägga till en mellantid vid en viss tidpunkt. Högerklicka och dra för att flytta kartan. Peka med musen på en punkt på rutten för att visa aktuell tid, distans, tempo m.m. Markera området där kartbilden ska förstoras. Markera centrumpunkten där kartbilden ska förminskas. Ö Avverkad tid Fel vid export av fil Fel vid export av ruttfil Fel vid skapande av nytt dokument Fel vid öppnande av dokument Fel vid sparande av dokument Exportera bild Exportera till GPX Puls http://www.matstroeng.se/quickroute/sv/help Histogram Felaktig kartbildfil Felaktig rutt Koordinater Kartbildfilen existerar inte. Ny gradient [Inga GPS-enheter anslutna] Det finns inga GPS-enheter anslutna. N Öppna QuickRoute-fil Tempo Vill du spara ändringarna till {0}? QuickRoute Ruttfilen existerar inte. Det finns inga ruttpunkter i filen. Det finns inga ruttpunkter med tidsangivelser i filen. Spara QuickRoute-fil som Välj kartbildfil Välj ruttfil S Hastighet Tid Totalt Ändringen av språk verkställs nästa gång QuickRoute startas. möh m slag/min min/km km/h Namnlös Version {0} matstroeng.se/quickroute/sv http://www.matstroeng.se/quickroute/sv V Alla filer (*.*)|*.* Frwd textfiler (*.txt)|*.txt Bildfiler (*.jpg; *.jpeg; *.gif; *.png; *.tif; *.tiff)|*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff Jpeg (*.jpg; *.jpeg)|*.jpg;*.jpeg Png (*.png)|*.png QuickRoute 1.0 xml-filer (*.xml)|*.xml QuickRoute-filer (*.qrt)|*.qrt Garmin Training Center historikfiler (*.tcx)|*.tcx Tiff (*.tiff; *.tif)|*.tiff;*.tif Kopiera till urklipp Navilock act-filer (*.act)|*.act Ny karta Fel vid kommunikation med kartpubliceringsserver Riktningsavvikelse ° {0} x {1} pixlar http://www.matstroeng.se/doma Kartan publicerades inte Kartan publicerades på {0}. Kartan publicerades Google Earth verkar inte vara installerat på den här datorn. Ladda ner programmet från earth.google.com. Google Earth är inte installerat Exportera till KMZ Exportera ruttdata GPX (*.gpx)|*.gpx KMZ (*.kmz)|*.kmz Ruttdata-filer (*.xml)|*.xml Karta QuickRoute-pass {0} Rutt Ruttsegment {0} oändlig QuickRoute-data Återuppspelning Position Svans Rutter Lägg till filer JPEG-filer exporterade från QuickRoute (*.jpg; *.jpeg)|*.jpg;*.jpeg Ett oväntat fel inträffade. Namnlös {0} Öppna i Google Earth QuickRoute version {0} är nu tillgänglig. Funktioner i den nya versionen: Öppna flera QuickRoute-filer i Google Earth Mellantid {0} Inga giltiga QuickRoute-filer angivna. Följande filer innehåller inte QuickRoute-data och kan inte tas med: {0} Alla QuickRoute-filer (*.qrt; *.xml; *.jpg; *.jpeg)|*.qrt;*.xml;*.jpg;*.jpeg Filformatet för {0} är okänt. Filen är inte en giltig QuickRoute-fil. Välj kolumner Utjämningsintervall för {0} Höjd: {0} möh Höjdskillnad (sträcka): {0} m Höjdskillnad (totalt): {0} m Stigning (sträcka): {0} m Stigning (totalt): {0} m Genomsnittlig riktningsavvikelse (sträcka): {0}° Genomsnittlig riktningsavvikelse (totalt): {0}° Genomsnittlig puls (sträcka): {0} slag/min Genomsnittlig puls (totalt): {0} slag/min Genomsnittlig lutning (sträcka): {0}° Genomsnittlig lutning (totalt): {0}° Genomsnittligt ruttempo (sträcka): {0} min/km Genomsnittligt ruttempo (totalt): {0} min/km Genomsnittlig rutthastighet (sträcka): {0} km/h Genomsnittlig rutthastighet (totalt): {0} km/h Genomsnittligt tempo fågelvägen (sträcka): {0} min/km Genomsnittligt tempo fågelvägen (totalt): {0} min/km Genomsnittlig hastighet fågelvägen (sträcka): {0} km/h Genomsnittlig hastighet fågelvägen (totalt): {0} km/h Fallhöjd (sträcka): {0} m Fallhöjd (totalt): {0} m Riktning: {0}° Riktningsavvikelse: {0}° Tid (sträcka): {0} Tid (totalt): {0} Puls: {0} slag/min Lutning: {0}° Mellantidsnummer: {0} Position: {0} Högsta puls (sträcka): {0} slag/min Högsta puls (totalt): {0} slag/min Lägsta puls (sträcka): {0} slag/min Lägsta puls (totalt): {0} slag/min Tempo: {0} min/km Ruttlängd (sträcka): {0} m Ruttlängd (totalt): {0} m Längdskillnad mellan rutt och fågelväg (sträcka): {0} Längdskillnad mellan rutt och fågelväg (totalt): {0} Hastighet: {0} km/h Längd fågelvägen (sträcka): {0} m Längd fågelvägen (totalt): {0} m Tidpunkt: {0} Höjd Höjdskillnad (sträcka) Höjdskillnad (totalt) Stigning (sträcka) Stigning (totalt) Genomsnittlig riktningsavvikelse (sträcka) Genomsnittlig riktningsavvikelse (totalt) Genomsnittlig puls (sträcka) Genomsnittlig puls (totalt) Genomsnittlig lutning (sträcka) Genomsnittlig lutning (totalt) Genomsnittligt ruttempo (sträcka) Genomsnittligt ruttempo (totalt) Genomsnittlig rutthastighet (sträcka) Genomsnittlig rutthastighet (totalt) Genomsnittligt tempo fågelvägen (sträcka) Genomsnittligt tempo fågelvägen (totalt) Genomsnittlig hastighet fågelvägen (sträcka) Genomsnittlig hastighet fågelvägen (totalt) Fallhöjd (sträcka) Fallhöjd (totalt) Riktning Riktningsavvikelse Tid (sträcka) Tid (totalt) Puls Lutning Mellantidsnummer Position Högsta puls (sträcka) Högsta puls (totalt) Lägsta puls (sträcka) Lägsta puls (totalt) Tempo Ruttlängd (sträcka) Ruttlängd (totalt) Längdskillnad mellan rutt och fågelväg (sträcka) Längdskillnad mellan rutt och fågelväg (totalt) Hastighet Längd fågelvägen (sträcka) Längd fågelvägen (totalt) Tidpunkt Välj information Bildposition X: {0} Bildposition Y: {0} Latitud: {0} Longitud: {0} Bildposition X Bildposition Y Latitud Longitud Tid sista biten innan aktuell position Tid sista biten innan aktuell position: {0} Tid första biten efter aktuell position Tid första biten efter aktuell position: {0} Kontrollämningstid Kontrollämningstid: {0} Kontrolltagningstid Kontrolltagningstid: {0} Summa kontrollämningstid Summa kontrollämningstid: {0} Summa kontrolltagningstid Summa kontrolltagningstid: {0} Ta bort mellantid {0} Skriv ut... Kartläsningstid Ja Nej Tid Genomsnittlig tid mellan kartläsningar (sträcka) Genomsnittlig tid mellan kartläsningar (sträcka): {0} Genomsnittlig tid mellan kartläsningar (totalt) Genomsnittlig tid mellan kartläsningar (totalt): {0} Genomsnittlig kartläsningtid (sträcka) Genomsnittlig kartläsningtid (sträcka): {0} Genomsnittlig kartläsningtid (totalt) Genomsnittlig kartläsningtid (totalt): {0} Kartläsningstid Kartläsningstid: {0} Kartläsningstid (sträcka) Kartläsningstid (sträcka): {0} Kartläsningstid (totalt) Kartläsningstid (totalt): {0} Kartläsningsandel (sträcka) Kartläsningsandel (sträcka): {0} Kartläsningsandel (totalt) Kartläsningsandel (totalt): {0} Kartläsning Kartläsning: {0} Tid till föregående kartläsnings slut Tid till föregående kartläsnings slut: {0} Tid till nästa kartläsnings start Tid till nästa kartläsnings start: {0} Antal kartläsningar (sträcka) Antal kartläsningar (sträcka): {0} Antal kartläsningar (totalt) Antal kartläsningar (totalt): {0} Genomsnittligt tempo vid kartläsning (sträcka) Genomsnittligt tempo vid kartläsning (sträcka): {0} min/km Genomsnittligt tempo vid kartläsning (totalt) Genomsnittligt tempo vid kartläsning (totalt): {0} min/km Genomsnittligt tempo utanför kartläsning (sträcka) Genomsnittligt tempo utanför kartläsning (sträcka): {0} min/km Genomsnittligt tempo utanför kartläsning (totalt) Genomsnittligt tempo utanför kartläsning (totalt): {0} min/km [ingen andra färg] ej ansluten Bildstorlek pixlar Ändra Laddar ner bild quickroute-linux-upstream-2.5/QuickRoute.Setup/000077500000000000000000000000001446222606700217515ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Setup/QuickRoute.Setup.vdproj000066400000000000000000002333201446222606700263740ustar00rootroot00000000000000"DeployProject" { "VSVersion" = "3:800" "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" "IsWebType" = "8:FALSE" "ProjectName" = "8:QuickRoute.Setup" "LanguageId" = "3:0" "CodePage" = "3:1252" "UILanguageId" = "3:0" "SccProjectName" = "8:" "SccLocalPath" = "8:" "SccAuxPath" = "8:" "SccProvider" = "8:" "Hierarchy" { "Entry" { "MsmKey" = "8:_00CF4D4FCF8692A97D428B936DC54A8C" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_00CF4D4FCF8692A97D428B936DC54A8C" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_032645E70A9E8028F77B7218C0877771" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_032645E70A9E8028F77B7218C0877771" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_239C68A376C32058A0F32BDE7D0BCC5A" "OwnerKey" = "8:_97271A7372ECE7568239DC3FC7EFE97D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_239C68A376C32058A0F32BDE7D0BCC5A" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_29CD3578A05B4B62B19F2ED12EDEF98B" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_3D94E5407A12C9E4577C110F2EDA6BBB" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_4B626CDC9888804852F7E10CB959A29F" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_4B626CDC9888804852F7E10CB959A29F" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_61372016840F1AB1C0CEAD016099832D" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_6591E500BEBEA9A66BD1D55B5D3EF097" "OwnerKey" = "8:_032645E70A9E8028F77B7218C0877771" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_6591E500BEBEA9A66BD1D55B5D3EF097" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_6591E500BEBEA9A66BD1D55B5D3EF097" "OwnerKey" = "8:_7C7E2CD218EA9B97DD6E8428353DF483" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_7C7E2CD218EA9B97DD6E8428353DF483" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_7C7E2CD218EA9B97DD6E8428353DF483" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_97271A7372ECE7568239DC3FC7EFE97D" "OwnerKey" = "8:_3D94E5407A12C9E4577C110F2EDA6BBB" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_97271A7372ECE7568239DC3FC7EFE97D" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_97271A7372ECE7568239DC3FC7EFE97D" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_B279FC818A06E577973FD8CCFE64D184" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_B279FC818A06E577973FD8CCFE64D184" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_BB0CC424DA24F8B2B7943310F4165B3C" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_C9D0C8CA611A40E18D99E049FC3C78E7" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CDCC5F8C8CEC2084029955DCBCBF0DA7" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CDCC5F8C8CEC2084029955DCBCBF0DA7" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CF58C8FE04792535E385772967C6A72F" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_CF58C8FE04792535E385772967C6A72F" "OwnerKey" = "8:_BB0CC424DA24F8B2B7943310F4165B3C" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_E60F8202D75B86A82A9FB7D5FE726475" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_E60F8202D75B86A82A9FB7D5FE726475" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_F411FBFDD1D0F6FE67965A5C5C54D918" "OwnerKey" = "8:_61372016840F1AB1C0CEAD016099832D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_BB0CC424DA24F8B2B7943310F4165B3C" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_CF58C8FE04792535E385772967C6A72F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_CDCC5F8C8CEC2084029955DCBCBF0DA7" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_7C7E2CD218EA9B97DD6E8428353DF483" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_032645E70A9E8028F77B7218C0877771" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_6591E500BEBEA9A66BD1D55B5D3EF097" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_E60F8202D75B86A82A9FB7D5FE726475" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_4B626CDC9888804852F7E10CB959A29F" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_3D94E5407A12C9E4577C110F2EDA6BBB" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_97271A7372ECE7568239DC3FC7EFE97D" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_239C68A376C32058A0F32BDE7D0BCC5A" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_B279FC818A06E577973FD8CCFE64D184" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_00CF4D4FCF8692A97D428B936DC54A8C" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" "OwnerKey" = "8:_61372016840F1AB1C0CEAD016099832D" "MsmSig" = "8:_UNDEFINED" } } "Configurations" { "Debug" { "DisplayName" = "8:Debug" "IsDebugOnly" = "11:TRUE" "IsReleaseOnly" = "11:FALSE" "OutputFilename" = "8:Debug\\QuickRoute.Setup.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:2" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { } } } "Release" { "DisplayName" = "8:Release" "IsDebugOnly" = "11:FALSE" "IsReleaseOnly" = "11:TRUE" "OutputFilename" = "8:Release\\QuickRoute.Setup.msi" "PackageFilesAs" = "3:2" "PackageFileSize" = "3:-2147483648" "CabType" = "3:1" "Compression" = "3:3" "SignOutput" = "11:FALSE" "CertificateFile" = "8:" "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" { "Enabled" = "11:TRUE" "PromptEnabled" = "11:TRUE" "PrerequisitesLocation" = "2:1" "Url" = "8:" "ComponentsUrl" = "8:" "Items" { "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:{9A0B0044-5320-4E5D-9D1A-136F441DB82D}" { "Name" = "8:Microsoft .NET Framework 2.0" "ProductCode" = "8:{9A0B0044-5320-4E5D-9D1A-136F441DB82D}" } } } } } "Deployable" { "CustomAction" { } "DefaultFeature" { "Name" = "8:DefaultFeature" "Title" = "8:" "Description" = "8:" } "ExternalPersistence" { "LaunchCondition" { "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_4CC743D1BD464D1B80BB4AB8352C6541" { "Name" = "8:.NET Framework" "Message" = "8:[VSDNETMSG]" "FrameworkVersion" = "8:2.0.50727 " "AllowLaterVersions" = "11:FALSE" "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=9832" } } } "File" { "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_00CF4D4FCF8692A97D428B936DC54A8C" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:PowerCollections, Version=1.0.2141.24679, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { "_00CF4D4FCF8692A97D428B936DC54A8C" { "Name" = "8:PowerCollections.dll" "Attributes" = "3:512" } } "SourcePath" = "8:PowerCollections.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_032645E70A9E8028F77B7218C0877771" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_032645E70A9E8028F77B7218C0877771" { "Name" = "8:QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.GPSDeviceReaders.GlobalSatGH615MReader.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_239C68A376C32058A0F32BDE7D0BCC5A" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL" "ScatterAssemblies" { "_239C68A376C32058A0F32BDE7D0BCC5A" { "Name" = "8:log4net.dll" "Attributes" = "3:512" } } "SourcePath" = "8:log4net.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_29CD3578A05B4B62B19F2ED12EDEF98B" { "SourcePath" = "8:..\\Graphics\\QuickRoute.ico" "TargetName" = "8:QuickRoute.ico" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3D94E5407A12C9E4577C110F2EDA6BBB" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.Publishers.DOMAPublisher, Version=2.4.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_3D94E5407A12C9E4577C110F2EDA6BBB" { "Name" = "8:QuickRoute.Publishers.DOMAPublisher.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.Publishers.DOMAPublisher.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4B626CDC9888804852F7E10CB959A29F" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:ExifWorks, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { "_4B626CDC9888804852F7E10CB959A29F" { "Name" = "8:ExifWorks.dll" "Attributes" = "3:512" } } "SourcePath" = "8:ExifWorks.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_61372016840F1AB1C0CEAD016099832D" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Interop.EARTHLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" "ScatterAssemblies" { "_61372016840F1AB1C0CEAD016099832D" { "Name" = "8:Interop.EARTHLib.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Interop.EARTHLib.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6591E500BEBEA9A66BD1D55B5D3EF097" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.GPSDeviceReaders.SerialPortDeviceReader, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_6591E500BEBEA9A66BD1D55B5D3EF097" { "Name" = "8:QuickRoute.GPSDeviceReaders.SerialPortDeviceReader.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.GPSDeviceReaders.SerialPortDeviceReader.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_7C7E2CD218EA9B97DD6E8428353DF483" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_7C7E2CD218EA9B97DD6E8428353DF483" { "Name" = "8:QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.GPSDeviceReaders.JJConnectRegistratorSEReader.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_97271A7372ECE7568239DC3FC7EFE97D" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.Common, Version=2.4.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_97271A7372ECE7568239DC3FC7EFE97D" { "Name" = "8:QuickRoute.Common.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.Common.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B279FC818A06E577973FD8CCFE64D184" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.GPSDeviceReaders.GarminUSBReader, Version=2.4.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_B279FC818A06E577973FD8CCFE64D184" { "Name" = "8:QuickRoute.GPSDeviceReaders.GarminUSBReader.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.GPSDeviceReaders.GarminUSBReader.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BB0CC424DA24F8B2B7943310F4165B3C" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_BB0CC424DA24F8B2B7943310F4165B3C" { "Name" = "8:QuickRoute.Controls.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.Controls.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C9D0C8CA611A40E18D99E049FC3C78E7" { "SourcePath" = "8:..\\Graphics\\QuickRouteDocument.ico" "TargetName" = "8:QuickRouteDocument.ico" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CDCC5F8C8CEC2084029955DCBCBF0DA7" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.Resources, Version=2.4.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_CDCC5F8C8CEC2084029955DCBCBF0DA7" { "Name" = "8:QuickRoute.Resources.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.Resources.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CF58C8FE04792535E385772967C6A72F" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:QuickRoute.BusinessEntities, Version=2.4.0.0, Culture=neutral, processorArchitecture=x86" "ScatterAssemblies" { "_CF58C8FE04792535E385772967C6A72F" { "Name" = "8:QuickRoute.BusinessEntities.dll" "Attributes" = "3:512" } } "SourcePath" = "8:QuickRoute.BusinessEntities.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E60F8202D75B86A82A9FB7D5FE726475" { "AssemblyRegister" = "3:1" "AssemblyIsInGAC" = "11:FALSE" "AssemblyAsmDisplayName" = "8:Ionic.Zip, Version=1.7.2.6, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL" "ScatterAssemblies" { "_E60F8202D75B86A82A9FB7D5FE726475" { "Name" = "8:Ionic.Zip.dll" "Attributes" = "3:512" } } "SourcePath" = "8:Ionic.Zip.dll" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F411FBFDD1D0F6FE67965A5C5C54D918" { "SourcePath" = "8:googleearth.exe" "TargetName" = "8:googleearth.exe" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:TRUE" "IsDependency" = "11:TRUE" "IsolateTo" = "8:" } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F7DDDDEF353F4D88B1933DCA1B0A41FE" { "SourcePath" = "8:..\\Graphics\\Setup banner bitmap.bmp" "TargetName" = "8:Setup banner bitmap.bmp" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:TRUE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } } "FileType" { "{5EB83D71-FA18-4901-BE56-DE22E13CC478}:_11351A527A7E4B6E84E2AAFD81A3037D" { "Name" = "8:QuickRoute Document" "Description" = "8:QuickRoute Document" "Extensions" = "8:.qrt" "MIME" = "8:" "Icon" = "8:_C9D0C8CA611A40E18D99E049FC3C78E7" "IconIndex" = "3:0" "Command" { "Command" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" } "Verbs" { "{95C0C507-CBF0-42B8-B119-07219E384A4A}:_5F19A7BB5D984C5F90C3B4FC34D56F30" { "Command" = "8:&Open" "Verb" = "8:open" "Arguments" = "8:\"%1\"" "Order" = "3:0" } "{95C0C507-CBF0-42B8-B119-07219E384A4A}:_CDA3EA3E3D9C4C108BE44E1B19FA4BEE" { "Command" = "8:Open in Google &Earth" "Verb" = "8:openInGoogleEarth" "Arguments" = "8:/openInGoogleEarth \"%1\"" "Order" = "3:1" } } } } "Folder" { "{1525181F-901A-416C-8A58-119130FE478E}:_6F86548E485E4ED4B1DA61DEBE980D9F" { "Name" = "8:#1919" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:ProgramMenuFolder" "Folders" { } } "{1525181F-901A-416C-8A58-119130FE478E}:_8860C2DB394E40938681EAC3B587588C" { "Name" = "8:#1916" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:DesktopFolder" "Folders" { } } "{3C67513D-01DD-4637-8A68-80971EB9504F}:_B843D13A09B94B59B361CB19B26A3B6E" { "DefaultLocation" = "8:[ProgramFilesFolder]\\[ProductName]" "Name" = "8:#1925" "AlwaysCreate" = "11:FALSE" "Condition" = "8:" "Transitive" = "11:FALSE" "Property" = "8:TARGETDIR" "Folders" { } } } "LaunchCondition" { } "Locator" { } "MsiBootstrapper" { "LangId" = "3:0" "RequiresElevation" = "11:FALSE" } "Product" { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:QuickRoute" "ProductCode" = "8:{BDF3D53A-78E0-416D-B03E-A360355FDD6D}" "PackageCode" = "8:{EECE9A42-7580-4BE1-8ABC-8F12880281FE}" "UpgradeCode" = "8:{377BCEA7-95CC-4CAD-A825-502347BD763A}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" "ProductVersion" = "8:2.3" "Manufacturer" = "8:Mats Troeng" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:" "Title" = "8:QuickRoute Setup" "Subject" = "8:" "ARPCONTACT" = "8:Mats Troeng" "Keywords" = "8:" "ARPCOMMENTS" = "8:" "ARPURLINFOABOUT" = "8:www.matstroeng.se/quickroute" "ARPPRODUCTICON" = "8:_29CD3578A05B4B62B19F2ED12EDEF98B" "ARPIconIndex" = "3:0" "SearchPath" = "8:" "UseSystemSearchPath" = "11:TRUE" "TargetPlatform" = "3:0" "PreBuildEvent" = "8:" "PostBuildEvent" = "8:" "RunPostBuildEvent" = "3:0" } "Registry" { "HKLM" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_CC84B2B0B44A42FCA9D4BE8ECD1607CA" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FD997B5BB5624D628B0FC56604ACA84F" { "Name" = "8:[Manufacturer]" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } "Values" { } } } } "HKCU" { "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_70F4CC10073C480EAD85FB3D9C840C45" { "Name" = "8:Software" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D5293250DFFC4E60A935BFABAD319235" { "Name" = "8:[Manufacturer]" "Condition" = "8:" "AlwaysCreate" = "11:FALSE" "DeleteAtUninstall" = "11:FALSE" "Transitive" = "11:FALSE" "Keys" { } "Values" { } } } "Values" { } } } } "HKCR" { "Keys" { } } "HKU" { "Keys" { } } "HKPU" { "Keys" { } } } "Sequences" { } "Shortcut" { "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_53AD3856525B4BCFBA0C67F5EEDBDFEC" { "Name" = "8:QuickRoute" "Arguments" = "8:" "Description" = "8:" "ShowCmd" = "3:1" "IconIndex" = "3:0" "Transitive" = "11:FALSE" "Target" = "8:_D77C75C918DE42BE93B9D94FCFC1A199" "Folder" = "8:_6F86548E485E4ED4B1DA61DEBE980D9F" "WorkingFolder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Icon" = "8:_29CD3578A05B4B62B19F2ED12EDEF98B" "Feature" = "8:" } } "UserInterface" { "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_2B10E3CC72DE4C7EB6BC6E70595BD5A3" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdBasicDialogs.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_463FAC7C2A414FA58B3B5C4E38879BCA" { "Name" = "8:#1901" "Sequence" = "3:1" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F7ABF42177234E63B6FDB3B6174FB556" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_71A42FE9DF264620B44B8ABB0E43C306" { "UseDynamicProperties" = "11:FALSE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdUserInterface.wim" } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_751EDAE4F3724A35974AA8457E2ED7CC" { "Name" = "8:#1901" "Sequence" = "3:2" "Attributes" = "3:2" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_268485A0E7384F51996237406FA1CA9C" { "Sequence" = "3:100" "DisplayName" = "8:Progress" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminProgressDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } "ShowProgress" { "Name" = "8:ShowProgress" "DisplayName" = "8:#1009" "Description" = "8:#1109" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A2CC6C5F985C414F98903FB76A71C6AA" { "Name" = "8:#1902" "Sequence" = "3:1" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7F94C942504B4038B3B65CD9CBADC6EF" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } "UpdateText" { "Name" = "8:UpdateText" "DisplayName" = "8:#1058" "Description" = "8:#1158" "Type" = "3:15" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1258" "DefaultValue" = "8:#1258" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_B8A633D0F1154F929B1F71084DF5E538" { "Name" = "8:#1900" "Sequence" = "3:2" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_1289B8CEEAC641C0B17DD24326E5F501" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5436426FD08A4995B6ED2F66E1DBE722" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C90DE3B08BC0413EA0B78B2788AA881F" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:" "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D0716344196746499B9104288C2E5646" { "Name" = "8:#1900" "Sequence" = "3:1" "Attributes" = "3:1" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_1E478C480D3F41A6B1C778F0CD6F807D" { "Sequence" = "3:200" "DisplayName" = "8:Installation Folder" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdFolderDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } "InstallAllUsersVisible" { "Name" = "8:InstallAllUsersVisible" "DisplayName" = "8:#1059" "Description" = "8:#1159" "Type" = "3:5" "ContextData" = "8:1;True=1;False=0" "Attributes" = "3:0" "Setting" = "3:0" "Value" = "3:1" "DefaultValue" = "3:1" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_26E258C6C9EC4C0CAB4B5C1B5148CEE8" { "Sequence" = "3:300" "DisplayName" = "8:Confirm Installation" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdConfirmDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } } } "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_ECB742766E3A46E7924A24638B89FB15" { "Sequence" = "3:100" "DisplayName" = "8:Welcome" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdWelcomeDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } "CopyrightWarning" { "Name" = "8:CopyrightWarning" "DisplayName" = "8:#1002" "Description" = "8:#1102" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:2" "Value" = "8:" "DefaultValue" = "8:#1202" "UsePlugInResources" = "11:TRUE" } "Welcome" { "Name" = "8:Welcome" "DisplayName" = "8:#1003" "Description" = "8:#1103" "Type" = "3:3" "ContextData" = "8:" "Attributes" = "3:0" "Setting" = "3:1" "Value" = "8:#1203" "DefaultValue" = "8:#1203" "UsePlugInResources" = "11:TRUE" } } } } } "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_DAEB333A2E2C4C05A50F2A25B5463EEE" { "Name" = "8:#1902" "Sequence" = "3:2" "Attributes" = "3:3" "Dialogs" { "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_ACC950C5EFC04CD8A0367340CAB8C64B" { "Sequence" = "3:100" "DisplayName" = "8:Finished" "UseDynamicProperties" = "11:TRUE" "IsDependency" = "11:FALSE" "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" "Properties" { "BannerBitmap" { "Name" = "8:BannerBitmap" "DisplayName" = "8:#1001" "Description" = "8:#1101" "Type" = "3:8" "ContextData" = "8:Bitmap" "Attributes" = "3:4" "Setting" = "3:2" "Value" = "8:_F7DDDDEF353F4D88B1933DCA1B0A41FE" "UsePlugInResources" = "11:TRUE" } } } } } } "MergeModule" { } "ProjectOutput" { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1059E32FF7CE484AB1B7A7F250A2B2C8" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{81633CC3-9C5E-4C93-A9A6-876F6AE40883}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_15CD935208424C9D870654D40AB4F364" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:LocalizedResourceDlls" "OutputProjectGuid" = "8:{D5755345-EE87-4B08-95D7-55DDDB331CFB}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_34B9F7B111934D5696A395A78F641948" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{D3448966-5499-4F7F-8999-6484B27B56C9}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_448A381DBC09486DA39A97685A5AA005" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:LocalizedResourceDlls" "OutputProjectGuid" = "8:{953F40A2-9741-4BE8-B42E-59C603700281}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_5E74C9058B35495EB7B372C7CE2F0696" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_706E5C8EF2C34DB1BABB7BCD9295D202" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{B7D88639-3248-4309-A687-94DC11EC2946}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_70D7883F2FC844E0B8EEB1BA444DFB72" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{E91D684B-2DD8-4C50-8111-1940BFB427EE}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_765134F9C2BE4967B447CD0104BCF709" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:LocalizedResourceDlls" "OutputProjectGuid" = "8:{4900715B-572B-4279-B704-29B0640612ED}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_7D5B380F7F15456E89F38C9B810879BC" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{FFEC4820-9B6B-47E9-8594-B71A52081C1E}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_873D3774D7054859B741BF0AB3825602" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{81633CC3-9C5E-4C93-A9A6-876F6AE40883}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_970B762368ED42F2A3BA28A32C01E6BE" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{2854A1FB-52F7-4197-A24E-E9977FD21563}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A0BC500270A44831B259CCF982C99074" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{953F40A2-9741-4BE8-B42E-59C603700281}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_ACFBB50967B947878D86B4B2BABB278E" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_CD2768CF9C3E4929AF4668033C9DFF75" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{4900715B-572B-4279-B704-29B0640612ED}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D77C75C918DE42BE93B9D94FCFC1A199" { "SourcePath" = "8:..\\QuickRoute.UI\\obj\\x86\\Release\\QuickRoute.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Built" "OutputProjectGuid" = "8:{953F40A2-9741-4BE8-B42E-59C603700281}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E57629DF5ABB4C8CA0FD32157B3A8A93" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:LocalizedResourceDlls" "OutputProjectGuid" = "8:{A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EA15E4D4C0B74776B1DF61E7DDCF783B" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{D5755345-EE87-4B08-95D7-55DDDB331CFB}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FACD44DE2C264CA1A01D1F52F624C095" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:Symbols" "OutputProjectGuid" = "8:{11A24507-A39E-42A2-9662-0416E8A31597}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FCFF120AF5EA42F484C53CDD84730642" { "SourcePath" = "8:" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_B843D13A09B94B59B361CB19B26A3B6E" "Condition" = "8:" "Transitive" = "11:FALSE" "Vital" = "11:TRUE" "ReadOnly" = "11:FALSE" "Hidden" = "11:FALSE" "System" = "11:FALSE" "Permanent" = "11:FALSE" "SharedLegacy" = "11:FALSE" "PackageAs" = "3:1" "Register" = "3:1" "Exclude" = "11:FALSE" "IsDependency" = "11:FALSE" "IsolateTo" = "8:" "ProjectOutputGroupRegister" = "3:1" "OutputConfiguration" = "8:" "OutputGroupCanonicalName" = "8:LocalizedResourceDlls" "OutputProjectGuid" = "8:{2854A1FB-52F7-4197-A24E-E9977FD21563}" "ShowKeyOutput" = "11:TRUE" "ExcludeFilters" { } } } } } quickroute-linux-upstream-2.5/QuickRoute.Test/000077500000000000000000000000001446222606700215705ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Test/AuthoringTests.txt000066400000000000000000000151171446222606700253210ustar00rootroot00000000000000========================================================================== Visual Studio Team System: Overview of Authoring and Running Tests ========================================================================== This overview describes the features for authoring and running tests in Visual Studio Team System and Visual Studio Team Edition for Software Testers. Opening Tests ------------- To open a test, open a test project or a test metadata file (a file with extension .vsmdi) that contains the definition of the test. You can find test projects and metadata files in Solution Explorer. Viewing Tests ------------- To see which tests are available to you, open the Test View window. Or, if you have installed Team Edition for Software Testers, you can also open the Test List Editor window to view tests. To open the Test View window, click the Test menu, point to Windows, and then click Test View. To open the Test List Editor window (if you have installed Team Edition for Software Testers), click Test, point to Windows, and then click Test List Editor. Running Tests ------------- You can run tests from the Test View window and the Test List Editor window. See Viewing Tests to learn how to open these windows. To run one or more tests displayed in the Test View window, first select the tests in that window; to select multiple tests, hold either the Shift or CTRL key while clicking tests. Then click the Run Tests button in the Test View window toolbar. If you have installed Visual Studio Team Edition for Software Testers, you can also use the Test List Editor window to run tests. To run tests in Test List Editor, select the check box next to each test that you want to run. Then click the Run Tests button in the Test List Editor window toolbar. Viewing Test Results -------------------- When you run a test or a series of tests, the results of the test run will be shown in the Test Results window. Each individual test in the run is shown on a separate line so that you can see its status. The window contains an embedded status bar in the top half of the window that provides you with summary details of the complete test run. To see more detailed results for a particular test result, double-click it in the Test Results window. This opens a window that provides more information about the particular test result, such as any specific error messages returned by the test. Changing the way that tests are run ----------------------------------- Each time you run one or more tests, a collection of settings is used to determine how those tests are run. These settings are contained in a “test run configuration” file. Here is a partial list of the changes you can make with a test run configuration file: - Change the naming scheme for each test run. - Change the test controller that the tests are run on so that you can run tests remotely. - Gather code coverage data for the code being tested so that you can see which lines of code are covered by your tests. - Enable and disable test deployment. - Specify additional files to deploy before tests are run. - Select a different host, ASP.NET, for running ASP.NET unit tests. - Select a different host, the smart device test host, for running smart device unit tests. - Set various properties for the test agents that run your tests. - Run custom scripts at the start and end of each test run so that you can set up the test environment exactly as required each time tests are run. - Set time limits for tests and test runs. - Set the browser mix and the number of times to repeat Web tests in the test run. By default, a test run configuration file is created whenever you create a new test project. You make changes to this file by double-clicking it in Solution Explorer and then changing its settings. (Test run configuration files have the extension .testrunconfig.) A solution can contain multiple test run configuration files. Only one of those files, known as the “Active” test run configuration file, is used to determine the settings that are currently used for test runs. You select the active test run configuration by clicking Select Active Test Run Configuration on the Test menu. ------------------------------------------------------------------------------- Test Types ---------- Using Visual Studio Team Edition for Software Testers, you can create a number of different test types: Unit test: Use a unit test to create a programmatic test in C++, Visual C# or Visual Basic that exercises source code. A unit test calls the methods of a class, passing suitable parameters, and verifies that the returned value is what you expect. There are three specialized variants of unit tests: - Data-driven unit tests are created when you configure a unit test to be called repeatedly for each row of a data source. The data from each row is used by the unit test as input data. - ASP.NET unit tests are unit tests that exercise code in an ASP.NET Web application. - Smart device unit tests are unit tests that are deployed to a smart device or emulator and then executed by the smart device test host. Web Test: Web tests consist of an ordered series of HTTP requests that you record in a browser session using Microsoft Internet Explorer. You can have the test report specific details about the pages or sites it requests, such as whether a particular page contains a specified string. Load Test: You use a load test to encapsulate non-manual tests, such as unit, Web, and generic tests, and then run them simultaneously by using virtual users. Running these tests under load generates test results, including performance and other counters, in tables and in graphs. Generic test: A generic test is an existing program wrapped to function as a test in Visual Studio. The following are examples of tests or programs that you can turn into generic tests: - An existing test that uses process exit codes to communicate whether the test passed or failed. 0 indicates passing and any other value indicates a failure. - A general program to obtain specific functionality during a test scenario. - A test or program that uses a special XML file (called a “summary results file”), to communicate detailed results. Manual test: The manual test type is used when the test tasks are to be completed by a test engineer as opposed to an automated script. Ordered test: Use an ordered test to execute a set of tests in an order you specify. ------------------------------------------------------------------------------- quickroute-linux-upstream-2.5/QuickRoute.Test/Properties/000077500000000000000000000000001446222606700237245ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Test/Properties/AssemblyInfo.cs000066400000000000000000000025721446222606700266540ustar00rootroot00000000000000using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute.Test")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("QuickRoute.Test")] [assembly: AssemblyCopyright("Copyright © 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM componenets. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("bd7db738-651f-4eef-80ac-364409a9496e")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] quickroute-linux-upstream-2.5/QuickRoute.Test/QuickRoute.Test.csproj000066400000000000000000000050271446222606700260270ustar00rootroot00000000000000 Debug AnyCPU 9.0.21022 2.0 {44A47449-348E-4D34-AB05-1D31C9E3D636} Library Properties QuickRoute.Test QuickRoute.Test v2.0 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61} QuickRoute.BusinessEntities quickroute-linux-upstream-2.5/QuickRoute.Test/Test References/000077500000000000000000000000001446222606700245515ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.Test/Test References/QuickRoute.BusinessEntities.accessor000066400000000000000000000000521446222606700336640ustar00rootroot00000000000000QuickRoute.BusinessEntities.dll Desktop quickroute-linux-upstream-2.5/QuickRoute.Test/UnitTest1.cs000066400000000000000000000043741446222606700237670ustar00rootroot00000000000000using System; using System.Text; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; using QuickRoute.BusinessEntities; namespace QuickRoute.Test { /// /// Summary description for UnitTest1 /// [TestClass] public class LapTest { public LapTest() { // // TODO: Add constructor logic here // } #region Additional test attributes // // You can use the following additional attributes as you write your tests: // // Use ClassInitialize to run code before running the first test in the class // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // Use ClassCleanup to run code after all tests in a class have run // [ClassCleanup()] // public static void MyClassCleanup() { } // // Use TestInitialize to run code before running each test // [TestInitialize()] // public void MyTestInitialize() { } // // Use TestCleanup to run code after each test has run // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] public void TestMethod1() { Lap lap = new Lap(); Assert.AreEqual(lap, lap); } [TestMethod] public void TestDistanceUnit() { Distance d = new Distance(); Scale s = Distance.CreateScale(0, 100, 7, false); Assert.AreEqual(6, s.Markers.Count); } [TestMethod] public void TestElapsedTimeToString() { ElapsedTime p = new ElapsedTime(130); Assert.AreEqual("2:10", p.ToString()); } [TestMethod] public void TestStringToElapsedTime() { ElapsedTime p = new ElapsedTime(); p.FromString("2:10"); Assert.AreEqual(130, p.Value); } [TestMethod] public void TestTimeOfDayScale() { Scale s = TimeOfDay.CreateScale(DateTime.Parse("2008-08-01 10:22"), DateTime.Parse("2008-08-01 11:30"), 10, true); Assert.AreEqual(DateTime.Parse("2008-08-01 10:15"), ((TimeOfDay)s.Start).Value); Assert.AreEqual(DateTime.Parse("2008-08-01 11:30"), ((TimeOfDay)s.End).Value); Assert.AreEqual(6, s.Markers.Count); } } } quickroute-linux-upstream-2.5/QuickRoute.UI/000077500000000000000000000000001446222606700211665ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/000077500000000000000000000000001446222606700225635ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/DataGridViewPrinter.cs000066400000000000000000000471111446222606700267740ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; namespace QuickRoute.UI.Classes { // using code from http://www.codeproject.com/KB/printing/datagridviewprinter.aspx public class DataGridViewPrinter { private static int currentRow; // A static parameter that keep track on which Row (in the DataGridView control) that should be printed private static int pageNumber; private int bottomMargin; private int columnPoint; private List columnPoints; private List columnPointsWidth; private List columnsWidth; private float currentY; // A parameter that keep track on the y coordinate of the page, so the next object to be printed will start from this y coordinate private DataGridView dataGridView; // The DataGridView Control which will be printed private float dataGridViewWidth; private bool isCenterOnPage; // Determine if the report will be printed in the Top-Center of the page private bool isWithPaging; // Determine if paging is used private bool isWithTitle; // Determine if the page contain title text private int leftMargin; private int pageHeight; private int pageWidth; private PrintDocument printDocument; // The PrintDocument to be used for printing private int rightMargin; private float rowHeaderHeight; private List rowsHeight; private Color titleColor; // The color to be used with the title text (if isWithTitle is set to true) private Font titleFont; // The font to be used with the title text (if isWithTitle is set to true) private string titleText; // The title text to be printed in each page (if isWithTitle is set to true) private int topMargin; // The class constructor public DataGridViewPrinter(DataGridView aDataGridView, PrintDocument aPrintDocument, bool centerOnPage, bool withTitle, string titleText, Font titleFont, Color aTitleColor, bool withPaging) { dataGridView = aDataGridView; printDocument = aPrintDocument; isCenterOnPage = centerOnPage; isWithTitle = withTitle; this.titleText = titleText; this.titleFont = titleFont; titleColor = aTitleColor; isWithPaging = withPaging; pageNumber = 0; rowsHeight = new List(); columnsWidth = new List(); columnPoints = new List(); columnPointsWidth = new List(); // Claculating the pageWidth and the pageHeight if (!printDocument.DefaultPageSettings.Landscape) { pageWidth = printDocument.DefaultPageSettings.PaperSize.Width; pageHeight = printDocument.DefaultPageSettings.PaperSize.Height; } else { pageHeight = printDocument.DefaultPageSettings.PaperSize.Width; pageWidth = printDocument.DefaultPageSettings.PaperSize.Height; } // Claculating the page margins leftMargin = printDocument.DefaultPageSettings.Margins.Left; topMargin = printDocument.DefaultPageSettings.Margins.Top; rightMargin = printDocument.DefaultPageSettings.Margins.Right; bottomMargin = printDocument.DefaultPageSettings.Margins.Bottom; // First, the current row to be printed is the first row in the DataGridView control currentRow = 0; } // The function that calculate the height of each row (including the header row), the width of each column (according to the longest text in all its cells including the header cell), and the whole DataGridView width private void Calculate(Graphics g) { if (pageNumber == 0) // Just calculate once { var tmpSize = new SizeF(); Font tmpFont; float tmpWidth; dataGridViewWidth = 0; for (int i = 0; i < dataGridView.Columns.Count; i++) { tmpFont = dataGridView.ColumnHeadersDefaultCellStyle.Font; if (tmpFont == null) // If there is no special HeaderFont style, then use the default DataGridView font style tmpFont = dataGridView.DefaultCellStyle.Font; tmpSize = g.MeasureString(dataGridView.Columns[i].HeaderText, tmpFont); tmpWidth = tmpSize.Height; rowHeaderHeight = Math.Max(tmpSize.Width, rowHeaderHeight); for (int j = 0; j < dataGridView.Rows.Count; j++) { tmpFont = dataGridView.Rows[j].DefaultCellStyle.Font; if (tmpFont == null) // If the there is no special font style of the currentRow, then use the default one associated with the DataGridView control tmpFont = dataGridView.DefaultCellStyle.Font; tmpSize = g.MeasureString("Anything", tmpFont); rowsHeight.Add(tmpSize.Height); tmpSize = g.MeasureString(dataGridView.Rows[j].Cells[i].EditedFormattedValue.ToString(), tmpFont); if (tmpSize.Width > tmpWidth) tmpWidth = tmpSize.Width; } if (dataGridView.Columns[i].Visible) dataGridViewWidth += tmpWidth; columnsWidth.Add(tmpWidth); } // Define the start/stop column points based on the page width and the DataGridView Width // We will use this to determine the columns which are drawn on each page and how wrapping will be handled // By default, the wrapping will occurr such that the maximum number of columns for a page will be determine int k; int mStartPoint = 0; for (k = 0; k < dataGridView.Columns.Count; k++) if (dataGridView.Columns[k].Visible) { mStartPoint = k; break; } int mEndPoint = dataGridView.Columns.Count; for (k = dataGridView.Columns.Count - 1; k >= 0; k--) if (dataGridView.Columns[k].Visible) { mEndPoint = k + 1; break; } float mTempWidth = dataGridViewWidth; float mTempPrintArea = (float) pageWidth - (float) leftMargin - (float) rightMargin; // We only care about handling where the total datagridview width is bigger then the print area if (dataGridViewWidth > mTempPrintArea) { mTempWidth = 0.0F; for (k = 0; k < dataGridView.Columns.Count; k++) { if (dataGridView.Columns[k].Visible) { mTempWidth += columnsWidth[k]; // If the width is bigger than the page area, then define a new column print range if (mTempWidth > mTempPrintArea) { mTempWidth -= columnsWidth[k]; columnPoints.Add(new int[] {mStartPoint, mEndPoint}); columnPointsWidth.Add(mTempWidth); mStartPoint = k; mTempWidth = columnsWidth[k]; } } // Our end point is actually one index above the current index mEndPoint = k + 1; } } // Add the last set of columns columnPoints.Add(new int[] {mStartPoint, mEndPoint}); columnPointsWidth.Add(mTempWidth); columnPoint = 0; } } // The funtion that print the title, page number, and the header row private void DrawHeader(Graphics g) { currentY = (float) topMargin; // Printing the page number (if isWithPaging is set to true) if (isWithPaging) { pageNumber++; string PageString = "Page " + pageNumber.ToString(); var PageStringFormat = new StringFormat(); PageStringFormat.Trimming = StringTrimming.Word; PageStringFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip; PageStringFormat.Alignment = StringAlignment.Far; var PageStringFont = new Font("Calibri", 8, FontStyle.Regular, GraphicsUnit.Point); var PageStringRectangle = new RectangleF((float) leftMargin, currentY, (float) pageWidth - (float) rightMargin - (float) leftMargin, g.MeasureString(PageString, PageStringFont).Height); g.DrawString(PageString, PageStringFont, new SolidBrush(Color.Black), PageStringRectangle, PageStringFormat); currentY += g.MeasureString(PageString, PageStringFont).Height; } // Printing the title (if isWithTitle is set to true) if (isWithTitle) { var TitleFormat = new StringFormat(); TitleFormat.Trimming = StringTrimming.Word; TitleFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip; if (isCenterOnPage) TitleFormat.Alignment = StringAlignment.Center; else TitleFormat.Alignment = StringAlignment.Near; var TitleRectangle = new RectangleF((float) leftMargin, currentY, (float) pageWidth - (float) rightMargin - (float) leftMargin, g.MeasureString(titleText, titleFont).Height); g.DrawString(titleText, titleFont, new SolidBrush(titleColor), TitleRectangle, TitleFormat); currentY += g.MeasureString(titleText, titleFont).Height; } // Calculating the starting x coordinate that the printing process will start from var CurrentX = (float) leftMargin; if (isCenterOnPage) CurrentX += (((float) pageWidth - (float) rightMargin - (float) leftMargin) - columnPointsWidth[columnPoint])/ 2.0F; // Setting the HeaderFore style Color HeaderForeColor = dataGridView.ColumnHeadersDefaultCellStyle.ForeColor; if (HeaderForeColor.IsEmpty) // If there is no special HeaderFore style, then use the default DataGridView style HeaderForeColor = dataGridView.DefaultCellStyle.ForeColor; var HeaderForeBrush = new SolidBrush(HeaderForeColor); // Setting the HeaderBack style Color HeaderBackColor = dataGridView.ColumnHeadersDefaultCellStyle.BackColor; if (HeaderBackColor.IsEmpty) // If there is no special HeaderBack style, then use the default DataGridView style HeaderBackColor = dataGridView.DefaultCellStyle.BackColor; var HeaderBackBrush = new SolidBrush(HeaderBackColor); // Setting the LinePen that will be used to draw lines and rectangles (derived from the GridColor property of the DataGridView control) var TheLinePen = new Pen(dataGridView.GridColor, 1); // Setting the HeaderFont style Font HeaderFont = dataGridView.ColumnHeadersDefaultCellStyle.Font; if (HeaderFont == null) // If there is no special HeaderFont style, then use the default DataGridView font style HeaderFont = dataGridView.DefaultCellStyle.Font; // Calculating and drawing the HeaderBounds var HeaderBounds = new RectangleF(CurrentX, currentY, columnPointsWidth[columnPoint], rowHeaderHeight); g.FillRectangle(HeaderBackBrush, HeaderBounds); // Setting the format that will be used to print each cell of the header row var CellFormat = new StringFormat(); CellFormat.Trimming = StringTrimming.Word; CellFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit | StringFormatFlags.NoClip; // Printing each visible cell of the header row RectangleF CellBounds; float ColumnWidth; for (var i = (int) columnPoints[columnPoint].GetValue(0); i < (int) columnPoints[columnPoint].GetValue(1); i++) { if (!dataGridView.Columns[i].Visible) continue; // If the column is not visible then ignore this iteration ColumnWidth = columnsWidth[i]; // Check the CurrentCell alignment and apply it to the CellFormat if (dataGridView.ColumnHeadersDefaultCellStyle.Alignment.ToString().Contains("Right")) CellFormat.Alignment = StringAlignment.Far; else if (dataGridView.ColumnHeadersDefaultCellStyle.Alignment.ToString().Contains("Center")) CellFormat.Alignment = StringAlignment.Center; else CellFormat.Alignment = StringAlignment.Far; CellFormat.FormatFlags = StringFormatFlags.DirectionVertical; CellFormat.LineAlignment = StringAlignment.Center; CellBounds = new RectangleF(CurrentX, currentY, ColumnWidth, rowHeaderHeight); // Printing the cell text g.DrawString(dataGridView.Columns[i].HeaderText, HeaderFont, HeaderForeBrush, CellBounds, CellFormat); // Drawing the cell bounds if (dataGridView.RowHeadersBorderStyle != DataGridViewHeaderBorderStyle.None) // Draw the cell border only if the HeaderBorderStyle is not None g.DrawRectangle(TheLinePen, CurrentX, currentY, ColumnWidth, rowHeaderHeight); CurrentX += ColumnWidth; } currentY += rowHeaderHeight; } // The function that print a bunch of rows that fit in one page // When it returns true, meaning that there are more rows still not printed, so another PagePrint action is required // When it returns false, meaning that all rows are printed (the CureentRow parameter reaches the last row of the DataGridView control) and no further PagePrint action is required private bool DrawRows(Graphics g) { // Setting the LinePen that will be used to draw lines and rectangles (derived from the GridColor property of the DataGridView control) var TheLinePen = new Pen(dataGridView.GridColor, 1); // The style paramters that will be used to print each cell Font RowFont; Color RowForeColor; Color RowBackColor; SolidBrush RowForeBrush; SolidBrush RowBackBrush; SolidBrush RowAlternatingBackBrush; // Setting the format that will be used to print each cell var CellFormat = new StringFormat(); CellFormat.Trimming = StringTrimming.Word; CellFormat.FormatFlags = StringFormatFlags.NoWrap | StringFormatFlags.LineLimit; // Printing each visible cell RectangleF RowBounds; float CurrentX; float ColumnWidth; while (currentRow < dataGridView.Rows.Count) { if (dataGridView.Rows[currentRow].Visible) // Print the cells of the currentRow only if that row is visible { // Setting the row font style RowFont = dataGridView.Rows[currentRow].DefaultCellStyle.Font; if (RowFont == null) // If the there is no special font style of the currentRow, then use the default one associated with the DataGridView control RowFont = dataGridView.DefaultCellStyle.Font; // Setting the RowFore style RowForeColor = dataGridView.Rows[currentRow].DefaultCellStyle.ForeColor; if (RowForeColor.IsEmpty) // If the there is no special RowFore style of the currentRow, then use the default one associated with the DataGridView control RowForeColor = dataGridView.DefaultCellStyle.ForeColor; RowForeBrush = new SolidBrush(RowForeColor); // Setting the RowBack (for even rows) and the RowAlternatingBack (for odd rows) styles RowBackColor = dataGridView.Rows[currentRow].DefaultCellStyle.BackColor; if (RowBackColor.IsEmpty) // If the there is no special RowBack style of the currentRow, then use the default one associated with the DataGridView control { RowBackBrush = new SolidBrush(dataGridView.DefaultCellStyle.BackColor); RowAlternatingBackBrush = new SolidBrush(dataGridView.AlternatingRowsDefaultCellStyle.BackColor); } else // If the there is a special RowBack style of the currentRow, then use it for both the RowBack and the RowAlternatingBack styles { RowBackBrush = new SolidBrush(RowBackColor); RowAlternatingBackBrush = new SolidBrush(RowBackColor); } // Calculating the starting x coordinate that the printing process will start from CurrentX = (float) leftMargin; if (isCenterOnPage) CurrentX += (((float) pageWidth - (float) rightMargin - (float) leftMargin) - columnPointsWidth[columnPoint])/ 2.0F; // Calculating the entire currentRow bounds RowBounds = new RectangleF(CurrentX, currentY, columnPointsWidth[columnPoint], rowsHeight[currentRow]); // Filling the back of the currentRow if (currentRow%2 == 0) g.FillRectangle(RowBackBrush, RowBounds); else g.FillRectangle(RowAlternatingBackBrush, RowBounds); // Printing each visible cell of the currentRow for (var CurrentCell = (int) columnPoints[columnPoint].GetValue(0); CurrentCell < (int) columnPoints[columnPoint].GetValue(1); CurrentCell++) { if (!dataGridView.Columns[CurrentCell].Visible) continue; // If the cell is belong to invisible column, then ignore this iteration // Check the CurrentCell alignment and apply it to the CellFormat if (dataGridView.Columns[CurrentCell].DefaultCellStyle.Alignment.ToString().Contains("Left")) CellFormat.Alignment = StringAlignment.Near; else if (dataGridView.Columns[CurrentCell].DefaultCellStyle.Alignment.ToString().Contains("Center")) CellFormat.Alignment = StringAlignment.Center; else CellFormat.Alignment = StringAlignment.Far; ColumnWidth = columnsWidth[CurrentCell]; CellFormat.LineAlignment = StringAlignment.Center; var CellBounds = new RectangleF(CurrentX, currentY, ColumnWidth, rowsHeight[currentRow]); // Printing the cell text g.DrawString(dataGridView.Rows[currentRow].Cells[CurrentCell].EditedFormattedValue.ToString(), RowFont, RowForeBrush, CellBounds, CellFormat); // Drawing the cell bounds if (dataGridView.CellBorderStyle != DataGridViewCellBorderStyle.None) // Draw the cell border only if the CellBorderStyle is not None g.DrawRectangle(TheLinePen, CurrentX, currentY, ColumnWidth, rowsHeight[currentRow]); CurrentX += ColumnWidth; } currentY += rowsHeight[currentRow]; // Checking if the currentY is exceeds the page boundries // If so then exit the function and returning true meaning another PagePrint action is required if ((int) currentY > (pageHeight - topMargin - bottomMargin)) { currentRow++; return true; } } currentRow++; } currentRow = 0; columnPoint++; // Continue to print the next group of columns if (columnPoint == columnPoints.Count) // Which means all columns are printed { columnPoint = 0; return false; } else return true; } // The method that calls all other functions public bool DrawDataGridView(Graphics g) { try { Calculate(g); DrawHeader(g); bool bContinue = DrawRows(g); return bContinue; } catch (Exception ex) { MessageBox.Show("Operation failed: " + ex.Message.ToString(), Application.ProductName + " - Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/FullScreen.cs000066400000000000000000000027621446222606700251630ustar00rootroot00000000000000using System.Drawing; using System.Windows.Forms; using QuickRoute.BusinessEntities; namespace QuickRoute.UI.Classes { /// /// Class used to preserve / restore / maximize state of the form. /// See http://www.codeproject.com/KB/cs/FullScreenDotNetApp.aspx. /// public class MainFormState { private FormWindowState winState; private FormBorderStyle brdStyle; private Rectangle bounds; private ApplicationSettings settings; private bool isFullScreen; public void EnterFullScreenMode(Main form) { if (!isFullScreen) { isFullScreen = true; Save(form); form.WindowState = FormWindowState.Maximized; form.FormBorderStyle = FormBorderStyle.None; form.ApplicationSettings.RightPanelVisible = false; form.ApplicationSettings.BottomPanelVisible = false; form.UpdateUI(); WinApi.SetWinFullScreen(form.Handle); } } private void Save(Main form) { winState = form.WindowState; brdStyle = form.FormBorderStyle; bounds = form.Bounds; settings = form.ApplicationSettings.Copy(); } public void ExitFullScreenMode(Main form) { if(isFullScreen) { form.WindowState = winState; form.FormBorderStyle = brdStyle; form.Bounds = bounds; form.ApplicationSettings = settings; form.UpdateUI(); isFullScreen = false; } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/GoogleEarthUtil.cs000066400000000000000000000037421446222606700261560ustar00rootroot00000000000000using System; using System.IO; using System.Runtime.InteropServices; using QuickRoute.Common; #if __MonoCS__ using System.Diagnostics; #endif namespace QuickRoute.UI.Classes { public static class GoogleEarthUtil { #if !__MonoCS__ [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr hWnd); #endif public static void OpenInGoogleEarth(Stream stream) { // create file from stream var reader = new BinaryReader(stream); stream.Position = 0; var data = reader.ReadBytes((int)stream.Length); reader.Close(); var fileName = CommonUtil.GetTempFileName("kmz"); Console.WriteLine(fileName); var fileStream = File.Create(fileName); fileStream.Write(data, 0, data.Length); fileStream.Close(); fileStream.Dispose(); #if !__MonoCS__ var googleEarthApplication = new EARTHLib.ApplicationGEClass(); googleEarthApplication.OpenKmlFile(fileName, 1); BringWindowToForeground((IntPtr)googleEarthApplication.GetMainHwnd()); #else // Start the child process. Process p = new Process(); p.EnableRaisingEvents = false; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = false; string command = GetGoogleEarthPath(); string args = " " + fileName; Console.WriteLine(command); Console.WriteLine(args); p.StartInfo.FileName = command; p.StartInfo.Arguments = args; p.Start(); //string output = p.StandardOutput.ReadToEnd(); //p.WaitForExit(); #endif } #if !__MonoCS__ private static void BringWindowToForeground(IntPtr hWnd) { SetForegroundWindow(hWnd); } #else private static string GetGoogleEarthPath() { if(File.Exists("/usr/bin/google-earth")) return "/usr/bin/google-earth"; else return "/opt/google/earth/free/google-earth"; } #endif } } quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/LapGridViewPrinter.cs000066400000000000000000000052161446222606700266370ustar00rootroot00000000000000using System.Drawing; using System.Drawing.Printing; using System.Windows.Forms; using QuickRoute.Resources; namespace QuickRoute.UI.Classes { public class LapGridViewPrinter { // The DataGridView Control which will be printed. private readonly DataGridView dataGridView; // The PrintDocument to be used for printing. private PrintDocument printDocument; // The class that will do the printing process. private DataGridViewPrinter dataGridViewPrinter; public LapGridViewPrinter(DataGridView dataGridView) { this.dataGridView = dataGridView; } // The printing setup function private bool Setup(string title) { var printDialog = new PrintDialog { AllowCurrentPage = false, AllowPrintToFile = false, AllowSelection = false, AllowSomePages = false, PrintToFile = false, ShowHelp = false, ShowNetwork = false }; if (printDialog.ShowDialog() != DialogResult.OK) return false; printDocument = new PrintDocument { DocumentName = string.Format("{0} - {1}", Strings.QuickRoute, title), PrinterSettings = printDialog.PrinterSettings, DefaultPageSettings = printDialog.PrinterSettings.DefaultPageSettings }; printDocument.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40); printDocument.PrintPage += printDocument_PrintPage; dataGridViewPrinter = new DataGridViewPrinter( dataGridView, printDocument, false, true, title, new Font("Calibri", 10, FontStyle.Bold, GraphicsUnit.Point), Color.Black, false); return true; } public void Print(string title) { if (Setup(title)) printDocument.Print(); } // The PrintPage action for the PrintDocument control private void printDocument_PrintPage(object sender, PrintPageEventArgs e) { bool more = dataGridViewPrinter.DrawDataGridView(e.Graphics); if (more) e.HasMorePages = true; } // The Print Preview Button public void Preview(string title) { if (Setup(title)) { var myPrintPreviewDialog = new PrintPreviewDialog {Document = printDocument}; myPrintPreviewDialog.ShowDialog(); } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/Util.cs000066400000000000000000000341571446222606700240410ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Text.RegularExpressions; using System.Web; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Numeric; using QuickRoute.Common; using QuickRoute.Resources; using QuickRoute.UI.Forms; using QuickRoute.UI.QuickRouteServer; using ExceptionMessageBox=QuickRoute.UI.Forms.ExceptionMessageBox; namespace QuickRoute.UI.Classes { public static class Util { public static ApplicationSettings applicationSettings; private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public static void UnImplemented () { log.Warn("===============================================\n...Unimplemented..."); log.Warn(Environment.StackTrace); log.Warn("==============================================="); } [DllImport("shlwapi.dll", CharSet = CharSet.Auto)] public static extern bool PathCompactPathEx([Out] StringBuilder pszOut, string szPath, int cchMax, int dwFlags); public static ApplicationSettings ApplicationSettings { get { if (applicationSettings == null) applicationSettings = LoadSettings(); return applicationSettings; } set { applicationSettings = value; } } public static void ShowHelp() { System.Diagnostics.Process.Start(Strings.HelpUrl); } public static string FormatTimeSpan(TimeSpan ts) { TimeConverter tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); return tc.ToString(ts.TotalSeconds); } public static List GetGradientsInFolder(string path) { List gradients = new List(); DirectoryInfo di = new DirectoryInfo(path); foreach (FileInfo fi in di.GetFiles()) { Gradient g = Gradient.Load(fi.FullName); if (!gradients.Contains(g) && g != null) gradients.Add(g); } return gradients; } public static void SaveGradientsToFolder(IEnumerable gradients, string path) { foreach (Gradient g in gradients) { if (g != null) { if (g.Name == null) g.Name = ""; //string fileName = (path + "\\").Replace("\\\\", "\\") + CreateSafeFileName(g.Name) + ".gradient"; string fileName = Path.Combine(path, CreateSafeFileName(g.Name) + ".gradient"); fileName = CreateSequentialFileName(fileName); g.Save(fileName); } } } public static string CreateSafeFileName(string fileName) { char[] invalidPathChars = Path.GetInvalidPathChars(); char[] invalidFileChars = Path.GetInvalidFileNameChars(); foreach (char c in invalidPathChars) { fileName = fileName.Replace(c, Convert.ToChar("_")); } foreach (char c in invalidFileChars) { fileName = fileName.Replace(c, Convert.ToChar("_")); } return fileName; } public static string CreateSequentialFileName(string fileName) { if (File.Exists(fileName)) { string fn = Path.GetFileNameWithoutExtension(fileName); string e = Path.GetExtension(fileName); string p = Path.GetDirectoryName(fileName) + Path.DirectorySeparatorChar; int n = 1; while (File.Exists(p + fn + "(" + n + ")" + e)) { n += 1; } return p + fn + "(" + n + ")" + e; } return fileName; } public static void SelectUICulture(bool showRestartInformation) { CultureInfo culture = ApplicationSettings.UiCulture ?? System.Threading.Thread.CurrentThread.CurrentUICulture; using(var uiCultureForm = new SelectUICultureForm { UiCulture = culture }) { if (uiCultureForm.ShowDialog() != DialogResult.OK) return; if (ApplicationSettings.UiCulture != null && uiCultureForm.UiCulture.Name == ApplicationSettings.UiCulture.Name) return; ApplicationSettings.UiCulture = uiCultureForm.UiCulture; } if (showRestartInformation) { MessageBox.Show(Strings.UICultureChangeTakesEffectAtNextRestart, Strings.QuickRoute, MessageBoxButtons.OK, MessageBoxIcon.Information); } } public static string PathShortener(string path, int length) { #if __MonoCS__ //FIXME UnImplemented(); return path; #else var sb = new StringBuilder(); PathCompactPathEx(sb, path, length, 0); return sb.ToString(); #endif } public static void InsertIntoRecentDocumentsList(string fileName) { const int maxNoOfFiles = 10; ApplicationSettings.AddRecentDocumentFileName(fileName, maxNoOfFiles); } public static void UpdateApplicationSettingsToCurrentVersion() { var s = ApplicationSettings.DefaultDocumentSettings; // add some speed waypoint attribute settings, introduced in QR 2.1 if (!s.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.Speed)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); s.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.Speed, defaultCRISS[WaypointAttribute.Speed]); } if (!s.LapHistogramSettings.ContainsKey(WaypointAttribute.Speed)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); s.LapHistogramSettings.Add(WaypointAttribute.Speed, defaultLHS[WaypointAttribute.Speed]); } if (!s.DefaultSessionSettings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.Speed)) { var defaultRLS = SessionSettings.CreateDefaultRouteLineSettingsCollection(); s.DefaultSessionSettings.RouteLineSettingsCollection.Add(WaypointAttribute.Speed, defaultRLS[WaypointAttribute.Speed]); } // add some direction waypoint attribute settings, introduced in QR 2.2 if (!s.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); s.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultCRISS[WaypointAttribute.DirectionDeviationToNextLap]); } if (!s.LapHistogramSettings.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); s.LapHistogramSettings.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultLHS[WaypointAttribute.DirectionDeviationToNextLap]); } if (!s.DefaultSessionSettings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.DirectionDeviationToNextLap)) { var defaultRLS = SessionSettings.CreateDefaultRouteLineSettingsCollection(); s.DefaultSessionSettings.RouteLineSettingsCollection.Add(WaypointAttribute.DirectionDeviationToNextLap, defaultRLS[WaypointAttribute.DirectionDeviationToNextLap]); } // add some map reading duration attribute settings, introduced in QR 2.4 if (!s.ColorRangeIntervalSliderSettings.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultCRISS = DocumentSettings.CreateDefaultColorRangeIntervalSliderSettings(); s.ColorRangeIntervalSliderSettings.Add(WaypointAttribute.MapReadingDuration, defaultCRISS[WaypointAttribute.MapReadingDuration]); } if (!s.LapHistogramSettings.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultLHS = DocumentSettings.CreateDefaultLapHistogramSettings(); s.LapHistogramSettings.Add(WaypointAttribute.MapReadingDuration, defaultLHS[WaypointAttribute.MapReadingDuration]); } if (!s.DefaultSessionSettings.RouteLineSettingsCollection.ContainsKey(WaypointAttribute.MapReadingDuration)) { var defaultRLS = SessionSettings.CreateDefaultRouteLineSettingsCollection(); s.DefaultSessionSettings.RouteLineSettingsCollection.Add(WaypointAttribute.MapReadingDuration, defaultRLS[WaypointAttribute.MapReadingDuration]); } if (ApplicationSettings.PublishMapSettings == null) ApplicationSettings.PublishMapSettings = new List(); // make sure new property types are propagated to the settings if (ApplicationSettings.LapPropertyTypes.Count < ApplicationSettings.AvailableLapPropertyTypes.Count) { foreach (var rpt in ApplicationSettings.AvailableLapPropertyTypes) { if (!ApplicationSettings.LapPropertyTypes.ContainsRoutePropertyType(rpt.RoutePropertyType)) { ApplicationSettings.LapPropertyTypes.Add(rpt); } } } // make sure new property types are propagated to the settings if (ApplicationSettings.MomentaneousInfoPropertyTypes.Count < ApplicationSettings.AvailableMomentaneousInfoPropertyTypes.Count) { foreach (var rpt in ApplicationSettings.AvailableMomentaneousInfoPropertyTypes) { if (!ApplicationSettings.MomentaneousInfoPropertyTypes.ContainsRoutePropertyType(rpt.RoutePropertyType)) { ApplicationSettings.MomentaneousInfoPropertyTypes.Add(rpt); } } } } public static string SettingsFileName { get { return Path.Combine(CommonUtil.GetApplicationDataPath(), "QuickRoute.settings"); } } public static void EnsureApplicationDataFolderExists() { // ensure that application data folder and subfolders exists string[] necessaryFolders = new[] { CommonUtil.GetApplicationDataPath(), Path.Combine(CommonUtil.GetApplicationDataPath(), "Gradients"), //CommonUtil.GetTempPath() Path.Combine(CommonUtil.GetApplicationDataPath(), "Temp") }; foreach (string folder in necessaryFolders) { if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } } } public static ApplicationSettings LoadSettings() { if (!File.Exists(SettingsFileName)) { return new ApplicationSettings(); } try { return CommonUtil.DeserializeFromFile(SettingsFileName); } catch (Exception) { return new ApplicationSettings(); } } public static void SaveSettings(ApplicationSettings s) { CommonUtil.SerializeToFile(s, SettingsFileName); } public static NumericConverter GetNumericConverterFromWaypointAttribute(WaypointAttribute wa) { switch (wa) { case WaypointAttribute.Pace: case WaypointAttribute.MapReadingDuration: return new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); case WaypointAttribute.Speed: return new NumericConverter(); case WaypointAttribute.DirectionDeviationToNextLap: return new NumericConverter { NoOfDecimals = 0 }; default: return new IntConverter(); } } public static DialogResult ShowExceptionMessageBox(string message, Exception exception, string title) { var topLevelException = new ApplicationException(message, exception); return ShowExceptionMessageBox(topLevelException, title); } public static DialogResult ShowExceptionMessageBox(Exception exception, string title) { var messageBox = new ExceptionMessageBox(title, exception); return messageBox.ShowDialog(); } public static void CheckForNewVersion() { var languageString = (ApplicationSettings.UiCulture == null ? "" : ApplicationSettings.UiCulture.ToString()); var request = new GetCurrentVersionRequest() { UserVersion = Application.ProductVersion, UserLanguage = languageString}; var server = new QuickRouteServer.QuickRouteServer(); server.GetCurrentVersionCompleted += GetCurrentVersionFromServerCompleted; try { server.GetCurrentVersionAsync(request); } catch(Exception) { // probably no connection to Internet } } private static void GetCurrentVersionFromServerCompleted(object sender, GetCurrentVersionCompletedEventArgs e) { try { var currentVersion = new Version(e.Result.CurrentVersion); if (currentVersion > new Version(Application.ProductVersion)) { // there is a new version // display message? if (!ApplicationSettings.DontRemindAboutVersions.Contains(currentVersion.ToString())) { var message = string.Format(Strings.NewVersionAvailable, currentVersion) + "\r\n\r\n"; if (e.Result.Features != null && e.Result.Features.Length > 0) { message += Strings.NewVersionFeatures; foreach (var feature in e.Result.Features) { var tagsStripped = Regex.Replace(feature, "<.*?>", string.Empty); message += "\r\n" + "* " + HttpUtility.UrlDecode(tagsStripped); } } using (var dlg = new NewVersionDialog() { Message = message, DownloadUrl = e.Result.DownloadUrl }) { dlg.ShowDialog(); if (dlg.DontRemindMe) ApplicationSettings.DontRemindAboutVersions.Add(currentVersion.ToString()); } } } } catch(Exception) { // probably no connection to Internet } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Classes/WinApi.cs000066400000000000000000000017501446222606700243040ustar00rootroot00000000000000using System; using System.Runtime.InteropServices; namespace QuickRoute.UI.Classes { public static class WinApi { [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")] public static extern int GetSystemMetrics(int which); [DllImport("user32.dll")] public static extern void SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, int X, int Y, int width, int height, uint flags); private const int SM_CXSCREEN = 0; private const int SM_CYSCREEN = 1; private static readonly IntPtr HWND_TOP = IntPtr.Zero; private const int SWP_SHOWWINDOW = 64; // 0×0040 public static int ScreenX { get { return GetSystemMetrics(SM_CXSCREEN); } } public static int ScreenY { get { return GetSystemMetrics(SM_CYSCREEN); } } public static void SetWinFullScreen(IntPtr hwnd) { SetWindowPos(hwnd, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW); } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/000077500000000000000000000000001446222606700222545ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.Designer.cs000066400000000000000000000113051446222606700260650ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class AboutBox { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox)); this.quickRouteLabel = new System.Windows.Forms.Label(); this.versionLabel = new System.Windows.Forms.Label(); this.developerLabel = new System.Windows.Forms.Label(); this.closeButton = new System.Windows.Forms.Button(); this.websiteLink = new System.Windows.Forms.LinkLabel(); this.translationLabel = new System.Windows.Forms.Label(); this.portedByLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // // quickRouteLabel // resources.ApplyResources(this.quickRouteLabel, "quickRouteLabel"); this.quickRouteLabel.BackColor = System.Drawing.Color.Transparent; this.quickRouteLabel.Name = "quickRouteLabel"; // // versionLabel // resources.ApplyResources(this.versionLabel, "versionLabel"); this.versionLabel.BackColor = System.Drawing.Color.Transparent; this.versionLabel.Name = "versionLabel"; // // developerLabel // resources.ApplyResources(this.developerLabel, "developerLabel"); this.developerLabel.BackColor = System.Drawing.Color.Transparent; this.developerLabel.Name = "developerLabel"; // // closeButton // resources.ApplyResources(this.closeButton, "closeButton"); this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.closeButton.Name = "closeButton"; this.closeButton.UseVisualStyleBackColor = true; this.closeButton.Click += new System.EventHandler(this.closeButton_Click); // // websiteLink // resources.ApplyResources(this.websiteLink, "websiteLink"); this.websiteLink.BackColor = System.Drawing.Color.Transparent; this.websiteLink.Name = "websiteLink"; this.websiteLink.TabStop = true; this.websiteLink.UseCompatibleTextRendering = true; this.websiteLink.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.websiteLink_LinkClicked); // // translationLabel // resources.ApplyResources(this.translationLabel, "translationLabel"); this.translationLabel.BackColor = System.Drawing.Color.Transparent; this.translationLabel.Name = "translationLabel"; // // portedByLabel // resources.ApplyResources(this.portedByLabel, "portedByLabel"); this.portedByLabel.BackColor = System.Drawing.Color.Transparent; this.portedByLabel.Name = "portedByLabel"; // // AboutBox // this.AcceptButton = this.closeButton; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.closeButton; this.Controls.Add(this.portedByLabel); this.Controls.Add(this.translationLabel); this.Controls.Add(this.websiteLink); this.Controls.Add(this.closeButton); this.Controls.Add(this.developerLabel); this.Controls.Add(this.versionLabel); this.Controls.Add(this.quickRouteLabel); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AboutBox"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label quickRouteLabel; private System.Windows.Forms.Label versionLabel; private System.Windows.Forms.Label developerLabel; private System.Windows.Forms.Button closeButton; private System.Windows.Forms.LinkLabel websiteLink; private System.Windows.Forms.Label translationLabel; private System.Windows.Forms.Label portedByLabel; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.cs000066400000000000000000000012351446222606700243270ustar00rootroot00000000000000using System; using System.Windows.Forms; using QuickRoute.Resources; namespace QuickRoute.UI.Forms { public partial class AboutBox : Form { public AboutBox() { InitializeComponent(); var v = new Version(Application.ProductVersion); versionLabel.Text = string.Format(versionLabel.Text, v.Major + "." + v.Minor + (v.Build > 0 ? "." + v.Build : "")); } private void closeButton_Click(object sender, EventArgs e) { Close(); } private void websiteLink_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(Strings.WebsiteUrl); } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.da.resx000066400000000000000000005552271446222606700253050ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Luk 202, 13 Dansk oversættelse af Michael Leth Jess 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 rkJggg== Om QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.de.resx000066400000000000000000000157641446222606700253060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 223, 13 Entwickelt von Mats Troeng und Jörgen Ohlin Schließen 10, 28 221, 17 Homepage: www.matstroeng.se/quickroute 205, 13 Deutsche Übersetzung von Markus Plohn Über QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.fi.resx000066400000000000000000005603411446222606700253100ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 53, 13 Versio {0} 187, 13 Kehittäjät Mats Troeng ja Jörgen Ohlin Sulje 11, 28 209, 17 Nettisivu: www.matstroeng.se/quickroute 301, 13 Käännös suomeksi: Juha Meronen - http://www.meronen.net/ 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 QuickRoutesta quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.fr.resx000066400000000000000000000142131446222606700253110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Fermer A propos de QuickRoute Traduction Française par Mickaël Blanchard Développé par Mats Troeng et Jörgen Ohlin quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.it.resx000066400000000000000000005572001446222606700253260ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 65, 13 Versione {0} 206, 13 Sviluppato da Mats Troeng e Jörgen Ohlin Chiudi 15, 28 226, 17 Sito internet: www.matstroeng.se/quickroute 213, 13 Traduzione in italiano a cura di Davide Miori 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 rkJggg== Riguardo QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.lt.resx000066400000000000000000005603441446222606700253340ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 55, 13 Versija {0} 177, 13 Sukurta Mats Troeng ir Jörgen Ohlin Uždaryti 24, 28 265, 17 Internetinis tinklapis: www.matstroeng.se/quickroute 190, 13 Į lietuvių kalbą išvertė Rasa Ptašekaitė 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 Apie QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.no.resx000066400000000000000000005601341446222606700253260ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Versjon {0} 198, 13 Utviklet av Mats Troeng og Jörgen Ohlin Lukk 14, 28 230, 17 Nett-adresse: www.matstroeng.se/quickroute 181, 13 Oversatt til norsk av Ida Kierulf Dirdal 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 Om QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.resx000066400000000000000000005772011446222606700247160ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 397, 152 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Version {0} System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 75, 23 0 0 178, 81 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 rkJggg== True 6, 13 1 272, 13 272, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 CenterParent NoControl English translation by Mats Troeng and Boris Granovskiy NoControl Linux/Mono port by Kristóf Ralovich websiteLink NoControl 4 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Close 4 True 9, 28 3 177, 26 Bottom, Right 59, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 versionLabel System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickRouteLabel 6 7 QuickRoute $this $this 178, 59 developerLabel Microsoft Sans Serif, 14pt 1 178, 103 178, 125 219, 13 closeButton $this 5 About QuickRoute 109, 24 2 AboutBox Developed by Mats Troeng and Jörgen Ohlin $this 3 $this True True True Website: www.matstroeng.se/quickroute 206, 17 484, 183 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 178, 148 translationLabel portedByLabel True True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.ru.resx000066400000000000000000005606071446222606700253450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 61, 13 Версия {0} 182, 13 Авторы: Mats Troeng и Jörgen Ohlin Закрыть 10, 29 213, 17 Веб-сайт: www.matstroeng.se/quickroute 172, 13 Русский перевод: Михаил Сенин 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 NoControl О программе QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AboutBox.sv.resx000066400000000000000000005601171446222606700253430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 214, 13 Utvecklat av Mats Troeng och Jörgen Ohlin Stäng 11, 31 219, 17 Webbplats: www.matstroeng.se/quickroute 10, 13 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 Inherit Om QuickRoute quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.Designer.cs000066400000000000000000000175771446222606700321750ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class AddLapsFromExternalDataSource { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddLapsFromExternalDataSource)); this.events = new System.Windows.Forms.ComboBox(); this.categories = new System.Windows.Forms.ComboBox(); this.runners = new System.Windows.Forms.ComboBox(); this.eventLabel = new System.Windows.Forms.Label(); this.classLabel = new System.Windows.Forms.Label(); this.runnerLabel = new System.Windows.Forms.Label(); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.startDate = new System.Windows.Forms.DateTimePicker(); this.endDate = new System.Windows.Forms.DateTimePicker(); this.startDateLabel = new System.Windows.Forms.Label(); this.endDateLabel = new System.Windows.Forms.Label(); this.uiInformation = new System.Windows.Forms.Label(); this.search = new System.Windows.Forms.Button(); this.dataSourceLabel = new System.Windows.Forms.Label(); this.dataSources = new System.Windows.Forms.ComboBox(); this.SuspendLayout(); // // events // resources.ApplyResources(this.events, "events"); this.events.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.events.FormattingEnabled = true; this.events.Name = "events"; this.events.SelectedIndexChanged += new System.EventHandler(this.events_SelectedIndexChanged); // // categories // resources.ApplyResources(this.categories, "categories"); this.categories.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.categories.FormattingEnabled = true; this.categories.Name = "categories"; this.categories.SelectedIndexChanged += new System.EventHandler(this.categories_SelectedIndexChanged); // // runners // resources.ApplyResources(this.runners, "runners"); this.runners.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.runners.FormattingEnabled = true; this.runners.Name = "runners"; // // eventLabel // resources.ApplyResources(this.eventLabel, "eventLabel"); this.eventLabel.Name = "eventLabel"; // // classLabel // resources.ApplyResources(this.classLabel, "classLabel"); this.classLabel.Name = "classLabel"; // // runnerLabel // resources.ApplyResources(this.runnerLabel, "runnerLabel"); this.runnerLabel.Name = "runnerLabel"; // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // startDate // resources.ApplyResources(this.startDate, "startDate"); this.startDate.Format = System.Windows.Forms.DateTimePickerFormat.Short; this.startDate.Name = "startDate"; // // endDate // resources.ApplyResources(this.endDate, "endDate"); this.endDate.Format = System.Windows.Forms.DateTimePickerFormat.Short; this.endDate.Name = "endDate"; // // startDateLabel // resources.ApplyResources(this.startDateLabel, "startDateLabel"); this.startDateLabel.Name = "startDateLabel"; // // endDateLabel // resources.ApplyResources(this.endDateLabel, "endDateLabel"); this.endDateLabel.Name = "endDateLabel"; // // uiInformation // resources.ApplyResources(this.uiInformation, "uiInformation"); this.uiInformation.BackColor = System.Drawing.SystemColors.Info; this.uiInformation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.uiInformation.Name = "uiInformation"; // // search // resources.ApplyResources(this.search, "search"); this.search.Name = "search"; this.search.UseVisualStyleBackColor = true; this.search.Click += new System.EventHandler(this.search_Click); // // dataSourceLabel // resources.ApplyResources(this.dataSourceLabel, "dataSourceLabel"); this.dataSourceLabel.Name = "dataSourceLabel"; // // dataSources // resources.ApplyResources(this.dataSources, "dataSources"); this.dataSources.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.dataSources.FormattingEnabled = true; this.dataSources.Name = "dataSources"; this.dataSources.SelectedIndexChanged += new System.EventHandler(this.dataSources_SelectedIndexChanged); // // AddLapsFromExternalDataSource // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.dataSourceLabel); this.Controls.Add(this.dataSources); this.Controls.Add(this.search); this.Controls.Add(this.uiInformation); this.Controls.Add(this.endDateLabel); this.Controls.Add(this.startDateLabel); this.Controls.Add(this.endDate); this.Controls.Add(this.startDate); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Controls.Add(this.runnerLabel); this.Controls.Add(this.classLabel); this.Controls.Add(this.eventLabel); this.Controls.Add(this.runners); this.Controls.Add(this.categories); this.Controls.Add(this.events); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AddLapsFromExternalDataSource"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ComboBox events; private System.Windows.Forms.ComboBox categories; private System.Windows.Forms.ComboBox runners; private System.Windows.Forms.Label eventLabel; private System.Windows.Forms.Label classLabel; private System.Windows.Forms.Label runnerLabel; private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.DateTimePicker startDate; private System.Windows.Forms.DateTimePicker endDate; private System.Windows.Forms.Label startDateLabel; private System.Windows.Forms.Label endDateLabel; private System.Windows.Forms.Label uiInformation; private System.Windows.Forms.Button search; private System.Windows.Forms.Label dataSourceLabel; private System.Windows.Forms.ComboBox dataSources; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.cs000066400000000000000000000116631446222606700304240ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; using QuickRoute.BusinessEntities.ExternalLapDataSources; namespace QuickRoute.UI.Forms { public partial class AddLapsFromExternalDataSource : Form { private bool updatingUiNow; private IExternalLapDataSource dataSource; public AddLapsFromExternalDataSource(DateTime startDate, DateTime endDate, int selectedDataSourceIndex) { InitializeComponent(); this.startDate.Value = startDate; this.endDate.Value = endDate; PopulateDataSources(); if (dataSources.Items.Count > 0) dataSources.SelectedIndex = Math.Min(selectedDataSourceIndex, dataSources.Items.Count-1); } public int SelectedDataSourceIndex { get { return dataSources.SelectedIndex; } } private void PopulateDataSources() { var formattedDataSources = FormattedDataSource.ToFormattedDataSources(ExternalLapDataSourceFactory.GetExternalLapDataSources()); dataSources.DataSource = formattedDataSources; } private void PopulateEvents() { Cursor = Cursors.WaitCursor; var formattedEvents = FormattedEvent.ToFormattedEvents(dataSource.GetEvents(startDate.Value, endDate.Value, null /* country */)); Cursor = Cursors.Default; updatingUiNow = true; Array.Reverse(formattedEvents); events.DataSource = formattedEvents; if (events.Items.Count > 0) events.SelectedIndex = 0; PopulateCategories(); PopulateRunners(); updatingUiNow = false; } private void PopulateCategories() { Cursor = Cursors.WaitCursor; categories.DataSource = events.SelectedItem == null ? new Category[0] : dataSource.GetCategories(((FormattedEvent)events.SelectedItem).Event.DatabaseId); Cursor = Cursors.Default; categories.DisplayMember = "Name"; } private void PopulateRunners() { Cursor = Cursors.WaitCursor; runners.DataSource = events.SelectedItem == null ? new FormattedRunner[0] : FormattedRunner.ToFormattedRunners(dataSource.GetRunnersAndSplits(((FormattedEvent)events.SelectedItem).Event.DatabaseId, categories.SelectedIndex)); Cursor = Cursors.Default; } private class FormattedEvent { public Event Event { get; set; } public override string ToString() { return Event.StartDate.ToShortDateString() + " " + Event.Name; } public static FormattedEvent[] ToFormattedEvents(IEnumerable events) { List formattedEvents = new List(); foreach (Event e in events) { formattedEvents.Add(new FormattedEvent { Event = e }); } return formattedEvents.ToArray(); } } private class FormattedDataSource { public string Name { get; set; } public IExternalLapDataSource DataSource { get; set; } public override string ToString() { return Name; } public static FormattedDataSource[] ToFormattedDataSources(IEnumerable> dataSources) { var formattedDataSources = new List(); foreach (var d in dataSources) { formattedDataSources.Add(new FormattedDataSource { Name = d.Key, DataSource = d.Value }); } return formattedDataSources.ToArray(); } } private class FormattedRunner { public Runner Runner { get; set; } public override string ToString() { return Runner.Name + ", " + Runner.Club; } public static FormattedRunner[] ToFormattedRunners(IEnumerable runners) { var formattedRunners = new List(); foreach (var e in runners) { formattedRunners.Add(new FormattedRunner { Runner = e }); } return formattedRunners.ToArray(); } } private void events_SelectedIndexChanged(object sender, EventArgs e) { if (!updatingUiNow) PopulateCategories(); } private void categories_SelectedIndexChanged(object sender, EventArgs e) { if (!updatingUiNow) PopulateRunners(); } public Runner Runner { get { return ((FormattedRunner)runners.SelectedItem).Runner; } } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void search_Click(object sender, EventArgs e) { PopulateEvents(); } private void dataSources_SelectedIndexChanged(object sender, EventArgs e) { dataSource = ((FormattedDataSource) dataSources.SelectedItem).DataSource; PopulateEvents(); } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.da.resx000066400000000000000000000172171446222606700313640ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 45, 13 Stæv&ne 38, 13 &Klasse 47, 13 D&eltager Luk 40, 13 St&arttid 46, 13 &Slutdato Du kan automatisk tilføje stræktider til en QuickRoute session hvis stævnet findes i en ekstern datakilde med stræktider (f.eks. WinSplits). Vælg stævne, klasse og løber og klik OK. Sø&g 52, 13 &Datakilde Tilføj stræktider fra en ekstern datakilde quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.de.resx000066400000000000000000000166771446222606700314010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 59, 13 &Wettkampf 38, 13 &Klasse 37, 13 &Läufer Abbrechen 69, 13 &Beginndatum 55, 13 &Enddatum Du kannst deine Zwischenzeiten in eine QuickRoute-Datei laden, wenn der Wettkampf in der WinSplits-Datenbank existiert. Wähle den WinSplits-Wettkampf, die Klasse und den Läufer und klicke auf OK. &Suche Zwischenzeiten von WinSplits hinzufügen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.fi.resx000066400000000000000000000166421446222606700313770ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 40, 13 Kilpailu 31, 13 &Sarja 44, 13 &Kilpailija Peruuta 83, 13 &Alkupäivämäärä 92, 13 &Loppupäivämäärä Voit lisätä väliaikasi QuickRouteen automaattisesti, jos kilpailu löytyy WinSplits -tietokannasta. Valitse WinSplits -kilpailu, sarja, kilpailija ja klikkaa OK. &Hae Lisää väliajat Winsplitsistä quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.fr.resx000066400000000000000000000154651446222606700314120ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Compé&tition &Catégorie C&ompétiteur Annuler &Date de début Dat&e de fin Vous pouvez automatiquement ajouter vos temps intermédiaires à votre session QuickRoute si la compétition existe dans la base WinSplits. Sélectionnez la compétition, la catégorie et le coureur et cliquez sur OK. Che&rcher Ajouter des temps intermédiaires à partir de WinSplits quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.it.resx000066400000000000000000000167271446222606700314210ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 30, 13 &Gara 52, 13 &Categoria 65, 13 C&oncorrente Cancella 67, 13 &Data di inizio 64, 13 Data di &fine È possibile aggiungere automaticamente i vostri tempi parziali a una sessione QuickRoute se la gara esiste nel database WinSplits. Selezionare la gara su WinSplits, la categoria e il concorrente e fare clic su OK. Trov&a Aggiungi tempi intermedi da WinSplits quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.lt.resx000066400000000000000000000155461446222606700314220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 S&portininkas I&eškoti Gerai Jūs galite automatiškai įtraukti varžybų tarpinius laikus į QuickRoute treniruotę, jei varžybos yra WinSplits duomenų bazėje. Pasirinkite WinSplits varžybas, grupę ir bėgiką ir paspauskite OK. &Starto data &Grupė &Pabaigos data Atšaukti Pridėti tarpinius laikus iš WinSplits Varžy&bos quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.no.resx000066400000000000000000000154461446222606700314160ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 K&onkurrent &Søk OK Du kan legge dine mellomtider automatisk inn i QuickRoute hvis konkurransen finnes i WinSplits' database. Velg WinSplits-konkurranse, klasse og løper og klikk OK. Start&dato &Klasse Sluttd&ato Avbryt Legg til mellomtider fra WinSplits K&onkurranse quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.resx000066400000000000000000000611671446222606700310040ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 53, 13 Bottom, Left $this $this 9 9, 98 266, 80 endDateLabel 75, 23 2 System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 10 AddLapsFromExternalDataSource System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 8 Bottom, Left True C&ompetitor 15 startDateLabel Bottom, Left, Right 12, 114 dataSourceLabel 72, 23 $this $this Add split times from external data source 206, 153 266, 21 1 NoControl 5 startDate 91, 20 6, 13 Bottom, Left, Right endDate 4 Bottom, Left, Right &Data source You can automatically add your split times to a QuickRoute session if the competition exists in an external split time data source. Select competition, class and runner and click OK. 266, 21 Compe&tition search Bottom, Left 203, 302 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 8 109, 154 50, 13 7 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 106, 138 ok 6 NoControl $this $this classLabel 12, 154 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 12, 193 Bottom, Left, Right $this 9, 217 14 True True True 12 7 $this &End date 12 CenterParent 62, 13 Bottom, Left, Right 9 32, 13 $this Bottom, Left System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 91, 20 runners 65, 13 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 15 System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 2 $this System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Se&arch Bottom, Right Bottom, Left Bottom, Left 14 75, 23 runnerLabel 12, 273 9, 138 3 True Bottom, Left Bottom, Left System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 266, 21 eventLabel Cancel 10 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 12, 233 True 0 $this $this 12, 9 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 cancel 4 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 122, 302 OK $this 0 &Class Top, Bottom, Left, Right 5 &Start date uiInformation $this 9, 257 293, 337 6 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 13 categories 11 11 9, 177 266, 21 13 4, 4, 4, 4 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Right 57, 13 events $this dataSources System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.ru.resx000066400000000000000000000171361446222606700314260ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 80, 13 Со&ревнования 63, 13 &Дистанция 55, 13 &Участник Отмена 39, 13 По&сле 22, 13 Д&о Вы можете легко импортировать ваши перегоны в документ QuickRoute, если соревнования находятся в базе данных WinSplits. Выберите соревнования, дистанцию и участника и нажмите ОК. &Поиск Импорт перегонов из WinSplits quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddLapsFromExternalDataSource.sv.resx000066400000000000000000000173541446222606700314320ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 42, 13 &Tävling &Klass 53, 13 &Deltagare Avbryt 58, 13 &Startdatum 54, 13 Sl&utdatum 266, 75 Du kan automatiskt lägga till mellantider till QuickRoute-passet om tävlingen finns i en extern datakälla. Välj tävling, klass och deltagare och klicka OK. 69, 23 S&ök 52, 13 Data&källa Lägg till mellantider från extern datakälla quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.Designer.cs000066400000000000000000000271561446222606700274200ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class AddSessionsForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddSessionsForm)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.addRouteGroup = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.routeFromGpsDevice = new System.Windows.Forms.RadioButton(); this.routeFromFile = new System.Windows.Forms.RadioButton(); this.routeFileFormatLabel = new System.Windows.Forms.Label(); this.routeGpsDevice = new System.Windows.Forms.ComboBox(); this.routeFileName = new System.Windows.Forms.TextBox(); this.routeFileFormatComboBox = new System.Windows.Forms.ComboBox(); this.routeFileNameBrowse = new System.Windows.Forms.Button(); this.addSessionButton = new System.Windows.Forms.Button(); this.sessionGrid = new System.Windows.Forms.DataGridView(); this.NameColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.addRouteGroup.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.sessionGrid)).BeginInit(); this.SuspendLayout(); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // addRouteGroup // this.addRouteGroup.AccessibleDescription = null; this.addRouteGroup.AccessibleName = null; resources.ApplyResources(this.addRouteGroup, "addRouteGroup"); this.addRouteGroup.BackgroundImage = null; this.addRouteGroup.Controls.Add(this.tableLayoutPanel1); this.addRouteGroup.Font = null; this.addRouteGroup.Name = "addRouteGroup"; this.addRouteGroup.TabStop = false; // // tableLayoutPanel1 // this.tableLayoutPanel1.AccessibleDescription = null; this.tableLayoutPanel1.AccessibleName = null; resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.BackgroundImage = null; this.tableLayoutPanel1.Controls.Add(this.routeFromGpsDevice, 0, 0); this.tableLayoutPanel1.Controls.Add(this.routeFromFile, 0, 1); this.tableLayoutPanel1.Controls.Add(this.routeFileFormatLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.routeGpsDevice, 1, 0); this.tableLayoutPanel1.Controls.Add(this.routeFileName, 1, 1); this.tableLayoutPanel1.Controls.Add(this.routeFileFormatComboBox, 1, 2); this.tableLayoutPanel1.Controls.Add(this.routeFileNameBrowse, 2, 1); this.tableLayoutPanel1.Controls.Add(this.addSessionButton, 1, 3); this.tableLayoutPanel1.Font = null; this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // routeFromGpsDevice // this.routeFromGpsDevice.AccessibleDescription = null; this.routeFromGpsDevice.AccessibleName = null; resources.ApplyResources(this.routeFromGpsDevice, "routeFromGpsDevice"); this.routeFromGpsDevice.BackgroundImage = null; this.routeFromGpsDevice.Checked = true; this.routeFromGpsDevice.Font = null; this.routeFromGpsDevice.Name = "routeFromGpsDevice"; this.routeFromGpsDevice.TabStop = true; this.routeFromGpsDevice.UseVisualStyleBackColor = true; this.routeFromGpsDevice.CheckedChanged += new System.EventHandler(this.routeFromGpsDevice_CheckedChanged); // // routeFromFile // this.routeFromFile.AccessibleDescription = null; this.routeFromFile.AccessibleName = null; resources.ApplyResources(this.routeFromFile, "routeFromFile"); this.routeFromFile.BackgroundImage = null; this.routeFromFile.Font = null; this.routeFromFile.Name = "routeFromFile"; this.routeFromFile.UseVisualStyleBackColor = true; this.routeFromFile.CheckedChanged += new System.EventHandler(this.routeFromFile_CheckedChanged); // // routeFileFormatLabel // this.routeFileFormatLabel.AccessibleDescription = null; this.routeFileFormatLabel.AccessibleName = null; resources.ApplyResources(this.routeFileFormatLabel, "routeFileFormatLabel"); this.routeFileFormatLabel.Font = null; this.routeFileFormatLabel.Name = "routeFileFormatLabel"; // // routeGpsDevice // this.routeGpsDevice.AccessibleDescription = null; this.routeGpsDevice.AccessibleName = null; resources.ApplyResources(this.routeGpsDevice, "routeGpsDevice"); this.routeGpsDevice.BackgroundImage = null; this.routeGpsDevice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.routeGpsDevice.Font = null; this.routeGpsDevice.FormattingEnabled = true; this.routeGpsDevice.Name = "routeGpsDevice"; // // routeFileName // this.routeFileName.AccessibleDescription = null; this.routeFileName.AccessibleName = null; resources.ApplyResources(this.routeFileName, "routeFileName"); this.routeFileName.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; this.routeFileName.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem; this.routeFileName.BackgroundImage = null; this.routeFileName.Font = null; this.routeFileName.Name = "routeFileName"; this.routeFileName.TextChanged += new System.EventHandler(this.routeFileName_TextChanged); // // routeFileFormatComboBox // this.routeFileFormatComboBox.AccessibleDescription = null; this.routeFileFormatComboBox.AccessibleName = null; resources.ApplyResources(this.routeFileFormatComboBox, "routeFileFormatComboBox"); this.routeFileFormatComboBox.BackgroundImage = null; this.routeFileFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.routeFileFormatComboBox.Font = null; this.routeFileFormatComboBox.FormattingEnabled = true; this.routeFileFormatComboBox.Name = "routeFileFormatComboBox"; // // routeFileNameBrowse // this.routeFileNameBrowse.AccessibleDescription = null; this.routeFileNameBrowse.AccessibleName = null; resources.ApplyResources(this.routeFileNameBrowse, "routeFileNameBrowse"); this.routeFileNameBrowse.BackgroundImage = null; this.routeFileNameBrowse.Font = null; this.routeFileNameBrowse.Name = "routeFileNameBrowse"; this.routeFileNameBrowse.UseVisualStyleBackColor = true; this.routeFileNameBrowse.Click += new System.EventHandler(this.routeFileNameBrowse_Click); // // addSessionButton // this.addSessionButton.AccessibleDescription = null; this.addSessionButton.AccessibleName = null; resources.ApplyResources(this.addSessionButton, "addSessionButton"); this.addSessionButton.BackgroundImage = null; this.addSessionButton.Font = null; this.addSessionButton.Name = "addSessionButton"; this.addSessionButton.UseVisualStyleBackColor = true; this.addSessionButton.Click += new System.EventHandler(this.addSessionButton_Click); // // sessionGrid // this.sessionGrid.AccessibleDescription = null; this.sessionGrid.AccessibleName = null; this.sessionGrid.AllowUserToAddRows = false; this.sessionGrid.AllowUserToDeleteRows = false; resources.ApplyResources(this.sessionGrid, "sessionGrid"); this.sessionGrid.BackgroundImage = null; this.sessionGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.sessionGrid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.NameColumn}); this.sessionGrid.Font = null; this.sessionGrid.Name = "sessionGrid"; this.sessionGrid.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.sessionGrid_CellFormatting); // // NameColumn // this.NameColumn.DataPropertyName = "Name"; resources.ApplyResources(this.NameColumn, "NameColumn"); this.NameColumn.Name = "NameColumn"; // // AddSessionsForm // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.sessionGrid); this.Controls.Add(this.cancel); this.Controls.Add(this.addRouteGroup); this.Controls.Add(this.ok); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "AddSessionsForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.addRouteGroup.ResumeLayout(false); this.addRouteGroup.PerformLayout(); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.sessionGrid)).EndInit(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.GroupBox addRouteGroup; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.RadioButton routeFromGpsDevice; private System.Windows.Forms.RadioButton routeFromFile; private System.Windows.Forms.TextBox routeFileName; private System.Windows.Forms.Button routeFileNameBrowse; private System.Windows.Forms.ComboBox routeFileFormatComboBox; private System.Windows.Forms.Label routeFileFormatLabel; private System.Windows.Forms.ComboBox routeGpsDevice; private System.Windows.Forms.Button addSessionButton; private System.Windows.Forms.DataGridView sessionGrid; private System.Windows.Forms.DataGridViewTextBoxColumn NameColumn; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.cs000066400000000000000000000227351446222606700256570ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.IO; using QuickRoute.BusinessEntities.Importers; using QuickRoute.BusinessEntities.Importers.FRWD; using QuickRoute.BusinessEntities.Importers.Garmin.Forerunner; using QuickRoute.BusinessEntities.Importers.Garmin.ANTAgent; using QuickRoute.BusinessEntities.Importers.GPX; using QuickRoute.BusinessEntities.Importers.TCX; using QuickRoute.Resources; using QuickRoute.UI.Classes; namespace QuickRoute.UI.Forms { public partial class AddSessionsForm : Form { private readonly List supportedRouteFileFormats; private readonly List supportedGPSDevices; public AddSessionsForm(Document document) { InitializeComponent(); supportedRouteFileFormats = SupportedImportFormatManager.GetSupportedRouteFileFormats(); routeFileFormatComboBox.DataSource = supportedRouteFileFormats; supportedGPSDevices = SupportedImportFormatManager.GetSupportedGPSDevices(); var gpsDevicesFound = SearchForGPSDevices(); if (!gpsDevicesFound) routeFromFile.Checked = true; Document = document; Sessions = Document.Sessions.Copy(); sessionGrid.DataSource = CreateBindingSource(Sessions); UpdateUI(); } private static BindingSource CreateBindingSource(IEnumerable sessions) { var bindingSource = new BindingSource(); foreach(var s in sessions) { bindingSource.Add(s); } return bindingSource; } #region Public properties public SessionCollection Sessions { get; set; } public Document Document { get; set; } #endregion #region Event handlers private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void routeFileNameBrowse_Click(object sender, EventArgs e) { var filterItems = new string[supportedRouteFileFormats.Count]; for (var i = 0; i < supportedRouteFileFormats.Count; i++) { filterItems[i] = supportedRouteFileFormats[i].FileFilter; } using (var ofd = new OpenFileDialog { CheckFileExists = true, Filter = string.Join("|", filterItems), FilterIndex = (routeFileFormatComboBox.SelectedIndex + 1), Title = Strings.SelectRouteFile, }) { if (Util.ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ImportRoute)) { ofd.InitialDirectory = Util.ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ImportRoute]; } if (ofd.ShowDialog() == DialogResult.OK) { routeFileName.Text = ofd.FileName; routeFileFormatComboBox.SelectedIndex = ofd.FilterIndex - 1; Util.ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ImportRoute] = Path.GetDirectoryName(ofd.FileName); } } } private void routeFromFile_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void routeFromGpsDevice_CheckedChanged(object sender, EventArgs e) { if (routeFromGpsDevice.Checked) SearchForGPSDevices(); UpdateUI(); } private void routeFileName_TextChanged(object sender, EventArgs e) { UpdateRouteFileFormat(); } #endregion private void Import() { if (routeFromFile.Checked && !File.Exists(routeFileName.Text)) { MessageBox.Show(Strings.RouteFileDoesNotExist, Strings.InvalidRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } IRouteImporter routeImporter = null; if (routeFromFile.Checked) { IRouteFileImporter routeFileImporter = ((RouteFileFormat)routeFileFormatComboBox.SelectedItem).Importer; routeFileImporter.FileName = routeFileName.Text; routeImporter = routeFileImporter; } else if (routeFromGpsDevice.Checked) { GPSDevice gpsDevice = routeGpsDevice.SelectedItem as GPSDevice; if (gpsDevice == null) { MessageBox.Show(Strings.NoGPSDevicesConnectedMessageBox, Strings.InvalidRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } routeImporter = gpsDevice.Importer; } routeImporter.BeginWork += routeImporter_BeginWork; routeImporter.WorkProgress += routeImporter_WorkProgress; routeImporter.EndWork += routeImporter_EndWork; if (routeImporter.ShowPreImportDialogs() == DialogResult.OK) { try { routeImporter.Import(); } catch (Exception ex) { routeImporter.ImportResult.Succeeded = false; routeImporter.ImportResult.Error = ImportError.Unknown; routeImporter.ImportResult.ErrorMessage = ex.Message; routeImporter.ImportResult.Exception = ex; } if(!routeImporter.ImportResult.Succeeded) { // an error occured, show relevant error info and cancel creation of new session. switch (routeImporter.ImportResult.Error) { case ImportError.NoWaypoints: routeImporter.ImportResult.ErrorMessage = Strings.RouteImportError_NoWaypoints; break; case ImportError.NoWaypointTimes: routeImporter.ImportResult.ErrorMessage = Strings.RouteImportError_NoWaypointTimes; break; } Cursor = Cursors.Default; if (routeImporter.ImportResult.Exception != null) { Util.ShowExceptionMessageBox(routeImporter.ImportResult.Exception, Strings.InvalidRoute); } else { MessageBox.Show(routeImporter.ImportResult.ErrorMessage, Strings.InvalidRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); } return; } // add new session to session collection var monochromeColors = new Color[] {Color.Red, Color.Blue, Color.DarkGreen, Color.DarkOrange, Color.DarkGray}; SessionSettings ss = Document.Settings.DefaultSessionSettings.Copy(); ss.RouteLineSettingsCollection[WaypointAttribute.Pace].MonochromeColor = Color.FromArgb(160, monochromeColors[ Sessions.Count% monochromeColors. Length]); ss.RouteLineSettingsCollection[WaypointAttribute.Pace].MonochromeWidth = 3; Session s = new Session( routeImporter.ImportResult.Route, routeImporter.ImportResult.Laps, Document.Map.Image.Size, Document.Sessions.CalculateAverageTransformation().TransformationMatrix, Document.ProjectionOrigin, ss); s.CreateAdjustedRoute(); Sessions.Add(s); // update session grid sessionGrid.DataSource = CreateBindingSource(Sessions); } } void routeImporter_EndWork(object sender, EventArgs e) { Cursor = Cursors.Default; } void routeImporter_WorkProgress(object sender, WorkProgressEventArgs e) { } void routeImporter_BeginWork(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; } private void UpdateUI() { routeFileName.Enabled = routeFromFile.Checked; routeFileNameBrowse.Enabled = routeFromFile.Checked; routeFileFormatComboBox.Enabled = routeFromFile.Checked; routeGpsDevice.Enabled = routeFromGpsDevice.Checked; } private bool SearchForGPSDevices() { routeGpsDevice.DataSource = null; routeGpsDevice.Items.Clear(); var devices = SupportedImportFormatManager.SearchForGPSDevices(supportedGPSDevices); bool devicesFound = (devices.Count > 0); if (!devicesFound) { routeGpsDevice.Items.Add(Strings.NoGPSDevicesConnected); } else { routeGpsDevice.DataSource = devices; } routeGpsDevice.SelectedIndex = 0; return devicesFound; } private void UpdateRouteFileFormat() { bool found = false; foreach (RouteFileFormat ff in supportedRouteFileFormats) { foreach (string e in ff.Extensions) { if (routeFileName.Text.EndsWith(e)) { routeFileFormatComboBox.SelectedItem = ff; found = true; break; } } if (found) break; } } private void addSessionButton_Click(object sender, EventArgs e) { Import(); } private void sessionGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { switch (sessionGrid.Columns[e.ColumnIndex].DataPropertyName) { case "Name": break; } } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.da.resx000066400000000000000000000152471446222606700266160ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Fra fi&l: Tilføj rute Fra &GPS enhed: OK Tilføj ruter &Tilføj rute Afbryd Gen&nemse... Fil for&mat: Navn quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.de.resx000066400000000000000000000153051446222606700266150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Von Dat&ei: Strecke hinzufügen Von &GPS-Gerät: OK Strecken hinzufügen &Strecke hinzufügen Abbrechen &Durchsuchen... Datei&format Name quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.fi.resx000066400000000000000000000161171446222606700266250ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta 95, 17 &GPS laitteesta: 80, 17 &Tiedostosta 88, 13 Tiedosto&formaatti &Selaa... &Lisää reitti Lisää reitti Nimi Lisää reitit quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.fr.resx000066400000000000000000000151661446222606700266410ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler Depuis l'appareil &GPS : Depuis le fichi&er : For&mat du fichier : Parc&ourir : &Ajouter route Ajouter route Nom Ajouter routes quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.it.resx000066400000000000000000000177101446222606700266430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella 121, 17 Dal dispositivo &GPS: 60, 17 Dal fi&le: 81, 13 For&mato del file: 140, 3 492, 21 140, 35 492, 20 140, 62 492, 21 &Sfoglia... 140, 92 &Aggiungi tracciato Aggiungi tracciato Nome Aggiungi tracciato quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.lt.resx000066400000000000000000000163031446222606700266430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Atšaukti 108, 17 Iš &GPS laikrodžio: 58, 17 Iš fai&lo: 75, 13 Failo for&matas: Narš&yti... &Pridėti prabėgimą Pridėti prabėgimus Pavadinimas Pridėti prabėgimus quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.no.resx000066400000000000000000000152441446222606700266430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Fra &fil: Legg til rute Fra &GPS-enhet: OK Legg til ruter &Legg til rute Avbryt &Bla... Filfor&mat: Navn quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.resx000066400000000000000000000577021446222606700262350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 routeGpsDevice tableLayoutPanel1 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 4 578, 290 routeFileNameBrowse 7 67, 17 58, 13 Bottom, Right From fil&e: 716, 121 122, 62 4 System.Windows.Forms.DataGridViewTextBoxColumn, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Add route 3, 5 CenterParent 738, 325 510, 21 $this tableLayoutPanel1 0 3, 3, 3, 6 routeFromGpsDevice 2 From &GPS device: 122, 92 ok 5 754, 1000 System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 75, 23 tableLayoutPanel1 tableLayoutPanel1 Top, Left, Right 6, 13 Top, Left, Right Bottom, Right System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 6 True 3, 3, 3, 6 routeFileFormatComboBox Top, Bottom, Left, Right addRouteGroup OK 510, 20 7 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 19, 66 GrowAndShrink 0 addSessionButton System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 3 sessionGrid 0 tableLayoutPanel1 111, 17 tableLayoutPanel1 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 NoControl AddSessionsForm Top, Left, Right 2 3 Add routes &Add route 12, 12 3, 5, 3, 3 routeFileName True 1 True tableLayoutPanel1 722, 140 True $this System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 75, 23 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routeFromFile 3 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 routeFileFormatLabel 2 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="routeFromGpsDevice" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="routeFromFile" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="routeFileFormatLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="routeGpsDevice" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="routeFileName" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="routeFileFormatComboBox" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="routeFileNameBrowse" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="addSessionButton" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Absolute,137,Absolute,498,Absolute,163" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20" /></TableLayoutSettings> cancel Cancel Fill 754, 307 122, 35 19, 7, 3, 0 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 638, 33 6 Bro&wse... 510, 21 1 $this System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 File for&mat: addRouteGroup 3, 16 1 3, 5, 3, 3 0 75, 23 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 4 2 3, 37 12, 158 NameColumn 1 122, 3 659, 290 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 Name 75, 23 tableLayoutPanel1 722, 126 5 Top, Left, Right 3, 7, 3, 3 4 True True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.ru.resx000066400000000000000000000162501446222606700266530ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 113, 17 Из устройства &GPS: 77, 17 Из &файла: 87, 13 Фор&мат файла: &Найти... Добавить &путь Добавить путь Название Добавление путей quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/AddSessionsForm.sv.resx000066400000000000000000000173631446222606700266630ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt &Bläddra... 59, 17 Från &fil: 49, 13 Filforma&t: Kartbild 104, 17 Från &GPS-enhet: 59, 17 Från fi&l: 49, 13 Filfor&mat: Bl&äddra... Rutt 63, 17 Från &url: Nytt dokument quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ApplicationSettingsEditor.Designer.cs000066400000000000000000000041101446222606700314710ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class ApplicationSettingsEditor { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.propertyGrid = new System.Windows.Forms.PropertyGrid(); this.SuspendLayout(); // // propertyGrid // this.propertyGrid.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.propertyGrid.Location = new System.Drawing.Point(12, 12); this.propertyGrid.Name = "propertyGrid"; this.propertyGrid.Size = new System.Drawing.Size(268, 238); this.propertyGrid.TabIndex = 0; // // ApplicationSettingsEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 262); this.Controls.Add(this.propertyGrid); this.Name = "ApplicationSettingsEditor"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "ApplicationSettings"; this.ResumeLayout(false); } #endregion private System.Windows.Forms.PropertyGrid propertyGrid; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ApplicationSettingsEditor.cs000066400000000000000000000011161446222606700277350ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; namespace QuickRoute.UI.Forms { public partial class ApplicationSettingsEditor : Form { public ApplicationSettingsEditor() { InitializeComponent(); } public ApplicationSettings ApplicationSettings { get { return (ApplicationSettings)propertyGrid.SelectedObject; } set { propertyGrid.SelectedObject = value; } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ApplicationSettingsEditor.resx000066400000000000000000000132661446222606700303220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.cs000066400000000000000000001376411446222606700252200ustar00rootroot00000000000000using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace QuickRoute.UI.Forms { public class ColorChooser : System.Windows.Forms.Form { internal System.Windows.Forms.Label lblBlue; internal System.Windows.Forms.Label lblGreen; internal System.Windows.Forms.Label lblRed; internal System.Windows.Forms.Label lblBrightness; internal System.Windows.Forms.Label lblSaturation; internal System.Windows.Forms.Label lblHue; internal System.Windows.Forms.HScrollBar hsbBlue; internal System.Windows.Forms.HScrollBar hsbGreen; internal System.Windows.Forms.HScrollBar hsbRed; internal System.Windows.Forms.HScrollBar hsbBrightness; internal System.Windows.Forms.HScrollBar hsbSaturation; internal System.Windows.Forms.HScrollBar hsbHue; internal System.Windows.Forms.Button btnCancel; internal System.Windows.Forms.Button btnOK; internal System.Windows.Forms.Label Label3; internal System.Windows.Forms.Label Label7; internal System.Windows.Forms.Panel pnlColor; internal System.Windows.Forms.Label Label6; internal System.Windows.Forms.Label Label1; internal System.Windows.Forms.Label Label5; internal System.Windows.Forms.Panel pnlSelectedColor; internal System.Windows.Forms.Panel pnlBrightness; internal System.Windows.Forms.Label Label2; internal Label lblAlpha; internal HScrollBar hsbAlpha; internal Label label8; internal Panel pnlAlpha; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public ColorChooser() { // // Required for Windows Form Designer support // InitializeComponent(); } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColorChooser)); this.lblBlue = new System.Windows.Forms.Label(); this.lblGreen = new System.Windows.Forms.Label(); this.lblRed = new System.Windows.Forms.Label(); this.lblBrightness = new System.Windows.Forms.Label(); this.lblSaturation = new System.Windows.Forms.Label(); this.lblHue = new System.Windows.Forms.Label(); this.hsbBlue = new System.Windows.Forms.HScrollBar(); this.hsbGreen = new System.Windows.Forms.HScrollBar(); this.hsbRed = new System.Windows.Forms.HScrollBar(); this.hsbBrightness = new System.Windows.Forms.HScrollBar(); this.hsbSaturation = new System.Windows.Forms.HScrollBar(); this.hsbHue = new System.Windows.Forms.HScrollBar(); this.btnCancel = new System.Windows.Forms.Button(); this.btnOK = new System.Windows.Forms.Button(); this.Label3 = new System.Windows.Forms.Label(); this.Label7 = new System.Windows.Forms.Label(); this.pnlColor = new System.Windows.Forms.Panel(); this.Label6 = new System.Windows.Forms.Label(); this.Label1 = new System.Windows.Forms.Label(); this.Label5 = new System.Windows.Forms.Label(); this.pnlSelectedColor = new System.Windows.Forms.Panel(); this.pnlBrightness = new System.Windows.Forms.Panel(); this.Label2 = new System.Windows.Forms.Label(); this.lblAlpha = new System.Windows.Forms.Label(); this.hsbAlpha = new System.Windows.Forms.HScrollBar(); this.label8 = new System.Windows.Forms.Label(); this.pnlAlpha = new System.Windows.Forms.Panel(); this.SuspendLayout(); // // lblBlue // resources.ApplyResources(this.lblBlue, "lblBlue"); this.lblBlue.Name = "lblBlue"; // // lblGreen // resources.ApplyResources(this.lblGreen, "lblGreen"); this.lblGreen.Name = "lblGreen"; // // lblRed // resources.ApplyResources(this.lblRed, "lblRed"); this.lblRed.Name = "lblRed"; // // lblBrightness // resources.ApplyResources(this.lblBrightness, "lblBrightness"); this.lblBrightness.Name = "lblBrightness"; // // lblSaturation // resources.ApplyResources(this.lblSaturation, "lblSaturation"); this.lblSaturation.Name = "lblSaturation"; // // lblHue // resources.ApplyResources(this.lblHue, "lblHue"); this.lblHue.Name = "lblHue"; // // hsbBlue // resources.ApplyResources(this.hsbBlue, "hsbBlue"); this.hsbBlue.LargeChange = 1; this.hsbBlue.Maximum = 255; this.hsbBlue.Name = "hsbBlue"; this.hsbBlue.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // hsbGreen // resources.ApplyResources(this.hsbGreen, "hsbGreen"); this.hsbGreen.LargeChange = 1; this.hsbGreen.Maximum = 255; this.hsbGreen.Name = "hsbGreen"; this.hsbGreen.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // hsbRed // resources.ApplyResources(this.hsbRed, "hsbRed"); this.hsbRed.LargeChange = 1; this.hsbRed.Maximum = 255; this.hsbRed.Name = "hsbRed"; this.hsbRed.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // hsbBrightness // resources.ApplyResources(this.hsbBrightness, "hsbBrightness"); this.hsbBrightness.LargeChange = 1; this.hsbBrightness.Maximum = 255; this.hsbBrightness.Name = "hsbBrightness"; this.hsbBrightness.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleHSVScroll); // // hsbSaturation // resources.ApplyResources(this.hsbSaturation, "hsbSaturation"); this.hsbSaturation.LargeChange = 1; this.hsbSaturation.Maximum = 255; this.hsbSaturation.Name = "hsbSaturation"; this.hsbSaturation.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleHSVScroll); // // hsbHue // resources.ApplyResources(this.hsbHue, "hsbHue"); this.hsbHue.LargeChange = 1; this.hsbHue.Maximum = 255; this.hsbHue.Name = "hsbHue"; this.hsbHue.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleHSVScroll); // // btnCancel // resources.ApplyResources(this.btnCancel, "btnCancel"); this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Name = "btnCancel"; // // btnOK // resources.ApplyResources(this.btnOK, "btnOK"); this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.btnOK.Name = "btnOK"; // // Label3 // resources.ApplyResources(this.Label3, "Label3"); this.Label3.Name = "Label3"; // // Label7 // resources.ApplyResources(this.Label7, "Label7"); this.Label7.Name = "Label7"; // // pnlColor // resources.ApplyResources(this.pnlColor, "pnlColor"); this.pnlColor.Name = "pnlColor"; // // Label6 // resources.ApplyResources(this.Label6, "Label6"); this.Label6.Name = "Label6"; // // Label1 // resources.ApplyResources(this.Label1, "Label1"); this.Label1.Name = "Label1"; // // Label5 // resources.ApplyResources(this.Label5, "Label5"); this.Label5.Name = "Label5"; // // pnlSelectedColor // resources.ApplyResources(this.pnlSelectedColor, "pnlSelectedColor"); this.pnlSelectedColor.Name = "pnlSelectedColor"; // // pnlBrightness // resources.ApplyResources(this.pnlBrightness, "pnlBrightness"); this.pnlBrightness.Name = "pnlBrightness"; // // Label2 // resources.ApplyResources(this.Label2, "Label2"); this.Label2.Name = "Label2"; // // lblAlpha // resources.ApplyResources(this.lblAlpha, "lblAlpha"); this.lblAlpha.Name = "lblAlpha"; // // hsbAlpha // resources.ApplyResources(this.hsbAlpha, "hsbAlpha"); this.hsbAlpha.LargeChange = 1; this.hsbAlpha.Maximum = 255; this.hsbAlpha.Name = "hsbAlpha"; this.hsbAlpha.Scroll += new System.Windows.Forms.ScrollEventHandler(this.HandleARGBScroll); // // label8 // resources.ApplyResources(this.label8, "label8"); this.label8.Name = "label8"; // // pnlAlpha // resources.ApplyResources(this.pnlAlpha, "pnlAlpha"); this.pnlAlpha.Name = "pnlAlpha"; // // ColorChooser // this.AcceptButton = this.btnOK; resources.ApplyResources(this, "$this"); this.CancelButton = this.btnCancel; this.Controls.Add(this.pnlAlpha); this.Controls.Add(this.lblAlpha); this.Controls.Add(this.hsbAlpha); this.Controls.Add(this.label8); this.Controls.Add(this.lblBlue); this.Controls.Add(this.lblGreen); this.Controls.Add(this.lblRed); this.Controls.Add(this.lblBrightness); this.Controls.Add(this.lblSaturation); this.Controls.Add(this.lblHue); this.Controls.Add(this.hsbBlue); this.Controls.Add(this.hsbGreen); this.Controls.Add(this.hsbRed); this.Controls.Add(this.hsbBrightness); this.Controls.Add(this.hsbSaturation); this.Controls.Add(this.hsbHue); this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnOK); this.Controls.Add(this.Label3); this.Controls.Add(this.Label7); this.Controls.Add(this.pnlColor); this.Controls.Add(this.Label6); this.Controls.Add(this.Label1); this.Controls.Add(this.Label5); this.Controls.Add(this.pnlSelectedColor); this.Controls.Add(this.pnlBrightness); this.Controls.Add(this.Label2); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ColorChooser"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.ColorChooser2_Load); this.Paint += new System.Windows.Forms.PaintEventHandler(this.ColorChooser2_Paint); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.HandleMouse); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.HandleMouse); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.frmMain_MouseUp); this.ResumeLayout(false); } #endregion private enum ChangeStyle { MouseMove, ARGB, AHSV, None } private ChangeStyle changeType = ChangeStyle.None; private Point selectedPoint; private ColorWheel myColorWheel; private ColorHandler.ARGB ARGB; private ColorHandler.AHSV AHSV; private void ColorChooser2_Load(object sender, System.EventArgs e) { // Turn on double-buffering, so the form looks better. this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.DoubleBuffer, true); // These properties are set in design view, as well, but they // have to be set to false in order for the Paint // event to be able to display their contents. // Never hurts to make sure they're invisible. pnlSelectedColor.Visible = false; pnlBrightness.Visible = false; pnlAlpha.Visible = false; pnlColor.Visible = false; // Calculate the coordinates of the three // required regions on the form. Rectangle SelectedColorRectangle = new Rectangle(pnlSelectedColor.Location, pnlSelectedColor.Size); Rectangle BrightnessRectangle = new Rectangle(pnlBrightness.Location, pnlBrightness.Size); Rectangle AlphaRectangle = new Rectangle(pnlAlpha.Location, pnlAlpha.Size); Rectangle ColorRectangle = new Rectangle(pnlColor.Location, pnlColor.Size); // Export the new ColorWheel class, indicating // the locations of the color wheel itself, the // brightness area, and the position of the selected color. myColorWheel = new ColorWheel(ColorRectangle, BrightnessRectangle, AlphaRectangle, SelectedColorRectangle); myColorWheel.ColorChanged += this.myColorWheel_ColorChanged; // Set the RGB and HSV values // of the NumericUpDown controls. SetARGB(ARGB); SetAHSV(AHSV); } private void HandleMouse(object sender, MouseEventArgs e) { // If you have the left mouse button down, // then update the selectedPoint value and // force a repaint of the color wheel. if ( e.Button == MouseButtons.Left ) { changeType = ChangeStyle.MouseMove; selectedPoint = new Point(e.X, e.Y); this.Invalidate(); } } private void frmMain_MouseUp(object sender, MouseEventArgs e) { myColorWheel.SetMouseUp(); changeType = ChangeStyle.None; } private void SetARGBLabels(ColorHandler.ARGB ARGB) { RefreshText(lblAlpha, ARGB.Alpha); RefreshText(lblRed, ARGB.Red); RefreshText(lblBlue, ARGB.Blue); RefreshText(lblGreen, ARGB.Green); } private void SetAHSVLabels(ColorHandler.AHSV AHSV) { RefreshText(lblHue, AHSV.Hue); RefreshText(lblSaturation, AHSV.Saturation); RefreshText(lblBrightness, AHSV.Value); } private void SetARGB(ColorHandler.ARGB ARGB) { // Update the RGB values on the form. RefreshValue(hsbAlpha, ARGB.Alpha); RefreshValue(hsbRed, ARGB.Red); RefreshValue(hsbBlue, ARGB.Blue); RefreshValue(hsbGreen, ARGB.Green); SetARGBLabels(ARGB); } private void SetAHSV( ColorHandler.AHSV AHSV) { // Update the HSV values on the form. RefreshValue(hsbHue, AHSV.Hue); RefreshValue(hsbSaturation, AHSV.Saturation); RefreshValue(hsbBrightness, AHSV.Value); SetAHSVLabels(AHSV); } private void RefreshValue(HScrollBar hsb, int value) { hsb.Value = value; } private void RefreshText(Label lbl, int value) { lbl.Text = value.ToString(); } public Color Color { // Get or set the color to be // displayed in the color wheel. get { return myColorWheel.Color; } set { // Indicate the color change type. Either RGB or HSV // will cause the color wheel to update the position // of the pointer. changeType = ChangeStyle.ARGB; ARGB = new ColorHandler.ARGB(value.A, value.R, value.G, value.B); AHSV = ColorHandler.ARGBtoAHSV(ARGB); } } private void myColorWheel_ColorChanged(object sender, ColorChangedEventArgs e) { SetARGB(e.ARGB); SetAHSV(e.AHSV); } private void HandleHSVScroll(object sender, ScrollEventArgs e) // If the H, S, or V values change, use this // code to update the RGB values and invalidate // the color wheel (so it updates the pointers). // Check the isInUpdate flag to avoid recursive events // when you update the NumericUpdownControls. { changeType = ChangeStyle.AHSV; AHSV = new ColorHandler.AHSV(hsbAlpha.Value, hsbHue.Value, hsbSaturation.Value, hsbBrightness.Value); SetARGB(ColorHandler.AHSVtoARGB(AHSV)); SetAHSVLabels(AHSV); this.Invalidate(); } private void HandleARGBScroll(object sender, ScrollEventArgs e) { // If the R, G, or B values change, use this // code to update the HSV values and invalidate // the color wheel (so it updates the pointers). // Check the isInUpdate flag to avoid recursive events // when you update the NumericUpdownControls. changeType = ChangeStyle.ARGB; ARGB = new ColorHandler.ARGB(hsbAlpha.Value, hsbRed.Value, hsbGreen.Value, hsbBlue.Value); SetAHSV(ColorHandler.ARGBtoAHSV(ARGB)); SetARGBLabels(ARGB); this.Invalidate(); } private void ColorChooser2_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { // Depending on the circumstances, force a repaint // of the color wheel passing different information. switch (changeType) { case ChangeStyle.AHSV: myColorWheel.Draw(e.Graphics, AHSV); break; case ChangeStyle.MouseMove: case ChangeStyle.None: myColorWheel.Draw(e.Graphics, selectedPoint); break; case ChangeStyle.ARGB: myColorWheel.Draw(e.Graphics, ARGB); break; } } } public class ColorWheel : IDisposable { // These resources should be disposed // of when you're done with them. private Graphics g; private Region colorRegion; private Region brightnessRegion; private Region alphaRegion; private Bitmap colorImage; public EventHandler ColorChanged; // Keep track of the current mouse state. public enum MouseState { MouseUp, ClickOnColor, DragInColor, ClickOnBrightness, DragInBrightness, ClickOnAlpha, DragInAlpha, ClickOutsideRegion, DragOutsideRegion, } private MouseState currentState = MouseState.MouseUp; // The code needs to convert back and forth between // degrees and radians. There are 2*PI radians in a // full circle, and 360 degrees. This constant allows // you to convert back and forth. private const double DEGREES_PER_RADIAN = 180.0 / Math.PI; // COLOR_COUNT represents the number of distinct colors // used to create the circular gradient. Its value // is somewhat arbitrary -- change this to 6, for // example, to see what happens. 1536 (6 * 256) seems // a good compromise -- it's enough to get a full // range of colors, but it doesn't overwhelm the processor // attempting to generate the image. The color wheel // contains 6 sections, and each section displays // 256 colors. Seems like a reasonable compromise. private const int COLOR_COUNT = 6 * 256; private Point centerPoint; private int radius; private Rectangle colorRectangle; private Rectangle brightnessRectangle; private Rectangle alphaRectangle; private Rectangle selectedColorRectangle; private int brightnessX; private double brightnessScaling; private int alphaX; private double alphaScaling; // selectedColor is the actual value selected // by the user. fullColor is the same color, // with its brightness set to 255. private Color selectedColor = Color.White; private Color fullColor; private ColorHandler.ARGB ARGB; private ColorHandler.AHSV AHSV; // Locations for the two "pointers" on the form. private Point colorPoint; private Point brightnessPoint; private Point alphaPoint; private int brightness; private int brightnessMin; private int brightnessMax; private int alpha; private int alphaMin; private int alphaMax; public ColorWheel(Rectangle colorRectangle, Rectangle brightnessRectangle, Rectangle alphaRectangle, Rectangle selectedColorRectangle) { // Caller must provide locations for color wheel // (colorRectangle), brightness "strip" (brightnessRectangle), // alpha "strip" (alphaRectangle) // and location to display selected color (selectedColorRectangle). using (GraphicsPath path = new GraphicsPath()) { // Store away locations for later use. this.colorRectangle = colorRectangle; this.brightnessRectangle = brightnessRectangle; this.alphaRectangle = alphaRectangle; this.selectedColorRectangle = selectedColorRectangle; // Calculate the center of the circle. // Start with the location, then offset // the point by the radius. // Use the smaller of the width and height of // the colorRectangle value. this.radius = (int)Math.Min(colorRectangle.Width, colorRectangle.Height) / 2; this.centerPoint = colorRectangle.Location; this.centerPoint.Offset(radius, radius); // Start the pointer in the center. this.colorPoint = this.centerPoint; // Export a region corresponding to the color circle. // Code uses this later to determine if a specified // point is within the region, using the IsVisible // method. path.AddEllipse(colorRectangle); colorRegion = new Region(path); // set the range for the brightness selector. this.brightnessMin = this.brightnessRectangle.Top; this.brightnessMax = this.brightnessRectangle.Bottom; // Export a region corresponding to the // brightness rectangle, with a little extra // "breathing room". path.AddRectangle(new Rectangle(brightnessRectangle.Left, brightnessRectangle.Top - 10, brightnessRectangle.Width + 10, brightnessRectangle.Height + 20)); // Export region corresponding to brightness // rectangle. Later code uses this to // determine if a specified point is within // the region, using the IsVisible method. brightnessRegion = new Region(path); // Set the location for the brightness indicator "marker". // Also calculate the scaling factor, scaling the height // to be between 0 and 255. brightnessX = brightnessRectangle.Left + brightnessRectangle.Width; brightnessScaling = (double)255 / (brightnessMax - brightnessMin); // Calculate the location of the brightness // pointer. Assume it's at the highest position. brightnessPoint = new Point(brightnessX, brightnessMax); // set the range for the alpha selector. this.alphaMin = this.alphaRectangle.Top; this.alphaMax = this.alphaRectangle.Bottom; // Export a region corresponding to the // alpha rectangle, with a little extra // "breathing room". path.AddRectangle(new Rectangle(alphaRectangle.Left, alphaRectangle.Top - 10, alphaRectangle.Width + 10, alphaRectangle.Height + 20)); // Export region corresponding to alpha // rectangle. Later code uses this to // determine if a specified point is within // the region, using the IsVisible method. alphaRegion = new Region(path); // Set the location for the alpha indicator "marker". // Also calculate the scaling factor, scaling the height // to be between 0 and 255. alphaX = alphaRectangle.Left + alphaRectangle.Width; alphaScaling = (double)255 / (alphaMax - alphaMin); // Calculate the location of the alpha // pointer. Assume it's at the highest position. alphaPoint = new Point(alphaX, alphaMax); // Export the bitmap that contains the circular gradient. CreateGradient(); } } protected void OnColorChanged(ColorHandler.ARGB RGB, ColorHandler.AHSV AHSV) { ColorChangedEventArgs e = new ColorChangedEventArgs(RGB, AHSV); ColorChanged(this, e); } public Color Color { get { return selectedColor; } } void IDisposable.Dispose() { // Dispose of graphic resources if (colorImage != null) colorImage.Dispose(); if (colorRegion != null) colorRegion.Dispose(); if (brightnessRegion != null) brightnessRegion.Dispose(); if (alphaRegion != null) alphaRegion.Dispose(); if (g != null) g.Dispose(); } public void SetMouseUp() { // Indicate that the user has // released the mouse. currentState = MouseState.MouseUp; } public void Draw(Graphics g, ColorHandler.AHSV AHSV) { // Given AHSV values, update the screen. this.g = g; this.AHSV = AHSV; CalcCoordsAndUpdate(this.AHSV); UpdateDisplay(); } public void Draw(Graphics g, ColorHandler.ARGB ARGB) { // Given RGB values, calculate AHSV and then update the screen. this.g = g; this.AHSV = ColorHandler.ARGBtoAHSV(ARGB); CalcCoordsAndUpdate(this.AHSV); UpdateDisplay(); } public void Draw(Graphics g, Point mousePoint) { // You've moved the mouse. // Now update the screen to match. double distance; int degrees; Point delta; Point newColorPoint; Point newBrightnessPoint; Point newAlphaPoint; Point newPoint; // Keep track of the previous color pointer point, // so you can put the mouse there in case the // user has clicked outside the circle. newColorPoint = colorPoint; newBrightnessPoint = brightnessPoint; newAlphaPoint = alphaPoint; // Store this away for later use. this.g = g; if (currentState == MouseState.MouseUp) { if (!mousePoint.IsEmpty) { if (colorRegion.IsVisible(mousePoint)) { // Is the mouse point within the color circle? // If so, you just clicked on the color wheel. currentState = MouseState.ClickOnColor; } else if (brightnessRegion.IsVisible(mousePoint)) { // Is the mouse point within the brightness area? // You clicked on the brightness area. currentState = MouseState.ClickOnBrightness; } else if (alphaRegion.IsVisible(mousePoint)) { // Is the mouse point within the alpha area? // You clicked on the alpha area. currentState = MouseState.ClickOnAlpha; } else { // Clicked outside the color, brightness and alpha // regions. In that case, just put the // pointers back where they were. currentState = MouseState.ClickOutsideRegion; } } } switch (currentState) { case MouseState.ClickOnBrightness: case MouseState.DragInBrightness: // Calculate new color information // based on the brightness, which may have changed. newPoint = mousePoint; if (newPoint.Y < brightnessMin) { newPoint.Y = brightnessMin; } else if (newPoint.Y > brightnessMax) { newPoint.Y = brightnessMax; } newBrightnessPoint = new Point(brightnessX, newPoint.Y); brightness = (int)((brightnessMax - newPoint.Y) * brightnessScaling); AHSV.Value = brightness; ARGB = ColorHandler.AHSVtoARGB(AHSV); break; case MouseState.ClickOnAlpha: case MouseState.DragInAlpha: // Calculate new color information // based on the alpha, which may have changed. newPoint = mousePoint; if (newPoint.Y < alphaMin) { newPoint.Y = alphaMin; } else if (newPoint.Y > alphaMax) { newPoint.Y = alphaMax; } newAlphaPoint = new Point(alphaX, newPoint.Y); alpha = (int)((alphaMax - newPoint.Y) * alphaScaling); AHSV.Alpha = alpha; ARGB = ColorHandler.AHSVtoARGB(AHSV); break; case MouseState.ClickOnColor: case MouseState.DragInColor: // Calculate new color information // based on selected color, which may have changed. newColorPoint = mousePoint; // Calculate x and y distance from the center, // and then calculate the angle corresponding to the // new location. delta = new Point( mousePoint.X - centerPoint.X, mousePoint.Y - centerPoint.Y); degrees = CalcDegrees(delta); // Calculate distance from the center to the new point // as a fraction of the radius. Use your old friend, // the Pythagorean theorem, to calculate this value. distance = Math.Sqrt(delta.X * delta.X + delta.Y * delta.Y) / radius; if (currentState == MouseState.DragInColor) { if (distance > 1) { // Mouse is down, and outside the circle, but you // were previously dragging in the color circle. // What to do? // In that case, move the point to the edge of the // circle at the correct angle. distance = 1; newColorPoint = GetPoint(degrees, radius, centerPoint); } } // Calculate the new AHSV and RGB values. AHSV.Hue = (int)(degrees * 255 / 360); AHSV.Saturation = (int)(distance * 255); AHSV.Value = brightness; ARGB = ColorHandler.AHSVtoARGB(AHSV); fullColor = ColorHandler.AHSVtoColor(AHSV.Alpha, AHSV.Hue, AHSV.Saturation, 255); break; } selectedColor = ColorHandler.AHSVtoColor(AHSV); // Raise an event back to the parent form, // so the form can update any UI it's using // to display selected color values. OnColorChanged(ARGB, AHSV); // On the way out, set the new state. switch (currentState) { case MouseState.ClickOnBrightness: currentState = MouseState.DragInBrightness; break; case MouseState.ClickOnAlpha: currentState = MouseState.DragInAlpha; break; case MouseState.ClickOnColor: currentState = MouseState.DragInColor; break; case MouseState.ClickOutsideRegion: currentState = MouseState.DragOutsideRegion; break; } // Store away the current points for next time. colorPoint = newColorPoint; brightnessPoint = newBrightnessPoint; alphaPoint = newAlphaPoint; // Draw the gradients and points. UpdateDisplay(); } private Point CalcBrightnessPoint(int brightness) { // Take the value for brightness (0 to 255), scale to the // scaling used in the brightness bar, then add the value // to the bottom of the bar. return the correct point at which // to display the brightness pointer. return new Point(brightnessX, (int)(brightnessMax - brightness / brightnessScaling)); } private Point CalcAlphaPoint(int alpha) { // Take the value for alpha (0 to 255), scale to the // scaling used in the alpha bar, then add the value // to the bottom of the bar. return the correct point at which // to display the alpha pointer. return new Point(alphaX, (int)(alphaMax - alpha / alphaScaling)); } private void UpdateDisplay() { // Update the gradients, and place the // pointers correctly based on colors and // brightness. using (Brush selectedBrush = new SolidBrush(selectedColor)) { // Draw the saved color wheel image. g.DrawImage(colorImage, colorRectangle); // Draw the "selected color" rectangle. DrawSelectedColorRectangle(selectedBrush); // Draw the "brightness" rectangle. DrawBrightnessLinearGradient(fullColor); // Draw the "alpha" rectangle. DrawAlphaLinearGradient(selectedColor); // Draw the three pointers. DrawColorPointer(colorPoint); DrawBrightnessPointer(brightnessPoint); DrawAlphaPointer(alphaPoint); } } private void CalcCoordsAndUpdate(ColorHandler.AHSV AHSV) { // Convert color to real-world coordinates and then calculate // the various points. AHSV.Hue represents the degrees (0 to 360), // AHSV.Saturation represents the radius. // This procedure doesn't draw anything--it simply // updates class-level variables. The UpdateDisplay // procedure uses these values to update the screen. // Given the angle (AHSV.Hue), and distance from // the center (AHSV.Saturation), and the center, // calculate the point corresponding to // the selected color, on the color wheel. colorPoint = GetPoint((double)AHSV.Hue / 255 * 360, (double)AHSV.Saturation / 255 * radius, centerPoint); // Given the brightness (AHSV.value), calculate the // point corresponding to the brightness indicator. brightnessPoint = CalcBrightnessPoint(AHSV.Value); // Store information about the selected color. brightness = AHSV.Value; selectedColor = ColorHandler.AHSVtoColor(AHSV); ARGB = ColorHandler.AHSVtoARGB(AHSV); // The full color is the same as AHSV, except that the // brightness is set to full (255). This is the top-most // color in the brightness gradient. fullColor = ColorHandler.AHSVtoColor(AHSV.Alpha, AHSV.Hue, AHSV.Saturation, 255); // Given the brightness (AHSV.value), calculate the // point corresponding to the alpha indicator. alphaPoint = CalcAlphaPoint(AHSV.Alpha); // Store information about the selected color. alpha = AHSV.Alpha; } private void DrawSelectedColorRectangle(Brush brush) { // Make checkerboard boxes as a background int x = selectedColorRectangle.Left; int y = selectedColorRectangle.Top; int size = 8; int brushIndex = 0; int rowIndex = 0; SolidBrush[] checkerboardBrushes = new SolidBrush[] { (SolidBrush)Brushes.LightGray, (SolidBrush)Brushes.White }; while (y <= selectedColorRectangle.Bottom) { while (x <= selectedColorRectangle.Right) { g.FillRectangle(checkerboardBrushes[brushIndex], x, y, Math.Min(size, selectedColorRectangle.Right - x), Math.Min(size, selectedColorRectangle.Bottom - y)); x += size; brushIndex = (brushIndex + 1) % 2; } x = selectedColorRectangle.Left; rowIndex += 1; brushIndex = rowIndex % 2; y += size; } g.FillRectangle(brush, selectedColorRectangle); } private void DrawBrightnessLinearGradient(Color TopColor) { // Given the top color, draw a linear gradient // ranging from black to the top opaque color. Use the // brightness rectangle as the area to fill. TopColor = Color.FromArgb(255, TopColor); using (LinearGradientBrush lgb = new LinearGradientBrush(brightnessRectangle, TopColor, Color.Black, LinearGradientMode.Vertical)) { g.FillRectangle(lgb, brightnessRectangle); } } private void DrawAlphaLinearGradient(Color color) { // Make checkerboard boxes as a background int x = alphaRectangle.Left; int y = alphaRectangle.Top; int size = 8; int brushIndex = 0; int rowIndex = 0; SolidBrush[] checkerboardBrushes = new SolidBrush[] { (SolidBrush)Brushes.LightGray, (SolidBrush)Brushes.White }; while (y <= alphaRectangle.Bottom) { while (x <= alphaRectangle.Right) { g.FillRectangle(checkerboardBrushes[brushIndex], x, y, Math.Min(size, alphaRectangle.Right - x), Math.Min(size, alphaRectangle.Bottom - y)); x += size; brushIndex = (brushIndex + 1) % 2; } x = alphaRectangle.Left; rowIndex += 1; brushIndex = rowIndex % 2; y += size; } // Given the color, draw a linear gradient // ranging from opaque to transparent. Use the // alpha rectangle as the area to fill. using (LinearGradientBrush lgb = new LinearGradientBrush(alphaRectangle, Color.FromArgb(255, color), Color.FromArgb(0, color), LinearGradientMode.Vertical)) { g.FillRectangle(lgb, alphaRectangle); } } private int CalcDegrees(Point pt) { int degrees; if (pt.X == 0) { // The point is on the y-axis. Determine whether // it's above or below the x-axis, and return the // corresponding angle. Note that the orientation of the // y-coordinate is backwards. That is, A positive Y value // indicates a point BELOW the x-axis. if (pt.Y > 0) { degrees = 270; } else { degrees = 90; } } else { // This value needs to be multiplied // by -1 because the y-coordinate // is opposite from the normal direction here. // That is, a y-coordinate that's "higher" on // the form has a lower y-value, in this coordinate // system. So everything's off by a factor of -1 when // performing the ratio calculations. degrees = (int)(-Math.Atan((double)pt.Y / pt.X) * DEGREES_PER_RADIAN); // If the x-coordinate of the selected point // is to the left of the center of the circle, you // need to add 180 degrees to the angle. ArcTan only // gives you a value on the right-hand side of the circle. if (pt.X < 0) { degrees += 180; } // Ensure that the return value is // between 0 and 360. degrees = (degrees + 360) % 360; } return degrees; } private void CreateGradient() { // Export a new PathGradientBrush, supplying // an array of points created by calling // the GetPoints method. using (PathGradientBrush pgb = new PathGradientBrush(GetPoints(radius, new Point(radius, radius)))) { // Set the various properties. Note the SurroundColors // property, which contains an array of points, // in a one-to-one relationship with the points // that created the gradient. pgb.CenterColor = Color.White; pgb.CenterPoint = new PointF(radius, radius); pgb.SurroundColors = GetColors(); // Export a new bitmap containing // the color wheel gradient, so the // code only needs to do all this // work once. Later code uses the bitmap // rather than recreating the gradient. colorImage = new Bitmap( colorRectangle.Width, colorRectangle.Height, PixelFormat.Format32bppArgb); using (Graphics newGraphics = Graphics.FromImage(colorImage)) { newGraphics.FillEllipse(pgb, 0, 0, colorRectangle.Width, colorRectangle.Height); } } } private Color[] GetColors() { // Export an array of COLOR_COUNT // colors, looping through all the // hues between 0 and 255, broken // into COLOR_COUNT intervals. AHSV is // particularly well-suited for this, // because the only value that changes // as you create colors is the Hue. Color[] Colors = new Color[COLOR_COUNT]; for (int i = 0; i <= COLOR_COUNT - 1; i++) Colors[i] = ColorHandler.AHSVtoColor(255, (int)((double)(i * 255) / COLOR_COUNT), 255, 255); return Colors; } private Point[] GetPoints(double radius, Point centerPoint) { // Generate the array of points that describe // the locations of the COLOR_COUNT colors to be // displayed on the color wheel. Point[] Points = new Point[COLOR_COUNT]; for (int i = 0; i <= COLOR_COUNT - 1; i++) Points[i] = GetPoint((double)(i * 360) / COLOR_COUNT, radius, centerPoint); return Points; } private Point GetPoint(double degrees, double radius, Point centerPoint) { // Given the center of a circle and its radius, along // with the angle corresponding to the point, find the coordinates. // In other words, conver t from polar to rectangular coordinates. double radians = degrees / DEGREES_PER_RADIAN; return new Point((int)(centerPoint.X + Math.Floor(radius * Math.Cos(radians))), (int)(centerPoint.Y - Math.Floor(radius * Math.Sin(radians)))); } private void DrawColorPointer(Point pt) { // Given a point, draw the color selector. // The constant SIZE represents half // the width -- the square will be twice // this value in width and height. const int SIZE = 3; g.DrawRectangle(Pens.Black, pt.X - SIZE, pt.Y - SIZE, SIZE * 2, SIZE * 2); } private void DrawBrightnessPointer(Point pt) { // Draw a triangle for the // brightness indicator that "points" // at the provided point. const int HEIGHT = 10; const int WIDTH = 7; Point[] Points = new Point[3]; Points[0] = pt; Points[1] = new Point(pt.X + WIDTH, pt.Y + HEIGHT / 2); Points[2] = new Point(pt.X + WIDTH, pt.Y - HEIGHT / 2); g.FillPolygon(Brushes.Black, Points); } private void DrawAlphaPointer(Point pt) { // Draw a triangle for the // alpha indicator that "points" // at the provided point. const int HEIGHT = 10; const int WIDTH = 7; Point[] Points = new Point[3]; Points[0] = pt; Points[1] = new Point(pt.X + WIDTH, pt.Y + HEIGHT / 2); Points[2] = new Point(pt.X + WIDTH, pt.Y - HEIGHT / 2); g.FillPolygon(Brushes.Black, Points); } } public class ColorHandler { // Handle conversions between RGB and HSV // (and Color types, as well). public struct ARGB { // All values are between 0 and 255. public int Alpha; public int Red; public int Green; public int Blue; public ARGB(int A, int R, int G, int B) { Alpha = A; Red = R; Green = G; Blue = B; } public override string ToString() { return String.Format("({0}, {1}, {2}, {3})", Alpha, Red, Green, Blue); } } public struct AHSV { // All values are between 0 and 255. public int Alpha; public int Hue; public int Saturation; public int Value; public AHSV(int A, int H, int S, int V) { Alpha = A; Hue = H; Saturation = S; Value = V; } public override string ToString() { return String.Format("({0}, {1}, {2}, {3})", Alpha, Hue, Saturation, Value); } } public static ARGB AHSVtoARGB(int A, int H, int S, int V) { // H, S, and V must all be between 0 and 255. return AHSVtoARGB(new AHSV(A, H, S, V)); } public static Color AHSVtoColor(AHSV ahsv) { ARGB ARGB = AHSVtoARGB(ahsv); return Color.FromArgb(ARGB.Alpha, ARGB.Red, ARGB.Green, ARGB.Blue); } public static Color AHSVtoColor(int A, int H, int S, int V) { return AHSVtoColor(new AHSV(A, H, S, V)); } public static ARGB AHSVtoARGB(AHSV AHSV) { // HSV contains values scaled as in the color wheel: // that is, all from 0 to 255. // for ( this code to work, HSV.Hue needs // to be scaled from 0 to 360 (it//s the angle of the selected // point within the circle). HSV.Saturation and HSV.value must be // scaled to be between 0 and 1. double h; double s; double v; double r = 0; double g = 0; double b = 0; // Scale Hue to be between 0 and 360. Saturation // and value scale to be between 0 and 1. h = ((double)AHSV.Hue / 255 * 360) % 360; s = (double)AHSV.Saturation / 255; v = (double)AHSV.Value / 255; if (s == 0) { // If s is 0, all colors are the same. // This is some flavor of gray. r = v; g = v; b = v; } else { double p; double q; double t; double fractionalSector; int sectorNumber; double sectorPos; // The color wheel consists of 6 sectors. // Figure out which sector you//re in. sectorPos = h / 60; sectorNumber = (int)(Math.Floor(sectorPos)); // get the fractional part of the sector. // That is, how many degrees into the sector // are you? fractionalSector = sectorPos - sectorNumber; // Calculate values for the three axes // of the color. p = v * (1 - s); q = v * (1 - (s * fractionalSector)); t = v * (1 - (s * (1 - fractionalSector))); // Assign the fractional colors to r, g, and b // based on the sector the angle is in. switch (sectorNumber) { case 0: r = v; g = t; b = p; break; case 1: r = q; g = v; b = p; break; case 2: r = p; g = v; b = t; break; case 3: r = p; g = q; b = v; break; case 4: r = t; g = p; b = v; break; case 5: r = v; g = p; b = q; break; } } // return an RGB structure, with values scaled // to be between 0 and 255. return new ARGB(AHSV.Alpha, (int)(r * 255), (int)(g * 255), (int)(b * 255)); } public static AHSV ARGBtoAHSV(ARGB ARGB) { // In this function, R, G, and B values must be scaled // to be between 0 and 1. // HSV.Hue will be a value between 0 and 360, and // HSV.Saturation and value are between 0 and 1. // The code must scale these to be between 0 and 255 for // the purposes of this application. double min; double max; double delta; double r = (double)ARGB.Red / 255; double g = (double)ARGB.Green / 255; double b = (double)ARGB.Blue / 255; double h; double s; double v; min = Math.Min(Math.Min(r, g), b); max = Math.Max(Math.Max(r, g), b); v = max; delta = max - min; if (max == 0 || delta == 0) { // R, G, and B must be 0, or all the same. // In this case, S is 0, and H is undefined. // Using H = 0 is as good as any... s = 0; h = 0; } else { s = delta / max; if (r == max) { // Between Yellow and Magenta h = (g - b) / delta; } else if (g == max) { // Between Cyan and Yellow h = 2 + (b - r) / delta; } else { // Between Magenta and Cyan h = 4 + (r - g) / delta; } } // Scale h to be between 0 and 360. // This may require adding 360, if the value // is negative. h *= 60; if (h < 0) { h += 360; } // Scale to the requirements of this // application. All values are between 0 and 255. return new AHSV(ARGB.Alpha, (int)(h / 360 * 255), (int)(s * 255), (int)(v * 255)); } } public class ColorChangedEventArgs : EventArgs { private ColorHandler.ARGB mRGB; private ColorHandler.AHSV mHSV; public ColorChangedEventArgs(ColorHandler.ARGB RGB, ColorHandler.AHSV HSV) { mRGB = RGB; mHSV = HSV; } public ColorHandler.ARGB ARGB { get { return mRGB; } } public ColorHandler.AHSV AHSV { get { return mHSV; } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.da.resx000066400000000000000000000147441446222606700261550ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd Blå Lysintensitet Mætning Rød Farvetone Grøn Transparens Vælg farve quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.de.resx000066400000000000000000000212221446222606700261460ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 354, 360 354, 336 354, 312 354, 280 354, 256 354, 232 266, 18 266, 18 266, 18 266, 18 266, 18 266, 18 74, 24 Abbrechen 74, 26 Blau Helligkeit Sättigung Rot Farbton 74, 24 Grün 354, 384 266, 18 Transparenz 410, 428 Farbe wählen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.fi.resx000066400000000000000000000146141446222606700261630ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta Sininen Kirkkaus Saturaatio Punainen Sävy Vihreä Valitse väri quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.fr.resx000066400000000000000000000144661446222606700262010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bleu Rouge Luminosité Vert Nuance Sélectionner la couleur Annuler quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.it.resx000066400000000000000000000147571446222606700262110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella Blu Luminosità Saturazione Rosso Tonalità Verde Trasparenza Seleziona il colore quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.lt.resx000066400000000000000000000206251446222606700262030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 98, 360 238, 18 98, 336 238, 18 98, 312 238, 18 98, 280 238, 18 98, 256 238, 18 98, 232 238, 18 Atšaukti Gerai Mėlyna Ryškumas Prisotinimas Raudona Atspalvis Žalia 98, 384 238, 18 87, 18 Permatomumas Pasirinkti spalvą quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.no.resx000066400000000000000000000150571446222606700262030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Alfa Blå Rød Lysintensitet Grønn Fargetone OK Metning Velg farge Avbryt quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.resx000066400000000000000000001104311446222606700255600ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 pnlBrightness 4 Top, Right 12 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 48 hsbBrightness 20 72, 18 Top, Left, Right 40, 23 256, 18 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this MiddleLeft hsbSaturation ColorChooser pnlAlpha 80, 256 Hue System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lblRed 40, 23 39 lblGreen 8, 8 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Microsoft Sans Serif, 8.25pt 287, 8 Blue 256, 18 Microsoft Sans Serif, 8.25pt MiddleLeft 8, 312 Select color 26 53 5, 13 MiddleLeft 328, 8 6 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 38 8, 360 False $this $this $this 37 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Label1 45 lblHue False 72, 18 Top, Left, Right System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 24, 216 43 1 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Left, Right 80, 312 Top, Right 328, 70 label8 25 MiddleLeft 56 $this 7 64, 24 41 344, 384 lblBrightness 21 $this 8 Top, Left, Right Alpha 344, 336 Red 44 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 19 Microsoft Sans Serif, 8.25pt Microsoft Sans Serif, 8.25pt $this 22 $this 40, 23 lblBlue System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 40 lblAlpha 17 Label3 9 35 46 33 Microsoft Sans Serif, 8.25pt 36 11 54 False Microsoft Sans Serif, 8.25pt 344, 280 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 256, 18 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 72, 18 Top, Right 344, 312 btnOK Microsoft Sans Serif, 8.25pt 40, 23 344, 256 16 256, 18 Top, Right $this 8, 384 51 $this Brightness pnlSelectedColor System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 13 5 MiddleLeft 256, 18 8, 280 lblSaturation Microsoft Sans Serif, 8.25pt 3 8, 232 24, 216 Label7 MiddleLeft 72, 18 80, 280 $this 72, 18 MiddleLeft OK $this 224, 216 Top, Right $this 344, 232 58 Label2 344, 360 Green hsbAlpha 80, 232 40 Top, Left, Right $this Top, Left, Right 8, 336 Top, Left, Right $this System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Microsoft Sans Serif, 8.25pt Cancel 14 Label6 $this 40, 23 Microsoft Sans Serif, 8.25pt 10 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 hsbGreen MiddleLeft System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 MiddleLeft 64, 24 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 80, 384 80, 336 52 False 40, 23 240, 8 57 8, 256 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 hsbHue System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 18 Microsoft Sans Serif, 8.25pt System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 Microsoft Sans Serif, 8.25pt System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 49 hsbBlue MiddleLeft 55 Top, Right Top, Right Label5 256, 18 32 Microsoft Sans Serif, 8.25pt System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Microsoft Sans Serif, 8.25pt CenterParent $this pnlColor 400, 428 MiddleLeft MiddleLeft 15 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this $this Top, Right $this 72, 18 24 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 328, 40 40, 23 80, 360 btnCancel $this MiddleLeft 47 Microsoft Sans Serif, 8.25pt MiddleLeft 64, 26 72, 18 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 50 System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 23 256, 18 Microsoft Sans Serif, 8.25pt Saturation 34 Top, Right $this hsbRed $this True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.ru.resx000066400000000000000000000151701446222606700262110ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена ОK Синий Яркость Насыщение Красный Тон Зелёный Прозрачность Задайте цвет quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorChooser.sv.resx000066400000000000000000000147271446222606700262220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Blå Ljushet Mättnad Röd Nyans Grön Transparens Välj färg quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.Designer.cs000066400000000000000000000116401446222606700312530ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class ColorRangeIntervalEditor { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ColorRangeIntervalEditor)); this.intervalStartTextbox = new System.Windows.Forms.TextBox(); this.intervalStartLabel = new System.Windows.Forms.Label(); this.intervalEndLabel = new System.Windows.Forms.Label(); this.intervalEndTextbox = new System.Windows.Forms.TextBox(); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.infoLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // // intervalStartTextbox // resources.ApplyResources(this.intervalStartTextbox, "intervalStartTextbox"); this.intervalStartTextbox.Name = "intervalStartTextbox"; this.intervalStartTextbox.TextChanged += new System.EventHandler(this.intervalStartTextbox_TextChanged); this.intervalStartTextbox.Enter += new System.EventHandler(this.IntervalStartTextbox_Enter); this.intervalStartTextbox.Leave += new System.EventHandler(this.IntervalStartTextbox_Leave); // // intervalStartLabel // resources.ApplyResources(this.intervalStartLabel, "intervalStartLabel"); this.intervalStartLabel.Name = "intervalStartLabel"; // // intervalEndLabel // resources.ApplyResources(this.intervalEndLabel, "intervalEndLabel"); this.intervalEndLabel.Name = "intervalEndLabel"; // // intervalEndTextbox // resources.ApplyResources(this.intervalEndTextbox, "intervalEndTextbox"); this.intervalEndTextbox.Name = "intervalEndTextbox"; this.intervalEndTextbox.TextChanged += new System.EventHandler(this.intervalEndTextbox_TextChanged); this.intervalEndTextbox.Enter += new System.EventHandler(this.IntervalEndTextbox_Enter); this.intervalEndTextbox.Leave += new System.EventHandler(this.IntervalEndTextbox_Leave); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.OK_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.Cancel_Click); // // infoLabel // resources.ApplyResources(this.infoLabel, "infoLabel"); this.infoLabel.BackColor = System.Drawing.SystemColors.Info; this.infoLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.infoLabel.Name = "infoLabel"; // // ColorRangeIntervalEditor // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.infoLabel); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Controls.Add(this.intervalEndLabel); this.Controls.Add(this.intervalEndTextbox); this.Controls.Add(this.intervalStartLabel); this.Controls.Add(this.intervalStartTextbox); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ColorRangeIntervalEditor"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.TextBox intervalStartTextbox; private System.Windows.Forms.Label intervalStartLabel; private System.Windows.Forms.Label intervalEndLabel; private System.Windows.Forms.TextBox intervalEndTextbox; private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.Label infoLabel; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.cs000066400000000000000000000052721446222606700275200ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities.Numeric; namespace QuickRoute.UI.Forms { public partial class ColorRangeIntervalEditor : Form { private NumericConverter numericConverter; private double intervalStart; private double intervalEnd; public ColorRangeIntervalEditor(NumericConverter numericConverter, double intervalStart, double intervalEnd) { InitializeComponent(); this.numericConverter = numericConverter; this.intervalStart = intervalStart; this.intervalEnd = intervalEnd; UpdateUI(); } public NumericConverter NumericConverter { get { return numericConverter; } set { numericConverter = value; UpdateUI(); } } public double IntervalStart { get { return intervalStart; } set { intervalStart = Math.Min(value, intervalEnd); UpdateUI(); } } public double IntervalEnd { get { return intervalEnd; } set { intervalEnd = Math.Max(value, intervalStart); UpdateUI(); } } private void IntervalStartTextbox_Leave(object sender, EventArgs e) { UpdateUI(); } private void IntervalEndTextbox_Leave(object sender, EventArgs e) { UpdateUI(); } private void OK_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void Cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void UpdateUI() { intervalStartTextbox.Text = numericConverter.ToString(intervalStart); intervalEndTextbox.Text = numericConverter.ToString(intervalEnd); } private void IntervalStartTextbox_Enter(object sender, EventArgs e) { intervalStartTextbox.SelectAll(); } private void IntervalEndTextbox_Enter(object sender, EventArgs e) { intervalEndTextbox.SelectAll(); } private void intervalStartTextbox_TextChanged(object sender, EventArgs e) { double? value = numericConverter.ToNumeric(intervalStartTextbox.Text); if (value != null) { intervalStart = (double)value; } } private void intervalEndTextbox_TextChanged(object sender, EventArgs e) { double? value = numericConverter.ToNumeric(intervalEndTextbox.Text); if (value != null) { intervalEnd = (double)value; } } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.da.resx000066400000000000000000000144111446222606700304520ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 61, 13 Int&erval slut Afbryd Indstil start- og slutværdier for farveskala-skydekontakten. quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.de.resx000066400000000000000000000160771446222606700304700ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 96, 75 126, 20 76, 13 Intervall&beginn 68, 13 Intervall&ende 96, 101 126, 20 Abbrechen Start- und Endwert des Farbbereichreglers setzen. Intervall quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.fi.resx000066400000000000000000000160701446222606700304670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 95, 75 127, 20 75, 13 Intervallin &alku 81, 13 Intervallin &loppu 95, 101 127, 20 Peruuta Aseta väriskaalan alku ja loppuarvot. Intervalli quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.fr.resx000066400000000000000000000143621446222606700305020ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler Intervalle Valeur &initiale Définir la valeur intiale et finale de l'échelle de couleur grâce au curseur Valeur final&e quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.it.resx000066400000000000000000000165001446222606700305030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 96, 75 126, 20 70, 13 Intervallo &fine 76, 13 Intervallo &inizio 96, 101 126, 20 Cancella 209, 51 Imposta i valori di inizio e fine del controllo della gamma del colore. 233, 168 Intervallo quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.lt.resx000066400000000000000000000162451446222606700305140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 105, 75 117, 20 85, 13 Intervalo &pradžia 89, 13 Intervalo pa&baiga 105, 101 117, 20 Gerai Atšaukti Nustatyti pradinę ir galutinę spalvų juostos reikšmę. Intervalas quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.no.resx000066400000000000000000000144601446222606700305060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Intervall OK Intervall-&start Angi start- og sluttverdier for glidebryterens fargeoverganger Intervall-sl&utt quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.resx000066400000000000000000000357041446222606700300770ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Left 85, 75 75, 23 75, 23 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 Bottom, Left NoControl 4, 4, 4, 4 ok 4 Interval &end 2 $this 2 137, 20 147, 133 14, 104 CenterParent Top, Bottom, Left, Right 65, 13 63, 13 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ColorRangeIntervalEditor 210, 51 intervalEndTextbox Set the start and end values of the color range slider control. 6 Bottom, Left intervalStartLabel $this 1 OK cancel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 5 5 Bottom, Left intervalStartTextbox 6 Cancel 0 12, 9 System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 66, 133 Interval 3 intervalEndLabel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True 6, 13 7 infoLabel $this True System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 137, 20 234, 168 $this System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this $this 85, 101 Interval &start Bottom, Left 14, 78 Bottom, Left True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.ru.resx000066400000000000000000000152121446222606700305140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 44, 13 &Начало 38, 13 &Конец Отмена Задайте граничные значения для визуализации цветом. Интервал значений quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ColorRangeIntervalEditor.sv.resx000066400000000000000000000161221446222606700305170ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 101, 75 121, 20 81, 13 Intervallets &start 77, 13 Intervallets s&lut 101, 101 121, 20 Avbryt Ange start- och slutvärden för färgskalekontrollens intervall. Intervall quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.Designer.cs000066400000000000000000000342361446222606700270530ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class CreateNewForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CreateNewForm)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.mapImageGroup = new System.Windows.Forms.GroupBox(); this.mapImageLayoutTable = new System.Windows.Forms.TableLayoutPanel(); this.mapImageFileName = new System.Windows.Forms.ComboBox(); this.mapImageFileFormatLabel = new System.Windows.Forms.Label(); this.mapImageFileFormatComboBox = new System.Windows.Forms.ComboBox(); this.mapImageFromFile = new System.Windows.Forms.Label(); this.imageSizeLabel = new System.Windows.Forms.LinkLabel(); this.routeGroup = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.routeFromGpsDevice = new System.Windows.Forms.RadioButton(); this.routeFromFile = new System.Windows.Forms.RadioButton(); this.routeFileFormatLabel = new System.Windows.Forms.Label(); this.routeGpsDevice = new System.Windows.Forms.ComboBox(); this.routeFileFormatComboBox = new System.Windows.Forms.ComboBox(); this.routeFileNameBrowse = new System.Windows.Forms.Button(); this.routeFileName = new System.Windows.Forms.ComboBox(); this.refreshButton = new System.Windows.Forms.Button(); this.personGroup = new System.Windows.Forms.GroupBox(); this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); this.persons = new System.Windows.Forms.ComboBox(); this.personNameLabel = new System.Windows.Forms.Label(); this.mapImageFileNameBrowse = new System.Windows.Forms.Button(); this.mapImageGroup.SuspendLayout(); this.mapImageLayoutTable.SuspendLayout(); this.routeGroup.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); this.personGroup.SuspendLayout(); this.tableLayoutPanel2.SuspendLayout(); this.SuspendLayout(); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // mapImageGroup // resources.ApplyResources(this.mapImageGroup, "mapImageGroup"); this.mapImageGroup.Controls.Add(this.mapImageLayoutTable); this.mapImageGroup.Name = "mapImageGroup"; this.mapImageGroup.TabStop = false; // // mapImageLayoutTable // resources.ApplyResources(this.mapImageLayoutTable, "mapImageLayoutTable"); this.mapImageLayoutTable.Controls.Add(this.mapImageFileName, 1, 0); this.mapImageLayoutTable.Controls.Add(this.mapImageFileNameBrowse, 2, 0); this.mapImageLayoutTable.Controls.Add(this.mapImageFileFormatLabel, 0, 1); this.mapImageLayoutTable.Controls.Add(this.mapImageFileFormatComboBox, 1, 1); this.mapImageLayoutTable.Controls.Add(this.mapImageFromFile, 0, 0); this.mapImageLayoutTable.Controls.Add(this.imageSizeLabel, 1, 2); this.mapImageLayoutTable.Name = "mapImageLayoutTable"; // // mapImageFileName // this.mapImageFileName.AllowDrop = true; resources.ApplyResources(this.mapImageFileName, "mapImageFileName"); this.mapImageFileName.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; this.mapImageFileName.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem; this.mapImageFileName.FormattingEnabled = true; this.mapImageFileName.Name = "mapImageFileName"; this.mapImageFileName.SelectedValueChanged += new System.EventHandler(this.mapImageFileName_SelectedValueChanged); this.mapImageFileName.TextChanged += new System.EventHandler(this.mapImageFileName_TextChanged); this.mapImageFileName.DragDrop += new System.Windows.Forms.DragEventHandler(this.mapImageFileName_DragDrop); this.mapImageFileName.DragEnter += new System.Windows.Forms.DragEventHandler(this.mapImageFileName_DragEnter); this.mapImageFileName.Leave += new System.EventHandler(this.mapImageFileName_Leave); // // mapImageFileFormatLabel // resources.ApplyResources(this.mapImageFileFormatLabel, "mapImageFileFormatLabel"); this.mapImageFileFormatLabel.Name = "mapImageFileFormatLabel"; // // mapImageFileFormatComboBox // resources.ApplyResources(this.mapImageFileFormatComboBox, "mapImageFileFormatComboBox"); this.mapImageFileFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.mapImageFileFormatComboBox.FormattingEnabled = true; this.mapImageFileFormatComboBox.Name = "mapImageFileFormatComboBox"; // // mapImageFromFile // resources.ApplyResources(this.mapImageFromFile, "mapImageFromFile"); this.mapImageFromFile.Name = "mapImageFromFile"; this.mapImageFromFile.TabStop = true; // // imageSizeLabel // resources.ApplyResources(this.imageSizeLabel, "imageSizeLabel"); this.imageSizeLabel.Name = "imageSizeLabel"; this.imageSizeLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.imageSizeLabel_LinkClicked); // // routeGroup // resources.ApplyResources(this.routeGroup, "routeGroup"); this.routeGroup.Controls.Add(this.tableLayoutPanel1); this.routeGroup.Name = "routeGroup"; this.routeGroup.TabStop = false; // // tableLayoutPanel1 // resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.Controls.Add(this.routeFromGpsDevice, 0, 0); this.tableLayoutPanel1.Controls.Add(this.routeFromFile, 0, 1); this.tableLayoutPanel1.Controls.Add(this.routeFileFormatLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.routeGpsDevice, 1, 0); this.tableLayoutPanel1.Controls.Add(this.routeFileFormatComboBox, 1, 2); this.tableLayoutPanel1.Controls.Add(this.routeFileNameBrowse, 2, 1); this.tableLayoutPanel1.Controls.Add(this.routeFileName, 1, 1); this.tableLayoutPanel1.Controls.Add(this.refreshButton, 2, 0); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // routeFromGpsDevice // resources.ApplyResources(this.routeFromGpsDevice, "routeFromGpsDevice"); this.routeFromGpsDevice.Checked = true; this.routeFromGpsDevice.Name = "routeFromGpsDevice"; this.routeFromGpsDevice.TabStop = true; this.routeFromGpsDevice.UseVisualStyleBackColor = true; this.routeFromGpsDevice.CheckedChanged += new System.EventHandler(this.routeFromGpsDevice_CheckedChanged); // // routeFromFile // resources.ApplyResources(this.routeFromFile, "routeFromFile"); this.routeFromFile.Name = "routeFromFile"; this.routeFromFile.UseVisualStyleBackColor = true; this.routeFromFile.CheckedChanged += new System.EventHandler(this.routeFromFile_CheckedChanged); // // routeFileFormatLabel // resources.ApplyResources(this.routeFileFormatLabel, "routeFileFormatLabel"); this.routeFileFormatLabel.Name = "routeFileFormatLabel"; // // routeGpsDevice // resources.ApplyResources(this.routeGpsDevice, "routeGpsDevice"); this.routeGpsDevice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.routeGpsDevice.FormattingEnabled = true; this.routeGpsDevice.Name = "routeGpsDevice"; // // routeFileFormatComboBox // resources.ApplyResources(this.routeFileFormatComboBox, "routeFileFormatComboBox"); this.routeFileFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.routeFileFormatComboBox.FormattingEnabled = true; this.routeFileFormatComboBox.Name = "routeFileFormatComboBox"; // // routeFileNameBrowse // resources.ApplyResources(this.routeFileNameBrowse, "routeFileNameBrowse"); this.routeFileNameBrowse.Name = "routeFileNameBrowse"; this.routeFileNameBrowse.UseVisualStyleBackColor = true; this.routeFileNameBrowse.Click += new System.EventHandler(this.routeFileNameBrowse_Click); // // routeFileName // resources.ApplyResources(this.routeFileName, "routeFileName"); this.routeFileName.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; this.routeFileName.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.FileSystem; this.routeFileName.FormattingEnabled = true; this.routeFileName.Name = "routeFileName"; this.routeFileName.TextChanged += new System.EventHandler(this.routeFileName_TextChanged); // // refreshButton // resources.ApplyResources(this.refreshButton, "refreshButton"); this.refreshButton.Name = "refreshButton"; this.refreshButton.UseVisualStyleBackColor = true; this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click); // // personGroup // resources.ApplyResources(this.personGroup, "personGroup"); this.personGroup.Controls.Add(this.tableLayoutPanel2); this.personGroup.Name = "personGroup"; this.personGroup.TabStop = false; // // tableLayoutPanel2 // resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2"); this.tableLayoutPanel2.Controls.Add(this.persons, 0, 0); this.tableLayoutPanel2.Controls.Add(this.personNameLabel, 0, 0); this.tableLayoutPanel2.Name = "tableLayoutPanel2"; // // persons // resources.ApplyResources(this.persons, "persons"); this.persons.FormattingEnabled = true; this.persons.Name = "persons"; // // personNameLabel // resources.ApplyResources(this.personNameLabel, "personNameLabel"); this.personNameLabel.Name = "personNameLabel"; // // mapImageFileNameBrowse // resources.ApplyResources(this.mapImageFileNameBrowse, "mapImageFileNameBrowse"); this.mapImageFileNameBrowse.Name = "mapImageFileNameBrowse"; this.mapImageFileNameBrowse.UseVisualStyleBackColor = true; this.mapImageFileNameBrowse.Click += new System.EventHandler(this.mapImageFileNameBrowse_Click); // // CreateNewForm // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.personGroup); this.Controls.Add(this.mapImageGroup); this.Controls.Add(this.cancel); this.Controls.Add(this.routeGroup); this.Controls.Add(this.ok); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "CreateNewForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.mapImageGroup.ResumeLayout(false); this.mapImageGroup.PerformLayout(); this.mapImageLayoutTable.ResumeLayout(false); this.mapImageLayoutTable.PerformLayout(); this.routeGroup.ResumeLayout(false); this.routeGroup.PerformLayout(); this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); this.personGroup.ResumeLayout(false); this.personGroup.PerformLayout(); this.tableLayoutPanel2.ResumeLayout(false); this.tableLayoutPanel2.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.GroupBox mapImageGroup; private System.Windows.Forms.TableLayoutPanel mapImageLayoutTable; private System.Windows.Forms.GroupBox routeGroup; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.RadioButton routeFromGpsDevice; private System.Windows.Forms.RadioButton routeFromFile; private System.Windows.Forms.Button routeFileNameBrowse; private System.Windows.Forms.ComboBox routeFileFormatComboBox; private System.Windows.Forms.Label routeFileFormatLabel; private System.Windows.Forms.ComboBox routeGpsDevice; private System.Windows.Forms.Label mapImageFileFormatLabel; private System.Windows.Forms.ComboBox mapImageFileFormatComboBox; private System.Windows.Forms.ComboBox mapImageFileName; private System.Windows.Forms.ComboBox routeFileName; private System.Windows.Forms.GroupBox personGroup; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; private System.Windows.Forms.Label personNameLabel; private System.Windows.Forms.ComboBox persons; private System.Windows.Forms.Button refreshButton; private System.Windows.Forms.Label mapImageFromFile; private System.Windows.Forms.LinkLabel imageSizeLabel; private System.Windows.Forms.Button mapImageFileNameBrowse; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.cs000066400000000000000000000604401446222606700253100ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Net; using System.Threading; using System.Windows.Forms; using QuickRoute.BusinessEntities; using System.IO; using QuickRoute.BusinessEntities.Importers; using QuickRoute.Controls; using QuickRoute.Resources; using QuickRoute.UI.Classes; namespace QuickRoute.UI.Forms { /// /// Dialog for "creating a new" route. /// public partial class CreateNewForm : Form { private readonly List supportedMapImageFileFormats; private readonly List supportedRouteFileFormats; private Image transformedImage; private byte[] originalMapBytes; private string imageFileName; private double imageRotationInDegrees = 0; private double imageScale = 1; private Rectangle? imageCropRectangle = null; private SourceType? imageSourceType; private bool loadingImageNow; private DownloadProgressChangedEventArgs loadingImageProgressChangedEventArgs; private DateTime lastLabelUpdate; private FileLoader imageLoader; public CreateNewForm() : this(null) { } public CreateNewForm(string initialRouteFileName) { InitializeComponent(); mapImageFileName.Items.AddRange(Util.ApplicationSettings.RecentMapImageFileNames.ToArray()); routeFileName.Items.AddRange(Util.ApplicationSettings.RecentRouteFileNames.ToArray()); supportedMapImageFileFormats = SupportedImportFormatManager.GetSupportedMapFileFormats(); mapImageFileFormatComboBox.DataSource = supportedMapImageFileFormats; supportedRouteFileFormats = SupportedImportFormatManager.GetSupportedRouteFileFormats(); routeFileFormatComboBox.DataSource = supportedRouteFileFormats; bool gpsDevicesFound = SearchForGPSDevices(); if (initialRouteFileName != null) { routeFileName.Text = initialRouteFileName; routeFromFile.Checked = true; } else { if (!gpsDevicesFound) routeFromFile.Checked = true; } InitialTransformation = new Transformation(); UpdateUI(); UpdateImageSizeLabel(); } #region Public properties public Map Map { get; private set; } public ImportResult ImportResult { get; private set; } public Transformation InitialTransformation { get; private set; } public SessionPerson Person { get { return persons.SelectedItem as SessionPerson ?? new SessionPerson() { Name = persons.Text }; } set { persons.SelectedItem = value; } } public string FileNameProposal { get { if (!string.IsNullOrEmpty(mapImageFileName.Text)) { return Path.GetFileNameWithoutExtension(mapImageFileName.Text) + ".qrt"; //Uri uri = new Uri(mapImageUrl.Text); //return Path.GetFileNameWithoutExtension(uri.Segments[uri.Segments.Length - 1]) + ".qrt"; } return Strings.Untitled + ".qrt"; } } #endregion #region Event handlers private void ok_Click(object sender, EventArgs e) { if (Import() == DialogResult.OK) { DialogResult = DialogResult.OK; Close(); } } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void mapImageFileNameBrowse_Click(object sender, EventArgs e) { using (var ofd = new OpenFileDialog { CheckFileExists = true }) { var filterItems = new string[supportedMapImageFileFormats.Count]; for (int i = 0; i < supportedMapImageFileFormats.Count; i++) { filterItems[i] = supportedMapImageFileFormats[i].FileFilter; } ofd.Filter = string.Join("|", filterItems); ofd.FilterIndex = mapImageFileFormatComboBox.SelectedIndex + 1; ofd.Title = Strings.SelectMapImageFile; if (Util.ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ImportMapImage)) { ofd.InitialDirectory = Util.ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ImportMapImage]; } if (ofd.ShowDialog() == DialogResult.OK) { mapImageFileName.Text = ofd.FileName; mapImageFileFormatComboBox.SelectedIndex = ofd.FilterIndex - 1; Util.ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ImportMapImage] = Path.GetDirectoryName(ofd.FileName); LoadImage(); } } } private void routeFileNameBrowse_Click(object sender, EventArgs e) { var filterItems = new string[supportedRouteFileFormats.Count]; for (var i = 0; i < supportedRouteFileFormats.Count; i++) { filterItems[i] = supportedRouteFileFormats[i].FileFilter; } using (var ofd = new OpenFileDialog { CheckFileExists = true, Filter = string.Join("|", filterItems), FilterIndex = (routeFileFormatComboBox.SelectedIndex + 1), Title = Strings.SelectRouteFile }) { if (Util.ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ImportRoute)) { ofd.InitialDirectory = Util.ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ImportRoute]; } if (ofd.ShowDialog() == DialogResult.OK) { routeFileName.Text = ofd.FileName; routeFileFormatComboBox.SelectedIndex = ofd.FilterIndex - 1; Util.ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ImportRoute] = Path.GetDirectoryName(ofd.FileName); } } } private void routeFromFile_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void routeFromGpsDevice_CheckedChanged(object sender, EventArgs e) { if (routeFromGpsDevice.Checked) SearchForGPSDevices(); UpdateUI(); } private void routeFileName_TextChanged(object sender, EventArgs e) { UpdateRouteFileFormat(); } private void mapImageFileName_TextChanged(object sender, EventArgs e) { UpdateMapImageFileFormat(); } private void mapImageFileName_SelectedValueChanged(object sender, EventArgs e) { LoadImage(); } private void mapImageFileName_Leave(object sender, EventArgs e) { LoadImage(); } private void refreshButton_Click(object sender, EventArgs e) { using (var progressIndicator = new RefreshDevicesProgressIndicator()) { routeGpsDevice.DataSource = null; routeGpsDevice.Items.Clear(); SupportedImportFormatManager.StartRefreshGPSDevices(); progressIndicator.ShowDialog(); SearchForGPSDevices(); } } private void imageSizeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { try { using (var image = GetImageFromBytes(originalMapBytes, SelectedImageFileFormat)) { using (var imageManipulatorForm = new ImageManipulator(image, imageScale, imageRotationInDegrees, imageCropRectangle)) { var result = imageManipulatorForm.ShowDialog(); if (result == DialogResult.OK) { transformedImage = imageManipulatorForm.ManipulatedImage; imageScale = imageManipulatorForm.ImageScale; imageRotationInDegrees = imageManipulatorForm.ImageRotationInDegrees; imageCropRectangle = imageManipulatorForm.ImageCropRectangle; UpdateImageSizeLabel(); } } } } catch (Exception) { } } private void mapImageFileName_DragEnter(object sender, DragEventArgs e) { e.Effect = (e.AllowedEffect & DragDropEffects.Move) != DragDropEffects.Move ? e.AllowedEffect : DragDropEffects.Move; } private void mapImageFileName_DragDrop(object sender, DragEventArgs e) { var fileNames = new DragDropManager().GetDroppedFileNames(e); if (fileNames.Count > 0) { mapImageFileName.Text = fileNames[0]; LoadImage(); } } protected void routeImporter_EndWork(object sender, EventArgs e) { Cursor = Cursors.Default; } protected void routeImporter_WorkProgress(object sender, WorkProgressEventArgs e) { } protected void routeImporter_BeginWork(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; } #endregion private void LoadImage() { if (mapImageFileName.Text == imageFileName) return; imageFileName = mapImageFileName.Text; originalMapBytes = null; transformedImage = null; if (imageLoader != null) { // cancel previous load imageLoader.Dispose(); } UpdateImageSizeLabel(); imageLoader = new FileLoader(imageFileName); imageLoader.Loaded += ImageLoaded; imageLoader.Error += ImageLoadingError; imageLoader.ProgressChanged += ImageLoadingProgressChanged; loadingImageNow = true; loadingImageProgressChangedEventArgs = null; imageLoader.Load(); } private void ImageLoadingError(object sender, ErrorEventArgs e) { originalMapBytes = null; transformedImage = null; loadingImageNow = false; imageSourceType = e.SourceType; imageLoader.Dispose(); UpdateImageSizeLabel(); } private void ImageLoadingProgressChanged(object sender, DownloadProgressChangedEventArgs e) { if ((DateTime.Now - lastLabelUpdate).TotalMilliseconds > 200) { loadingImageProgressChangedEventArgs = e; UpdateImageSizeLabel(); lastLabelUpdate = DateTime.Now; } } private void ImageLoaded(object sender, LoadedEventArgs e) { loadingImageNow = false; originalMapBytes = e.Data; transformedImage = GetImageFromBytes(e.Data, SelectedImageFileFormat); imageScale = 1; imageRotationInDegrees = 0; imageCropRectangle = null; imageSourceType = e.SourceType; UpdateImageSizeLabel(); imageLoader.Dispose(); } public void SetPersons(List personList) { persons.Items.Clear(); if (personList == null || personList.Count == 0) return; persons.Items.AddRange(personList.ToArray()); persons.SelectedItem = personList[0]; } private DialogResult Import() { // validate file names if (imageSourceType != SourceType.Url && mapImageFileName.Text != "" && !File.Exists(mapImageFileName.Text)) { MessageBox.Show(Strings.MapImageFileDoesNotExist, Strings.InvalidMapImage, MessageBoxButtons.OK, MessageBoxIcon.Error); return DialogResult.Cancel; } if (routeFromFile.Checked && !File.Exists(routeFileName.Text)) { MessageBox.Show(Strings.RouteFileDoesNotExist, Strings.InvalidRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); return DialogResult.Cancel; } IRouteImporter routeImporter = null; if (routeFromFile.Checked) { IRouteFileImporter routeFileImporter = ((RouteFileFormat)routeFileFormatComboBox.SelectedItem).Importer; routeFileImporter.FileName = routeFileName.Text; routeImporter = routeFileImporter; } else if (routeFromGpsDevice.Checked) { GPSDevice gpsDevice = routeGpsDevice.SelectedItem as GPSDevice; if (gpsDevice == null) { MessageBox.Show(Strings.NoGPSDevicesConnectedMessageBox, Strings.InvalidRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); return DialogResult.Cancel; } routeImporter = gpsDevice.Importer; } routeImporter.BeginWork += routeImporter_BeginWork; routeImporter.WorkProgress += routeImporter_WorkProgress; routeImporter.EndWork += routeImporter_EndWork; DialogResult result; try { result = routeImporter.ShowPreImportDialogs(); } catch (Exception ex) { Cursor = Cursors.Default; Util.ShowExceptionMessageBox(ex, Strings.InvalidRoute); return DialogResult.Cancel; } if (result == DialogResult.OK) { try { routeImporter.Import(); } catch (Exception ex) { routeImporter.ImportResult.Succeeded = false; routeImporter.ImportResult.Error = ImportError.Unknown; routeImporter.ImportResult.ErrorMessage = ex.Message; routeImporter.ImportResult.Exception = ex; } if (!routeImporter.ImportResult.Succeeded) { // an error occured, show relevant error info and cancel creation of new document. switch (routeImporter.ImportResult.Error) { case ImportError.NoWaypoints: routeImporter.ImportResult.ErrorMessage = Strings.RouteImportError_NoWaypoints; break; case ImportError.NoWaypointTimes: routeImporter.ImportResult.ErrorMessage = Strings.RouteImportError_NoWaypointTimes; break; } Cursor = Cursors.Default; if (routeImporter.ImportResult.Exception != null) { Util.ShowExceptionMessageBox(routeImporter.ImportResult.Exception, Strings.InvalidRoute); } else { MessageBox.Show(routeImporter.ImportResult.ErrorMessage, Strings.InvalidRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); } return DialogResult.Cancel; } try { if (string.IsNullOrEmpty(mapImageFileName.Text)) { var blankMap = new Bitmap(1500, 1500); using (Graphics g = Graphics.FromImage(blankMap)) { g.Clear(Color.White); } Map = new Map(blankMap); } else if (!ImageHasBeenTransformed) { CreateMapAndSetInitialTransformations(); } else { // don't care about transformations embedded in jpg, qrt or kmz files since the original file has been transformed Map = new Map(new Bitmap(transformedImage)); } } catch (Exception ex) { Cursor = Cursors.Default; Util.ShowExceptionMessageBox(ex, Strings.InvalidMapImage); return DialogResult.Cancel; } ImportResult = routeImporter.ImportResult; if (!string.IsNullOrEmpty(mapImageFileName.Text)) Util.ApplicationSettings.AddRecentMapImageFileName(mapImageFileName.Text); if (routeFromFile.Checked) Util.ApplicationSettings.AddRecentRouteFileName(routeFileName.Text); } return result; } private void CreateMapAndSetInitialTransformations() { switch (SelectedImageFileFormat) { case ImageFileFormat.ImageFile: using (var ms = new MemoryStream(originalMapBytes)) { Map = new Map(ms); ms.Position = 0; var ed = QuickRouteJpegExtensionData.FromStream(ms); // is it a QuickRoute image? if yes, use embedded transformation matrix if (ed != null && ed.Sessions != null && ed.Sessions.Count > 0) { InitialTransformation = ed.Sessions.CalculateAverageTransformation(); } break; } case ImageFileFormat.QuickRouteFile: using (var ms = new MemoryStream(originalMapBytes)) { var d = Document.OpenFromQrt(ms); if (d != null) { Map = d.Map; InitialTransformation = d.Sessions.CalculateAverageTransformation(); } } break; case ImageFileFormat.KmzFile: using (var ms = new MemoryStream(originalMapBytes)) { var kmz = new KmzDocument(ms); if (kmz.ImageStream != null) { Map = new Map(kmz.ImageStream); InitialTransformation = kmz.Transformation; } break; } } } private void UpdateUI() { routeFileName.Enabled = routeFromFile.Checked; routeFileNameBrowse.Enabled = routeFromFile.Checked; routeFileFormatComboBox.Enabled = routeFromFile.Checked; routeGpsDevice.Enabled = routeFromGpsDevice.Checked; refreshButton.Enabled = routeFromGpsDevice.Checked; } private bool SearchForGPSDevices() { routeGpsDevice.DataSource = null; routeGpsDevice.Items.Clear(); var devices = SupportedImportFormatManager.SearchForGPSDevices(); bool devicesFound = (devices.Count > 0); if (!devicesFound) { routeGpsDevice.Items.Add(Strings.NoGPSDevicesConnected); } else { routeGpsDevice.DataSource = devices; } routeGpsDevice.SelectedIndex = 0; return devicesFound; } private void UpdateRouteFileFormat() { bool found = false; foreach (RouteFileFormat ff in supportedRouteFileFormats) { foreach (string e in ff.Extensions) { if (routeFileName.Text.EndsWith(e)) { routeFileFormatComboBox.SelectedItem = ff; found = true; break; } } if (found) break; } } private void UpdateMapImageFileFormat() { bool found = false; foreach (FileFormat ff in supportedMapImageFileFormats) { foreach (string e in ff.Extensions) { if (mapImageFileName.Text.EndsWith(e)) { mapImageFileFormatComboBox.SelectedItem = ff; found = true; break; } } if (found) break; } } private void UpdateImageSizeLabel() { if (loadingImageNow && loadingImageProgressChangedEventArgs != null) { imageSizeLabel.Text = string.Format( "{0}: {1:P0}", Strings.DownloadingImage, (double)loadingImageProgressChangedEventArgs.ProgressPercentage / 100); imageSizeLabel.LinkArea = new LinkArea(); Application.DoEvents(); return; } if (transformedImage == null) { // no image loaded yet, so no image size info to show imageSizeLabel.Text = ""; return; } var text = string.Format("{0}: {1} x {2}", Strings.ImageSize, transformedImage.Width, transformedImage.Height); if (imageScale != 1 || imageRotationInDegrees != 0) { text += string.Format(" ({0}{1}{2})", imageScale == 1 ? null : imageScale.ToString("P0"), imageScale == 1 || imageRotationInDegrees == 0 ? null : ", ", imageRotationInDegrees == 0 ? null : imageRotationInDegrees + ""); } text += ". " + Strings.Change; imageSizeLabel.Text = text; // need to assign a new linkarea first, otherwise the text is clipped by two letters for some strange reason, bug in .NET? imageSizeLabel.LinkArea = new LinkArea(); imageSizeLabel.LinkArea = new LinkArea(text.Length - Strings.Change.Length, Strings.Change.Length); } private static Image GetImageFromBytes(byte[] bytes, ImageFileFormat fileFormat) { try { switch (fileFormat) { case ImageFileFormat.ImageFile: using (var ms = new MemoryStream(bytes)) { return Image.FromStream(ms); } case ImageFileFormat.QuickRouteFile: using (var ms = new MemoryStream(bytes)) { var d = Document.OpenFromQrt(ms); return d.Map.Image; } case ImageFileFormat.KmzFile: using (var ms = new MemoryStream(bytes)) { var kmz = new KmzDocument(ms); if (kmz.ImageStream != null) { return Image.FromStream(kmz.ImageStream); } } break; } } catch { } return null; } private ImageFileFormat SelectedImageFileFormat { get { switch (mapImageFileFormatComboBox.SelectedIndex) { case 0: return ImageFileFormat.ImageFile; case 1: return ImageFileFormat.QuickRouteFile; case 2: return ImageFileFormat.KmzFile; } return default(ImageFileFormat); } } private bool ImageHasBeenTransformed { get { return imageScale != 1 || imageRotationInDegrees != 0 || imageCropRectangle != null; } } } public enum ImageFileFormat { ImageFile, QuickRouteFile, KmzFile } public class FileLoader : IDisposable { private readonly string fileNameOrUrl; private WebClient webClient; public FileLoader(string fileNameOrUrl) { this.fileNameOrUrl = fileNameOrUrl; } public void Load() { if (File.Exists(fileNameOrUrl)) { LoadFromDisk(fileNameOrUrl); } else if (Uri.IsWellFormedUriString(fileNameOrUrl, UriKind.Absolute)) { LoadFromUrl(fileNameOrUrl); } else { if (Error != null) Error(this, new ErrorEventArgs() { Exception = new Exception("Not a file or url."), SourceType = SourceType.Unknown }); } } private void LoadFromDisk(string fileName) { try { var data = File.ReadAllBytes(fileName); if (Loaded != null) Loaded(this, new LoadedEventArgs() { Data = data, SourceType = SourceType.Disk }); } catch (Exception ex) { if (Error != null) Error(this, new ErrorEventArgs() { Exception = ex, SourceType = SourceType.Disk }); } } private void LoadFromUrl(string url) { try { webClient = new WebClient(); webClient.DownloadDataCompleted += DownloadDataCompleted; webClient.DownloadProgressChanged += DownloadProgressChanged; webClient.DownloadDataAsync(new Uri(url)); } catch (Exception ex) { if (Error != null) Error(this, new ErrorEventArgs() { Exception = ex, SourceType = SourceType.Url }); webClient.Dispose(); } } private void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { if (ProgressChanged != null) ProgressChanged(this, e); } private void DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e) { try { if (!e.Cancelled) { if (Loaded != null) Loaded(this, new LoadedEventArgs() { Data = e.Result, SourceType = SourceType.Url }); } } catch (Exception ex) { if (Error != null) Error(this, new ErrorEventArgs() { Exception = ex, SourceType = SourceType.Url }); } finally { webClient.Dispose(); } } public event EventHandler Loaded; public event EventHandler ProgressChanged; public event EventHandler Error; public void Dispose() { if (webClient != null) { webClient.CancelAsync(); webClient.Dispose(); } } } public class LoadedEventArgs : EventArgs { public byte[] Data { get; set; } public SourceType SourceType { get; set; } } public class ErrorEventArgs : EventArgs { public Exception Exception { get; set; } public SourceType SourceType { get; set; } } public enum SourceType { Disk, Url, Unknown } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.da.resx000066400000000000000000000175241446222606700262540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd &Gennemse... 52, 13 Fil forma&t: 35, 13 Fra &fil: Kortbillede 101, 17 Fra GPS &enhed: 53, 17 Fra f&il: 52, 13 Fil for&mat: Gennem&se... &Opdater Rute 36, 13 &Navn: Nyt dokument quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.de.resx000066400000000000000000000177031446222606700262570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen &Durchsuchen... 75, 17 Von Date&i: 46, 17 &Leer 64, 13 Datei&format: Karte Von &GPS-Gerät: 75, 17 Von Dat&ei: 64, 13 Dateif&ormat: Durch&suchen... Strecke 72, 17 Von &URL: Neues Dokument E&rneuern quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.fi.resx000066400000000000000000000206031446222606700262560ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta &Selaa... 80, 17 &Tiedostosta 70, 17 &Ei karttaa 88, 13 Tiedosto&formaatti Kartta 95, 17 &GPS-laitteesta: 83, 17 Tie&dostosta: 88, 13 Tiedostofor&maatti Se&laa... Reitti 69, 17 &URL:ista: 30, 13 &Nimi: Henkilö Uusi dokumentti &Päivittää quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.fr.resx000066400000000000000000000165501446222606700262750ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler &Parcourir... Depuis le &fichier : &Fond blanc Forma&t du fichier : Fond de carte Depuis le &GPS : Depuis le fichi&er : For&mat du fichier : Par&courir : Trace Depuis l'&URL : &Nom : Utilisateur Nouveau Document Ré&actualiser quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.it.resx000066400000000000000000000205751446222606700263040ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella &Sfoglia... 60, 17 Dal &file: 53, 17 &Vuoto 81, 13 Forma&to del file: Immagine della mappa 67, 17 &Da GPS: 58, 17 Da fil&e: 81, 13 For&mato del file: Sfo&glia... &Aggiorna Percorso 56, 17 Da &url: 35, 13 &Nome Persona Nuovo documento quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.lt.resx000066400000000000000000000207541446222606700263060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Atšaukti Narš&yti... 58, 17 Iš &failo: 62, 17 &Tuščias 75, 13 Failo format&as: Žemėlapio vaizdas 108, 17 Iš &GPS laikrodžio: 58, 17 Iš fai&lo: 75, 13 Failo for&matas: Na&ršyti... Prabėgimas 50, 17 Iš &url: 43, 13 &Vardas: Asmuo Naujas dokumentas At&naujinti quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.no.resx000066400000000000000000000200571446222606700262770ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt &Bla... 59, 17 Fra &file: 49, 13 Filforma&t: Kartbilde 98, 17 Fra &GPS-enhet: 53, 17 Fra f&il: 49, 13 Filfor&mat: B&la... Rute 103, 17 Fra &webadresse: 36, 13 &Navn: Nytt dokument &Oppdater quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.resx000066400000000000000000001260551446222606700256710ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Right 570, 297 75, 23 3 OK ok System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 4 Bottom, Right 653, 297 75, 23 4 Cancel cancel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 Top, Left, Right Top, Bottom, Left, Right 3 Top, Left, Right 121, 5 3, 5, 3, 3 450, 0 450, 0 450, 21 1 mapImageFileName System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageLayoutTable 0 NoControl 577, 3 97, 23 97, 23 97, 23 2 &Browse... mapImageFileNameBrowse System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageLayoutTable 1 True NoControl 19, 36 19, 7, 3, 0 58, 13 3 File forma&t: mapImageFileFormatLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageLayoutTable 2 Top, Left, Right 121, 32 3, 3, 3, 6 450, 0 450, 0 450, 21 4 mapImageFileFormatComboBox System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageLayoutTable 3 True NoControl 19, 7 19, 7, 3, 3 49, 13 0 From &file: mapImageFromFile System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageLayoutTable 4 True NoControl 121, 64 3, 7, 3, 3 0, 13 7 imageSizeLabel System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageLayoutTable 5 3, 16 716, 84 716, 84 3 716, 84 0 mapImageLayoutTable System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 mapImageGroup 0 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="mapImageFileName" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="mapImageFileNameBrowse" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="mapImageFileFormatLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="mapImageFileFormatComboBox" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="mapImageFromFile" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="imageSizeLabel" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="Absolute,118,Absolute,456,Absolute,224" /><Rows Styles="AutoSize,0,Absolute,28,Absolute,21" /></TableLayoutSettings> 12, 12 722, 103 0 Map image mapImageGroup System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 Top, Left, Right Top, Bottom, Left, Right GrowAndShrink 3 True 3, 5 3, 5, 3, 3 111, 17 0 From &GPS device: routeFromGpsDevice System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 0 True 3, 37 3, 7, 3, 3 67, 17 2 From fil&e: routeFromFile System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 1 True 19, 66 19, 7, 3, 0 58, 13 5 File for&mat: routeFileFormatLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 2 Top, Left, Right 122, 3 3, 3, 3, 6 450, 0 450, 0 450, 21 1 routeGpsDevice System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 3 Top, Left, Right 122, 62 3, 3, 3, 6 450, 0 450, 0 450, 21 6 routeFileFormatComboBox System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 4 578, 33 97, 23 4 Bro&wse... routeFileNameBrowse System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 5 Top, Left, Right 122, 35 3, 5, 3, 3 450, 0 450, 0 450, 21 3 routeFileName System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 6 NoControl 578, 3 97, 23 7 &Refresh refreshButton System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 7 3, 16 716, 89 716, 89 3 716, 89 0 tableLayoutPanel1 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routeGroup 0 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="routeFromGpsDevice" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="routeFromFile" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="routeFileFormatLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="routeGpsDevice" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="routeFileFormatComboBox" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="routeFileNameBrowse" Row="1" RowSpan="1" Column="2" ColumnSpan="1" /><Control Name="routeFileName" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="refreshButton" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /></Controls><Columns Styles="Absolute,119,AutoSize,0,Absolute,182" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0" /></TableLayoutSettings> 12, 121 722, 110 1 Route routeGroup System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 3 Top, Left, Right tableLayoutPanel2 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 personGroup 0 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="persons" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="personNameLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Absolute,119,Absolute,497,Absolute,182" /><Rows Styles="Percent,100" /></TableLayoutSettings> 12, 234 722, 50 2 Person personGroup System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 Top, Bottom, Left, Right 3 persons System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 0 personNameLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 1 3, 19 716, 28 716, 28 1 716, 28 7 tableLayoutPanel2 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 personGroup 0 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="persons" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="personNameLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /></Controls><Columns Styles="Absolute,119,Absolute,497,Absolute,182" /><Rows Styles="Percent,100" /></TableLayoutSettings> Top, Left, Right 3, 3 3, 3, 3, 6 113, 21 5 persons System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 0 True NoControl 138, 7 19, 7, 3, 0 38, 13 4 &Name: personNameLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel2 1 True 6, 13 748, 341 NoControl 756, 368 756, 368 CenterParent New document CreateNewForm System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.ru.resx000066400000000000000000000205721446222606700263130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена &Найти... 77, 17 Из &файла: 78, 17 &Без карты 87, 13 Ф&ормат файла: Карта 113, 17 Из устройства &GPS: 77, 17 Из ф&айла: 87, 13 Фо&рмат файла: На&йти... Путь 67, 17 Из &URL: 32, 13 &Имя: Пользователь Новый документ quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/CreateNewForm.sv.resx000066400000000000000000000177021446222606700263160ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Kartbild &Bläddra... 59, 17 Från &fil: 49, 13 Filforma&t: Rutt 104, 17 Från &GPS-enhet: 59, 17 Från fi&l: 49, 13 Filfor&mat: Bl&äddra... &Uppdatera 63, 17 Från u&rl: &Namn: Nytt dokument quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.Designer.cs000066400000000000000000000120511446222606700302550ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class ExceptionMessageBox { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExceptionMessageBox)); this.stackTrace = new System.Windows.Forms.TextBox(); this.showStackTrace = new System.Windows.Forms.Button(); this.ok = new System.Windows.Forms.Button(); this.errorIcon = new System.Windows.Forms.Label(); this.errorMessage = new System.Windows.Forms.Label(); this.hideStackTrace = new System.Windows.Forms.Button(); this.SuspendLayout(); // // stackTrace // this.stackTrace.AccessibleDescription = null; this.stackTrace.AccessibleName = null; resources.ApplyResources(this.stackTrace, "stackTrace"); this.stackTrace.BackgroundImage = null; this.stackTrace.Font = null; this.stackTrace.Name = "stackTrace"; this.stackTrace.ReadOnly = true; // // showStackTrace // this.showStackTrace.AccessibleDescription = null; this.showStackTrace.AccessibleName = null; resources.ApplyResources(this.showStackTrace, "showStackTrace"); this.showStackTrace.BackgroundImage = null; this.showStackTrace.Font = null; this.showStackTrace.Name = "showStackTrace"; this.showStackTrace.UseVisualStyleBackColor = true; this.showStackTrace.Click += new System.EventHandler(this.showStackTrace_Click); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // errorIcon // this.errorIcon.AccessibleDescription = null; this.errorIcon.AccessibleName = null; resources.ApplyResources(this.errorIcon, "errorIcon"); this.errorIcon.Font = null; this.errorIcon.Name = "errorIcon"; // // errorMessage // this.errorMessage.AccessibleDescription = null; this.errorMessage.AccessibleName = null; resources.ApplyResources(this.errorMessage, "errorMessage"); this.errorMessage.Font = null; this.errorMessage.Name = "errorMessage"; // // hideStackTrace // this.hideStackTrace.AccessibleDescription = null; this.hideStackTrace.AccessibleName = null; resources.ApplyResources(this.hideStackTrace, "hideStackTrace"); this.hideStackTrace.BackgroundImage = null; this.hideStackTrace.Font = null; this.hideStackTrace.Name = "hideStackTrace"; this.hideStackTrace.UseVisualStyleBackColor = true; this.hideStackTrace.Click += new System.EventHandler(this.hideStackTrace_Click); // // ExceptionMessageBox // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.ok; this.Controls.Add(this.hideStackTrace); this.Controls.Add(this.errorMessage); this.Controls.Add(this.errorIcon); this.Controls.Add(this.ok); this.Controls.Add(this.showStackTrace); this.Controls.Add(this.stackTrace); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ExceptionMessageBox"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Resize += new System.EventHandler(this.ExceptionMessageBox_Resize); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.TextBox stackTrace; private System.Windows.Forms.Button showStackTrace; private System.Windows.Forms.Button ok; private System.Windows.Forms.Label errorIcon; private System.Windows.Forms.Label errorMessage; private System.Windows.Forms.Button hideStackTrace; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.cs000066400000000000000000000035731446222606700265270ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace QuickRoute.UI.Forms { public partial class ExceptionMessageBox : Form { private int heightWhenStackTraceVisible = 420; private const int heightWhenStackTraceHidden = 145; public ExceptionMessageBox(string title, Exception exception) { InitializeComponent(); Text = title; errorMessage.Text = exception.Message; stackTrace.Text = exception.Message + Environment.NewLine + "----------------------------------------------------------------------------------------------------" + Environment.NewLine; while (exception != null) { stackTrace.Text += exception.StackTrace + Environment.NewLine + Environment.NewLine; exception = exception.InnerException; } } private void showStackTrace_Click(object sender, EventArgs e) { stackTrace.Visible = true; showStackTrace.Visible = false; hideStackTrace.Visible = true; MaximumSize = new Size(2048, 2048); Height = heightWhenStackTraceVisible; stackTrace.Height = Math.Max(0, ok.Top - errorMessage.Bottom - 16); } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void hideStackTrace_Click(object sender, EventArgs e) { stackTrace.Visible = false; hideStackTrace.Visible = false; showStackTrace.Visible = true; MaximumSize = new Size(2048, heightWhenStackTraceHidden); Height = heightWhenStackTraceHidden; } private void ExceptionMessageBox_Resize(object sender, EventArgs e) { if (stackTrace.Visible) heightWhenStackTraceVisible = Height; } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.da.resx000066400000000000000000000140061446222606700274570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Vis detaljeret fejlinformation &Skjul detaljeret fejlinformation: OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.fi.resx000066400000000000000000000263621446222606700275010ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 193, 76 188, 23 Näytä yksityiskohtainen &virheilmoitus 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 3v8B21B4gSHF/isAAAAASUVORK5CYII= 193, 76 188, 23 &Piilota yksityiskohtainen virheilmoitus quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.it.resx000066400000000000000000000140551446222606700275130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Visualizza i &dettagli delle informazioni dell'errore Nascondi i d&ettagli delle informazioni dell'errore OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.resx000066400000000000000000000451641446222606700271050ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 errorMessage $this 4 $this ok System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 75, 23 System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 12, 9 hideStackTrace True 58, 9 ExceptionMessageBox False $this $this 2 3 162, 23 Top, Left, Right 0 NoControl 404, 54 Show &detailed error information System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 224, 76 Bottom, Right showStackTrace System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 219, 76 Bottom, Right System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Vertical 1 Hide &detailed error information 5 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Bottom, Left, Right False System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 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 3v8B21B4gSHF/isAAAAASUVORK5CYII= True Bottom, Right 1 4 3 0 12, 75 $this 474, 111 5 482, 145 stackTrace 157, 23 CenterParent 387, 76 6, 13 True 2 OK True 32, 32 450, 0 errorIcon True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExceptionMessageBox.sv.resx000066400000000000000000000253701446222606700275310ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Visa &detaljerad felinformation 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 3v8B21B4gSHF/isAAAAASUVORK5CYII= Dölj &detaljerad felinformation quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.Designer.cs000066400000000000000000000135271446222606700305640ustar00rootroot00000000000000using System.Windows.Forms; namespace QuickRoute.UI.Forms { partial class ExportRouteDataDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExportRouteDataDialog)); this.cancel = new System.Windows.Forms.Button(); this.ok = new System.Windows.Forms.Button(); this.routePropertyTypeCheckboxList = new System.Windows.Forms.CheckedListBox(); this.dataToInclude = new System.Windows.Forms.Label(); this.label1 = new System.Windows.Forms.Label(); this.samplingIntervalDropdown = new System.Windows.Forms.ComboBox(); this.SuspendLayout(); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // routePropertyTypeCheckboxList // this.routePropertyTypeCheckboxList.AccessibleDescription = null; this.routePropertyTypeCheckboxList.AccessibleName = null; resources.ApplyResources(this.routePropertyTypeCheckboxList, "routePropertyTypeCheckboxList"); this.routePropertyTypeCheckboxList.BackgroundImage = null; this.routePropertyTypeCheckboxList.CheckOnClick = true; this.routePropertyTypeCheckboxList.Font = null; this.routePropertyTypeCheckboxList.FormattingEnabled = true; this.routePropertyTypeCheckboxList.Name = "routePropertyTypeCheckboxList"; // // dataToInclude // this.dataToInclude.AccessibleDescription = null; this.dataToInclude.AccessibleName = null; resources.ApplyResources(this.dataToInclude, "dataToInclude"); this.dataToInclude.Font = null; this.dataToInclude.Name = "dataToInclude"; // // label1 // this.label1.AccessibleDescription = null; this.label1.AccessibleName = null; resources.ApplyResources(this.label1, "label1"); this.label1.Font = null; this.label1.Name = "label1"; // // samplingIntervalDropdown // this.samplingIntervalDropdown.AccessibleDescription = null; this.samplingIntervalDropdown.AccessibleName = null; resources.ApplyResources(this.samplingIntervalDropdown, "samplingIntervalDropdown"); this.samplingIntervalDropdown.BackgroundImage = null; this.samplingIntervalDropdown.Font = null; this.samplingIntervalDropdown.FormattingEnabled = true; this.samplingIntervalDropdown.Items.AddRange(new object[] { resources.GetString("samplingIntervalDropdown.Items"), resources.GetString("samplingIntervalDropdown.Items1"), resources.GetString("samplingIntervalDropdown.Items2"), resources.GetString("samplingIntervalDropdown.Items3"), resources.GetString("samplingIntervalDropdown.Items4"), resources.GetString("samplingIntervalDropdown.Items5"), resources.GetString("samplingIntervalDropdown.Items6")}); this.samplingIntervalDropdown.Name = "samplingIntervalDropdown"; this.samplingIntervalDropdown.Leave += new System.EventHandler(this.samplingIntervalDropdown_Leave); // // ExportRouteDataDialog // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.samplingIntervalDropdown); this.Controls.Add(this.label1); this.Controls.Add(this.dataToInclude); this.Controls.Add(this.routePropertyTypeCheckboxList); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "ExportRouteDataDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button cancel; private System.Windows.Forms.Button ok; private System.Windows.Forms.CheckedListBox routePropertyTypeCheckboxList; private System.Windows.Forms.Label dataToInclude; private Label label1; private ComboBox samplingIntervalDropdown; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.cs000066400000000000000000000052561446222606700270250ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.BusinessEntities.RouteProperties; namespace QuickRoute.UI.Forms { public partial class ExportRouteDataDialog : Form { private DateTime zeroTime; public ExportRouteDataDialog(ExportRouteDataSettings settings) { InitializeComponent(); samplingIntervalDropdown.Text = settings.SamplingInterval.TotalSeconds.ToString(); // (*) handling buggy multiple occurrences of route property types var routePropertyTypes = new List(); // add the names and visibility status of the route properties foreach (var item in settings.RoutePropertyTypes) { if (!routePropertyTypes.Contains(item.RoutePropertyType)) // (*) { routePropertyTypeCheckboxList.Items.Add(item, item.Selected); routePropertyTypes.Add(item.RoutePropertyType); // (*) } } zeroTime = settings.ZeroTime; } public ExportRouteDataSettings Settings { get { var ret = new ExportRouteDataSettings() { ZeroTime = zeroTime }; double value; if (double.TryParse(samplingIntervalDropdown.Text, out value)) { if (value <= 0) value = 1; if (value > 3600) value = 3600; ret.SamplingInterval = new TimeSpan((long)(TimeSpan.TicksPerSecond * value)); } else { ret.SamplingInterval = new TimeSpan(0, 0, 1); } var srpt = new SelectableRoutePropertyTypeCollection(); for (var i = 0; i < routePropertyTypeCheckboxList.Items.Count; i++) { var item = (SelectableRoutePropertyType)routePropertyTypeCheckboxList.Items[i]; srpt.Add(new SelectableRoutePropertyType(item.RoutePropertyType, routePropertyTypeCheckboxList.GetItemChecked(i))); } ret.RoutePropertyTypes = srpt; return ret; } } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void samplingIntervalDropdown_Leave(object sender, EventArgs e) { double value; if (double.TryParse(samplingIntervalDropdown.Text, out value)) { if (value <= 0) value = 1; if (value > 3600) value = 3600; samplingIntervalDropdown.Text = value.ToString(); } else { samplingIntervalDropdown.Text = "1"; } } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.da.resx000066400000000000000000000141371446222606700277620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd Eksporter rutedata Inkluder følgende &data: Opsamlings&interval i sekunder: quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.de.resx000066400000000000000000000156101446222606700277630ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen Streckendaten exportieren 30 Zu verwendende &Daten: 2 60 1 10 15 OK Abtast&intervall in Sekunden: 5 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.fi.resx000066400000000000000000000146771446222606700300050ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta 96, 13 Sisällytettävä &data: 143, 13 Poiminta&intervalli sekunteina: Vie reittidata quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.fr.resx000066400000000000000000000141741446222606700300060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler &Données à inclure : &Intervalle de l'échantillonnage en secondes : Exporter les données de la trace quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.it.resx000066400000000000000000000156321446222606700300130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella Esporta le informazioni del percorso 30 &Data da includere: 2 60 1 10 15 OK &Intervallo di campionamento in secondi: 5 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.lt.resx000066400000000000000000000142721446222606700300150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Atšaukti Perkelti trasos duomenis Įtraukiami &duomenys: Gerai Atrankos &intervalas sekundėmis: quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.no.resx000066400000000000000000000156011446222606700300070ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Eksporter rute-data 30 &Data som skal inngå: 2 60 1 10 15 OK Samplings&intervall i sekunder: 5 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.resx000066400000000000000000000344321446222606700273770ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 433, 387 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this ok 430, 21 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 4 3 1 ExportRouteDataDialog $this Cancel 457, 505 Export route data True 12, 58 1 144, 13 routePropertyTypeCheckboxList NoControl 3 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 12, 74 82, 13 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 30 5 2 &Data to include: $this 2 False Top, Bottom, Left, Right $this System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 2 Bottom, Right System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 12, 9 75, 23 75, 23 5 Bottom, Right label1 $this 370, 470 True 15, 25 samplingIntervalDropdown 60 1 dataToInclude $this CenterParent 10 289, 470 15 6, 13 4 cancel OK Sampling &interval in seconds: 5 Top, Left, Right System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.ru.resx000066400000000000000000000150031446222606700300150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 101, 13 &Добавить данные: 198, 13 &Интервал между точками в секундах: Экспорт данных пути quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ExportRouteDataDialog.sv.resx000066400000000000000000000170561446222606700300310ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Tid Longitud Latitud X-position på kartbilden Y-position på kartbilden Avverkad tid Distans Tempo Hastighet Riktningsavvikelse Höjd Puls 118, 13 Inkludera följande &data: 94, 13 Samplings&intervall i sekunder: Exportera ruttdata quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.Designer.cs000066400000000000000000000170121446222606700272470ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class GradientEditor { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GradientEditor)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.availableGradients = new System.Windows.Forms.GroupBox(); this.deleteGradient = new System.Windows.Forms.Button(); this.addGradient = new System.Windows.Forms.Button(); this.gradientList = new QuickRoute.Controls.GradientListBox(); this.gradientProperties = new System.Windows.Forms.GroupBox(); this.uiInformation = new System.Windows.Forms.Label(); this.gradientNameTextbox = new System.Windows.Forms.TextBox(); this.gradientNameLabel = new System.Windows.Forms.Label(); this.gradientPanel = new System.Windows.Forms.Panel(); this.availableGradients.SuspendLayout(); this.gradientProperties.SuspendLayout(); this.SuspendLayout(); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.OK_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.Cancel_Click); // // availableGradients // resources.ApplyResources(this.availableGradients, "availableGradients"); this.availableGradients.Controls.Add(this.deleteGradient); this.availableGradients.Controls.Add(this.addGradient); this.availableGradients.Controls.Add(this.gradientList); this.availableGradients.Name = "availableGradients"; this.availableGradients.TabStop = false; // // deleteGradient // resources.ApplyResources(this.deleteGradient, "deleteGradient"); this.deleteGradient.Name = "deleteGradient"; this.deleteGradient.UseVisualStyleBackColor = true; this.deleteGradient.Click += new System.EventHandler(this.DeleteGradient_Click); // // addGradient // resources.ApplyResources(this.addGradient, "addGradient"); this.addGradient.Name = "addGradient"; this.addGradient.UseVisualStyleBackColor = true; this.addGradient.Click += new System.EventHandler(this.AddGradient_Click); // // gradientList // resources.ApplyResources(this.gradientList, "gradientList"); this.gradientList.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; this.gradientList.FormattingEnabled = true; this.gradientList.Name = "gradientList"; this.gradientList.NamePadding = 8; this.gradientList.NameWidth = 100; this.gradientList.SelectedIndexChanged += new System.EventHandler(this.GradientList_SelectedIndexChanged); // // gradientProperties // resources.ApplyResources(this.gradientProperties, "gradientProperties"); this.gradientProperties.Controls.Add(this.uiInformation); this.gradientProperties.Controls.Add(this.gradientNameTextbox); this.gradientProperties.Controls.Add(this.gradientNameLabel); this.gradientProperties.Controls.Add(this.gradientPanel); this.gradientProperties.Name = "gradientProperties"; this.gradientProperties.TabStop = false; // // uiInformation // resources.ApplyResources(this.uiInformation, "uiInformation"); this.uiInformation.BackColor = System.Drawing.SystemColors.Info; this.uiInformation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.uiInformation.Name = "uiInformation"; // // gradientNameTextbox // resources.ApplyResources(this.gradientNameTextbox, "gradientNameTextbox"); this.gradientNameTextbox.Name = "gradientNameTextbox"; this.gradientNameTextbox.TextChanged += new System.EventHandler(this.GradientNameTextbox_TextChanged); this.gradientNameTextbox.Enter += new System.EventHandler(this.GradientNameTextbox_Enter); // // gradientNameLabel // resources.ApplyResources(this.gradientNameLabel, "gradientNameLabel"); this.gradientNameLabel.Name = "gradientNameLabel"; // // gradientPanel // resources.ApplyResources(this.gradientPanel, "gradientPanel"); this.gradientPanel.Name = "gradientPanel"; this.gradientPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.GradientPanel_Paint); this.gradientPanel.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.GradientPanel_MouseDoubleClick); this.gradientPanel.MouseDown += new System.Windows.Forms.MouseEventHandler(this.GradientPanel_MouseDown); this.gradientPanel.MouseLeave += new System.EventHandler(this.GradientPanel_MouseLeave); this.gradientPanel.MouseMove += new System.Windows.Forms.MouseEventHandler(this.GradientPanel_MouseMove); this.gradientPanel.MouseUp += new System.Windows.Forms.MouseEventHandler(this.GradientPanel_MouseUp); this.gradientPanel.Resize += new System.EventHandler(this.GradientPanel_Resize); // // GradientEditor // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.gradientProperties); this.Controls.Add(this.availableGradients); this.Controls.Add(this.ok); this.Controls.Add(this.cancel); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "GradientEditor"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Activated += new System.EventHandler(this.GradientEditor_Activated); this.availableGradients.ResumeLayout(false); this.gradientProperties.ResumeLayout(false); this.gradientProperties.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.GroupBox availableGradients; private System.Windows.Forms.GroupBox gradientProperties; private System.Windows.Forms.TextBox gradientNameTextbox; private System.Windows.Forms.Label gradientNameLabel; private System.Windows.Forms.Panel gradientPanel; private System.Windows.Forms.Button deleteGradient; private System.Windows.Forms.Button addGradient; private QuickRoute.Controls.GradientListBox gradientList; private System.Windows.Forms.Label uiInformation; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.cs000066400000000000000000000270051446222606700255130ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.Resources; namespace QuickRoute.UI.Forms { public partial class GradientEditor : Form { private Padding gradientPadding = new Padding(6, 1, 6, 17); private Size colorEntryMarkerSize = new Size(11, 16); private Rectangle gradientRectangle; private GradientColorEntry activeGradientColorEntry; private bool draggingGradientColorEntryNow = false; private List gradients = new List(); private Bitmap gradientPanelBackBuffer; public GradientEditor() { InitializeComponent(); gradientList.DataSource = gradients; CreateGradientRectangle(); CreateGradientBackBuffer(); } #region Public properties public Gradient CurrentGradient { get { if (gradientList.SelectedItem == null) return null; return (Gradient)gradientList.SelectedItem; } set { foreach (object item in gradientList.Items) { if (item.Equals(value)) { gradientList.SelectedItem = item; return; } } gradientList.SelectedItem = null; } } public List Gradients { get { return gradients; } set { gradients = value; gradientList.DataSource = null; gradientList.DataSource = gradients; } } #endregion #region Private methods private void CreateGradientRectangle() { gradientRectangle = new Rectangle(gradientPadding.Left, gradientPadding.Top, gradientPanel.Width - gradientPadding.Horizontal, gradientPanel.Height - gradientPadding.Vertical); } private void CreateGradientBackBuffer() { gradientPanelBackBuffer = new Bitmap(gradientPanel.Width, gradientPanel.Height); } private void DrawGradient() { Graphics graphics = Graphics.FromImage(gradientPanelBackBuffer); graphics.Clear(gradientPanel.BackColor); if (CurrentGradient != null) { Gradient.FillCheckerboardRectangle(graphics, gradientRectangle, 8); CurrentGradient.Draw(graphics, gradientRectangle, 0.0, 1.0, Gradient.Direction.Horizontal); graphics.DrawRectangle(Pens.Black, new Rectangle(gradientRectangle.Left - 1, gradientRectangle.Top - 1, gradientRectangle.Width + 2, gradientRectangle.Height + 1)); DrawColorEntryMarkers(); RefreshGradientList(true); } graphics.Dispose(); } private void DrawColorEntryMarkers() { Graphics graphics = Graphics.FromImage(gradientPanelBackBuffer); Brush b = new SolidBrush(gradientPanel.BackColor); graphics.FillRectangle(b, new Rectangle(0, gradientRectangle.Bottom + 1, gradientPanel.Width, gradientPanel.Height - gradientRectangle.Bottom)); b.Dispose(); int x; foreach (GradientColorEntry colorEntry in CurrentGradient.ColorEntries) { if (!colorEntry.Equals(activeGradientColorEntry)) { x = gradientRectangle.Left + (int)(colorEntry.Location * gradientRectangle.Width); DrawColorEntryMarker(graphics, new Point(x, gradientRectangle.Bottom + 1), colorEntryMarkerSize, colorEntry.Color, Color.Black); } } if (activeGradientColorEntry != null) { x = gradientRectangle.Left + (int)(activeGradientColorEntry.Location * gradientRectangle.Width); DrawColorEntryMarker(graphics, new Point(x, gradientRectangle.Bottom + 1), colorEntryMarkerSize, activeGradientColorEntry.Color, Color.Blue); } graphics.Dispose(); } private void CopyBackBufferToScreen() { // copy back buffer to screen gradientPanel.CreateGraphics().DrawImageUnscaled(gradientPanelBackBuffer, 0, 0); } private void DrawColorEntryMarker(Graphics graphics, Point point, Size size, Color color, Color borderColor) { Point[] markerPoints = new Point[5]; markerPoints[0] = new Point(point.X, point.Y); markerPoints[1] = new Point(point.X + size.Width / 2, point.Y + size.Width / 2); markerPoints[2] = new Point(point.X + size.Width / 2, point.Y + size.Height - 1); markerPoints[3] = new Point(point.X - size.Width / 2, point.Y + size.Height - 1); markerPoints[4] = new Point(point.X - size.Width / 2, point.Y + size.Width / 2); Brush b = new SolidBrush(borderColor); graphics.FillPolygon(b, markerPoints); b.Dispose(); Pen p = new Pen(borderColor); graphics.DrawPolygon(p, markerPoints); p.Dispose(); Rectangle rect = new Rectangle(point.X - size.Width / 2 + 1, point.Y + size.Width / 2 + 1, size.Width - 2, size.Height - size.Width / 2 - 2); Gradient.FillCheckerboardRectangle(graphics, rect, rect.Width / 3); b = new SolidBrush(color); graphics.FillRectangle(b, rect); b.Dispose(); } private void RefreshGradientList(bool refreshSelectedItemOnly) { if (refreshSelectedItemOnly) { if (gradientList.SelectedIndex >= 0) gradientList.Invalidate(gradientList.GetItemRectangle(gradientList.SelectedIndex)); } else { gradientList.Refresh(); } } private GradientColorEntry GetGradientColorEntryFromLocation(int x) { int tmpX; foreach (GradientColorEntry colorEntry in CurrentGradient.ColorEntries) { tmpX = gradientRectangle.Left + (int)(colorEntry.Location * gradientRectangle.Width); if (Math.Abs(x - tmpX) <= colorEntryMarkerSize.Width / 2) { return colorEntry; } } return null; } private double GetColorEntryLocationFromX(int x) { return Math.Min(1, Math.Max(0, (double)(x - gradientRectangle.Left) / (gradientRectangle.Width))); } private string CreateUniqueGradientName(string name) { int index = 1; string uniqueName = name; while (true) { bool unique = true; foreach (Gradient g in gradients) { if (uniqueName == g.Name) { unique = false; break; } } if (unique) return uniqueName; index++; uniqueName = name + " (" + index + ")"; } } #endregion #region Event handlers private void OK_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void Cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void GradientPanel_Resize(object sender, EventArgs e) { CreateGradientRectangle(); CreateGradientBackBuffer(); DrawGradient(); } private void GradientPanel_Paint(object sender, PaintEventArgs e) { CopyBackBufferToScreen(); } private void GradientPanel_MouseMove(object sender, MouseEventArgs e) { if (CurrentGradient == null) return; if (draggingGradientColorEntryNow) { // drag gradient color entry activeGradientColorEntry.Location = GetColorEntryLocationFromX(e.X); DrawGradient(); CopyBackBufferToScreen(); } else { // check if mouse pointer is over gradient entry marker GradientColorEntry previousActiveGradientColorEntry = activeGradientColorEntry; activeGradientColorEntry = GetGradientColorEntryFromLocation(e.X); if ((previousActiveGradientColorEntry != null && !previousActiveGradientColorEntry.Equals(activeGradientColorEntry)) || (activeGradientColorEntry != null && !activeGradientColorEntry.Equals(previousActiveGradientColorEntry))) { DrawColorEntryMarkers(); CopyBackBufferToScreen(); } } } private void GradientPanel_MouseDown(object sender, MouseEventArgs e) { if (CurrentGradient == null) return; activeGradientColorEntry = GetGradientColorEntryFromLocation(e.X); if (activeGradientColorEntry != null) { if (e.Button == MouseButtons.Left) { // drag draggingGradientColorEntryNow = true; } else if (e.Button == MouseButtons.Right) { // delete CurrentGradient.ColorEntries.Remove(activeGradientColorEntry); } } else { if (e.Button == MouseButtons.Left) { // add double location = GetColorEntryLocationFromX(e.X); Color color = CurrentGradient.GetColor(location); CurrentGradient.ColorEntries.Add(new GradientColorEntry(color, location)); } } DrawGradient(); CopyBackBufferToScreen(); } private void GradientPanel_MouseUp(object sender, MouseEventArgs e) { if (CurrentGradient == null) return; draggingGradientColorEntryNow = false; DrawGradient(); CopyBackBufferToScreen(); } private void GradientPanel_MouseLeave(object sender, EventArgs e) { if (CurrentGradient == null) return; activeGradientColorEntry = null; DrawColorEntryMarkers(); } private void GradientPanel_MouseDoubleClick(object sender, MouseEventArgs e) { if (CurrentGradient == null) return; activeGradientColorEntry = GetGradientColorEntryFromLocation(e.X); if (activeGradientColorEntry != null) { GradientColorEntry colorEntry = activeGradientColorEntry; using (var cc = new ColorChooser {Color = colorEntry.Color}) { if (cc.ShowDialog() == DialogResult.OK) { colorEntry.Color = cc.Color; DrawGradient(); CopyBackBufferToScreen(); } } } } private void GradientList_SelectedIndexChanged(object sender, EventArgs e) { if (CurrentGradient != null) gradientNameTextbox.Text = CurrentGradient.Name; DrawGradient(); gradientPanel.Refresh(); } private void GradientNameTextbox_TextChanged(object sender, EventArgs e) { CurrentGradient.Name = gradientNameTextbox.Text; RefreshGradientList(true); } private void AddGradient_Click(object sender, EventArgs e) { Gradient newGradient = new Gradient(); newGradient.Name = CreateUniqueGradientName(Strings.NewGradient); gradients.Add(newGradient); gradientList.DataSource = null; gradientList.DataSource = gradients; gradientList.SelectedIndex = gradients.Count - 1; deleteGradient.Enabled = (gradients.Count > 0); gradientNameTextbox.Focus(); } private void DeleteGradient_Click(object sender, EventArgs e) { int index = gradientList.SelectedIndex; gradients.RemoveAt(index); gradientList.DataSource = gradients; if (index > gradients.Count - 1) index = gradients.Count - 1; gradientList.DataSource = null; gradientList.DataSource = gradients; gradientList.SelectedIndex = index; deleteGradient.Enabled = (gradients.Count > 0); } private void GradientNameTextbox_Enter(object sender, EventArgs e) { gradientNameTextbox.SelectAll(); } private void GradientEditor_Activated(object sender, EventArgs e) { gradientNameTextbox.Focus(); } #endregion } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.da.resx000066400000000000000000000157511446222606700264570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd &Slet farveopsætning &Tilføj farveopsætning Tilgængelige farveopsætninger Klik hvorsomhelst i farveområdet for at tilføje en farvemarkør. Træk i farvemarkøren for at flytte den. Dobbeltklik på en farvemarkør for at ændre dens farve. Højreklik på en farvemarkør for at slette den. 36, 13 &Navn: Egenskaber for farveopsætning Rediger farveopsætning quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.de.resx000066400000000000000000000163541446222606700264630ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen Verfügbare Verläufe Verlauf &löschen Verlauf &hinzufügen Verlaufeigenschaften 6, 189 297, 79 Klicke in den Farbbereich um eine Markierung zu setzen. Ziehe eine Markierung um dessen Position zu verändern. Klicke doppelt auf eine Markierung um dessen Farbe zu ändern. Mit Rechtsklick kannst du eine Markierung löschen. Inherit Verlaufeditor quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.fi.resx000066400000000000000000000157401446222606700264670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta Mahdolliset liukuvärit &Poista likuväri &Lisää liukuväri Liukuvärin ominaisuudet Klikkaa missä tahansa liukuvärjätyllä alueella lisätäksesi värimerkin. Tartu värimerkkiin siirtääksesi sen eri paikkaan. Kaksoisklikkaa värimerkkiä muuttaaksesi sen väriä. Klikkaa hiiren oikealla napilla poistaaksesi sen. 30, 13 &Nimi: Liukuvärieditori quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.fr.resx000066400000000000000000000153431446222606700264770ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Nom : Annuler Editer le dégradé Effacer &dégradé Cliquer n'importe où dans la zone dégradée pour ajouter un marqueur de couleur. Faire glisser le marqueur pour le déplacer. Double cliquer sur un marqueur pour changer sa couleur. Clic droit sur un marqueur pour l'effacer. &Ajouter un dégradé Propriétés du dégradé Dégradés disponibles quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.it.resx000066400000000000000000000210651446222606700265020ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 351, 307 432, 307 Cancella 6, 257 &Elimina sfumatura 6, 228 &Aggiungi sfumatura 182, 203 194, 283 Sfumature disponibili 6, 197 289, 80 Fare clic su un punto qualsiasi della sfumatura per aggiungere un indicatore di colore. Trascinare l'indicatore di colore per spostare la sua posizione. Fare doppio clic su un indicatore di colore per cambiare il colore. Destro del mouse su un marcatore per eliminarlo. 289, 20 &Nome: 289, 68 301, 283 Proprietà sfumatura 525, 342 NoControl Modifica la sfumatura quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.lt.resx000066400000000000000000000165661446222606700265170ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Atšaukti Galimi gradientai &Ištrinti gradientą &Pridėti gradientą Gradiento savybės 6, 191 297, 77 Norėdami pridėti spalvos žymeklį, paspauskite bet kur ant gradiento. Norėdami judinti spalvos žymeklį, paspauskite ir traukite jį į norimą pusę. Norėdami pakeisti spalvos žymeklio spalvą, paspauskite ant jo du kartus. Norėdami ištrinti žymeklį paspauskite dešinį pelės klavišą. 118, 13 Gradiento pavadi&nimas: Gradiento redagavimas quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.no.resx000066400000000000000000000155041446222606700265030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Redigere fargeoppsett &Slett fargeoppsett &Navn: OK Klikk hvor som helst på fargeområdet for å legge til en fargemarkør. Dra i markøren for å flytte den. Dobbeltklikk på en fargemarkør (under feltet) for å endre dens farge. Høyreklikk på en fargemarkør for å fjerne den. &Legg til et fargeoppsett Egenskaper for fargeoppsett Tilgjengelige fargeoppsett Avbryt quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.resx000066400000000000000000000503561446222606700260740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 gradientPanel False 194, 274 182, 23 309, 274 1 Bottom, Right 20 75, 23 3 75, 23 0 0 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 GradientEditor OK NoControl 0 Top, Bottom, Left Top, Left, Right 212, 12 ok &Delete gradient 2 $this gradientProperties 6, 13 gradientNameTextbox Bottom, Left, Right &Add gradient CenterParent gradientProperties 440, 298 6, 32 1 NoControl 1 38, 13 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 uiInformation Top, Bottom, Left, Right QuickRoute.Controls.GradientListBox, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null 2 Gradient editor System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 3 NoControl 0 Bottom, Left, Right 6, 75 deleteGradient availableGradients cancel NoControl System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 NoControl Top, Bottom, Left, Right 297, 63 6, 205 6, 19 availableGradients Top, Left, Right gradientProperties 182, 23 2 2 12, 12 6, 219 3, 16 541, 277 gradientProperties gradientList gradientNameLabel Bottom, Left, Right Cancel 3 1 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 availableGradients True 297, 20 addGradient System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 359, 298 Gradient properties System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 2 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Available gradients 182, 194 gradientProperties 297, 68 1 6, 248 2 Click anywhere in the gradient area to add a color marker. Drag a color marker to move its position. Double click a color marker to change its color. Right-click a marker to delete it. NoControl $this availableGradients System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Name: 533, 333 4, 4, 4, 4 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 $this Bottom, Right 1 $this True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.ru.resx000066400000000000000000000177771446222606700265330ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 389, 298 470, 298 Отмена Доступные градиенты &Удалить градиент &Создать градиент 339, 274 Свойства градиента 327, 63 Кликните в области градиента чтобы добавить цветовой маркер. Перетаскивая маркер можно изменять его позицию. Двойной клик меняет цвет маркера. Чтобы удалить маркет кликните по нему правой кнопкой мыши. 327, 20 60, 13 &Название: 327, 68 563, 333 Редактор градиента quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/GradientEditor.sv.resx000066400000000000000000000153501446222606700265160ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Tillgängliga gradienter &Ta bort gradient &Lägg till gradient Klicka någonstans i gradienten för att lägga till en färgmarkör. Klicka och dra en färgmarkör för att ändra dess position. Dubbelklicka på en färgmarkör för att ändra dess färg. Högerklicka på en färgmarkör för att ta bort den. &Namn: Gradientegenskaper Gradienteditor quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ImageManipulator.Designer.cs000066400000000000000000000171531446222606700276070ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class ImageManipulator { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImageManipulator)); this.ToolStrip = new System.Windows.Forms.ToolStrip(); this.RotateCounterclockwise = new System.Windows.Forms.ToolStripButton(); this.RotateClockwise = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.SizeLabel = new System.Windows.Forms.ToolStripLabel(); this.ScaleTextbox = new System.Windows.Forms.ToolStripTextBox(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.SizeInPixelsLabel = new System.Windows.Forms.ToolStripLabel(); this.ScrollY = new System.Windows.Forms.VScrollBar(); this.ScrollX = new System.Windows.Forms.HScrollBar(); this.Cancel = new System.Windows.Forms.Button(); this.OK = new System.Windows.Forms.Button(); this.ToolStrip.SuspendLayout(); this.SuspendLayout(); // // ToolStrip // resources.ApplyResources(this.ToolStrip, "ToolStrip"); this.ToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.ToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.RotateCounterclockwise, this.RotateClockwise, this.toolStripSeparator1, this.SizeLabel, this.ScaleTextbox, this.toolStripSeparator2, this.SizeInPixelsLabel}); this.ToolStrip.Name = "ToolStrip"; // // RotateCounterclockwise // resources.ApplyResources(this.RotateCounterclockwise, "RotateCounterclockwise"); this.RotateCounterclockwise.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this.RotateCounterclockwise.Name = "RotateCounterclockwise"; this.RotateCounterclockwise.Click += new System.EventHandler(this.RotateCounterclockwise_Click); // // RotateClockwise // resources.ApplyResources(this.RotateClockwise, "RotateClockwise"); this.RotateClockwise.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this.RotateClockwise.Name = "RotateClockwise"; this.RotateClockwise.Click += new System.EventHandler(this.RotateClockwise_Click); // // toolStripSeparator1 // resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); this.toolStripSeparator1.Name = "toolStripSeparator1"; // // SizeLabel // resources.ApplyResources(this.SizeLabel, "SizeLabel"); this.SizeLabel.Name = "SizeLabel"; // // ScaleTextbox // resources.ApplyResources(this.ScaleTextbox, "ScaleTextbox"); this.ScaleTextbox.Name = "ScaleTextbox"; this.ScaleTextbox.Enter += new System.EventHandler(this.SizeInPercent_Enter); this.ScaleTextbox.Leave += new System.EventHandler(this.SizeInPercent_Leave); // // toolStripSeparator2 // resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); this.toolStripSeparator2.Name = "toolStripSeparator2"; // // SizeInPixelsLabel // resources.ApplyResources(this.SizeInPixelsLabel, "SizeInPixelsLabel"); this.SizeInPixelsLabel.Name = "SizeInPixelsLabel"; // // ScrollY // resources.ApplyResources(this.ScrollY, "ScrollY"); this.ScrollY.Cursor = System.Windows.Forms.Cursors.Default; this.ScrollY.LargeChange = 100; this.ScrollY.Name = "ScrollY"; this.ScrollY.SmallChange = 32; this.ScrollY.ValueChanged += new System.EventHandler(this.ScrollY_ValueChanged); // // ScrollX // resources.ApplyResources(this.ScrollX, "ScrollX"); this.ScrollX.Cursor = System.Windows.Forms.Cursors.Default; this.ScrollX.LargeChange = 100; this.ScrollX.Name = "ScrollX"; this.ScrollX.SmallChange = 32; this.ScrollX.ValueChanged += new System.EventHandler(this.ScrollX_ValueChanged); // // Cancel // resources.ApplyResources(this.Cancel, "Cancel"); this.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.Cancel.Name = "Cancel"; this.Cancel.UseVisualStyleBackColor = true; this.Cancel.Click += new System.EventHandler(this.Cancel_Click); // // OK // resources.ApplyResources(this.OK, "OK"); this.OK.Name = "OK"; this.OK.UseVisualStyleBackColor = true; this.OK.Click += new System.EventHandler(this.OK_Click); // // ImageManipulator // this.AcceptButton = this.OK; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.Cancel; this.Controls.Add(this.OK); this.Controls.Add(this.Cancel); this.Controls.Add(this.ToolStrip); this.Controls.Add(this.ScrollY); this.Controls.Add(this.ScrollX); this.Cursor = System.Windows.Forms.Cursors.Cross; this.KeyPreview = true; this.Name = "ImageManipulator"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.ImageManipulator_Load); this.Paint += new System.Windows.Forms.PaintEventHandler(this.ImageManipulator_Paint); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ImageManipulator_MouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ImageManipulator_MouseMove); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ImageManipulator_MouseUp); this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.ImageManipulator_MouseWheel); this.Resize += new System.EventHandler(this.ImageManipulator_Resize); this.ToolStrip.ResumeLayout(false); this.ToolStrip.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ToolStrip ToolStrip; private System.Windows.Forms.VScrollBar ScrollY; private System.Windows.Forms.HScrollBar ScrollX; private System.Windows.Forms.ToolStripButton RotateCounterclockwise; private System.Windows.Forms.ToolStripButton RotateClockwise; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripLabel SizeLabel; private System.Windows.Forms.ToolStripTextBox ScaleTextbox; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripLabel SizeInPixelsLabel; private System.Windows.Forms.Button Cancel; private System.Windows.Forms.Button OK; } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ImageManipulator.cs000066400000000000000000000570451446222606700260540ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Text; using System.Windows.Forms; using QuickRoute.Resources; namespace QuickRoute.UI.Forms { public partial class ImageManipulator : Form { public Image OriginalImage { get; private set; } public Image TransformedImage { get; private set; } private bool preventDraw = true; private double scale; private int rotation; // 90 degree steps // corners are the pixels just outside the cropping, in image coordinates private Point cropRectangleCorner1; private Point cropRectangleCorner2; private const int borderWidth = 1; private const int closeThreshold = 12; private Graphics backBufferGraphics; private Image backBufferImage; private Graphics canvasGraphics; // inclusive borders private int canvasWidth; private int canvasHeight; private int canvasX; private int canvasY; private MouseDownMode? mouseDownMode = null; private List croppingBordersToChange; private Point moveCroppingOrigo; private Point moveCroppingCorner1; private Point moveCroppingCorner2; private Point scrollImageOrigo; private Point scrollImageOriginalScrollValue; private readonly SolidBrush cropBrush; private readonly Pen cropPen; private readonly Brush borderBrush; public ImageManipulator(Image image) : this(image, 1, 0, null) { } public ImageManipulator(Image image, double scale, double rotationInDegrees, Rectangle? cropRectangle) { borderBrush = new SolidBrush(Color.Black); cropBrush = new SolidBrush(Color.FromArgb(128, Color.Black)); cropPen = new Pen(Color.Red); OriginalImage = image; this.scale = scale; rotation = (int)Math.Round(rotationInDegrees/90); TransformImage(); if(cropRectangle != null) { cropRectangleCorner1 = new Point(cropRectangle.Value.Left - 1, cropRectangle.Value.Top - 1); cropRectangleCorner2 = new Point(cropRectangle.Value.Right, cropRectangle.Value.Bottom); } else { CroppingActive = false; } InitializeComponent(); FormatScaleTextboxValue(); UpdateSizeInPixelsLabel(); } ~ImageManipulator() { borderBrush.Dispose(); cropBrush.Dispose(); cropPen.Dispose(); } #region Event handlers private void ImageManipulator_Load(object sender, EventArgs e) { preventDraw = false; CreateCanvas(); Draw(); } private void ImageManipulator_Resize(object sender, EventArgs e) { CreateCanvas(); } private void ImageManipulator_Paint(object sender, PaintEventArgs e) { Draw(); } private void ImageManipulator_MouseDown(object sender, MouseEventArgs e) { var imageLocation = ToImageLocation(e.Location); if (e.Button == MouseButtons.Left) { var closeBorders = GetCloseCroppingBorders(imageLocation); if (closeBorders.Count > 0) { mouseDownMode = MouseDownMode.ResizeCropping; croppingBordersToChange = closeBorders; } else if(IsInsideCroppingRectangle(e.Location)) { mouseDownMode = MouseDownMode.MoveCropping; moveCroppingOrigo = imageLocation; moveCroppingCorner1 = cropRectangleCorner1; moveCroppingCorner2 = cropRectangleCorner2; } else { mouseDownMode = MouseDownMode.CreateCropping; cropRectangleCorner1 = imageLocation; cropRectangleCorner2 = imageLocation; } Cursor = GetCursorFromMouseLocation(e.Location, closeBorders); UpdateSizeInPixelsLabel(); } else if (e.Button == MouseButtons.Right) { mouseDownMode = MouseDownMode.ScrollImage; scrollImageOrigo = e.Location; scrollImageOriginalScrollValue = new Point(ScrollX.Value, ScrollY.Value); Cursor = Cursors.Hand; } } private void ImageManipulator_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { UpdateCornerLocation(e.Location); NormalizeCropRectangle(); if (cropRectangleCorner1.X >= cropRectangleCorner2.X - 1 || cropRectangleCorner1.Y >= cropRectangleCorner2.Y - 1) CroppingActive = false; UpdateSizeInPixelsLabel(); } else if(e.Button == MouseButtons.Right) { var imageLocation = ToImageLocation(e.Location); var closeBorders = GetCloseCroppingBorders(imageLocation); Cursor = GetCursorFromMouseLocation(e.Location, closeBorders); } mouseDownMode = null; Draw(); } private void ImageManipulator_MouseMove(object sender, MouseEventArgs e) { if (mouseDownMode != null) { switch(mouseDownMode.Value) { case MouseDownMode.CreateCropping: case MouseDownMode.MoveCropping: case MouseDownMode.ResizeCropping: UpdateCornerLocation(e.Location); if (!IsInsideCanvas(e.Location)) { // scroll if outside canvas var x = ScrollX.Value; var y = ScrollY.Value; if (e.X < canvasX) x -= ScrollX.SmallChange; if (e.Y < canvasY) y -= ScrollY.SmallChange; if (e.X > canvasX + canvasWidth) x += ScrollX.SmallChange; if (e.Y > canvasY + canvasHeight) y += ScrollY.SmallChange; ScrollX.Value = Math.Min(ScrollX.Maximum - ScrollX.LargeChange, Math.Max(ScrollX.Minimum, x)); ScrollY.Value = Math.Min(ScrollY.Maximum - ScrollY.LargeChange, Math.Max(ScrollY.Minimum, y)); } UpdateSizeInPixelsLabel(); break; case MouseDownMode.ScrollImage: preventDraw = true; var scrollX = scrollImageOriginalScrollValue.X + scrollImageOrigo.X - e.Location.X; var scrollY = scrollImageOriginalScrollValue.Y + scrollImageOrigo.Y - e.Location.Y; ScrollX.Value = Math.Min(Math.Max(scrollX, 0), ScrollX.Maximum - ScrollX.LargeChange); ScrollY.Value = Math.Min(Math.Max(scrollY, 0), ScrollY.Maximum - ScrollY.LargeChange); preventDraw = false; break; } Draw(); } else { var closeBorders = GetCloseCroppingBorders(ToImageLocation(e.Location)); Cursor = GetCursorFromMouseLocation(e.Location, closeBorders); } } private void ImageManipulator_MouseWheel(object sender, MouseEventArgs e) { if(IsInsideCanvas(e.Location)) { var units = e.Delta / 120; if ((ModifierKeys & Keys.Control) == Keys.Control) { // rescale ChangeScale(scale + units * 0.1); return; } if (ScrollY.Enabled && (ModifierKeys & Keys.Shift) != Keys.Shift) { ScrollY.Value = Math.Max(ScrollY.Minimum, Math.Min(ScrollY.Maximum - ScrollY.LargeChange, ScrollY.Value - units * ScrollY.SmallChange)); } else if(ScrollX.Enabled) { ScrollX.Value = Math.Max(ScrollX.Minimum, Math.Min(ScrollX.Maximum - ScrollX.LargeChange, ScrollX.Value - units * ScrollX.SmallChange)); } } } private void ScrollY_ValueChanged(object sender, EventArgs e) { Draw(); } private void ScrollX_ValueChanged(object sender, EventArgs e) { Draw(); } private void SizeInPercent_Leave(object sender, EventArgs e) { var text = ScaleTextbox.Text.Replace("%", ""); double percent; if (double.TryParse(text, out percent)) { ChangeScale(percent / 100); } FormatScaleTextboxValue(); } private void SizeInPercent_Enter(object sender, EventArgs e) { ScaleTextbox.SelectAll(); } private void RotateCounterclockwise_Click(object sender, EventArgs e) { ChangeRotation((rotation + 3) % 4); // to keep between 0 and 3 TransformImage(); CreateCanvas(); Draw(); } private void RotateClockwise_Click(object sender, EventArgs e) { ChangeRotation((rotation + 1) % 4); // to keep between 0 and 3 TransformImage(); CreateCanvas(); Draw(); } private void OK_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void Cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } #endregion #region Public properties public Image ManipulatedImage { get { var croppingRectangle = ImageCropRectangle ?? new Rectangle(0, 0, TransformedImage.Width, TransformedImage.Height); var image = new Bitmap(croppingRectangle.Width, croppingRectangle.Height); using(var g = Graphics.FromImage(image)) { g.DrawImage(TransformedImage, 0, 0, croppingRectangle, GraphicsUnit.Pixel); } return image; } } public double ImageRotationInDegrees { get { return 90 * rotation; } } public double ImageScale { get { return scale; } } public Rectangle? ImageCropRectangle { get { if(!CroppingActive) return null; var c1 = cropRectangleCorner1; var c2 = cropRectangleCorner2; c1.Offset(new Point(1, 1)); //c2.Offset(new Point(-1, -1)); return GetRectangleFromCorners(c1, c2); } } #endregion private void TransformImage() { // create the working copy of the image TransformedImage = new Bitmap((int)(scale * OriginalImage.Width), (int)(scale * OriginalImage.Height)); // resize... using (var g = Graphics.FromImage(TransformedImage)) { var destRect = new Rectangle(0, 0, TransformedImage.Width, TransformedImage.Height); var srcRect = new Rectangle(0, 0, OriginalImage.Width, OriginalImage.Height); g.DrawImage(OriginalImage, destRect, srcRect, GraphicsUnit.Pixel); } // ...and rotate switch (rotation % 4) { case 1: TransformedImage.RotateFlip(RotateFlipType.Rotate90FlipNone); break; case 2: TransformedImage.RotateFlip(RotateFlipType.Rotate180FlipNone); break; case 3: TransformedImage.RotateFlip(RotateFlipType.Rotate270FlipNone); break; } } private void CreateCanvas() { canvasX = 0; canvasY = ToolStrip.Bottom + 1; canvasWidth = Math.Min(Math.Max(ScrollY.Left, 0), TransformedImage.Width + 2 * borderWidth); canvasHeight = Math.Min(Math.Max(ScrollX.Top - ToolStrip.Bottom - 1, 0), TransformedImage.Height + 2 * borderWidth); // create back buffer if (backBufferImage != null) backBufferImage.Dispose(); backBufferImage = new Bitmap(Math.Min(TransformedImage.Width + 2 * borderWidth, canvasWidth), Math.Min(TransformedImage.Height + 2 * borderWidth, canvasHeight)); if (backBufferGraphics != null) backBufferGraphics.Dispose(); backBufferGraphics = Graphics.FromImage(backBufferImage); if (canvasGraphics != null) canvasGraphics.Dispose(); canvasGraphics = CreateGraphics(); canvasGraphics.Clear(BackColor); // setup scrollbars ScrollX.Enabled = canvasWidth - 2 * borderWidth < TransformedImage.Width; ScrollY.Enabled = canvasHeight - 2 * borderWidth < TransformedImage.Height; ScrollX.Maximum = TransformedImage.Width; ScrollY.Maximum = TransformedImage.Height; ScrollX.LargeChange = canvasWidth - 2 * borderWidth; ScrollY.LargeChange = canvasHeight - 2 * borderWidth; preventDraw = true; if (ScrollX.Value + ScrollX.LargeChange > ScrollX.Maximum) ScrollX.Value = ScrollX.Maximum - ScrollX.LargeChange; if (ScrollY.Value + ScrollY.LargeChange > ScrollY.Maximum) ScrollY.Value = ScrollY.Maximum - ScrollY.LargeChange; preventDraw = false; ScrollX.SmallChange = 32; ScrollY.SmallChange = 32; if (!ScrollX.Enabled) ScrollX.Value = 0; if (!ScrollY.Enabled) ScrollY.Value = 0; } private void Draw() { if (preventDraw) return; // draw image var destRect = new Rectangle(borderWidth, borderWidth, Math.Min(TransformedImage.Width, canvasWidth - 2 * borderWidth), Math.Min(TransformedImage.Height, canvasHeight - 2 * borderWidth)); var srcRect = new Rectangle(ScrollX.Value, ScrollY.Value, destRect.Width, destRect.Height); backBufferGraphics.DrawImage(TransformedImage, destRect, srcRect, GraphicsUnit.Pixel); // draw border backBufferGraphics.FillRectangle(borderBrush, 0, 0, canvasWidth, borderWidth); backBufferGraphics.FillRectangle(borderBrush, 0, 0, borderWidth, canvasHeight); backBufferGraphics.FillRectangle(borderBrush, canvasWidth - borderWidth, 0, borderWidth, canvasHeight); backBufferGraphics.FillRectangle(borderBrush, 0, canvasHeight - borderWidth, canvasWidth, borderWidth); // draw cropping if (CroppingActive) { var r = GetRectangleFromCorners(ToCanvasLocation(cropRectangleCorner1), ToCanvasLocation(cropRectangleCorner2)); backBufferGraphics.DrawRectangle(cropPen, r); backBufferGraphics.FillRectangle(cropBrush, borderWidth, borderWidth, canvasWidth - 2 * borderWidth, r.Top - borderWidth); backBufferGraphics.FillRectangle(cropBrush, borderWidth, r.Bottom + 1, canvasWidth - 2 * borderWidth, canvasHeight - r.Bottom - borderWidth); backBufferGraphics.FillRectangle(cropBrush, borderWidth, r.Top, r.Left - borderWidth, r.Height + 1); backBufferGraphics.FillRectangle(cropBrush, r.Right + 1, r.Top, canvasWidth - borderWidth - r.Right - 1, r.Height + 1); } // transfer back buffer to front canvasGraphics.DrawImageUnscaled(backBufferImage, canvasX, canvasY); } private void ChangeScale(double newScale) { newScale = Math.Min(1, Math.Max(0.1, newScale)); var oldScale = scale; var factor = newScale / oldScale; scale = newScale; FormatScaleTextboxValue(); if (factor == 1) return; var outsideAtLeft = cropRectangleCorner1.X == -1; var outsideAtRight = cropRectangleCorner2.X == TransformedImage.Width; var outsideAtTop = cropRectangleCorner1.Y == -1; var outsideAtBottom = cropRectangleCorner2.Y == TransformedImage.Height; cropRectangleCorner1 = new Point((int)(factor * cropRectangleCorner1.X), (int)(factor * cropRectangleCorner1.Y)); cropRectangleCorner2 = new Point((int)(factor * cropRectangleCorner2.X), (int)(factor * cropRectangleCorner2.Y)); if (outsideAtLeft) cropRectangleCorner1.X = -1; if (outsideAtRight) cropRectangleCorner2.X = (int)(newScale * OriginalImage.Width); if (outsideAtTop) cropRectangleCorner1.Y = -1; if (outsideAtBottom) cropRectangleCorner2.Y = (int)(newScale * OriginalImage.Height); UpdateSizeInPixelsLabel(); TransformImage(); CreateCanvas(); Draw(); } private void ChangeRotation(int newRotation) { var oldRotation = rotation; rotation = newRotation; var rotationChange = (newRotation - oldRotation + 4) % 4; var c1 = cropRectangleCorner1; var c2 = cropRectangleCorner2; var w = TransformedImage.Width - 1; var h = TransformedImage.Height - 1; switch(rotationChange) { case 1: cropRectangleCorner1 = new Point(h - c1.Y, c1.X); cropRectangleCorner2 = new Point(h - c2.Y, c2.X); break; case 2: cropRectangleCorner1 = new Point(w - c1.X, h - c1.Y); cropRectangleCorner2 = new Point(w - c2.X, h - c2.Y); break; case 3: cropRectangleCorner1 = new Point(c1.Y, w - c1.X); cropRectangleCorner2 = new Point(c2.Y, w - c2.X); break; } NormalizeCropRectangle(); UpdateSizeInPixelsLabel(); TransformImage(); CreateCanvas(); Draw(); } private void UpdateCornerLocation(Point location) { if (mouseDownMode == null) return; // should never happen var imageLocation = ToImageLocation(location); switch (mouseDownMode.Value) { case MouseDownMode.CreateCropping: cropRectangleCorner2 = imageLocation; break; case MouseDownMode.ResizeCropping: if (croppingBordersToChange.Contains(CroppingBorder.X1)) cropRectangleCorner1.X = imageLocation.X; if (croppingBordersToChange.Contains(CroppingBorder.X2)) cropRectangleCorner2.X = imageLocation.X; if (croppingBordersToChange.Contains(CroppingBorder.Y1)) cropRectangleCorner1.Y = imageLocation.Y; if (croppingBordersToChange.Contains(CroppingBorder.Y2)) cropRectangleCorner2.Y = imageLocation.Y; break; case MouseDownMode.MoveCropping: var diff = new Point(imageLocation.X - moveCroppingOrigo.X, imageLocation.Y - moveCroppingOrigo.Y); if (moveCroppingCorner1.X + diff.X < -1) diff.X = -moveCroppingCorner1.X - 1; if (moveCroppingCorner2.X + diff.X > TransformedImage.Width) diff.X = TransformedImage.Width - moveCroppingCorner2.X; if (moveCroppingCorner1.Y + diff.Y < -1) diff.Y = -moveCroppingCorner1.Y - 1; if (moveCroppingCorner2.Y + diff.Y > TransformedImage.Height) diff.Y = TransformedImage.Height - moveCroppingCorner2.Y; cropRectangleCorner1 = moveCroppingCorner1; cropRectangleCorner1.Offset(diff); cropRectangleCorner2 = moveCroppingCorner2; cropRectangleCorner2.Offset(diff); break; } } private Cursor GetCursorFromMouseLocation(Point location, List closeBorders) { if (!IsInsideCanvas(location)) { // outside canvas return Cursors.Default; } // resize cursor? if (closeBorders.Count > 0) { if ((closeBorders.Contains(CroppingBorder.X1) && closeBorders.Contains(CroppingBorder.Y1)) || (closeBorders.Contains(CroppingBorder.X2) && closeBorders.Contains(CroppingBorder.Y2))) return Cursors.SizeNWSE; if ((closeBorders.Contains(CroppingBorder.X1) && closeBorders.Contains(CroppingBorder.Y2)) || (closeBorders.Contains(CroppingBorder.X2) && closeBorders.Contains(CroppingBorder.Y1))) return Cursors.SizeNESW; if (closeBorders.Contains(CroppingBorder.X1) || closeBorders.Contains(CroppingBorder.X2)) return Cursors.SizeWE; return Cursors.SizeNS; } if(IsInsideCroppingRectangle(location)) { // inside the cropping rectangle return Cursors.SizeAll; } // not close to any border return Cursors.Cross; } private bool IsInsideCanvas(Point location) { return !(location.X < canvasX || location.Y < canvasY || location.X > canvasX + canvasWidth || location.Y > canvasY + canvasHeight); } private bool IsInsideCroppingRectangle(Point location) { if (!CroppingActive) return false; var imageLocation = ToImageLocation(location); return !(imageLocation.X <= cropRectangleCorner1.X || imageLocation.Y <= cropRectangleCorner1.Y || imageLocation.X >= cropRectangleCorner2.X || imageLocation.Y >= cropRectangleCorner2.Y); } private bool CroppingActive { get { return !(cropRectangleCorner1.X == -1 && cropRectangleCorner1.Y == -1 && cropRectangleCorner2.X == TransformedImage.Width && cropRectangleCorner2.Y == TransformedImage.Height); } set { if (!value) { cropRectangleCorner1 = new Point(-1, -1); cropRectangleCorner2 = new Point(TransformedImage.Width, TransformedImage.Height); } } } private int CropWidth { get { return Math.Max(0, Math.Abs(cropRectangleCorner2.X - cropRectangleCorner1.X) - 1); } } private int CropHeight { get { return Math.Max(0, Math.Abs(cropRectangleCorner2.Y - cropRectangleCorner1.Y) - 1); } } private List GetCloseCroppingBorders(Point imageLocation) { var result = new List(); var x1Distance = Math.Abs(imageLocation.X - cropRectangleCorner1.X); var x2Distance = Math.Abs(imageLocation.X - cropRectangleCorner2.X); var y1Distance = Math.Abs(imageLocation.Y - cropRectangleCorner1.Y); var y2Distance = Math.Abs(imageLocation.Y - cropRectangleCorner2.Y); if (!(cropRectangleCorner1.Y - imageLocation.Y > closeThreshold || imageLocation.Y - cropRectangleCorner2.Y > closeThreshold)) { if (x1Distance < closeThreshold && x1Distance <= x2Distance) { result.Add(CroppingBorder.X1); } else if (x2Distance < closeThreshold) { result.Add(CroppingBorder.X2); } } if (!(cropRectangleCorner1.X - imageLocation.X > closeThreshold || imageLocation.X - cropRectangleCorner2.X > closeThreshold)) { if (y1Distance < closeThreshold && y1Distance <= y2Distance) { result.Add(CroppingBorder.Y1); } else if (y2Distance < closeThreshold) { result.Add(CroppingBorder.Y2); } } return result; } private static Rectangle GetRectangleFromCorners(Point c1, Point c2) { var topLeft = new Point(Math.Min(c1.X, c2.X), Math.Min(c1.Y, c2.Y)); var bottomRight = new Point(Math.Max(c1.X, c2.X), Math.Max(c1.Y, c2.Y)); return new Rectangle(topLeft.X, topLeft.Y, bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y); } private Point ToImageLocation(Point formLocation) { return new Point(Math.Min(Math.Max(-1, formLocation.X - canvasX - borderWidth + ScrollX.Value), TransformedImage.Width), Math.Min(Math.Max(-1, formLocation.Y - canvasY - borderWidth + ScrollY.Value), TransformedImage.Height)); } private Point ToCanvasLocation(Point imageLocation) { return new Point(imageLocation.X - ScrollX.Value + borderWidth, imageLocation.Y - ScrollY.Value + borderWidth); } private void NormalizeCropRectangle() { var rect = GetRectangleFromCorners(cropRectangleCorner1, cropRectangleCorner2); cropRectangleCorner1 = new Point(rect.Left, rect.Top); cropRectangleCorner2 = new Point(rect.Right, rect.Bottom); } private void FormatScaleTextboxValue() { ScaleTextbox.Text = string.Format("{0:p0}", scale); } private void UpdateSizeInPixelsLabel() { SizeInPixelsLabel.Text = string.Format("{0} x {1} {2}", CropWidth, CropHeight, Strings.Pixels); Application.DoEvents(); } #region Enums private enum CroppingBorder { X1, X2, Y1, Y2 } private enum MouseDownMode { CreateCropping, ResizeCropping, MoveCropping, ScrollImage } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ImageManipulator.da.resx000066400000000000000000000137371446222606700270130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd &Størrelse: Forbehandling af billede quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ImageManipulator.resx000066400000000000000000000426751446222606700264330ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0 $this System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStrip1 40, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAESSURBVDhPY2CgMjAEmjcNiC8A8RsgfgDEu4E4E4i5CNlV BFTwHYj/48BngeLauAypwKLpLxaxu0AxGXRDTIECf5AU3wOyM4BYD4jtoV5Cll+PbsAyJM3XsNkAFPMH 4s9I6kBhAsINIMNuIUn4oZluAORPAOKlQPwJi5c2gtS/gko8BtLcaAaIA/lHsWgEBfQ/ILYCqQdFF0jg NhCzoBkA4vIA8SEshhwHijGCFIBCFmTAbyA2wWIASEgEiE+gGZIAU7sBSWIXkM2EwxAxoPgFqNonQJoP ps4dzeStQL4lDoMUgOKPgHg2uiWTsPgRlBawAU2gIAijAGYgbwGaIZ04DMArHAGU3Q/EoKhNJMcAkvUA ABFCZDFzoHHbAAAAAElFTkSuQmCC 3 System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 595 ImageManipulator 1 54, 22 ToolStrip Cancel 2 Top, Bottom, Right RotateCounterclockwise &Size: System.Windows.Forms.VScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK 917, 25 ScrollX $this 4 System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this Rotate 90° counterclockwise toolStripButton1 System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 SizeLabel 100 x 100 OK System.Windows.Forms.HScrollBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ScrollY 3 934, 25 30, 22 0, 0 System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Left, Right 6, 25 Magenta 847, 627 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 23, 22 Bottom, Right 75, 23 toolStripButton1 toolStripSeparator1 2 Bottom, Right 1 4 917, 17 $this Rotate 90° clockwise $this Preprocess map image 766, 627 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 23, 22 6, 25 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 6, 13 System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ScaleTextbox Magenta 75, 23 RotateClockwise 17, 570 Cancel System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 SizeInPixelsLabel toolStripSeparator2 934, 662 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAERSURBVDhPY2CgEeACmpsJxLuB+AEQvwHiC0A8DYgNCdmp DVRwFoj/48DfgeJFuAyRAUrcxaLxLxaxCmyGrEdS+AfqZHsgrQfEGUB8D03eFGRIA9S/ID/DnP0ZyPbH YgPIhdeQ1C0DqdmIxXmfgGJLgXgCEBugGeSHpP4WSM4KiP9hMQTkmqNALI5mADeQ/xiq/hVIjhGIj2Mx 4BBQjAeLN1iAYreh6kHRCwYJaAacAPJFsGgGCZkA8W+oelCMgQEfED+BCl4A0mI4NDMBxXchWbYBWd1s IOcRECtg0QzSaAnEW9Fc6o6sVhPIAWFsAJQG0FPmJBxqsQp3ohmwAMhnJsWARKBiUJTtB+IIUjQSVAsA bIVkMcKXGigAAAAASUVORK5CYII= 0 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 17, 17 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/ImageManipulator.sv.resx000066400000000000000000000176521446222606700270570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPY2CgEeACmpsJxLuB+AEQvwHiC0A8DYgNCdmp DVRwFoj/48DfgeJFuAyRAUrcxaLxLxaxCmyGrEdS+AfqZHsgrQfEGUB8D03eFGRIA9S/ID/DnP0ZyPbH YgPIhdeQ1C0DqdmIxXmfgGJLgXgCEBugGeSHpP4WSM4KiP9hMQTkmqNALI5mADeQ/xiq/hVIjhGIj2Mx 4BBQjAeLN1iAYreh6kHRCwYJaAacAPJFsGgGCZkA8W+oelCMgQEfED+BCl4A0mI4NDMBxXchWbYBWd1s IOcRECtg0QzSaAnEW9Fc6o6sVhPIAWFsAJQG0FPmJBxqsQp3ohmwAMhnJsWARKBiUJTtB+IIUjQSVAsA bIVkMcKXGigAAAAASUVORK5CYII= Rotera 90° moturs iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAESSURBVDhPY2CgMjAEmjcNiC8A8RsgfgDEu4E4E4i5CNlV BFTwHYj/48BngeLauAypwKLpLxaxu0AxGXRDTIECf5AU3wOyM4BYD4jtoV5Cll+PbsAyJM3XsNkAFPMH 4s9I6kBhAsINIMNuIUn4oZluAORPAOKlQPwJi5c2gtS/gko8BtLcaAaIA/lHsWgEBfQ/ILYCqQdFF0jg NhCzoBkA4vIA8SEshhwHijGCFIBCFmTAbyA2wWIASEgEiE+gGZIAU7sBSWIXkM2EwxAxoPgFqNonQJoP ps4dzeStQL4lDoMUgOKPgHg2uiWTsPgRlBawAU2gIAijAGYgbwGaIZ04DMArHAGU3Q/EoKhNJMcAkvUA ABFCZDFzoHHbAAAAAElFTkSuQmCC Rotera 90° medurs 46, 22 &Storlek: Avbryt Förbehandla bild quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.Designer.cs000066400000000000000000000303231446222606700314540ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class KmlPropertySelectorDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KmlPropertySelectorDialog)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.replayFrame = new System.Windows.Forms.GroupBox(); this.adaptReplayToMapImage = new System.Windows.Forms.CheckBox(); this.replayTailLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); this.replayTailVisible = new System.Windows.Forms.CheckBox(); this.replayTailDuration = new System.Windows.Forms.ComboBox(); this.replayTimeIntervalLabel = new System.Windows.Forms.Label(); this.replayTimeInterval = new System.Windows.Forms.ComboBox(); this.replayMarkerStyleLabel = new System.Windows.Forms.Label(); this.replayMarkerStyle = new System.Windows.Forms.ComboBox(); this.includeReplay = new System.Windows.Forms.CheckBox(); this.routeLineStyle = new System.Windows.Forms.ComboBox(); this.includeRoute = new System.Windows.Forms.CheckBox(); this.mapFrame = new System.Windows.Forms.GroupBox(); this.includeMap = new System.Windows.Forms.CheckBox(); this.routeLineStyleLabel = new System.Windows.Forms.Label(); this.routeFrame = new System.Windows.Forms.GroupBox(); this.adaptRouteToMapImage = new System.Windows.Forms.CheckBox(); this.replayFrame.SuspendLayout(); this.replayTailLayoutPanel.SuspendLayout(); this.mapFrame.SuspendLayout(); this.routeFrame.SuspendLayout(); this.SuspendLayout(); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // replayFrame // resources.ApplyResources(this.replayFrame, "replayFrame"); this.replayFrame.Controls.Add(this.adaptReplayToMapImage); this.replayFrame.Controls.Add(this.replayTailLayoutPanel); this.replayFrame.Controls.Add(this.replayTimeIntervalLabel); this.replayFrame.Controls.Add(this.replayTimeInterval); this.replayFrame.Controls.Add(this.replayMarkerStyleLabel); this.replayFrame.Controls.Add(this.replayMarkerStyle); this.replayFrame.Controls.Add(this.includeReplay); this.replayFrame.Name = "replayFrame"; this.replayFrame.TabStop = false; // // adaptReplayToMapImage // resources.ApplyResources(this.adaptReplayToMapImage, "adaptReplayToMapImage"); this.adaptReplayToMapImage.Name = "adaptReplayToMapImage"; this.adaptReplayToMapImage.UseVisualStyleBackColor = true; this.adaptReplayToMapImage.CheckedChanged += new System.EventHandler(this.adaptReplayToMapImage_CheckedChanged); // // replayTailLayoutPanel // resources.ApplyResources(this.replayTailLayoutPanel, "replayTailLayoutPanel"); this.replayTailLayoutPanel.Controls.Add(this.replayTailVisible); this.replayTailLayoutPanel.Controls.Add(this.replayTailDuration); this.replayTailLayoutPanel.Name = "replayTailLayoutPanel"; // // replayTailVisible // resources.ApplyResources(this.replayTailVisible, "replayTailVisible"); this.replayTailVisible.Name = "replayTailVisible"; this.replayTailVisible.UseVisualStyleBackColor = true; this.replayTailVisible.CheckedChanged += new System.EventHandler(this.replayTailVisible_CheckedChanged); // // replayTailDuration // resources.ApplyResources(this.replayTailDuration, "replayTailDuration"); this.replayTailDuration.FormattingEnabled = true; this.replayTailDuration.Items.AddRange(new object[] { resources.GetString("replayTailDuration.Items"), resources.GetString("replayTailDuration.Items1"), resources.GetString("replayTailDuration.Items2"), resources.GetString("replayTailDuration.Items3"), resources.GetString("replayTailDuration.Items4"), resources.GetString("replayTailDuration.Items5"), resources.GetString("replayTailDuration.Items6"), resources.GetString("replayTailDuration.Items7")}); this.replayTailDuration.Name = "replayTailDuration"; this.replayTailDuration.Leave += new System.EventHandler(this.replayTailDuration_Leave); // // replayTimeIntervalLabel // resources.ApplyResources(this.replayTimeIntervalLabel, "replayTimeIntervalLabel"); this.replayTimeIntervalLabel.Name = "replayTimeIntervalLabel"; // // replayTimeInterval // resources.ApplyResources(this.replayTimeInterval, "replayTimeInterval"); this.replayTimeInterval.FormattingEnabled = true; this.replayTimeInterval.Items.AddRange(new object[] { resources.GetString("replayTimeInterval.Items"), resources.GetString("replayTimeInterval.Items1"), resources.GetString("replayTimeInterval.Items2"), resources.GetString("replayTimeInterval.Items3"), resources.GetString("replayTimeInterval.Items4"), resources.GetString("replayTimeInterval.Items5"), resources.GetString("replayTimeInterval.Items6")}); this.replayTimeInterval.Name = "replayTimeInterval"; this.replayTimeInterval.Leave += new System.EventHandler(this.replayTimeInterval_Leave); // // replayMarkerStyleLabel // resources.ApplyResources(this.replayMarkerStyleLabel, "replayMarkerStyleLabel"); this.replayMarkerStyleLabel.Name = "replayMarkerStyleLabel"; // // replayMarkerStyle // resources.ApplyResources(this.replayMarkerStyle, "replayMarkerStyle"); this.replayMarkerStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.replayMarkerStyle.FormattingEnabled = true; this.replayMarkerStyle.Items.AddRange(new object[] { resources.GetString("replayMarkerStyle.Items"), resources.GetString("replayMarkerStyle.Items1")}); this.replayMarkerStyle.Name = "replayMarkerStyle"; // // includeReplay // resources.ApplyResources(this.includeReplay, "includeReplay"); this.includeReplay.Name = "includeReplay"; this.includeReplay.UseVisualStyleBackColor = true; this.includeReplay.CheckedChanged += new System.EventHandler(this.includeReplay_CheckedChanged); // // routeLineStyle // resources.ApplyResources(this.routeLineStyle, "routeLineStyle"); this.routeLineStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.routeLineStyle.FormattingEnabled = true; this.routeLineStyle.Items.AddRange(new object[] { resources.GetString("routeLineStyle.Items"), resources.GetString("routeLineStyle.Items1"), resources.GetString("routeLineStyle.Items2")}); this.routeLineStyle.Name = "routeLineStyle"; this.routeLineStyle.SelectedIndexChanged += new System.EventHandler(this.routeLineStyle_SelectedIndexChanged); // // includeRoute // resources.ApplyResources(this.includeRoute, "includeRoute"); this.includeRoute.Name = "includeRoute"; this.includeRoute.UseVisualStyleBackColor = true; this.includeRoute.CheckedChanged += new System.EventHandler(this.includeRoute_CheckedChanged); // // mapFrame // resources.ApplyResources(this.mapFrame, "mapFrame"); this.mapFrame.Controls.Add(this.includeMap); this.mapFrame.Name = "mapFrame"; this.mapFrame.TabStop = false; // // includeMap // resources.ApplyResources(this.includeMap, "includeMap"); this.includeMap.Name = "includeMap"; this.includeMap.UseVisualStyleBackColor = true; this.includeMap.CheckedChanged += new System.EventHandler(this.includeMap_CheckedChanged); // // routeLineStyleLabel // resources.ApplyResources(this.routeLineStyleLabel, "routeLineStyleLabel"); this.routeLineStyleLabel.Name = "routeLineStyleLabel"; // // routeFrame // resources.ApplyResources(this.routeFrame, "routeFrame"); this.routeFrame.Controls.Add(this.adaptRouteToMapImage); this.routeFrame.Controls.Add(this.routeLineStyleLabel); this.routeFrame.Controls.Add(this.routeLineStyle); this.routeFrame.Controls.Add(this.includeRoute); this.routeFrame.Name = "routeFrame"; this.routeFrame.TabStop = false; // // adaptRouteToMapImage // resources.ApplyResources(this.adaptRouteToMapImage, "adaptRouteToMapImage"); this.adaptRouteToMapImage.Name = "adaptRouteToMapImage"; this.adaptRouteToMapImage.UseVisualStyleBackColor = true; this.adaptRouteToMapImage.CheckedChanged += new System.EventHandler(this.adaptRouteToMapImage_CheckedChanged); // // KmlPropertySelectorDialog // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.replayFrame); this.Controls.Add(this.mapFrame); this.Controls.Add(this.routeFrame); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "KmlPropertySelectorDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.replayFrame.ResumeLayout(false); this.replayFrame.PerformLayout(); this.replayTailLayoutPanel.ResumeLayout(false); this.replayTailLayoutPanel.PerformLayout(); this.mapFrame.ResumeLayout(false); this.mapFrame.PerformLayout(); this.routeFrame.ResumeLayout(false); this.routeFrame.PerformLayout(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.GroupBox replayFrame; private System.Windows.Forms.FlowLayoutPanel replayTailLayoutPanel; private System.Windows.Forms.CheckBox replayTailVisible; private System.Windows.Forms.ComboBox replayTailDuration; private System.Windows.Forms.Label replayTimeIntervalLabel; private System.Windows.Forms.ComboBox replayTimeInterval; private System.Windows.Forms.Label replayMarkerStyleLabel; private System.Windows.Forms.ComboBox replayMarkerStyle; private System.Windows.Forms.CheckBox includeReplay; private System.Windows.Forms.ComboBox routeLineStyle; private System.Windows.Forms.CheckBox includeRoute; private System.Windows.Forms.GroupBox mapFrame; private System.Windows.Forms.CheckBox includeMap; private System.Windows.Forms.Label routeLineStyleLabel; private System.Windows.Forms.GroupBox routeFrame; private System.Windows.Forms.CheckBox adaptRouteToMapImage; private System.Windows.Forms.CheckBox adaptReplayToMapImage; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.cs000066400000000000000000000211161446222606700277150ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Windows.Forms; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.Resources; namespace QuickRoute.UI.Forms { public partial class KmlPropertySelectorDialog : Form { private KmlProperties properties; private bool updatingUINow; public KmlPropertySelectorDialog() : this(new KmlProperties()) { } public KmlPropertySelectorDialog(KmlProperties properties) { InitializeComponent(); Properties = properties; } public KmlProperties Properties { get { return GetPropertiesFromControls(); } set { if (value == null) return; updatingUINow = true; properties = value.Clone() as KmlProperties; SetPropertiesToControls(properties); updatingUINow = false; UpdateUI(); } } public string DialogTitle { get { return Text; } set { Text = value; } } private void SetPropertiesToControls(KmlProperties value) { includeMap.Checked = (value.MapType != KmlExportMapType.None); includeRoute.Checked = (value.RouteType != KmlExportRouteType.None || value.MapType == KmlExportMapType.MapAndRoute); if (value.MapType == KmlExportMapType.MapAndRoute) routeLineStyle.SelectedIndex = 0; else { switch (value.RouteType) { case KmlExportRouteType.Monochrome: routeLineStyle.SelectedIndex = 1; break; case KmlExportRouteType.ColorCoded: routeLineStyle.SelectedIndex = 2; break; default: routeLineStyle.SelectedIndex = 0; break; } } adaptRouteToMapImage.Checked = (value.RouteAdaptionStyle != KmlRouteAdaptationStyle.NoAdaption); adaptReplayToMapImage.Checked = (value.RouteAdaptionStyle != KmlRouteAdaptationStyle.NoAdaption); includeReplay.Checked = (value.ReplayType != KmlExportReplayType.None); switch (value.ReplayType) { case KmlExportReplayType.Monochrome: replayMarkerStyle.SelectedIndex = 0; break; case KmlExportReplayType.ColorCoded: replayMarkerStyle.SelectedIndex = 1; break; default: replayMarkerStyle.SelectedIndex = 0; break; } replayTimeInterval.Text = value.ReplayTimeInterval.TotalSeconds.ToString(); replayTailVisible.Checked = value.HasReplayTails; if (value.HasReplayTails) { replayTailDuration.Text = (value.ReplayTails[0].EndVisible.HasValue ? value.ReplayTails[0].EndVisible.Value.TotalSeconds.ToString() : Strings.Infinite); } else { replayTailDuration.Text = ""; } } private KmlProperties GetPropertiesFromControls() { var controlProperties = new KmlProperties { MapType = (includeMap.Checked ? KmlExportMapType.Map : KmlExportMapType.None) }; if (includeRoute.Checked && routeLineStyle.SelectedIndex == 0) controlProperties.MapType = KmlExportMapType.MapAndRoute; if (!includeRoute.Checked) { controlProperties.RouteType = KmlExportRouteType.None; } else { switch (routeLineStyle.SelectedIndex) { case 1: controlProperties.RouteType = KmlExportRouteType.Monochrome; break; case 2: controlProperties.RouteType = KmlExportRouteType.ColorCoded; break; default: controlProperties.RouteType = KmlExportRouteType.None; break; } } controlProperties.RouteAdaptionStyle = includeMap.Checked && adaptRouteToMapImage.Checked ? KmlRouteAdaptationStyle.AdaptToSessionMapImage : KmlRouteAdaptationStyle.NoAdaption; if (!includeReplay.Checked) { controlProperties.ReplayType = KmlExportReplayType.None; } else { switch (replayMarkerStyle.SelectedIndex) { case 0: controlProperties.ReplayType = KmlExportReplayType.Monochrome; break; case 1: controlProperties.ReplayType = KmlExportReplayType.ColorCoded; break; default: controlProperties.ReplayType = KmlExportReplayType.None; break; } double timeInterval = 1; double.TryParse(replayTimeInterval.Text, out timeInterval); timeInterval = Math.Max(0.1, Math.Min(3600, timeInterval)); controlProperties.ReplayTimeInterval = new TimeSpan((long)(timeInterval * TimeSpan.TicksPerSecond)); var tails = new List(); if (replayTailVisible.Checked) { var tail = new KmlReplayTail() { StartVisible = new TimeSpan(0) }; double tailDurationSeconds = 0; if (double.TryParse(replayTailDuration.Text, out tailDurationSeconds)) { tailDurationSeconds = Math.Max(0.1, Math.Min(3600, tailDurationSeconds)); tail.EndVisible = new TimeSpan((long)(tailDurationSeconds * TimeSpan.TicksPerSecond)); } else { tail.EndVisible = null; // infinite } tails.Add(tail); } controlProperties.ReplayTails = tails; } return controlProperties; } private void UpdateUI() { if (updatingUINow) return; routeLineStyle.Enabled = includeRoute.Checked; routeLineStyleLabel.Enabled = includeRoute.Checked; replayMarkerStyle.Enabled = includeReplay.Checked; replayMarkerStyleLabel.Enabled = includeReplay.Checked; replayTimeInterval.Enabled = includeReplay.Checked; replayTimeIntervalLabel.Enabled = includeReplay.Checked; replayTailVisible.Enabled = includeReplay.Checked; replayTailDuration.Enabled = includeReplay.Checked && replayTailVisible.Checked; var p = GetPropertiesFromControls(); adaptRouteToMapImage.Enabled = includeMap.Checked && includeRoute.Checked && p.RouteType != KmlExportRouteType.None; adaptReplayToMapImage.Enabled = includeMap.Checked && includeReplay.Checked; replayTailDuration.Text = (p.HasReplayTails ? (p.ReplayTails[0].EndVisible.HasValue ? p.ReplayTails[0].EndVisible.Value.TotalSeconds.ToString() : Strings.Infinite) : ""); if (p.MapType == KmlExportMapType.MapAndRoute) includeMap.Checked = true; if (p.ReplayTimeInterval.TotalSeconds <= 0) replayTimeInterval.Text = "1"; if (replayTailVisible.Checked && replayTailDuration.Text == "") replayTailDuration.Text = "60"; } private void includeRoute_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void includeReplay_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void includeMap_CheckedChanged(object sender, EventArgs e) { if (!includeMap.Checked && includeRoute.Checked && routeLineStyle.SelectedIndex == 0) routeLineStyle.SelectedIndex = 1; UpdateUI(); } private void routeLineStyle_SelectedIndexChanged(object sender, EventArgs e) { UpdateUI(); } private void replayTimeInterval_Leave(object sender, EventArgs e) { UpdateUI(); } private void replayTailVisible_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void replayTailDuration_Leave(object sender, EventArgs e) { UpdateUI(); } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void adaptRouteToMapImage_CheckedChanged(object sender, EventArgs e) { adaptReplayToMapImage.Checked = adaptRouteToMapImage.Checked; } private void adaptReplayToMapImage_CheckedChanged(object sender, EventArgs e) { adaptRouteToMapImage.Checked = adaptReplayToMapImage.Checked; } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.da.resx000066400000000000000000000215561446222606700306640ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd 222, 17 Indstil gen&afspilningsobjekter til kortbillede 162, 17 Vis &hale, varighed i sekunder Uendelig 168, 3 113, 13 Tids&interval i sekunder 148, 13 Positions&markørens udseende Ensfavet Farvekodet 129, 17 Inkluder gen&afspilning Indlejret i kort, farvekodet Separat rutelinjeobjekt, ensfarvet Separat rutelinjeobjekt, farvekodet 85, 17 Inkluder &rute 85, 17 Inkluder &kort Kort 109, 13 Rutelinjens &udseende Rute KML egenskaber quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.de.resx000066400000000000000000000225031446222606700306610ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Wiederholung 60 30 Streckenobjekt an Karte &anpassen Zeit&intervall in Sekunden 30 15 60 2 10 5 Strecke Karte 180 600 unendlich 240 300 &Karte einbinden Positions&markeroptionen Einfarbig Eingebetted in Karte, farbcodiert OK &Wiederholung einbinden Streckenobjekt trennen, farbcodiert &Streckenoptionen Farbcodiert 1 Wiederholungsobjekte an Karte an&passen Strecke &einbinden Abbrechen 120 Schwei&f anzeigen, Dauer in Sekunden: KML Eigenschaften Streckenobjekt trennen, einfarbig quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.fi.resx000066400000000000000000000217241446222606700306730ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta 180, 17 Kohdista &reittiviivat karttakuvaan 171, 17 Näytä &häntä, kesto sekunteina Ääretön 177, 3 Aika&intervalli sekunteina 107, 13 Positio&merkinnän tyyli Yksivärinen Värikoodattu 78, 17 Vie &uusinta Uusinta (replay) Upotettu karttaan, värikoodattu Erillinen reittiviiva, yksivärinen Erillinen reittiviiva, värikoodattu 63, 17 Vie &reitti 71, 17 Vie &kartta Kartta Reittiviivan &tyyli 177, 17 Kohdista &reittiviiva karttakuvaan Reitti KML -ominaisuudet quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.fr.resx000066400000000000000000000174061446222606700307060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Ajuster la trace sur la carte &Intervalle de temps en secondes Infini Carte Inclure la &carte Style du marq&ueur de position Intégrer la trace au fond de carte. Colorisée Trace Inclure le 're&play' Séparer la trace du fond de carte. Colorisée Mi&s en forme de la trace Codage couleur Ajuster le repla&y des objets sur l'image Inclure la t&race Annuler Montrer la &trainée, durée en secondes : Propriétés du KML Séparer la trace du fond de carte. Monochrome quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.it.resx000066400000000000000000000224071446222606700307100ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella 160, 17 Sistema il repla&y sulla mappa 189, 17 Visualizza &coda, durata in secondi: infinito 195, 3 140, 13 &Intervalli di tempo in secondi 150, 13 Stile del pu&ntatore di posizione Monocromatico Codice colore 88, 17 Includi re&play Ripeti Incorporato nella mappa, codice colore Separa la linea del percosto, monocromatico Separa la linea del percosto, codice colore 101, 17 Includi t&racciato 92, 17 Includi &mappa Mappa 138, 13 &Stile della linea del percorso 219, 17 Sistem&a la linea del percorso sulla mappa Percorso Proprietà KML: quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.lt.resx000066400000000000000000000225751446222606700307210ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Atšaukti 223, 17 Atitaikyti bėgim&o pakartojimą su žemėlapiu 180, 17 Rodyti uo&degą, ilgis sekundėmis: neribotas 186, 3 137, 13 Laiko &intervalai sekundėmis 119, 13 Pozicijos žyme&klio stilius Vienspalvis Spalvotas 152, 17 Įtraukti &begimo pakartojimą Bėgimo pakartojimas Įterpta į žemėlapį, spalvota Atskira prabėgimo linija, vienspalvė Atskira prabėgimo linija, spalvota 110, 17 Įtra&ukti prabėgimą 102, 17 Įtraukti &žemėlapį Žemėlapis 113, 13 Prabėgimo linijos &stilius 204, 17 &Atitaikyti prabėgimo liniją su žemėlapiu Prabėgimas KML savybės quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.no.resx000066400000000000000000000223571446222606700307140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 234, 17 Juster og s&pill av objektene på kartet på nytt 152, 17 Halens &varighet i sekunder uendelig 158, 3 115, 13 Tids&intervall i sekunder 147, 13 Posisjonsmarkørens &utseende Monokrom Fargekodet 149, 17 Inkluder og &spill av på nytt Spill av på nytt Innebygget kart, fargekodet Separat objekt for rutestrek, monokrom Separat objekt for rutestrek, fargekodet 85, 17 Inkluder &rute 85, 17 Inkluder &kart Kart 117, 13 Rutestrekens u&tseende 190, 17 &Juster rutestreken i forhold til kartet Rute KLM-egenskaper quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.resx000066400000000000000000001007251446222606700302750ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Left, Right 3, 3, 3, 8 0 2 replayFrame 4 replayMarkerStyle NoControl 75, 23 84, 17 2 replayTailLayoutPanel 3, 3, 3, 8 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 includeMap System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancel 3 Top, Left, Right 3 replayMarkerStyleLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 4 4 1 11, 24 369, 53 8, 8, 8, 8 routeFrame replayFrame Route line &style 1 NoControl Top, Left, Right 88, 17 KML properties 3, 3, 3, 8 99, 21 6 170, 17 True 2 2 31, 101 11, 24 6, 13 System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 11, 221 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 adaptRouteToMapImage 1 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 Adjust repla&y objects to map image Position mar&ker style routeLineStyleLabel 306, 455 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 NoControl 92, 17 includeRoute replayFrame Top, Left, Right replayFrame $this True Route NoControl $this 1 1 Replay Show &tail, duration in seconds: NoControl 1 &Adjust route line object to map image 121, 13 $this 0 replayTimeIntervalLabel Map System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3, 3, 3, 8 15 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Left, Right 6 True replayTailVisible 400, 524 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 0, 6 369, 218 28, 49 30 replayTimeInterval 4 60 2 327, 21 10 5 adaptReplayToMapImage replayTailLayoutPanel 180 0, 6, 3, 3 31, 113 600 0 routeFrame NoControl 0 Top, Left, Right Bottom, Right 28, 97 replayFrame 75, 23 3 True replayTailLayoutPanel 0 Time &interval in seconds True 5 True System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Monochrome 3 replayFrame System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True NoControl 3 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 includeReplay ok 31, 65 Embedded in map, color-coded NoControl replayFrame System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 327, 21 103, 13 Color-coded 2 0 Include re&play System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 31, 146 79, 13 8, 8, 8, 8 $this $this KmlPropertySelectorDialog 2 cancel 0 Top, Left, Right 0, 0, 0, 0 225, 455 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK 31, 65 31, 185 3 0 0 30 Separate route line object, monochrome Separate route line object, color-coded replayTailDuration 3, 3, 3, 8 0 Include &route 1 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 28, 49 392, 486 12, 12 1 Include &map routeLineStyle 189, 17 replayFrame 176, 3 mapFrame 2000, 524 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routeFrame 3, 3, 3, 8 8, 8, 8, 8 327, 21 NoControl 1 System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Left, Right True mapFrame 12, 76 327, 27 369, 134 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 120 Bottom, Right 60 3, 3, 3, 8 infinite 240 300 routeFrame routeFrame True 11, 24 199, 17 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.ru.resx000066400000000000000000000231401446222606700307150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 273, 17 Привязать проигрывание к изобра&жению карты 197, 17 Показывать &хвосты длиной (сек): бесконечно 203, 3 172, 13 Временной &интервал в секундах 143, 13 Стиль &маркера положения Однотонный Визуализация цветом 152, 17 Добавить &проигрывание Проигрывание Включить в карту, визуализация цветом Отдельным объектом, однотонная Отдельным объектом, визуализация цветом 101, 17 Добавить п&уть 107, 17 Добавить &карту Карта 95, 13 Стиль &линии пути 257, 17 Прив&язать линию пути к изображению карты Путь Свойства KML quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/KmlPropertySelectorDialog.sv.resx000066400000000000000000000221711446222606700307220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Återuppspelning 252, 17 Anpassa återu&ppspelningsobjekten till kartbilden 164, 17 Visa &svans, längd i sekunder: oändlig 170, 3 115, 13 Tids&intervall i sekunder 145, 13 Positionsmark&örens utseende Enfärgad Färgkodad 148, 17 Inkludera &återuppspelning Inbäddad i kartan, färgkodad Separat ruttlinjeobjekt, enfärgad Separat ruttlinjeobjekt, färgkodad Inkludera &rutt Karta 97, 17 Inkludera &karta 103, 13 Rutt&linjens utseende Rutt 202, 17 &Anpassa ruttlinjeobjektet till kartbilden KML-egenskaper quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.Designer.cs000066400000000000000000000100731446222606700275620ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class NewVersionDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewVersionDialog)); this.goToDownloadPage = new System.Windows.Forms.Button(); this.dontRemindMe = new System.Windows.Forms.CheckBox(); this.close = new System.Windows.Forms.Button(); this.message = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // goToDownloadPage // this.goToDownloadPage.AccessibleDescription = null; this.goToDownloadPage.AccessibleName = null; resources.ApplyResources(this.goToDownloadPage, "goToDownloadPage"); this.goToDownloadPage.BackgroundImage = null; this.goToDownloadPage.Font = null; this.goToDownloadPage.Name = "goToDownloadPage"; this.goToDownloadPage.UseVisualStyleBackColor = true; this.goToDownloadPage.Click += new System.EventHandler(this.goToDownloadPage_Click); // // dontRemindMe // this.dontRemindMe.AccessibleDescription = null; this.dontRemindMe.AccessibleName = null; resources.ApplyResources(this.dontRemindMe, "dontRemindMe"); this.dontRemindMe.BackgroundImage = null; this.dontRemindMe.Font = null; this.dontRemindMe.Name = "dontRemindMe"; this.dontRemindMe.UseVisualStyleBackColor = true; // // close // this.close.AccessibleDescription = null; this.close.AccessibleName = null; resources.ApplyResources(this.close, "close"); this.close.BackgroundImage = null; this.close.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.close.Font = null; this.close.Name = "close"; this.close.UseVisualStyleBackColor = true; this.close.Click += new System.EventHandler(this.close_Click); // // message // this.message.AcceptsReturn = true; this.message.AccessibleDescription = null; this.message.AccessibleName = null; resources.ApplyResources(this.message, "message"); this.message.BackgroundImage = null; this.message.Font = null; this.message.Name = "message"; this.message.ReadOnly = true; // // NewVersionDialog // this.AcceptButton = this.close; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.close; this.Controls.Add(this.message); this.Controls.Add(this.dontRemindMe); this.Controls.Add(this.close); this.Controls.Add(this.goToDownloadPage); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "NewVersionDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button goToDownloadPage; private System.Windows.Forms.CheckBox dontRemindMe; private System.Windows.Forms.Button close; private System.Windows.Forms.TextBox message; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.cs000066400000000000000000000017261446222606700260300ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace QuickRoute.UI.Forms { public partial class NewVersionDialog : Form { public NewVersionDialog() { InitializeComponent(); } public string Message { get { return message.Text; } set { message.Text = value; } } public string DownloadUrl { get; set; } public bool DontRemindMe { get { return dontRemindMe.Checked; } set { dontRemindMe.Checked = value; } } private void goToDownloadPage_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start(DownloadUrl); Close(); } private void close_Click(object sender, EventArgs e) { Close(); } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.da.resx000066400000000000000000000141531446222606700267650ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Ny version tilgængelig Vis &ikke denne meddelelse igen &Luk Gå til &download side quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.de.resx000066400000000000000000000141661446222606700267750ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Neue Version verfügbar Diese Meldung &nicht mehr anzeigen &Schließen &Download-Seite öffnen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.fi.resx000066400000000000000000000141571446222606700270030ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Uusi versio saatavilla Älä &näytä tätä viestiä enää &Sulje Mene &lataussivulle quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.fr.resx000066400000000000000000000141771446222606700270160ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Nouvelle version disponible &Ne plus afficher ce message &Fermer Aller sur la &page de téléchargement quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.it.resx000066400000000000000000000142321446222606700270130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 E' disponibile una nuova versione Non mostrare &nuovamente questo messaggio &Chiudi Vai alla pagina per &scaricare l'aggiornamento quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.lt.resx000066400000000000000000000141771446222606700270260ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Galima nauja versija Daugiau &nerodyti šios žinutės &Uždaryti &Eiti į programos įdiegimo puslapį quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.no.resx000066400000000000000000000141571446222606700270210ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Ny versjon tilgjengelig &Ikke vis denne meldingen igjen &Lukk Gå til &nedlastingssiden quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.resx000066400000000000000000000266461446222606700264140ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this NewVersionDialog System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 262, 236 12, 12 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 349, 271 1 6, 13 1 $this New version available 0 close CenterParent Bottom, Right Do &not display this message again &Close Bottom, Right 3 $this 75, 23 True System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Bottom, Left, Right True 2 12, 207 145, 23 message 186, 17 3 0 $this 2 111, 236 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 goToDownloadPage 325, 189 Vertical Go to &download page dontRemindMe True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.ru.resx000066400000000000000000000146761446222606700270410ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 &Перейти на страницу загрузки 224, 17 &Больше не показывать это сообщение &Закрыть Доступна новая версия quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/NewVersionDialog.sv.resx000066400000000000000000000145521446222606700270340ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gå till &nedladdningssidan 189, 17 &Visa inte det här meddelandet igen &Stäng Ny version tillgänglig quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.Designer.cs000066400000000000000000000307721446222606700335030ustar00rootroot00000000000000using QuickRoute.Controls; namespace QuickRoute.UI.Forms { partial class OpenMultipleFilesInGoogleEarthDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OpenMultipleFilesInGoogleEarthDialog)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.filesLabel = new System.Windows.Forms.Label(); this.replayTailsVisible = new System.Windows.Forms.CheckBox(); this.replayTailDuration = new System.Windows.Forms.ComboBox(); this.massStart = new System.Windows.Forms.CheckBox(); this.replayTimeIntervalLabel = new System.Windows.Forms.Label(); this.replayTimeInterval = new System.Windows.Forms.ComboBox(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.replayRestartAfterEachLap = new System.Windows.Forms.CheckBox(); this.replayTailDurationLabel = new System.Windows.Forms.Label(); this.replayTailsVisibleLabel = new System.Windows.Forms.Label(); this.replayRestartAfterEachLapLabel = new System.Windows.Forms.Label(); this.massStartLabel = new System.Windows.Forms.Label(); this.uiInformation = new System.Windows.Forms.Label(); this.includeRoutes = new System.Windows.Forms.CheckBox(); this.includeReplay = new System.Windows.Forms.CheckBox(); this.replayGroupBox = new System.Windows.Forms.GroupBox(); this.routesGroupBox = new System.Windows.Forms.GroupBox(); this.fileSelector = new QuickRoute.Controls.FileSelectorControl(); this.tableLayoutPanel1.SuspendLayout(); this.replayGroupBox.SuspendLayout(); this.routesGroupBox.SuspendLayout(); this.SuspendLayout(); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // filesLabel // resources.ApplyResources(this.filesLabel, "filesLabel"); this.filesLabel.Name = "filesLabel"; // // replayTailsVisible // resources.ApplyResources(this.replayTailsVisible, "replayTailsVisible"); this.replayTailsVisible.Name = "replayTailsVisible"; this.replayTailsVisible.UseVisualStyleBackColor = true; this.replayTailsVisible.CheckedChanged += new System.EventHandler(this.replayTailsVisible_CheckedChanged); // // replayTailDuration // resources.ApplyResources(this.replayTailDuration, "replayTailDuration"); this.replayTailDuration.FormattingEnabled = true; this.replayTailDuration.Items.AddRange(new object[] { resources.GetString("replayTailDuration.Items"), resources.GetString("replayTailDuration.Items1"), resources.GetString("replayTailDuration.Items2"), resources.GetString("replayTailDuration.Items3"), resources.GetString("replayTailDuration.Items4"), resources.GetString("replayTailDuration.Items5"), resources.GetString("replayTailDuration.Items6"), resources.GetString("replayTailDuration.Items7")}); this.replayTailDuration.Name = "replayTailDuration"; this.replayTailDuration.Leave += new System.EventHandler(this.replayTailDuration_Leave); // // massStart // resources.ApplyResources(this.massStart, "massStart"); this.massStart.Name = "massStart"; this.massStart.UseVisualStyleBackColor = true; this.massStart.CheckedChanged += new System.EventHandler(this.massStart_CheckedChanged); // // replayTimeIntervalLabel // resources.ApplyResources(this.replayTimeIntervalLabel, "replayTimeIntervalLabel"); this.replayTimeIntervalLabel.Name = "replayTimeIntervalLabel"; // // replayTimeInterval // resources.ApplyResources(this.replayTimeInterval, "replayTimeInterval"); this.replayTimeInterval.DropDownWidth = 99; this.replayTimeInterval.FormattingEnabled = true; this.replayTimeInterval.Items.AddRange(new object[] { resources.GetString("replayTimeInterval.Items"), resources.GetString("replayTimeInterval.Items1"), resources.GetString("replayTimeInterval.Items2"), resources.GetString("replayTimeInterval.Items3"), resources.GetString("replayTimeInterval.Items4"), resources.GetString("replayTimeInterval.Items5"), resources.GetString("replayTimeInterval.Items6")}); this.replayTimeInterval.Name = "replayTimeInterval"; this.replayTimeInterval.Leave += new System.EventHandler(this.replayTimeInterval_Leave); // // tableLayoutPanel1 // resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.Controls.Add(this.replayRestartAfterEachLap, 0, 2); this.tableLayoutPanel1.Controls.Add(this.replayTailsVisible, 1, 3); this.tableLayoutPanel1.Controls.Add(this.replayTailDurationLabel, 0, 4); this.tableLayoutPanel1.Controls.Add(this.replayTailDuration, 1, 4); this.tableLayoutPanel1.Controls.Add(this.replayTailsVisibleLabel, 0, 3); this.tableLayoutPanel1.Controls.Add(this.replayRestartAfterEachLapLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.massStartLabel, 0, 1); this.tableLayoutPanel1.Controls.Add(this.replayTimeIntervalLabel, 0, 0); this.tableLayoutPanel1.Controls.Add(this.replayTimeInterval, 1, 0); this.tableLayoutPanel1.Controls.Add(this.massStart, 1, 1); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // replayRestartAfterEachLap // resources.ApplyResources(this.replayRestartAfterEachLap, "replayRestartAfterEachLap"); this.replayRestartAfterEachLap.Name = "replayRestartAfterEachLap"; this.replayRestartAfterEachLap.UseVisualStyleBackColor = true; // // replayTailDurationLabel // resources.ApplyResources(this.replayTailDurationLabel, "replayTailDurationLabel"); this.replayTailDurationLabel.Name = "replayTailDurationLabel"; // // replayTailsVisibleLabel // resources.ApplyResources(this.replayTailsVisibleLabel, "replayTailsVisibleLabel"); this.replayTailsVisibleLabel.Name = "replayTailsVisibleLabel"; this.replayTailsVisibleLabel.Click += new System.EventHandler(this.replayTailsVisibleLabel_Click); // // replayRestartAfterEachLapLabel // resources.ApplyResources(this.replayRestartAfterEachLapLabel, "replayRestartAfterEachLapLabel"); this.replayRestartAfterEachLapLabel.Name = "replayRestartAfterEachLapLabel"; this.replayRestartAfterEachLapLabel.Click += new System.EventHandler(this.replayRestartAfterEachLapLabel_Click); // // massStartLabel // resources.ApplyResources(this.massStartLabel, "massStartLabel"); this.massStartLabel.Name = "massStartLabel"; this.massStartLabel.Click += new System.EventHandler(this.massStartLabel_Click); // // uiInformation // resources.ApplyResources(this.uiInformation, "uiInformation"); this.uiInformation.BackColor = System.Drawing.SystemColors.Info; this.uiInformation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.uiInformation.Name = "uiInformation"; // // includeRoutes // resources.ApplyResources(this.includeRoutes, "includeRoutes"); this.includeRoutes.Name = "includeRoutes"; this.includeRoutes.UseVisualStyleBackColor = true; this.includeRoutes.CheckedChanged += new System.EventHandler(this.includeRoutes_CheckedChanged); // // includeReplay // resources.ApplyResources(this.includeReplay, "includeReplay"); this.includeReplay.Name = "includeReplay"; this.includeReplay.UseVisualStyleBackColor = true; this.includeReplay.CheckedChanged += new System.EventHandler(this.includeReplay_CheckedChanged); // // replayGroupBox // resources.ApplyResources(this.replayGroupBox, "replayGroupBox"); this.replayGroupBox.Controls.Add(this.tableLayoutPanel1); this.replayGroupBox.Controls.Add(this.includeReplay); this.replayGroupBox.Name = "replayGroupBox"; this.replayGroupBox.TabStop = false; // // routesGroupBox // resources.ApplyResources(this.routesGroupBox, "routesGroupBox"); this.routesGroupBox.Controls.Add(this.includeRoutes); this.routesGroupBox.Name = "routesGroupBox"; this.routesGroupBox.TabStop = false; // // fileSelector // resources.ApplyResources(this.fileSelector, "fileSelector"); this.fileSelector.AllowUrlAdding = true; this.fileSelector.FileDialogFilter = null; this.fileSelector.FileDialogFilterIndex = 0; this.fileSelector.FileDialogTitle = null; this.fileSelector.Name = "fileSelector"; this.fileSelector.FilesChanged += new System.EventHandler(this.fileSelector_FilesChanged); // // OpenMultipleFilesInGoogleEarthDialog // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.routesGroupBox); this.Controls.Add(this.replayGroupBox); this.Controls.Add(this.fileSelector); this.Controls.Add(this.uiInformation); this.Controls.Add(this.filesLabel); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "OpenMultipleFilesInGoogleEarthDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); this.replayGroupBox.ResumeLayout(false); this.replayGroupBox.PerformLayout(); this.routesGroupBox.ResumeLayout(false); this.routesGroupBox.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.Label filesLabel; private System.Windows.Forms.CheckBox replayTailsVisible; private System.Windows.Forms.ComboBox replayTailDuration; private System.Windows.Forms.CheckBox massStart; private System.Windows.Forms.Label replayTimeIntervalLabel; private System.Windows.Forms.ComboBox replayTimeInterval; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.Label massStartLabel; private System.Windows.Forms.Label replayTailsVisibleLabel; private System.Windows.Forms.Label replayTailDurationLabel; private System.Windows.Forms.Label uiInformation; private System.Windows.Forms.CheckBox includeRoutes; private System.Windows.Forms.CheckBox includeReplay; private System.Windows.Forms.GroupBox replayGroupBox; private FileSelectorControl fileSelector; private System.Windows.Forms.GroupBox routesGroupBox; private System.Windows.Forms.CheckBox replayRestartAfterEachLap; private System.Windows.Forms.Label replayRestartAfterEachLapLabel; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.cs000066400000000000000000000166441446222606700317460ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.Resources; namespace QuickRoute.UI.Forms { public partial class OpenMultipleFilesInGoogleEarthDialog : Form { private readonly KmlMultipleFileExporterProperties originalMultipleFileProperties; private bool updatingUINow; public OpenMultipleFilesInGoogleEarthDialog() { InitializeComponent(); } public OpenMultipleFilesInGoogleEarthDialog(IEnumerable initialFileNames, KmlMultipleFileExporterProperties multipleFileProperties) : this() { updatingUINow = true; fileSelector.FileDialogTitle = Strings.AddFiles; fileSelector.FileDialogFilter = Strings.FileFilter_AllQuickRouteFiles + "|" + Strings.FileFilter_QuickRouteFiles + "|" + Strings.FileFilter_QuickRoute10Files + "|" + Strings.FileFilter_JpegFilesExportedFromQuickRoute; fileSelector.FileDialogFilterIndex = 1; fileSelector.AddFiles(initialFileNames); originalMultipleFileProperties = (KmlMultipleFileExporterProperties)multipleFileProperties.Clone(); SetPropertiesToControls(originalMultipleFileProperties); updatingUINow = false; UpdateUI(); } public List FileNames { get { return fileSelector.FileNames; } } public KmlMultipleFileExporterProperties MultipleFileProperties { get { return GetPropertiesFromControls(); } } private void ok_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void replayTailsVisibleLabel_Click(object sender, EventArgs e) { replayTailsVisible.Checked = !replayTailsVisible.Checked; } private void massStartLabel_Click(object sender, EventArgs e) { massStart.Checked = !massStart.Checked; } private void massStart_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void replayTailsVisible_CheckedChanged(object sender, EventArgs e) { UpdateUI(); } private void replayTailDuration_Leave(object sender, EventArgs e) { UpdateUI(); } private void replayTimeInterval_Leave(object sender, EventArgs e) { UpdateUI(); } private void UpdateUI() { if (updatingUINow) return; massStartLabel.Enabled = includeReplay.Checked; massStart.Enabled = includeReplay.Checked; replayTailsVisibleLabel.Enabled = includeReplay.Checked; replayTailsVisible.Enabled = includeReplay.Checked; replayTimeIntervalLabel.Enabled = includeReplay.Checked; replayTimeInterval.Enabled = includeReplay.Checked; replayTailDurationLabel.Enabled = includeReplay.Checked && replayTailsVisible.Checked; replayTailDuration.Enabled = includeReplay.Checked && replayTailsVisible.Checked; replayRestartAfterEachLap.Enabled = includeReplay.Checked && massStart.Checked; replayRestartAfterEachLapLabel.Enabled = includeReplay.Checked && massStart.Checked; ok.Enabled = (fileSelector.FileNames.Count > 0); var p = GetPropertiesFromControls(); if(p.HasReplayTails) { replayTailDuration.Text = (p.ReplayTails[0].EndVisible.HasValue ? p.ReplayTails[0].EndVisible.Value.TotalSeconds.ToString() : Strings.Infinite); } // validate and adjust values if (p.ReplayTimeInterval.TotalSeconds <= 0) p.ReplayTimeInterval = originalMultipleFileProperties.ReplayTimeInterval; if (p.RouteLineWidth <= 0 || p.RouteLineWidth > 100) p.RouteLineWidth = originalMultipleFileProperties.RouteLineWidth; SetPropertiesToControls(p); } private KmlMultipleFileExporterProperties GetPropertiesFromControls() { var p = new KmlMultipleFileExporterProperties(); // include routes p.IncludeRoutes = includeRoutes.Checked; // include replay p.IncludeReplay = includeReplay.Checked; // mass start p.MassStart = massStart.Checked; // tails var tails = new List(); if (replayTailsVisible.Checked) { var tail = new KmlReplayTail() { StartVisible = new TimeSpan(0) }; double tailDurationSeconds = 0; if (double.TryParse(replayTailDuration.Text, out tailDurationSeconds)) { tailDurationSeconds = Math.Max(0.1, Math.Min(3600, tailDurationSeconds)); tail.EndVisible = new TimeSpan((long)(tailDurationSeconds * TimeSpan.TicksPerSecond)); } else { tail.EndVisible = null; } tails.Add(tail); } p.ReplayTails = tails; // replay time interval double timeInterval; if (double.TryParse(replayTimeInterval.Text, out timeInterval)) { timeInterval = Math.Max(0.1, Math.Min(3600, timeInterval)); p.ReplayTimeInterval = new TimeSpan((long)(timeInterval * TimeSpan.TicksPerSecond)); } else { p.ReplayTimeInterval = originalMultipleFileProperties.ReplayTimeInterval; } // restart after each lap p.ReplayRestartAfterEachLap = replayRestartAfterEachLap.Checked; // opacity var opacity = (originalMultipleFileProperties.Colors.Count > 0 ? (double)originalMultipleFileProperties.Colors[0].A / 255 : 1.0); for (var i = 0; i < originalMultipleFileProperties.Colors.Count; i++) { p.Colors[i] = Color.FromArgb((int)(255 * opacity), p.Colors[i]); } // route line width p.RouteLineWidth = originalMultipleFileProperties.RouteLineWidth; return p; } private void SetPropertiesToControls(KmlMultipleFileExporterProperties p) { updatingUINow = true; includeRoutes.Checked = p.IncludeRoutes; includeReplay.Checked = p.IncludeReplay; massStart.Checked = p.MassStart; replayTailsVisible.Checked = p.HasReplayTails; if (p.HasReplayTails) { replayTailDuration.Text = (p.ReplayTails[0].EndVisible.HasValue ? p.ReplayTails[0].EndVisible.Value.TotalSeconds.ToString() : Strings.Infinite); } replayTimeInterval.Text = p.ReplayTimeInterval.TotalSeconds.ToString(); replayRestartAfterEachLap.Checked = p.ReplayRestartAfterEachLap; updatingUINow = false; } private void fileSelector_FilesChanged(object sender, EventArgs e) { UpdateUI(); } private void includeReplay_CheckedChanged(object sender, EventArgs e) { if (!includeRoutes.Checked && !includeReplay.Checked) includeReplay.Checked = true; UpdateUI(); } private void includeRoutes_CheckedChanged(object sender, EventArgs e) { if (!includeRoutes.Checked && !includeReplay.Checked) includeRoutes.Checked = true; UpdateUI(); } private void replayRestartAfterEachLapLabel_Click(object sender, EventArgs e) { replayRestartAfterEachLap.Checked = !replayRestartAfterEachLap.Checked; } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.da.resx000066400000000000000000000220731446222606700326760ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd 26, 13 &Filer 143, 79 Uendelig 143, 99 292, 21 143, 33 113, 13 Tids&interval i sekunder 143, 3 292, 21 143, 56 134, 13 Hale&visning - tid i sekunder 44, 13 Vis &taler 95, 13 Simuler f&ælles start Tilføj QuickRoute filer der indeholder de ønskede ruter. Kortet fra første fil vil blive brugt som baggrund. Understøttede filformater er qrt og jpeg filer eksporteret fra QuickRoute 2.3 og senere. 88, 17 Inkluder &ruter 100, 17 Inkluder &gentag Gentag Ruter Åben flere QuickRoute filer i GoogleEarth quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.de.resx000066400000000000000000000251421446222606700327020ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 352, 480 433, 480 Abbrechen 44, 13 &Dateien 174, 79 unendlich 174, 99 289, 21 174, 33 124, 13 Zeit&intervall in Sekunden 174, 3 289, 21 466, 124 174, 56 134, 13 Schweif&länge in Sekunden 97, 13 Schweife &anzeigen 165, 13 &Neustart nach jeder Zwischenzeit 113, 13 &Massenstart simulieren 496, 55 QuickRoute-Dateien mit den gewünschten Strecken hinzufügen. Die Karte der ersten Datei wird als Hintergrundkarte verwendet. Unterstützte Dateiformate sind QRT-Dateien und JPEG-Dateien, die von QuickRoute 2.3 oder höher exportiert wurden. 118, 17 &Strecken einbinden 141, 17 &Wiederholung einbinden 496, 177 Wiederholung 497, 53 Strecken 497, 139 520, 515 Inherit Mehrere QuickRoute-Dateien in Google Earth öffnen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.fi.resx000066400000000000000000000244631446222606700327150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 341, 480 422, 480 Peruuta 51, 13 &Tiedostot 222, 79 Ääretön 222, 99 230, 21 222, 33 Aika&intervalli sekunteina 222, 3 230, 21 455, 124 222, 56 149, 13 Hännän &kestoaika sekunteina 71, 13 Näytä &hännät 213, 13 Aloita uudelleen &jokaisen kierroksen jälkeen 93, 13 Simuloi &yhteislähtö 485, 55 Lisää QuickRoute -tiedostot, jotka sisältävät halutut reitit. Ensimmäisen tiedoston kartta asetetaan taustakartaksi. Voit lisätä QRT- tai JPEG-tiedostoja, jotka ovat peräisin QuickRoute 2.3:sta tai uudemmasta versiosta. 63, 17 Vie &reitit 84, 17 Vie &uusinnat 485, 177 Uusinta 486, 53 Reitit 486, 139 509, 515 517, 500 Avaa useampi QuickRoute -tiedosto Google Earthissa quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.fr.resx000066400000000000000000000167411446222606700327260ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler &Fichiers Inifini &Intervalle de temps en seconde &Durée de la trainée en secondes Afficher &trainée Redémarrer après c&haque lap Simuler départ en &masse Ajouter le fichier QuickRoute contenant la trace voulue. La carte du premier fichier sera utilisée comme fond de carte. Les formats de fichiers supportés sont les fichiers qrt et jpg exportés à partir d'une version de QuickRoute 2.3 et supérieure. Incl&ure la trace Inclure le 'repla&y' Replay Trace Ouvrir plusieurs fichiers QuickRoute dans Google Earth quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.it.resx000066400000000000000000000216641446222606700327330ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella 156, 79 infiniti 156, 99 156, 33 144, 13 &Intervallo di tempo in secondi 156, 3 156, 56 142, 13 &Durata della coda in secondi 80, 13 Visualizza &coda 107, 13 Riparti dopo ogni &giro 147, 13 Simula una partenza in &massa Aggiungi i file QuickRoute che contengono i percorsi desiderati. La mappa del primo file verrà utilizzato come sfondo. Formati dei file supportati sono QRT e JPEG esportati dalle versioni QuickRoute 2.3 e successive. 101, 17 Incl&udi percorso 88, 17 Includi repla&y Mostra nuovamente Percorso Apri più file Quickroute in Google Earth quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.lt.resx000066400000000000000000000224471446222606700327360ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Atšaukti 31, 13 &Failai 188, 79 neribotas 188, 99 188, 33 140, 13 Laiko &intervalas sekundėmis 188, 3 188, 56 129, 13 &Uodegos ilgis sekundėmis 81, 13 Rodyti uo&degas 179, 13 Startuoti iš naujo po kiekvieno &etapo 116, 13 Simuliuoti be&ndrą startą Įtraukite QuickRoute failus, kuriuose yra norimi prabėgimai. Pirmojo failo žemėlapis bus panaudotas kaip fono žemėlapis. Tinkami failų formatai apima qrt failus ir jpeg failus, perkeltus iš 2.3 arba vėlesnės QuickRoute versijos. 115, 17 Įtraukti &prabėgimus 152, 17 Įtraukti &bėgimo pakartojimą Bėgimo pakartojimas Prabėgimai Atidaryti keletą QuickRoute failų Google Earth programoje quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.no.resx000066400000000000000000000215431446222606700327270ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Halens &varighet i sekunder 600 30 15 60 2 10 Spill av på nytt 120 180 uendelig 240 300 Inkluder &ruter Inkluder ny &avspilling Tids&intervall i sekunder 30 5 OK Vis ha&ler 1 &Filer Ruter Simuler &fellesstart Avbryt 60 Åpne flere QuickRoute-filer i Google Earth Start på nytt etter hvert &strekk Legg til de QuickRoute-filene som inneholder den ønskede ruten. Kartet fra den første filen brukes som bakgrunnsbilde. Støttede filformater inkluderer qrt-filer og jpg-filer som er eksportert fra QuickRoute versjon 2.3 eller nyere. quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.resx000066400000000000000000001061411446222606700323120ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Left, Right Bottom, Left, Right 2 97, 13 6 3, 7, 3, 3 468, 55 75, 23 11, 24 24, 47 3, 6, 0, 3 2 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 0 12, 297 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 NoControl 3, 7, 3, 3 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 3, 7, 3, 3 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Left, Right tableLayoutPanel1 Simulate &mass start 6 11, 238 11, 24 tableLayoutPanel1 Show &tails NoControl Open multiple QuickRoute files in Google Earth 12, 77 Bottom, Left, Right tableLayoutPanel1 285, 21 False 1 5 replayRestartAfterEachLap 3, 7, 3, 3 15, 14 6, 13 routesGroupBox 3, 57 True NoControl 12, 9 Add the QuickRoute files that contain the desired routes. The map of the first file will be used as the background map. Supported file formats include qrt files and jpeg files exported from QuickRoute 2.3 and later. 4 9 NoControl 1 True 405, 480 324, 480 2 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 NoControl Replay tableLayoutPanel1 7 $this $this 0 15, 14 0 ok NoControl System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 3 55, 13 NoControl NoControl 121, 13 tableLayoutPanel1 replayTimeIntervalLabel 3, 6, 3, 3 OpenMultipleFilesInGoogleEarthDialog 15 True 150, 79 NoControl System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Restart after eac&h lap True 150, 56 Include repla&y replayTailsVisibleLabel System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True 30 replayTimeInterval 1 60 2 10 5 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="replayRestartAfterEachLap" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="replayTailsVisible" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="replayTailDurationLabel" Row="4" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="replayTailDuration" Row="4" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="replayTailsVisibleLabel" Row="3" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="replayRestartAfterEachLapLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="massStartLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="replayTimeIntervalLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="replayTimeInterval" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="massStart" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,20,Absolute,20" /></TableLayoutSettings> 180 15, 14 3, 7, 3, 3 468, 177 3 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 6 Bottom, Right 3, 7 QuickRoute.Controls.FileSelectorControl, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null 75, 23 0 3 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this NoControl 109, 13 1 filesLabel Time &interval in seconds 28, 13 NoControl System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routesGroupBox 8 NoControl 5 True includeReplay replayTailsVisible &Files Include ro&utes System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 replayGroupBox 6 3, 34 replayGroupBox NoControl 285, 21 150, 3 massStartLabel tableLayoutPanel1 Tail &duration time in seconds 5 150, 33 9 4 3, 6, 3, 3 0 $this $this 0 438, 124 141, 13 0 4 cancel 500, 500 replayGroupBox 0 System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 OK NoControl 469, 139 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 30 massStart replayTailDuration includeRoutes Top, Bottom, Left, Right Top, Left, Right 1 3, 103 0 replayRestartAfterEachLapLabel True uiInformation 92, 17 469, 53 CenterParent replayTailDurationLabel tableLayoutPanel1 492, 515 3, 80 True 150, 99 7 2 2 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 5 Routes 93, 17 System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 11, 93 Cancel 8 tableLayoutPanel1 Top, Left, Right tableLayoutPanel1 fileSelector 4, 4, 4, 4 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 120 Bottom, Right 4 60 600 infinite 240 300 True tableLayoutPanel1 $this True True True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.ru.resx000066400000000000000000000227561446222606700327500ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 44, 13 &Файлы 190, 79 беконечно 190, 99 190, 33 172, 13 Временной &интервал в секундах 190, 3 190, 56 135, 13 Длина &хвоста в секундах 109, 13 &Показывать хвосты 181, 13 Общий старт на &каждом перегоне 84, 13 &Общего старта Добавьте файлы QuickRoute, которые содержат интересующие Вас пути. При этом будет использована карта из первого файла. Поддерживаются файлы в формате qrt и jpeg, которые были экспортированы из QuickRoute версии 2.3 и больше. 101, 17 До&бавить пути 169, 17 Доба&вить воспроизведение Воспроизведение Пути Открыть несколько файлов QuikRoute в Google Earth quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.sv.resx000066400000000000000000000236321446222606700327440ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 26, 13 &Filer 155, 79 Top, Left oändlig 155, 99 99, 21 155, 6 115, 13 Tids&intervall i sekunder Top, Left 155, 26 99, 21 155, 56 89, 13 Simulera &masstart 115, 13 Svansl&ängd i sekunder 67, 13 Visa &svansar 146, 13 Starta om efter &varje mellantid Lägg till de QuickRoute-filer som innehåller önskade rutter. Kartan i den första filen kommer att användas som bakgrundskarta. Qrt-filer och jpeg-filer exporterade från QuickRoute 2.3 och senare stöds. 97, 17 Inkludera r&utter 148, 17 Inkludera &återuppspelning Återuppspelning Rutter NoControl Öppna flera QuickRoute-filer i Google Earth quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.Designer.cs000066400000000000000000000414111446222606700272330ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class PublishMapForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PublishMapForm)); this.cancel = new System.Windows.Forms.Button(); this.ok = new System.Windows.Forms.Button(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.date = new System.Windows.Forms.DateTimePicker(); this.commentLabel = new System.Windows.Forms.Label(); this.resultListUrlLabel = new System.Windows.Forms.Label(); this.usernameLabel = new System.Windows.Forms.Label(); this.webServiceLabel = new System.Windows.Forms.Label(); this.webServiceURL = new System.Windows.Forms.ComboBox(); this.username = new System.Windows.Forms.ComboBox(); this.passwordLabel = new System.Windows.Forms.Label(); this.password = new System.Windows.Forms.TextBox(); this.mapLabel = new System.Windows.Forms.Label(); this.map = new System.Windows.Forms.ComboBox(); this.dateLabel = new System.Windows.Forms.Label(); this.nameLabel = new System.Windows.Forms.Label(); this.mapNameLabel = new System.Windows.Forms.Label(); this.organiserLabel = new System.Windows.Forms.Label(); this.countryLabel = new System.Windows.Forms.Label(); this.disciplineLabel = new System.Windows.Forms.Label(); this.relayLegLabel = new System.Windows.Forms.Label(); this.name = new System.Windows.Forms.TextBox(); this.mapName = new System.Windows.Forms.TextBox(); this.organiser = new System.Windows.Forms.TextBox(); this.country = new System.Windows.Forms.TextBox(); this.type = new System.Windows.Forms.TextBox(); this.relayLeg = new System.Windows.Forms.TextBox(); this.resultListUrl = new System.Windows.Forms.TextBox(); this.comment = new System.Windows.Forms.TextBox(); this.imageFormat = new System.Windows.Forms.ComboBox(); this.imageFormatLabel = new System.Windows.Forms.Label(); this.category = new System.Windows.Forms.ComboBox(); this.categoryLabel = new System.Windows.Forms.Label(); this.panel1 = new System.Windows.Forms.Panel(); this.ConnectButton = new System.Windows.Forms.Button(); this.SavePassword = new System.Windows.Forms.CheckBox(); this.uiInformation = new System.Windows.Forms.LinkLabel(); this.tableLayoutPanel1.SuspendLayout(); this.panel1.SuspendLayout(); this.SuspendLayout(); // // cancel // resources.ApplyResources(this.cancel, "cancel"); this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // ok // resources.ApplyResources(this.ok, "ok"); this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // tableLayoutPanel1 // resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1"); this.tableLayoutPanel1.Controls.Add(this.date, 1, 6); this.tableLayoutPanel1.Controls.Add(this.commentLabel, 0, 15); this.tableLayoutPanel1.Controls.Add(this.resultListUrlLabel, 0, 14); this.tableLayoutPanel1.Controls.Add(this.usernameLabel, 0, 1); this.tableLayoutPanel1.Controls.Add(this.webServiceLabel, 0, 0); this.tableLayoutPanel1.Controls.Add(this.webServiceURL, 1, 0); this.tableLayoutPanel1.Controls.Add(this.username, 1, 1); this.tableLayoutPanel1.Controls.Add(this.passwordLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.password, 1, 2); this.tableLayoutPanel1.Controls.Add(this.mapLabel, 0, 5); this.tableLayoutPanel1.Controls.Add(this.map, 1, 5); this.tableLayoutPanel1.Controls.Add(this.dateLabel, 0, 6); this.tableLayoutPanel1.Controls.Add(this.nameLabel, 0, 8); this.tableLayoutPanel1.Controls.Add(this.mapNameLabel, 0, 9); this.tableLayoutPanel1.Controls.Add(this.organiserLabel, 0, 10); this.tableLayoutPanel1.Controls.Add(this.countryLabel, 0, 11); this.tableLayoutPanel1.Controls.Add(this.disciplineLabel, 0, 12); this.tableLayoutPanel1.Controls.Add(this.relayLegLabel, 0, 13); this.tableLayoutPanel1.Controls.Add(this.name, 1, 8); this.tableLayoutPanel1.Controls.Add(this.mapName, 1, 9); this.tableLayoutPanel1.Controls.Add(this.organiser, 1, 10); this.tableLayoutPanel1.Controls.Add(this.country, 1, 11); this.tableLayoutPanel1.Controls.Add(this.type, 1, 12); this.tableLayoutPanel1.Controls.Add(this.relayLeg, 1, 13); this.tableLayoutPanel1.Controls.Add(this.resultListUrl, 1, 14); this.tableLayoutPanel1.Controls.Add(this.comment, 1, 15); this.tableLayoutPanel1.Controls.Add(this.imageFormat, 1, 16); this.tableLayoutPanel1.Controls.Add(this.imageFormatLabel, 0, 16); this.tableLayoutPanel1.Controls.Add(this.category, 1, 7); this.tableLayoutPanel1.Controls.Add(this.categoryLabel, 0, 7); this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 3); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; // // date // resources.ApplyResources(this.date, "date"); this.date.Format = System.Windows.Forms.DateTimePickerFormat.Custom; this.date.Name = "date"; // // commentLabel // resources.ApplyResources(this.commentLabel, "commentLabel"); this.commentLabel.Name = "commentLabel"; // // resultListUrlLabel // resources.ApplyResources(this.resultListUrlLabel, "resultListUrlLabel"); this.resultListUrlLabel.Name = "resultListUrlLabel"; // // usernameLabel // resources.ApplyResources(this.usernameLabel, "usernameLabel"); this.usernameLabel.Name = "usernameLabel"; // // webServiceLabel // resources.ApplyResources(this.webServiceLabel, "webServiceLabel"); this.webServiceLabel.Name = "webServiceLabel"; // // webServiceURL // resources.ApplyResources(this.webServiceURL, "webServiceURL"); this.webServiceURL.FormattingEnabled = true; this.webServiceURL.Name = "webServiceURL"; this.webServiceURL.SelectedIndexChanged += new System.EventHandler(this.webServiceURL_SelectedIndexChanged); this.webServiceURL.Enter += new System.EventHandler(this.control_Enter); this.webServiceURL.Leave += new System.EventHandler(this.webServiceURL_Leave); // // username // resources.ApplyResources(this.username, "username"); this.username.FormattingEnabled = true; this.username.Name = "username"; this.username.SelectedIndexChanged += new System.EventHandler(this.username_SelectedIndexChanged); this.username.Enter += new System.EventHandler(this.control_Enter); this.username.Leave += new System.EventHandler(this.username_Leave); // // passwordLabel // resources.ApplyResources(this.passwordLabel, "passwordLabel"); this.passwordLabel.Name = "passwordLabel"; // // password // resources.ApplyResources(this.password, "password"); this.password.Name = "password"; this.password.UseSystemPasswordChar = true; this.password.Enter += new System.EventHandler(this.control_Enter); // // mapLabel // resources.ApplyResources(this.mapLabel, "mapLabel"); this.mapLabel.Name = "mapLabel"; // // map // resources.ApplyResources(this.map, "map"); this.map.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.map.FormattingEnabled = true; this.map.Name = "map"; this.map.SelectedIndexChanged += new System.EventHandler(this.map_SelectedIndexChanged); this.map.Enter += new System.EventHandler(this.control_Enter); // // dateLabel // resources.ApplyResources(this.dateLabel, "dateLabel"); this.dateLabel.Name = "dateLabel"; // // nameLabel // resources.ApplyResources(this.nameLabel, "nameLabel"); this.nameLabel.Name = "nameLabel"; // // mapNameLabel // resources.ApplyResources(this.mapNameLabel, "mapNameLabel"); this.mapNameLabel.Name = "mapNameLabel"; // // organiserLabel // resources.ApplyResources(this.organiserLabel, "organiserLabel"); this.organiserLabel.Name = "organiserLabel"; // // countryLabel // resources.ApplyResources(this.countryLabel, "countryLabel"); this.countryLabel.Name = "countryLabel"; // // disciplineLabel // resources.ApplyResources(this.disciplineLabel, "disciplineLabel"); this.disciplineLabel.Name = "disciplineLabel"; // // relayLegLabel // resources.ApplyResources(this.relayLegLabel, "relayLegLabel"); this.relayLegLabel.Name = "relayLegLabel"; // // name // resources.ApplyResources(this.name, "name"); this.name.Name = "name"; this.name.Enter += new System.EventHandler(this.control_Enter); // // mapName // resources.ApplyResources(this.mapName, "mapName"); this.mapName.Name = "mapName"; this.mapName.Enter += new System.EventHandler(this.control_Enter); // // organiser // resources.ApplyResources(this.organiser, "organiser"); this.organiser.Name = "organiser"; this.organiser.Enter += new System.EventHandler(this.control_Enter); // // country // resources.ApplyResources(this.country, "country"); this.country.Name = "country"; this.country.Enter += new System.EventHandler(this.control_Enter); // // type // resources.ApplyResources(this.type, "type"); this.type.Name = "type"; this.type.Enter += new System.EventHandler(this.control_Enter); // // relayLeg // resources.ApplyResources(this.relayLeg, "relayLeg"); this.relayLeg.Name = "relayLeg"; this.relayLeg.Enter += new System.EventHandler(this.control_Enter); // // resultListUrl // resources.ApplyResources(this.resultListUrl, "resultListUrl"); this.resultListUrl.Name = "resultListUrl"; this.resultListUrl.Enter += new System.EventHandler(this.control_Enter); // // comment // resources.ApplyResources(this.comment, "comment"); this.comment.Name = "comment"; this.comment.Enter += new System.EventHandler(this.control_Enter); // // imageFormat // resources.ApplyResources(this.imageFormat, "imageFormat"); this.imageFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.imageFormat.FormattingEnabled = true; this.imageFormat.Items.AddRange(new object[] { resources.GetString("imageFormat.Items"), resources.GetString("imageFormat.Items1")}); this.imageFormat.Name = "imageFormat"; this.imageFormat.Enter += new System.EventHandler(this.control_Enter); // // imageFormatLabel // resources.ApplyResources(this.imageFormatLabel, "imageFormatLabel"); this.imageFormatLabel.Name = "imageFormatLabel"; // // category // resources.ApplyResources(this.category, "category"); this.category.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.category.FormattingEnabled = true; this.category.Name = "category"; // // categoryLabel // resources.ApplyResources(this.categoryLabel, "categoryLabel"); this.categoryLabel.Name = "categoryLabel"; // // panel1 // this.panel1.Controls.Add(this.ConnectButton); this.panel1.Controls.Add(this.SavePassword); resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; // // ConnectButton // resources.ApplyResources(this.ConnectButton, "ConnectButton"); this.ConnectButton.Name = "ConnectButton"; this.ConnectButton.UseVisualStyleBackColor = true; this.ConnectButton.Click += new System.EventHandler(this.connectButton_Click); // // SavePassword // resources.ApplyResources(this.SavePassword, "SavePassword"); this.SavePassword.Name = "SavePassword"; this.SavePassword.UseVisualStyleBackColor = true; // // uiInformation // resources.ApplyResources(this.uiInformation, "uiInformation"); this.uiInformation.BackColor = System.Drawing.SystemColors.Info; this.uiInformation.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.uiInformation.Name = "uiInformation"; this.uiInformation.TabStop = true; this.uiInformation.UseCompatibleTextRendering = true; this.uiInformation.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.uiInformation_LinkClicked); // // PublishMapForm // this.AcceptButton = this.ok; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.Controls.Add(this.uiInformation); this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.ok); this.Controls.Add(this.cancel); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "PublishMapForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); this.panel1.ResumeLayout(false); this.panel1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button cancel; private System.Windows.Forms.Button ok; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.Label usernameLabel; private System.Windows.Forms.Label webServiceLabel; private System.Windows.Forms.ComboBox webServiceURL; private System.Windows.Forms.ComboBox username; private System.Windows.Forms.Label passwordLabel; private System.Windows.Forms.TextBox password; private System.Windows.Forms.Label mapLabel; private System.Windows.Forms.ComboBox map; private System.Windows.Forms.Label dateLabel; private System.Windows.Forms.Label nameLabel; private System.Windows.Forms.Label mapNameLabel; private System.Windows.Forms.Label organiserLabel; private System.Windows.Forms.Label countryLabel; private System.Windows.Forms.Label disciplineLabel; private System.Windows.Forms.Label commentLabel; private System.Windows.Forms.Label resultListUrlLabel; private System.Windows.Forms.Label relayLegLabel; private System.Windows.Forms.TextBox name; private System.Windows.Forms.TextBox mapName; private System.Windows.Forms.TextBox organiser; private System.Windows.Forms.TextBox country; private System.Windows.Forms.TextBox type; private System.Windows.Forms.TextBox relayLeg; private System.Windows.Forms.TextBox resultListUrl; private System.Windows.Forms.TextBox comment; private System.Windows.Forms.LinkLabel uiInformation; private System.Windows.Forms.DateTimePicker date; private System.Windows.Forms.ComboBox imageFormat; private System.Windows.Forms.Label imageFormatLabel; private System.Windows.Forms.ComboBox category; private System.Windows.Forms.Label categoryLabel; private System.Windows.Forms.Panel panel1; private System.Windows.Forms.Button ConnectButton; private System.Windows.Forms.CheckBox SavePassword; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.cs000066400000000000000000000332061446222606700254770ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.Common; using QuickRoute.Resources; using QuickRoute.UI.Classes; namespace QuickRoute.UI.Forms { public partial class PublishMapForm : Form { private List allMaps = new List(); private readonly IMapPublisher mapPublisher = new Publishers.DOMAPublisher.DOMAPublisher(); private readonly Document document; private readonly ColorRangeProperties colorRangeProperties; private readonly WaypointAttribute colorCodingAttribute; private readonly WaypointAttribute? secondaryColorCodingAttribute; public PublishMapForm(Document document, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, ColorRangeProperties colorRangeProperties) { InitializeComponent(); this.document = document; this.colorCodingAttribute = colorCodingAttribute; this.secondaryColorCodingAttribute = secondaryColorCodingAttribute; this.colorRangeProperties = colorRangeProperties; foreach (var setting in Util.ApplicationSettings.PublishMapSettings) { if (!webServiceURL.Items.Contains(setting.WebServiceURL)) { webServiceURL.Items.Add(setting.WebServiceURL); } } if (webServiceURL.Items.Count > 0) webServiceURL.SelectedIndex = 0; var defaultTime = DateTime.Now.ToLocalTime().Date; if (document.Sessions.Count > 0 && document.Sessions[0].Route.FirstWaypoint != null) { defaultTime = document.Sessions[0].Route.FirstWaypoint.Time.ToLocalTime(); } date.Value = defaultTime; SetControlEnabledState(false); imageFormat.SelectedIndex = 0; } #region Event handlers private void ok_Click(object sender, EventArgs e) { PublishMap(); } private void webServiceURL_SelectedIndexChanged(object sender, EventArgs e) { PopulateUsernameComboBox(); if (username.Items.Count > 0) username.SelectedIndex = 0; } private void username_SelectedIndexChanged(object sender, EventArgs e) { foreach (var setting in Util.ApplicationSettings.PublishMapSettings) { if (webServiceURL.Text == setting.WebServiceURL && username.Text == setting.Username) { password.Text = setting.Password; SavePassword.Checked = (setting.Password != null); break; } } } private void cancel_Click(object sender, EventArgs e) { Close(); } private void connectButton_Click(object sender, EventArgs e) { Connect(); } private void map_SelectedIndexChanged(object sender, EventArgs e) { var selectedMap = map.SelectedItem as MapInfo; if (!(selectedMap != null && selectedMap.ID != 0)) { var defaultTime = DateTime.Now.ToLocalTime().Date; if (document.Sessions.Count > 0 && document.Sessions[0].Route.FirstWaypoint != null) { defaultTime = document.Sessions[0].Route.FirstWaypoint.Time.ToLocalTime(); } selectedMap = new MapInfo { Date = defaultTime }; } SetControlValues(selectedMap); } private void uiInformation_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start(Strings.DomaWebsiteUrl); } private void control_Enter(object sender, EventArgs e) { if (sender is ComboBox) { (sender as ComboBox).SelectAll(); } if (sender is TextBox) { (sender as TextBox).SelectAll(); } } private void webServiceURL_Leave(object sender, EventArgs e) { if (!string.IsNullOrEmpty(webServiceURL.Text) && !webServiceURL.Text.Contains("://")) webServiceURL.Text = "http://" + webServiceURL.Text; } private void username_Leave(object sender, EventArgs e) { var found = false; foreach (var setting in Util.ApplicationSettings.PublishMapSettings) { if (webServiceURL.Text == setting.WebServiceURL && username.Text == setting.Username) { password.Text = setting.Password; SavePassword.Checked = (setting.Password != null); found = true; break; } } if (!found) { password.Text = ""; SavePassword.Checked = false; } } #endregion #region Logic private void PublishMap() { Cursor = Cursors.WaitCursor; MapInfo mi = CreateMapInfoFromControls(); Cursor = Cursors.Default; if (mi == null) return; // user canceled Cursor = Cursors.WaitCursor; var result = mapPublisher.Publish(mi); Cursor = Cursors.Default; if (result.Success) { var message = string.Format(Strings.MapPublish_Success, result.URL); MessageBox.Show(message, Strings.MapPublish_SuccessTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); Close(); } else { MessageBox.Show(result.ErrorMessage, Strings.MapPublish_FailureTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); } } private MapInfo CreateMapInfoFromControls() { MapInfo mapInfo = new MapInfo(); var selectedMap = map.SelectedValue as MapInfo; if (selectedMap != null) mapInfo.ID = selectedMap.ID; mapInfo.Date = date.Value.ToUniversalTime(); var selectedCategory = category.SelectedItem as Category; if (selectedCategory != null) mapInfo.CategoryID = selectedCategory.ID; mapInfo.Name = name.Text; mapInfo.MapName = mapName.Text; mapInfo.Organiser = organiser.Text; mapInfo.Country = country.Text; mapInfo.Discipline = type.Text; mapInfo.RelayLeg = relayLeg.Text; mapInfo.ResultListUrl = resultListUrl.Text; mapInfo.Comment = comment.Text; mapInfo.MapImageFileExtension = imageFormat.Text; IMapImageFileExporterDialog selector = null; switch (imageFormat.Text) { case "jpg": selector = new JpegPropertySelector { SizeCalculator = document.CalculateImageForExportSize }; break; case "png": default: selector = new PngPropertySelector { SizeCalculator = document.CalculateImageForExportSize }; break; //case "tiff": // selector = new TiffPropertySelector // { // SizeCalculator = document.CalculateImageForExportSize // }; // break; } if (selector.ShowPropertyDialog() == DialogResult.OK) { Application.DoEvents(); // map image using (var ms = new MemoryStream()) { var imageExporterProperties = new ImageExporterProperties() { EncodingInfo = selector.EncodingInfo, RouteDrawingMode = Document.RouteDrawingMode.Extended, ColorCodingAttribute = colorCodingAttribute, SecondaryColorCodingAttribute = secondaryColorCodingAttribute, PercentualSize = selector.PercentualImageSize, ColorRangeProperties = colorRangeProperties }; var imageExporter = new ImageExporter(document, document.Sessions, ms) { Properties = imageExporterProperties }; imageExporter.Export(); mapInfo.MapImageData = ms.ToArray(); } // blank map image using (var ms = new MemoryStream()) { var imageExporterProperties = new ImageExporterProperties() { EncodingInfo = selector.EncodingInfo, RouteDrawingMode = Document.RouteDrawingMode.None, PercentualSize = selector.PercentualImageSize }; var blankImageExporter = new ImageExporter(document, document.Sessions, ms) { Properties = imageExporterProperties }; blankImageExporter.Export(); mapInfo.BlankMapImageData = ms.ToArray(); } return mapInfo; } return null; } private void Connect() { mapPublisher.Password = password.Text; mapPublisher.Username = username.Text; mapPublisher.WebServiceUrl = webServiceURL.Text; allMaps.Clear(); ConnectResult connectResult; GetAllMapsResult getAllMapsResult = null; GetAllCategoriesResult getAllCategoriesResult = null; try { Cursor = Cursors.WaitCursor; connectResult = mapPublisher.Connect(); Cursor = Cursors.Default; if (connectResult.Success) { Cursor = Cursors.WaitCursor; SaveConnectionSettings(); PopulateUsernameComboBox(); getAllMapsResult = GetAllMaps(); getAllCategoriesResult = mapPublisher.GetAllCategories(); } } catch (Exception ex) { connectResult = new ConnectResult { Success = false, ErrorMessage = ex.Message, Version = null }; } Cursor = Cursors.Default; map.DataSource = allMaps; var success = true; if (!connectResult.Success) { MessageBox.Show(connectResult.ErrorMessage, Strings.Error_MapPublishCommunication, MessageBoxButtons.OK, MessageBoxIcon.Error); success = false; } if (getAllMapsResult != null && !getAllMapsResult.Success) { MessageBox.Show(getAllMapsResult.ErrorMessage, Strings.Error_MapPublishCommunication, MessageBoxButtons.OK, MessageBoxIcon.Error); success = false; } if (getAllCategoriesResult != null && !getAllCategoriesResult.Success) { MessageBox.Show(getAllCategoriesResult.ErrorMessage, Strings.Error_MapPublishCommunication, MessageBoxButtons.OK, MessageBoxIcon.Error); success = false; } if (getAllCategoriesResult != null) category.DataSource = getAllCategoriesResult.Categories; SetControlEnabledState(success); if (map.Items.Count > 0) map.SelectedIndex = 0; } private GetAllMapsResult GetAllMaps() { GetAllMapsResult getAllMapsResult = mapPublisher.GetAllMaps(); if (getAllMapsResult.Success) { allMaps = getAllMapsResult.Maps; var newMap = new MapInfo { ID = 0, Name = string.Format("[{0}]", Strings.NewMap) }; allMaps.Insert(0, newMap); } return getAllMapsResult; } private void SetControlEnabledState(bool enabled) { mapLabel.Enabled = enabled; dateLabel.Enabled = enabled; categoryLabel.Enabled = enabled; nameLabel.Enabled = enabled; mapNameLabel.Enabled = enabled; organiserLabel.Enabled = enabled; countryLabel.Enabled = enabled; disciplineLabel.Enabled = enabled; commentLabel.Enabled = enabled; resultListUrlLabel.Enabled = enabled; relayLegLabel.Enabled = enabled; imageFormatLabel.Enabled = enabled; map.Enabled = enabled; date.Enabled = enabled; category.Enabled = enabled; name.Enabled = enabled; mapName.Enabled = enabled; organiser.Enabled = enabled; country.Enabled = enabled; type.Enabled = enabled; relayLeg.Enabled = enabled; resultListUrl.Enabled = enabled; comment.Enabled = enabled; imageFormat.Enabled = enabled; ok.Enabled = enabled; } private void SetControlValues(MapInfo mapInfo) { date.Value = mapInfo.Date.ToLocalTime(); name.Text = mapInfo.Name; mapName.Text = mapInfo.MapName; foreach (var c in category.Items) { if (c is Category && (c as Category).ID == mapInfo.CategoryID) category.SelectedItem = c; } organiser.Text = mapInfo.Organiser; country.Text = mapInfo.Country; type.Text = mapInfo.Discipline; relayLeg.Text = mapInfo.RelayLeg; resultListUrl.Text = mapInfo.ResultListUrl; comment.Text = mapInfo.Comment; } private void SaveConnectionSettings() { bool found = false; foreach (var setting in Util.ApplicationSettings.PublishMapSettings) { if (webServiceURL.Text == setting.WebServiceURL && setting.Username == username.Text) { setting.Username = username.Text; setting.Password = SavePassword.Checked ? password.Text : null; found = true; Util.ApplicationSettings.PublishMapSettings.Remove(setting); Util.ApplicationSettings.PublishMapSettings.Insert(0, setting); break; } } if (!found) { var setting = new PublishMapSettingsItem { WebServiceURL = webServiceURL.Text, Username = username.Text, Password = SavePassword.Checked ? password.Text : null }; Util.ApplicationSettings.PublishMapSettings.Insert(0, setting); } } private void PopulateUsernameComboBox() { username.Items.Clear(); foreach (var setting in Util.ApplicationSettings.PublishMapSettings) { if (webServiceURL.Text == setting.WebServiceURL) { username.Items.Add(setting.Username); } } } #endregion } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.da.resx000066400000000000000000000275341446222606700264450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd 148, 154 60, 13 Kommen&tar 87, 13 &Link til reultatliste 62, 13 &Brugernavn 67, 13 &Webadresse 148, 3 148, 30 148, 56 26, 13 &Kort 148, 127 &Dato 139, 13 &Træning/konkurrence navn 93, 13 Kort/område &navn 47, 13 &Arrangør 31, 13 La&nd 88, 13 Konkurren&ceform 47, 13 &Stafettur 148, 206 148, 232 148, 258 148, 284 148, 310 148, 336 148, 362 148, 388 148, 455 67, 13 Billede&format 148, 180 46, 13 Kategor&i Tilsl&ut 99, 17 &Husk password 148, 82 612, 480 139, 22 QuickRoute kan offentliggøre kort på internettet i et digitalt kortarkiv. Information om hvordan et digitalt kortarkiv etableres findes på www.matstroeng.se/doma. Webadressen for et klubkortarkiv med mange brugere kan eksempelvis være: http://www.klubdomæne.dk/klubkortarkiv/webservice.php Offentliggør kort quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.de.resx000066400000000000000000000305541446222606700264450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen 143, 154 60, 13 Ko&mmentar 106, 13 Link zur &Ergebnisliste 75, 13 Benutzer&name 105, 13 &Webservice Adresse 143, 3 143, 30 50, 13 &Passwort 143, 56 32, 13 &Karte 143, 127 38, 13 &Datum 134, 13 Tra&ining- /Wettkampfname 68, 13 Karte/&Gebiet 61, 13 &Organisator 31, 13 &Land 45, 13 Dis&ziplin 72, 13 Sta&ffelstrecke 143, 206 143, 232 143, 258 143, 284 143, 310 143, 336 143, 362 143, 388 JPG PNG 143, 455 53, 13 &Bildformat 143, 180 52, 13 Ka&tegorie &Verbinden 118, 17 Passwort &speichern 143, 82 607, 480 152, 22 QuickRoute kann Karten in einem digitalen Orientierungslaufkartenarchiv veröffentlichen. Eine Anleitung zum Erstellen eines eigenen Archivs gibt es auf www.matstroeng.se/doma. Die Webservice-Adresse für dein Archiv lautet in etwa http://www.deinedomain.com/deinordner/webservice.php Karte veröffentlichen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.fi.resx000066400000000000000000000332741446222606700264550ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta 139, 154 464, 20 56, 13 Komme&ntti 90, 13 &Linkki tuloslistaan 77, 13 &Käyttäjätunnus 95, 13 &Webservice-osoite 139, 3 464, 21 139, 30 464, 20 51, 13 &Salasana 139, 56 464, 20 35, 13 &Kartta 139, 127 464, 21 63, 13 &Päivämäärä 130, 13 &Harjoituksen/kilpailun nimi 96, 13 Kartan/alueen &nimi 51, 13 &Järjestäjä 28, 13 &Maa 31, 13 Sa&rja 60, 13 &Viestiosuus 139, 206 464, 20 139, 232 464, 20 139, 258 464, 20 139, 284 464, 20 139, 310 464, 20 139, 336 464, 20 139, 362 464, 20 139, 388 464, 61 139, 455 464, 21 72, 13 Kuva&formaatti 139, 180 464, 21 52, 13 Kate&goria 139, 82 &Yhdistä 102, 17 Muista s&alasana 127, 22 QuickRoute voi julkaista karttoja digitaaliseen suunnistuskartta-arkistoon. Löydät ohjeet oman arkiston pystyttämiseen sivulta www.matstroeng.se/doma. Webservice -osoite sinun arkistoosi on muotoa: http://www.sinundomain.com/sinunhakemisto/webservice.php. Julkaise kartta quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.fr.resx000066400000000000000000000175021446222606700264620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler Comme&ntaires &Lier aux résultats Nom d'&utilisateur Adresse du '&webservice' &Mot de passe &Carte Nom de l'entrainement/compé&tition &Nom de la carte &Organisateur &Pays &Format de l'image Mém&oriser mon mot de passe QuickRoute peut publier la carte dans une 'Digital Orienteering Map Archive' (DOMA). Les instructions pour créer votre propre archive sont disponibles à www.matstroeng.se/doma. L'adresse du 'webservice' est du style : http://www.votredomaine.com/votre_sousdossier/webservice.php Publier la carte &Relais Catégor&ie &Connecter quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.it.resx000066400000000000000000000324731446222606700264730ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella 132, 154 471, 20 57, 13 Comme&nto 117, 13 Co&llegamento ai risultati 68, 13 Nome &utente 123, 13 Indirizzo del servizio &web 132, 3 471, 21 132, 30 471, 20 132, 56 471, 20 40, 13 &Mappa 132, 127 471, 21 &Data 121, 13 Nome &allenamento/gara 96, 13 &Nome mappa/area 79, 13 &Organizzazione 46, 13 &Nazione D&isciplina 88, 13 F&razione staffetta 132, 206 471, 20 132, 232 471, 20 132, 258 471, 20 132, 284 471, 20 132, 310 471, 20 132, 336 471, 20 132, 362 471, 20 132, 388 471, 61 132, 455 471, 21 92, 13 &Formato immagine 132, 180 471, 21 52, 13 Categor&ia &Connetti 122, 17 R&icorda la password 132, 82 162, 22 Con QuickRoute è possibile pubblicare le mappe su un archivio digitale di cartina di orienteering. Istruzioni per come creare il vostro archivio sono presenti su www.matstroeng.se/doma. L'indirizzo web service per il vostro archivio è qualcosa di simile http://www.yourdomain.com/yoursubfolder/webservice.php. Pubblica mappa quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.lt.resx000066400000000000000000000311071446222606700264670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 573, 551 Atšaukti 492, 551 Gerai 637, 480 173, 154 63, 13 &Komentaras 101, 13 Nuoroda į &rezultatus 84, 13 Vartotojo &vardas 86, 13 Serverio &adresas 173, 3 173, 30 61, 13 &Slaptažodis 173, 56 55, 13 &Žemėlapis 173, 127 &Data 164, 13 &Treniruotės/varžybų pavadinimas 163, 13 Žemėlapio/vietovės &pavadinimas 74, 13 &Organizatorius 47, 13 Valst&ybė Dis&ciplina 86, 13 Estafečių &etapas 173, 206 173, 232 173, 258 173, 284 173, 310 173, 336 173, 362 173, 388 173, 455 82, 13 Vaizdo &formatas 173, 180 54, 13 Kategori&ja 173, 82 Prisij&ungti 114, 17 Atsiminti s&laptažodį 158, 22 633, 53 Naudojant QuickRoute programą galima publikuoti žemėlapius skaitmeniniame žemėlapių archyve. Nurodymai kaip susikurti asmeninį archyvą yra pateikti puslapyje www.matstroeng.se/doma. Serverio adresas jūsų archyvui yra kažkas panašaus į http://www.yourdomain.com/yoursubfolder/webservice.php. 660, 586 Publikuoti žemėlapį quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.no.resx000066400000000000000000000343371446222606700264740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 560, 551 Avbryt 479, 551 623, 480 156, 154 464, 20 69, 13 Kom&mentarer 92, 13 &Link til resultatliste 62, 13 Br&ukernavn 67, 13 &Webadresse 156, 3 464, 21 156, 30 464, 20 45, 13 &Passord 156, 56 464, 20 26, 13 &Kart 156, 127 464, 21 &Dato 147, 13 &Navn på trening/konkurranse 102, 13 Na&vn på kart/utsnitt 36, 13 &Ordne 31, 13 L&and 40, 13 D&isiplin 38, 13 S&trekk 156, 206 464, 20 156, 232 464, 20 156, 258 464, 20 156, 284 464, 20 156, 310 464, 20 156, 336 464, 20 156, 362 464, 20 156, 388 464, 61 156, 455 464, 21 59, 13 Bilde&format 156, 180 464, 21 46, 13 Kate&gori 156, 82 Ko&ble til 91, 17 &Husk passord 122, 22 620, 53 QuickRoute kan publisere kart til et digitalt kartarkiv. Instrukser for hvordan du oppretter ditt eget arkiv finner du på www.matstroeng.se/doma. Webadressen for ditt arkiv blir noe i retning http://www.dittdomene.com/dinundermappe/webservice.php. 647, 586 655, 601 Publiser kart quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.resx000066400000000000000000001567611446222606700260670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Bottom, Right 543, 551 75, 23 2 Cancel cancel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 3 Bottom, Right 462, 551 75, 23 1 OK ok System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 Bottom, Left, Right True 2 Top, Left, Right yyyy-MM-dd HH:mm 142, 154 461, 20 10 date System.Windows.Forms.DateTimePicker, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 0 True NoControl 3, 392 3, 7, 3, 0 51, 13 27 Comme&nt MiddleLeft commentLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 1 True NoControl 3, 366 3, 7, 3, 0 82, 13 25 &Link to result list MiddleLeft resultListUrlLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 2 True NoControl 3, 34 3, 7, 3, 0 55, 13 2 &Username MiddleLeft usernameLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 3 True 3, 7 3, 7, 3, 0 104, 13 0 &Webservice address MiddleLeft webServiceLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 4 Top, Left, Right 142, 3 461, 21 1 webServiceURL System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 5 Top, Left, Right 142, 30 461, 20 3 username System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 6 True NoControl 3, 60 3, 7, 3, 0 53, 13 4 &Password MiddleLeft passwordLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 7 Top, Left, Right 142, 56 461, 20 5 password System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 8 True NoControl 3, 131 3, 7, 3, 0 28, 13 7 &Map MiddleLeft mapLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 9 Top, Left, Right 142, 127 461, 21 8 map System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 10 True NoControl 3, 158 3, 7, 3, 0 30, 13 9 &Date MiddleLeft dateLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 11 True NoControl 3, 210 3, 7, 3, 0 133, 13 13 &Training/competition name MiddleLeft nameLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 12 True NoControl 3, 236 3, 7, 3, 0 83, 13 15 Map/area &name MiddleLeft mapNameLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 13 True NoControl 3, 262 3, 7, 3, 0 52, 13 17 &Organiser MiddleLeft organiserLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 14 True NoControl 3, 288 3, 7, 3, 0 43, 13 19 &Country MiddleLeft countryLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 15 True NoControl 3, 314 3, 7, 3, 0 52, 13 21 D&iscipline MiddleLeft disciplineLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 16 True NoControl 3, 340 3, 7, 3, 0 51, 13 23 &Relay leg MiddleLeft relayLegLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 17 Top, Left, Right 142, 206 461, 20 14 name System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 18 Top, Left, Right 142, 232 461, 20 16 mapName System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 19 Top, Left, Right 142, 258 461, 20 18 organiser System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 20 Top, Left, Right 142, 284 461, 20 20 country System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 21 Top, Left, Right 142, 310 461, 20 22 type System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 22 Top, Left, Right 142, 336 461, 20 24 relayLeg System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 23 Top, Left, Right 142, 362 461, 20 26 resultListUrl System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 24 Top, Left, Right 142, 388 True Vertical 461, 61 28 comment System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 25 Top, Left, Right jpg png 142, 455 461, 21 30 imageFormat System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 26 True NoControl 3, 459 3, 7, 3, 0 68, 13 29 Image &format MiddleLeft imageFormatLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 27 Top, Left, Right 142, 180 461, 21 12 category System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 28 True NoControl 3, 184 3, 7, 3, 0 49, 13 11 Categor&y MiddleLeft categoryLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 29 Top, Right NoControl 386, 0 3, 3, 3, 19 75, 23 1 &Connect ConnectButton System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 0 True NoControl 3, 3 125, 17 0 Remem&ber password SavePassword System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 panel1 1 142, 82 461, 39 6 panel1 System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tableLayoutPanel1 30 12, 65 17 606, 480 0 tableLayoutPanel1 System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="date" Row="6" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="commentLabel" Row="15" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="resultListUrlLabel" Row="14" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="usernameLabel" Row="1" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="webServiceLabel" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="webServiceURL" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="username" Row="1" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="passwordLabel" Row="2" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="password" Row="2" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="mapLabel" Row="5" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="map" Row="5" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="dateLabel" Row="6" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="nameLabel" Row="8" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="mapNameLabel" Row="9" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="organiserLabel" Row="10" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="countryLabel" Row="11" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="disciplineLabel" Row="12" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="relayLegLabel" Row="13" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="name" Row="8" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="mapName" Row="9" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="organiser" Row="10" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="country" Row="11" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="type" Row="12" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="relayLeg" Row="13" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="resultListUrl" Row="14" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="comment" Row="15" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="imageFormat" Row="16" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="imageFormatLabel" Row="16" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="category" Row="7" RowSpan="1" Column="1" ColumnSpan="1" /><Control Name="categoryLabel" Row="7" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="panel1" Row="3" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,26,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,AutoSize,0,Absolute,14,Absolute,20" /></TableLayoutSettings> Top, Bottom, Left, Right NoControl 131, 22 12, 9 4, 4, 4, 4 603, 53 0 QuickRoute can publish maps to a digital orienteering map archive. Instructions for how to create your own archive are provided at www.matstroeng.se/doma. The web service address for your archive is something like http://www.yourdomain.com/yoursubfolder/webservice.php. uiInformation System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 True 6, 13 630, 586 638, 601 CenterParent Publish map PublishMapForm System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.ru.resx000066400000000000000000000340721446222606700265020ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 132, 154 471, 20 77, 13 Ко&мментарий 123, 13 Ссылка на &результаты 80, 13 &Пользователь Адрес ве&б-сервиса 132, 3 471, 21 132, 30 471, 20 45, 13 П&ароль 132, 56 471, 20 37, 13 &Карта 132, 127 471, 21 33, 13 &Дата 94, 13 &Название старта 91, 13 Название карт&ы 73, 13 Ор&ганизатор С&трана 63, 13 Д&истанция 84, 13 &Этап эстафеты 132, 206 471, 20 132, 232 471, 20 132, 258 471, 20 132, 284 471, 20 132, 310 471, 20 132, 336 471, 20 132, 362 471, 20 132, 388 471, 61 132, 455 471, 21 120, 13 &Формат изображения 132, 180 471, 21 60, 13 Кат&егория 132, 82 471, 39 396, 0 &Соединиться 121, 17 &Запомнить пароль 160, 22 С помощью QuickRoute можно опубликовать карту в веб-архиве карт для спортивного ориентирования. инструкции по созданию собственного архива находятся по адресу www.matstroeng.se/doma. Пример адреса веб-сервиса для вашего архива: http://www.yourdomain.com/yoursubfolder/webservice.php. Публикация карты quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/PublishMapForm.sv.resx000066400000000000000000000336421446222606700265060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 129, 154 474, 20 60, 13 Komm&entar 98, 13 Länk till &resultatlista 79, 13 &Användarnamn 107, 13 &Webbserviceaddress 129, 3 474, 21 129, 30 474, 20 51, 13 &Lösenord 129, 56 474, 20 32, 13 &Karta 129, 127 474, 21 38, 13 &Datum 118, 13 &Tränings-/tävlingsnamn 120, 13 Kartans/&områdets namn 47, 13 Arrang&ör 31, 13 La&nd 67, 13 T&ävlingsform 44, 13 Strä&cka 129, 206 474, 20 129, 232 474, 20 129, 258 474, 20 129, 284 474, 20 129, 310 474, 20 129, 336 474, 20 129, 362 474, 20 129, 388 474, 61 129, 455 474, 21 53, 13 Bild&format 129, 180 474, 21 46, 13 Kategor&i 129, 82 474, 39 399, -1 Ansl&ut 113, 17 Kom ih&åg lösenord 117, 22 QuickRoute kan publicera kartor i en digital kartpärm. Instruktioner för hur man skapar en digital kartpärm finns på www.matstroeng.se/doma. Webbserviceadressen för din digitala kartpärm är något i stil med http://www.dindoman.se/dinmapp/webservice.php. Publicera karta quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.Designer.cs000066400000000000000000000060271446222606700326320ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class RefreshDevicesProgressIndicator { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RefreshDevicesProgressIndicator)); this.status = new System.Windows.Forms.Label(); this.progressBar = new System.Windows.Forms.ProgressBar(); this.cancel = new System.Windows.Forms.Button(); this.SuspendLayout(); // // status // resources.ApplyResources(this.status, "status"); this.status.Name = "status"; // // progressBar // resources.ApplyResources(this.progressBar, "progressBar"); this.progressBar.Name = "progressBar"; // // cancel // this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; resources.ApplyResources(this.cancel, "cancel"); this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.btnCancel_Click); // // RefreshDevicesProgressIndicator // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.cancel; this.ControlBox = false; this.Controls.Add(this.cancel); this.Controls.Add(this.progressBar); this.Controls.Add(this.status); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "RefreshDevicesProgressIndicator"; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label status; private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Button cancel; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.cs000066400000000000000000000031351446222606700310700ustar00rootroot00000000000000using System; using System.Windows.Forms; using QuickRoute.BusinessEntities.Importers; namespace QuickRoute.UI.Forms { public partial class RefreshDevicesProgressIndicator : Form { public RefreshDevicesProgressIndicator() { InitializeComponent(); SupportedImportFormatManager.RefreshProgressChanged += RefreshProgressChanged; SupportedImportFormatManager.RefreshCompleted += RefreshCompleted; status.Text = ""; } void RefreshProgressChanged(string message, int percent) { try { if (InvokeRequired) { var arg = new object[2]; arg[0] = message; arg[1] = percent; BeginInvoke(new RefreshProgressDelegate(RefreshProgressChanged), arg); return; } status.Text = message; progressBar.Value = percent; } catch (Exception) { // do nothing } } void RefreshCompleted() { if (InvokeRequired) { BeginInvoke(new RefreshCompletedDelegate(RefreshCompleted)); return; } DialogResult = DialogResult.OK; Close(); } private void btnCancel_Click(object sender, EventArgs e) { // TODO: implement refresh cancel DialogResult = DialogResult.Cancel; } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.da.resx000066400000000000000000000137341446222606700320350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Læser data... Afbryd Understøttede GPS enheder quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.de.resx000066400000000000000000000137261446222606700320420ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lese Daten... Lese Garmin Gerät Abbrechen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.fr.resx000066400000000000000000000135741446222606700320620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Lecture des données.... Annuler quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.it.resx000066400000000000000000000137431446222606700320650ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Caricamento dati... Cancella Dispositivi GPS supportati quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.lt.resx000066400000000000000000000137441446222606700320710ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Nuskaitomi duomenys... Atšaukti Priimami GPS prietaisai quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.no.resx000066400000000000000000000135601446222606700320620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Leser data... Avbryt quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.resx000066400000000000000000000243741446222606700314540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True 16, 11 4, 0, 4, 0 105, 17 0 Reading data... status System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 2 20, 31 4, 4, 4, 4 433, 28 1 progressBar System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 177, 66 4, 4, 4, 4 123, 28 2 Cancel cancel System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 True 8, 16 467, 108 4, 4, 4, 4 CenterParent Supported GPS devices RefreshDevicesProgressIndicator System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.ru.resx000066400000000000000000000143541446222606700320760ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 93, 13 Чтение данных... Отмена Чтение устройства Garmin quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.sv.resx000066400000000000000000000143031446222606700320720ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 66, 13 Läser data... Avbryt Stödda GPS-enheter quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.Designer.cs000066400000000000000000000120601446222606700322150ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class SelectRoutePropertyTypesForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectRoutePropertyTypesForm)); this.ok = new System.Windows.Forms.Button(); this.cancel = new System.Windows.Forms.Button(); this.routePropertyTypeCheckboxList = new System.Windows.Forms.CheckedListBox(); this.moveUp = new System.Windows.Forms.Button(); this.moveDown = new System.Windows.Forms.Button(); this.SuspendLayout(); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.cancel_Click); // // routePropertyTypeCheckboxList // this.routePropertyTypeCheckboxList.AccessibleDescription = null; this.routePropertyTypeCheckboxList.AccessibleName = null; resources.ApplyResources(this.routePropertyTypeCheckboxList, "routePropertyTypeCheckboxList"); this.routePropertyTypeCheckboxList.BackgroundImage = null; this.routePropertyTypeCheckboxList.CheckOnClick = true; this.routePropertyTypeCheckboxList.Font = null; this.routePropertyTypeCheckboxList.FormattingEnabled = true; this.routePropertyTypeCheckboxList.Name = "routePropertyTypeCheckboxList"; this.routePropertyTypeCheckboxList.SelectedIndexChanged += new System.EventHandler(this.routePropertyTypeCheckboxList_SelectedIndexChanged); this.routePropertyTypeCheckboxList.KeyDown += new System.Windows.Forms.KeyEventHandler(this.routePropertyTypes_KeyDown); // // moveUp // this.moveUp.AccessibleDescription = null; this.moveUp.AccessibleName = null; resources.ApplyResources(this.moveUp, "moveUp"); this.moveUp.BackgroundImage = null; this.moveUp.Font = null; this.moveUp.Name = "moveUp"; this.moveUp.UseVisualStyleBackColor = true; this.moveUp.Click += new System.EventHandler(this.moveUp_Click); // // moveDown // this.moveDown.AccessibleDescription = null; this.moveDown.AccessibleName = null; resources.ApplyResources(this.moveDown, "moveDown"); this.moveDown.BackgroundImage = null; this.moveDown.Font = null; this.moveDown.Name = "moveDown"; this.moveDown.UseVisualStyleBackColor = true; this.moveDown.Click += new System.EventHandler(this.moveDown_Click); // // SelectRoutePropertyTypesForm // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.moveDown); this.Controls.Add(this.moveUp); this.Controls.Add(this.routePropertyTypeCheckboxList); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SelectRoutePropertyTypesForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); } #endregion private System.Windows.Forms.Button ok; private System.Windows.Forms.Button cancel; private System.Windows.Forms.CheckedListBox routePropertyTypeCheckboxList; private System.Windows.Forms.Button moveUp; private System.Windows.Forms.Button moveDown; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.cs000066400000000000000000000073761446222606700304740ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities.RouteProperties; using QuickRoute.Resources; using QuickRoute.UI.Classes; namespace QuickRoute.UI.Forms { public partial class SelectRoutePropertyTypesForm : Form { public SelectRoutePropertyTypesForm(SelectableRoutePropertyTypeCollection routePropertyTypes) { InitializeComponent(); // add the names and visibility status of the route properties foreach (var item in routePropertyTypes) { routePropertyTypeCheckboxList.Items.Add(item, item.Selected); } UpdateUI(); } public SelectableRoutePropertyTypeCollection RoutePropertyTypes { get { var routePropertyTypes = new SelectableRoutePropertyTypeCollection(); for(var i=0; i 0); moveDown.Enabled = (routePropertyTypeCheckboxList.SelectedIndex < routePropertyTypeCheckboxList.Items.Count - 1 && routePropertyTypeCheckboxList.SelectedIndex != -1); } private void MoveUp(int index) { if (index < 1) return; var itemToMove = routePropertyTypeCheckboxList.Items[index]; var isChecked = routePropertyTypeCheckboxList.CheckedItems.Contains(itemToMove); routePropertyTypeCheckboxList.Items.Remove(itemToMove); routePropertyTypeCheckboxList.Items.Insert(index-1, itemToMove); routePropertyTypeCheckboxList.SetItemChecked(index - 1, isChecked); routePropertyTypeCheckboxList.SelectedIndex = index - 1; } private void MoveDown(int index) { if (index > routePropertyTypeCheckboxList.Items.Count-2) return; var itemToMove = routePropertyTypeCheckboxList.Items[index]; var isChecked = routePropertyTypeCheckboxList.CheckedItems.Contains(itemToMove); routePropertyTypeCheckboxList.Items.Remove(itemToMove); routePropertyTypeCheckboxList.Items.Insert(index + 1, itemToMove); routePropertyTypeCheckboxList.SetItemChecked(index + 1, isChecked); routePropertyTypeCheckboxList.SelectedIndex = index + 1; } private void routePropertyTypes_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.Up) { moveUp_Click(this, EventArgs.Empty); e.Handled = true; e.SuppressKeyPress = true; } if (e.Control && e.KeyCode == Keys.Down) { moveDown_Click(this, EventArgs.Empty); e.Handled = true; e.SuppressKeyPress = true; } } private void routePropertyTypeCheckboxList_SelectedIndexChanged(object sender, EventArgs e) { UpdateUI(); } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.da.resx000066400000000000000000000142111446222606700314150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Flyt &op Afbryd Vælg ruteegenskabstyper Flyt &ned OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.de.resx000066400000000000000000000137511446222606700314310ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen Nach &oben schieben Nach &unten schieben quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.fi.resx000066400000000000000000000137311446222606700314350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta Siirry &ylös Siirry &alas quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.fr.resx000066400000000000000000000141351446222606700314450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler Déplacer vers le ha&ut Déplacer vers le &bas SélectionnerPropriétésTraces quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.it.resx000066400000000000000000000142451446222606700314540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Sposta s&u Cancella Seleziona il tipo di proprietà della traccia Sposta &giù OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.lt.resx000066400000000000000000000142571446222606700314620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Judėti į &viršų Atšaukti Pasirinkti prabėgimų savybių rūšis Judėti ž&emyn Gerai quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.no.resx000066400000000000000000000140731446222606700314530ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Flyt &opp Avbryt SelectRoutePropertyTypes Flytt &ned quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.resx000066400000000000000000000311671446222606700310430ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this ok 256, 12 Move &up 2 3 1 Cancel moveUp System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Right moveDown routePropertyTypeCheckboxList 0 System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 12, 12 4 0 98, 23 2 238, 555 $this False Top, Bottom, Left, Right 256, 41 Top, Right 366, 608 Bottom, Right System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this NoControl 75, 23 98, 23 75, 23 4 Bottom, Right $this 279, 573 Select route property types $this cancel CenterParent 198, 573 NoControl 6, 13 Move &down 3 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 OK SelectRoutePropertyTypesForm System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.ru.resx000066400000000000000000000141241446222606700314620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена &Вверх В&низ Выберите свойства пути quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.sv.resx000066400000000000000000000140731446222606700314670ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt Flytta &upp Flytta &ner Välj ruttegenskapstyper quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.Designer.cs000066400000000000000000000056161446222606700302170ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class SelectUICultureForm { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SelectUICultureForm)); this.uiCultureDropdown = new System.Windows.Forms.ComboBox(); this.ok = new System.Windows.Forms.Button(); this.SuspendLayout(); // // uiCultureDropdown // this.uiCultureDropdown.AccessibleDescription = null; this.uiCultureDropdown.AccessibleName = null; resources.ApplyResources(this.uiCultureDropdown, "uiCultureDropdown"); this.uiCultureDropdown.BackgroundImage = null; this.uiCultureDropdown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.uiCultureDropdown.Font = null; this.uiCultureDropdown.FormattingEnabled = true; this.uiCultureDropdown.Name = "uiCultureDropdown"; // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.ok_Click); // // SelectUICultureForm // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.Controls.Add(this.ok); this.Controls.Add(this.uiCultureDropdown); this.Font = null; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SelectUICultureForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.Load += new System.EventHandler(this.SelectUICultureForm_Load); this.ResumeLayout(false); } #endregion private System.Windows.Forms.ComboBox uiCultureDropdown; private System.Windows.Forms.Button ok; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.cs000066400000000000000000000023721446222606700264540ustar00rootroot00000000000000using System.Collections.Generic; using System.Configuration; using System.Globalization; using System.Windows.Forms; namespace QuickRoute.UI.Forms { public partial class SelectUICultureForm : Form { private readonly List availableCultures = new List(); public SelectUICultureForm() { InitializeComponent(); var culturesString = ConfigurationManager.AppSettings.Get("cultures"); foreach (var culture in culturesString.Split(';')) { availableCultures.Add(new CultureInfo(culture)); } uiCultureDropdown.DataSource = availableCultures; uiCultureDropdown.DisplayMember = "NativeName"; } public CultureInfo UiCulture { get { return uiCultureDropdown.SelectedItem as CultureInfo; } set { uiCultureDropdown.SelectedItem = value; if (uiCultureDropdown.SelectedItem == null) uiCultureDropdown.SelectedItem = availableCultures[0]; } } private void ok_Click(object sender, System.EventArgs e) { DialogResult = System.Windows.Forms.DialogResult.OK; Close(); } private void SelectUICultureForm_Load(object sender, System.EventArgs e) { } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.da.resx000066400000000000000000000135451446222606700274170ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK Vælg sprog quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.de.resx000066400000000000000000000135511446222606700274200ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK Sprache wählen quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.fi.resx000066400000000000000000000134271446222606700274300ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Valitse kieli quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.fr.resx000066400000000000000000000134411446222606700274350ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Sélectionner la langue quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.it.resx000066400000000000000000000135611446222606700274450ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK Seleziona il linguaggio quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.lt.resx000066400000000000000000000135561446222606700274540ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Gerai Pasirinkti kalbą quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.no.resx000066400000000000000000000135451446222606700274470ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 OK Velg språk quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.resx000066400000000000000000000223621446222606700270310ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 179, 21 287, 51 CenterScreen 0 6, 13 1 OK SelectUICultureForm $this 12, 14 uiCultureDropdown 200, 85 System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Select language ok 0 $this 1000, 85 75, 23 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Top, Right 197, 12 1 Top, Left, Right System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.ru.resx000066400000000000000000000134431446222606700274560ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Выберите язык quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SelectUICultureForm.sv.resx000066400000000000000000000134231446222606700274560ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Välj språk quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SplashScreen.Designer.cs000066400000000000000000000101571446222606700267400ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class SplashScreen { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { this.applicationName = new System.Windows.Forms.Label(); this.version = new System.Windows.Forms.Label(); this.website = new System.Windows.Forms.LinkLabel(); this.donate = new System.Windows.Forms.LinkLabel(); this.developers = new System.Windows.Forms.Label(); this.SuspendLayout(); // // applicationName // this.applicationName.AutoSize = true; this.applicationName.Location = new System.Drawing.Point(108, 40); this.applicationName.Name = "applicationName"; this.applicationName.Size = new System.Drawing.Size(35, 13); this.applicationName.TabIndex = 0; this.applicationName.Text = "label1"; // // version // this.version.AutoSize = true; this.version.Location = new System.Drawing.Point(108, 97); this.version.Name = "version"; this.version.Size = new System.Drawing.Size(35, 13); this.version.TabIndex = 1; this.version.Text = "label2"; // // website // this.website.AutoSize = true; this.website.Location = new System.Drawing.Point(108, 163); this.website.Name = "website"; this.website.Size = new System.Drawing.Size(55, 13); this.website.TabIndex = 2; this.website.TabStop = true; this.website.Text = "linkLabel1"; // // donate // this.donate.AutoSize = true; this.donate.Location = new System.Drawing.Point(108, 212); this.donate.Name = "donate"; this.donate.Size = new System.Drawing.Size(55, 13); this.donate.TabIndex = 3; this.donate.TabStop = true; this.donate.Text = "linkLabel1"; // // developers // this.developers.AutoSize = true; this.developers.Location = new System.Drawing.Point(108, 134); this.developers.Name = "developers"; this.developers.Size = new System.Drawing.Size(35, 13); this.developers.TabIndex = 4; this.developers.Text = "label2"; // // SplashScreen // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(292, 262); this.ControlBox = false; this.Controls.Add(this.developers); this.Controls.Add(this.donate); this.Controls.Add(this.website); this.Controls.Add(this.version); this.Controls.Add(this.applicationName); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.HelpButton = true; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "SplashScreen"; this.ShowIcon = false; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "SplashScreen"; this.Load += new System.EventHandler(this.SplashScreen_Load); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Label applicationName; private System.Windows.Forms.Label version; private System.Windows.Forms.LinkLabel website; private System.Windows.Forms.LinkLabel donate; private System.Windows.Forms.Label developers; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SplashScreen.cs000066400000000000000000000007451446222606700252030ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace QuickRoute.UI.Forms { public partial class SplashScreen : Form { public SplashScreen() { InitializeComponent(); } private void SplashScreen_Load(object sender, EventArgs e) { Main m = new Main(); m.Show(); this.Close(); } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/SplashScreen.resx000066400000000000000000000132661446222606700255610ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.Designer.cs000066400000000000000000000076421446222606700263710ustar00rootroot00000000000000namespace QuickRoute.UI.Forms { partial class TimeDialog { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TimeDialog)); this.cancel = new System.Windows.Forms.Button(); this.ok = new System.Windows.Forms.Button(); this.timeLabel = new System.Windows.Forms.Label(); this.timeTextbox = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // cancel // this.cancel.AccessibleDescription = null; this.cancel.AccessibleName = null; resources.ApplyResources(this.cancel, "cancel"); this.cancel.BackgroundImage = null; this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.cancel.Font = null; this.cancel.Name = "cancel"; this.cancel.UseVisualStyleBackColor = true; this.cancel.Click += new System.EventHandler(this.Cancel_Click); // // ok // this.ok.AccessibleDescription = null; this.ok.AccessibleName = null; resources.ApplyResources(this.ok, "ok"); this.ok.BackgroundImage = null; this.ok.Font = null; this.ok.Name = "ok"; this.ok.UseVisualStyleBackColor = true; this.ok.Click += new System.EventHandler(this.OK_Click); // // timeLabel // this.timeLabel.AccessibleDescription = null; this.timeLabel.AccessibleName = null; resources.ApplyResources(this.timeLabel, "timeLabel"); this.timeLabel.Font = null; this.timeLabel.Name = "timeLabel"; // // timeTextbox // this.timeTextbox.AccessibleDescription = null; this.timeTextbox.AccessibleName = null; resources.ApplyResources(this.timeTextbox, "timeTextbox"); this.timeTextbox.BackgroundImage = null; this.timeTextbox.Font = null; this.timeTextbox.Name = "timeTextbox"; this.timeTextbox.Leave += new System.EventHandler(this.TimeTextbox_Leave); this.timeTextbox.Enter += new System.EventHandler(this.TimeTextbox_Enter); // // TimeDialog // this.AcceptButton = this.ok; this.AccessibleDescription = null; this.AccessibleName = null; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackgroundImage = null; this.CancelButton = this.cancel; this.Controls.Add(this.timeTextbox); this.Controls.Add(this.timeLabel); this.Controls.Add(this.cancel); this.Controls.Add(this.ok); this.Font = null; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = null; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "TimeDialog"; this.ShowIcon = false; this.ShowInTaskbar = false; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button cancel; private System.Windows.Forms.Button ok; private System.Windows.Forms.Label timeLabel; private System.Windows.Forms.TextBox timeTextbox; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.cs000066400000000000000000000041511446222606700246220ustar00rootroot00000000000000using System; using System.Windows.Forms; namespace QuickRoute.UI.Forms { public partial class TimeDialog : Form { private DateTime initialTime; public TimeDialog() { InitializeComponent(); } public DateTime InitialTime { get { return initialTime; } set { initialTime = value; timeTextbox.Text = FormatTime(initialTime.ToLocalTime(), false); } } public DateTime Time { get { string timeString = timeTextbox.Text; string timeSeparator = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator; timeString = timeString.Replace(".", timeSeparator); timeString = timeString.Replace(",", timeSeparator); timeString = timeString.Replace(":", timeSeparator); TimeSpan ts; if (TimeSpan.TryParse(timeString, out ts)) { DateTime dt = initialTime.Date.AddSeconds(ts.TotalSeconds); dt = new DateTime(dt.Ticks, DateTimeKind.Local).ToUniversalTime(); return dt; } DateTime t; if (DateTime.TryParse(timeString, out t)) { return t.ToUniversalTime(); } return initialTime.ToUniversalTime(); } } private static string FormatTime(DateTime time, bool includeDate) { var firstPart = includeDate ? time.ToString("G") : time.ToLongTimeString(); return firstPart + time.ToString(".fffffff").TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray()); } private void OK_Click(object sender, EventArgs e) { DialogResult = DialogResult.OK; Close(); } private void Cancel_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); } private void TimeTextbox_Leave(object sender, EventArgs e) { timeTextbox.Text = FormatTime(Time.ToLocalTime(), Time.Date != initialTime.Date); } private void TimeTextbox_Enter(object sender, EventArgs e) { timeTextbox.SelectAll(); } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.da.resx000066400000000000000000000140431446222606700255620ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Afbryd &Starttid: Angiv starttid OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.de.resx000066400000000000000000000140511446222606700255650ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Abbrechen &Startzeit: Startzeit setzen OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.fi.resx000066400000000000000000000143121446222606700255730ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Peruuta 58, 13 &Aloitusaika Aseta aloitusaika quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.fr.resx000066400000000000000000000137521446222606700256130ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Annuler Heure de &départ : Définir l'heure de départ quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.it.resx000066400000000000000000000140661446222606700256170ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Cancella Tempo di &start: Imposta il tempo di avvio OK quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.lt.resx000066400000000000000000000140671446222606700256230ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Atšaukti Starto &laikas: Nustatyti starto laiką Gerai quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.no.resx000066400000000000000000000137221446222606700256150ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt &Starttid: Angi starttid quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.resx000066400000000000000000000257231446222606700252060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 timeLabel 12, 9 $this ok 156, 20 4 Cancel System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 15, 25 True 0 1 timeTextbox System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 5 $this 6, 13 $this 3 System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 1 Left, Right 183, 90 Right 75, 23 75, 23 &Start time: Right 96, 55 Set start time 54, 13 cancel CenterParent 15, 55 2 0 OK TimeDialog System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.ru.resx000066400000000000000000000143611446222606700256270ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Отмена 80, 13 &Время старта: Задайте время старта quickroute-linux-upstream-2.5/QuickRoute.UI/Forms/TimeDialog.sv.resx000066400000000000000000000143001446222606700256220ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Avbryt 43, 13 &Starttid: Ange starttid quickroute-linux-upstream-2.5/QuickRoute.UI/Graphics/000077500000000000000000000000001446222606700227265ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Graphics/About form background 2.png000066400000000000000000003550551446222606700276710ustar00rootroot00000000000000PNG  IHDRnS pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FXIDATxڼgmYމZ»k3oʲtS$3b˼!3 BKcFD`0"4awMӦ*3+&;lҋDqMfevȈq{}/FO?As9In9|ͨĆ T$=zD1Q|G߱Jc|%|x|@ۡ-ċZH/@k B5ZLrC-콁ؗ?&^{ ֙])Rt"Օk ʗhc&y9{D ع߉HH)&=L! rE1^Cz! XTuzbrLR|]&K!2j m, zJ~6D˷wL>أ.Bz&ml_W~n O bOB_ ]Ҿ[4>PKOJ47!)=eA[J䰟°TׄXCR K>:B'c2*jiJBO!PwZoO6 3(rrFHA2M9=}pSNY<ЃwZɀdk l7[n] Vzo]X9~B?o.^PqxdE֘3aVSF4}DX' 2'Z}Ti5NG~g2X<m…k޿LL?#^M^[Ç?>H"n.^{{1;Cӹ5t:q{WۍCq#QvNi\֤dTX'ZMA#x .H? HLL^tyzʯo.Övx-(mT\r-o\2<*jGdJZ/jbfHaimg7Q<&?~#w0()1Z+t A{!%֔sSfX7ˋh e2CZ5L& q`XaܮKktNFX xn[X Xk0:A{*!1e jo9z<~k׮{-]w܌skE ㄏ=c8@}o1lds׿" )[f֖Z%9|@p |.vޥ +Y 0c%h侮A;}X|Y/'= )[Ok^ٿBB'vi &9g3PR^ +\`S- <҇2tFYǰ@݃;mw _yL9i^П(FSCX߮n` _2"R=7:k߾|«w1 51B_!rf55v9/W/0zSd/nS_ŗgYjG\KFy79īo5xq˽O&ǗlW$=|qn|=9&xlmmq}ݻǯ_x61yX Z__[s6{-^S7G16:~7~CW_ ?!=y>?@ >?!oia疅g (r,6Z +L ޴: W^;لȢ]L#k%RB+DX_Q _mN2 ut崏lae@`HǏ#ܢed AwKLvkxqF[!uI2ђJ㇔EAב~ٰP,4iR}`ɐޗD˷Z+XkHߣ\@3 Ϩ36?ŋ[\WǏOhwywkm_zDK7`%BնOZZ g6xb_x@&=yJe2[hzJr}I$2VG19%hͲkk_c_H_%tM4 D/~9P'bMZ>x!q J؄R>AÞ>nC( (JŸ$$'P=ZLx#!(U 퐬?FZ!y!ByW7!ߣn-UX_+ALZ[}lEepȧ_|owhoƵn#=k 1h0Ej+ɏX%57|>4MJ[x]_Ͳ0$Q~Dvpa綤T{f9c4oÇ?ezpB6*%; &O:H/1]GdFys٢W[4xF^zOZX`wuD˷ pS{_m ^XGx>HѰZ@ "9NcXKd-^ L\SEt6K gAiYLv!ىGm-h&z:@,%2> ZX@ 4a@hR1{H1dJ5mNkL(C*AkZ(x FSfseU~~o!E/np )R$iE4+X|dOo" $) * ץEIgjko3e2yoʭ&R]PӽH~P!Ӗ$g5'0"?Bb#t7&%vcv%} О $B :xtJI"wBf^+R?%0tT @tns#BHeI^e_+R@ AaUu?NdyNyjmLJvT( ݣ`̏Z~q֭+CAL}=d k3[buAraw>9ZmS.GtUB6e)*j-xIG-]'9zd R;D˷f16!Szޖ??Яw׋Zr|~KݓDJTeHbyC}zbZ&ai$$ƺZ'lFcIr6W5&C(z(Gde@":Lm$aRx"zË &9|H>:D!*BQkS 0E2s>V-5xW_@(!^9H楥)\?G'l⌂"%NLp}.:A0xUE +RJy {7X +&9|X@VȗC9g\(/jQO۫t)ķ*8$G z Oz|eSՄ:|Resr啔n(gLM$dXz|HzzH԰H)( XFHЛ=̅R/"( HZ 12h.}'} *4/5 V\Z?cǭ[7}f^jA`F9[ғ'xI†M@ J?F Cz TXC煮7  =wzeʭ_G7|FpՊ0b%hWzy$_Q4!)r΂8'S:uXR _ɗG6t_҆1`%ֺʠv :ey!g' Mi, Gt.ҹKJ쿸zVExBJ!g7) AkuؕQsNSq} awºlQ[{=2?B5"*#TpÔEQ5qW$5~k2+nLF/xZLS8~ZOiZ\~k G,`@JMܽAXk09Oޯתhsѯl)QT߯Җ3r)??H!)EK_v('xQJD^?!.#EQI< 8Ŋڐvf]/TL%B( yXbTHSB=/Ryn y<=w+nd&۴Z-jFLQ|/ ]妷K19EΞzrJ99biF/ͭz]XS:frBڭ7 ^3S>}RuI"=ޤ`Z D1Fɧd@L FY)r|[sm>V0KP d\k//kkLv Zr%fXlhAl\o._~s &;!9yn]x9-\GM` kiƝy܆Wx]ڼ0E!Ag k,fn{o: 9Uw@ fH2GiBJX6 :N4/Χ4M…kLjmkZKK< wEkgg_~XA_KHңGXSC< 7H">|KS˪l^1:bh&k-oxDd%\ԜOU]\ LI"!{߮A10ꩭLm&agB9c4!(BR`h찄 `iѬ(-AzqYy KɘZp`;oޤVȎ`ZdveDXp^Co)XspFiw-==AOj4=~+UUe•Iihx.QiWnwj]TzaO6Y(GGLw>'.ln p3l16 +s|)?~s ׾z}6pƍ+_(}N}Ax˷I``%G|:ã <K!kotj6k/L@*br:<)/.#t2$b!.lkUByO(a=: ](b TSr;-#YLjwS[IM`:jaM>8NC'CVl)Rv2E ۮ.aJ FkaqT3H[7nX}'?%P[{ 5Ȏ㿠wxȗQJ/~p ay bzq4*c&;y_kϕ"_҈e1|S ]oY(HIZbZ9H ޠ`te Pb }G}=]auyΧŵ & K랥H!hEUi1[x.O+8RwO1`l-@]Jt sK@J)k5q- !} !ACpt ?AA3Fnau|'\PçmFC ]3ij"9ycofq=4u%W,סɈ82 P8;&^qe@1wuAAOD+Yo2_"U=.*v7Qa|tH1<īw_X^ɐ'` _z]ӽ/]9WJIQ|lmm]ٓ阠\!2ƣ4FaF17G[HPO|-szW.2lL1>qCZƙy3Eo,1TιIj0NslEsh9__d.=⵷䅞)steQҩhm(K5fOؠNvN,!N?k*#h.gIJڱrCsQ@TKs@ʛȰB &m_+|U_^wF2L6dg>ּ6e'Z|>!Z9OF5mK)"Zŷہ==tAx z a u5˾q!& ۴[ @XЕI1+5*t#wߞCJЊsB!O2|O:AW)6=EßF(j6ٔ1B @{`bp6wj,5|<w9yG"9O>!^s dtZbʠ?XR{6 #@`)򯆏 jko1|/j)&'xqN~%rXizLMo[Z#,7t/i|5ϩm~POe0ծ&_ǫ0[BY񾼺+N)X:5Ӽ ţ$Wf*} ^tq땿t6A=t6!Z9{ Ұi/WP)E7Ɛ<5giFv% )Gϓl4<wcyy?QZ+׮\;ä%Tk3\>wʧynFi9W5bABC Gֿ pmH# ԫ^r!N3_~oN>n /pT h/5uP{H%=FջX$SľS*^YFz!/5rrJzDMGū--l"r]`*-$;aϡ.^A=oPc¥H`rE?Kk,xG(4” EJ=Bxq,%j֔LwkhY0b^D^BLS3s_Utv#&xQcA(!=IoU3RM<%I3|SKTx!c#"e6%%vajH_2-ޠġL 6L3dsWWd>DIWV<_j|Y_dJ^NO8k =%Cғx.WL8hf;M˗f~)]^YMHMLv)'Y:h8:>q*2TexpkB[s|HIau>rSh,au VZ> mKKIڑB(Q_Z>ỹx!K+k,m޾Mj`]{JPkmv{ckn%CtHq =ݚrãJ)n֝}α|ExRj6uNh)"=z@m5D,Am:"<3`-z}.>6פ7)+h1=B'Cd3ݿW2xAw9 Τ备*Wo!`0yJ^%=~LYGuʏ)}ގI)T ;9—/n;%4k ~c=Ozԁ k[뢒4|.)Z[RE\oKw#_":)߭2RP>]'>Oxջse]!dyhD O9^O[V, "E/X)+J: UjΧ&d'O5 ƈ֠Ic]$N>VBo,BHj' W"G>wrH1-t~})qjo@v7Ս*ϡ60NC:I(QV.jwUS㝚ƵHP \%Ɩ%f1QN@e;c R-~H9]BjkF|ѨdNC(%5O0~D9=>ەH/J kԂ2םz𐢿B{jT3Lʗ^H53Qf)~R&ǧX!JI$Nrr/@ߞ9V,9D l sC F:8Y`J0)9FCbeDZJ3fcw/5_֓fH(j˝WkHQW£RNHg`*5[ˌ|[/hko;I+y:x ii Д.J)]O+*n.nպVrfSᰤJVnRҫOazL$CI2YjxGqc٢|y)Y83_[XGik#u6%Z(FCO00qF+N  n4*KQۥ(*G6Qqk߹FRw 9!&2<:7h&>1Nְq:J hE/\t]F0H_kR%zqcdD(߁-s%갻LF ZjwC:5|TlA-f׻L1ݿKm-@v?BHG%hm C*Pr z{NGZxkf̨WozM<%v[/WgkE4ݣ6~{ov7~Azhʬ9#c}-,xs:p0=0;XCZ&;ݡLD7)~CLa|}f%,Ëb*f/&;PNMQh!j!ݯ\apsuf*LA5T^}hN5`F(p=)~{u,bko3]j4k%)fz ~XB۔Jy#leb~Kť (%u=!'6s +-F}8/6"UV{z}M*& \”@r Q 1BY bO(G'hS`qµ67r:LYXӪϕiS9MrJڈ("%]^DBIDz<22C묬諨A>د&Fz$&̌Ni7j"-u k"6aA*ɳ ^Lv?':*OBP[CvCx}~ @B|Fw3U'֜m*yXw|*nRk;xQJJ9+"a]7̢jGT#majY)G>/3CZX m i5N(HB!&GoPO :z(nDK}aNJjt6ky):bslh % 6ic.KGW~a3t`J:)V(3] Zh]A[ǂ]Y]hE-KQM"D{-|a.ŤT ()jUh넭kfp *},CEɯ x`:)}I y)OC7eZ_:yͲ(ߙp^cccfgw!ɭ+γ?uk#%cGn-Q7\)# ƨV()br4n b %~s锱{ LĖoFPC fHR EHE߫`X2AVx,p"${:R&J֡OZHa҉pa=Rc'{Bu2ҏ?;EKÇ Sm3ػP~}<ғ' X:(Ab:X~1 C$yEYo)ń5:˳awh`^^R`;ءHJ^C3KO $Gmm~B0K&- BTNR$S7Az?^+})T\fe35 [[c?O9c׻T$+}|$WWmŐeuzf߫u Z+N 0d{%Ƶ">{J8fu9 Hqwh:\)2Rv<B (Drp&2ƕ<%eͥHB#LzAŚ}"h!T4PB8GX$m;'\V6Ubx.RqldmlRN{UYF1: sٳ)sm**pqAx-^'WS*s^ܚ=Ĥ-_qMK!ˋ~B锅E"n s9>!^} ٿĴ B_m yi|"W~48ѫL|tTpvCbݣ)Y YH&|3',*tNXS>û ttP'2:yPqMx'ӜͶO/{` RLw5=I^Yv|iVhȅ3-L.U.*X'b!^-3]_#+b:F~FwQNWnΆH?,Gxqc쓊&^S5MÇY!${G|{Ғ't|O}9šSŹO~٣h0i63a熀ȓAʙ&k!](ғgn]kb6ԑ^G_g4X^Y!2;ٚ7)zQ|p)+a+7+sgo-Seޘ =b__DgcZrrJNFUi >A1ag"W0*nc7}wn3 LGz'G GIiJteL0i)ztZ!e{ո/q1q|f6$GĉW*N"o!0ω;\vrJ95U3ջ]GPU⬷C\㬵]hyiL Fg&>jWB` С_LzÚYDTc"h +aE=:шOЊ= KڕBdDCN^Ws֊ J+Yqyՠܠ }&Z/4֝uz* nIO˄8 //9-BvOyY]2!vzB ~*Qq Y]`nj|DΏRoD}냙d+Zx\Ԉ$24J AWˡY Dn=%ZN-Irp_H#׿G9WѱیAg}7 |u%7W$,GGx@ (N x5.6 ko,:-hl}%B;Fu,--{bl=׃v6k;N<@:yPo=aJ;Ң?-]9* $Q9tU Fi֣gNHv?&ci."a2, ]5([uD/<8l =DFF㉘@ӪϦgY9M 9[$,c [G,H1x@D64P5Vt.AwܞKS#cdX]ک)  t8жCdw6du։Wd%F4>#d9sugeҏ;Srگ YݻDQ{W3xcӲw oTIkaX 95ңG\!Ƀ2 awd9y*/o,.%ZyvW5] \o.8m*@{3S2т뭍{Ƞ_1-cT$lYg3 Ovvv!Y!Wf0M&Nwy|W?û<}IaQʣjzF'#L 9ʄz4|iOFau{Jxҕt x"%^҉1inɵ; cݜLE6JN֒~Dp|xx*jiVa) k嚚h2!W*[k&}ߩijUT%EXd Gn/74>Rb&BV<˪4G=@Z׋5PmgԾXNHrp\5)U' 70H)^s Or*4ft}TWTӸW2'tl1=~4鄻)~J>8$\تxҭ)2Xk3t7ZZz=|mQhZCR=SL`lnӽ/QON*0vƴTuC\tLt[d#YY['9,{;"u3O &?x}bG>Ivt Ά5j?f@KR`h^` 'hL9-lnPvM1-=BSFٳq{+Α}g4 !>@xkM3y1ݿ\&n0L5IIVhҍ5+aͰ7OTYl#/ feB=t>,^ܜȄ -D#Wn STpLrT*\J#( ZSE`S`"لݿD(TWKfҕJ ͼ}^]"W#ZtRd-T9!9~H :2GygN19\F5H_Oeɓ'OZQYax&%:|ÙOz{ %VYo t:d)Wޤcn`uN‹nve}VHA3_G>3d:!s)''ٍҡE"[kIf ڌgJ<}%\de *jֳ?_WO9pfřw.S(1"k1fJڵL㸏I1G'4t.UɄOde,,,7Nzvr} %%lZNaUUp/Pk *{f(NfY_;/6Ls47JRAB)7DئeQ7  ~ҏNCߒ~LvBy|ɧUHTz3|H hT{#q+[x~XFXnt L2 E4}X/6<BJȝJÔRdDK7*ԳWj߾Hc1Ek3 r "ߍ j0-y(&{>T3-$jkkZm Z﷖k/{pTzjthH|۳Q O+V4p:#ڵ;PWZk85 bl TJPh(3Š3@ә󔾛5(GdzEË=Ť~ !ꋮ?9:%NG"o-c .xo,?qqt|t:a ,5e2p(]!QANNŦH zGy~eۘ2Ëx/=<4utR!zGD \~QM>xc>ߋ)w){l(nq*łF-( )R)g|g?ucK*cdˢ*7tyza^~Is+.cR3yIY4^}OdXߤ3Jh4=<<__,l}:YTY4%-+eϞ & L#{_Ҹ0|ʻg@);kg~M=dvC"Y1^ܼ@xN ;n͆Ūd<'h& 2cL_*RY rcoe)~Q9 z3yaqڳT2BUګ?XsPzj0cgYіƢ= masփK"UPUo~=h4b|-Sjoc1~j+Z!i;i88'*QzӟS$} MĮm,nr2&^}Pa6qIy0e}sn.1yv&A798\j7Q`p N NgSy?:;yRt] STT;2'UCw-ΧӁ1w6f6O:k/ge2`x/B~A9 [c*UaSw?BYo(ӱ[6Yr=YKci Et4W+;˂|p>UJQ[ns %ME0!"!nW C<=>>?/<ʄY!_dޘj)'iR| [ZvkpF6'0-aFg(F?ݞCSZkhn>"#=zLrKq(aYizs B><$mSxJ*C-ml)H)pz`NLrZѣ:kwf?HIEMt6Ifo9*6:s$A:<Ø¡(e_Wt{NB#.eyQvdiηCΦ+Lau2!2=p}xjC Y\ ѩq*4`!*g4 H W}꼧ZK7yq3ٛS~W̡9Y31u9U+^o;,W\h677;xuH "+C,CGH^V#\$䩋<t9(σ\АXI70TA )?ӓKO#-!e{!˱F|Iޥlѣ)7~NԷ33LOQa2W8jƥ(1[b[ ld 'Aw]ClTh& 2=AQk9,e2"8[fTK%9?-FF=&Xu_p"<~zY\#!OҜ0^cqap'BgXFIԽ;xQoS+m~L5{Xc>, E']Y|#%+oDJA -'?'Z}Ҟz T$;} kw(&(`pF\,; T34vۡ=!ܙU.62csXBwl&jXwA5XSaP.9OPQ BHo&^Vg*֛ܳHUIOq=لx}B&;!+m7otwjZ &.U2+|jNIܽ{=m?Η[糺+Kr\/|_1\'Yy}6tݵ_[=קH+*K.810yfJ䠱,=zUjʿ$s3u9ꑢ"xD טSI眭LR@= AHpE6sMg캂:]ʕL&pbO9S(~s=A "C𭿃NĸM=!Z>kj\ݽA1ˌU^nz 7<`F/WxQycNUÖ9Bg`JtNz؅;.vR8;!@ ~m-X8`o0 ۬l-3q{kRz=&)"IWR}ZdsZ )$gG1f_N2zWUR> M'<bS_AUB9X)EV}F,"!ntɦӾCꢒ$U 0kʎA!-@[͊ߠ)NాϿ'l 9k*/d3KO<J|sUTҳG]M>gO Z߿0[#J7Ɋ׾q =J=m_iT,4|6(%fxDBݤw%QxOg,Y^bggGUq^Nu׿xyer"fӝ쿽zXIjELsCVr2@I<"B*TlJ֯<)2"\Nrm v0}!`f;*+]xjqS=:~TGHRcx}Wy2 R^`(щB Y{i _J`8$XkȫE(%r+[_Gk 7/lonM%RT+Mx}]3,'ن"G)F N#OMcg󣠞C1T+H+q8!:cNh&»8htǔgk1Z0D 7$7Ha (4B,bz aQ P(z frh(+o"GNNEMj`&*n1bDP ϶6޼ǟ>%n'lv4a>$:#0QNA/v.e bZ}ozٿc>bn@ۛ#*gxUT`gPh&M'N5iȗJLWH>IܧdD*stxcm|ʗr02'h,K~}z}3B@DkOJJ1yz-2hak6 Mre`jgo,U|Akep~Jv;L"=zHtͫA8w}#잡/S1D2->#;&hce^/iVi7T)I}&Ox: fڪFߔ7߯W} ot:wPzXW_$laiSZBk."$(O]%nj@ni!I"md,op}**}LT5LUٺY^$֮8SMV:ȆS[h}}xׯ]o. Ce7T^sb^BM>8pκZK3/>H备^sieQ_/|.-}ӧVBz!XVIq`tj>8 aQF\EԺ GO}=&˫6$x479#K7]H^cTG-eQ2$Ɗ!);(?, <ߓآDة_jGU9_]t _o3r/9˥ 2dnaez P~^"pbg0~I+|sLQV 2N'Ln}QAcft(; S )EW%gF26<ޅ5લ)R`zpjh}ݴ/CZ{6^ \]7wF7ftpJ3@k7P7)TA3rDT$wT#Jjﻩ ݯ*PWՊqxЛxJ҉Acqr0e b2auIY##8wc(k]&pkPJ? 5+D3EyJ ҐS$PbӮ.xȡ/}  f;cKk`xч$=*~ joQȈa.hw4}O>yYљ2w0EW bӽ1ӽ~tgt/NEV[eQ4SL:xXl T z:ӼgTnc g^GgOho+\_(od}mlKL6qQes١ DDxC1!Е(:5k~h89'?+ʫp+:w/@ %֔|،.)_#S^'OAQZM*Hu57QWAt[V猟}K(WQMYp3G>8 !pnDBM18Z/ fEOۙbrwdEFgx\Ejԩo˗~İw̭f)<=*~H௼0sN"ER"٤ 6K1 g/ x-g^Ӷl9Џ{;=ƓE8]u`%+,`MndwN*r]5vdjqo~=Z=u "cVJ_L3>xS~&<`wt!s~c\z|B_u:"c̍"G8lv.E5HQҍ*pܺ},/89 Csu -(-Rīo#Lw>'^&$t{]L>8.ܠLǨbwo.% uȁ)XLx1YC+?_ohL)-^k򩵼8|!V?Cw OTnCR7W|R-& RPkָQ6Wj Xt6Aj:۬= AHTkRUp]z}_S^ R7Kу45V62ޯRc L C f)6Lv 9H}qt6J/$=~ bt:BJШ֒>@3lmJ<nNZqEzqa}U K%.($t:&죢dZqNL,͔RPH CVXUxlҖ/!U7Ԝ|_TݭIrFbFܗ[Q\ٹ΀=7Kلrr^}圢/]w's憼mITSVwhwJZ:!>Q:Fr} b3o|@$#ch-UE}̎0޾[wZS&N)vBF GPH('TQD*Yoە㯟1dNuf!r`zn\~Ctagh%Z$)`W3n٨媅^sC\J=b3c(ՌS8ġOn=DmFhq05D.Z}]ZGܠt'.ISqMsa"謡H;Y ZJm':trN1ݫz;[r)U~b?sX8iϿ)\G,^lbyC\[wFn]\!s4rx.:U*gu)3TXo{?h椯*+Ыfі-o~P, ^M5cBPxhS{}탙A|h[۟88{eL3P>2c#…K|x@J^Ïݵ|Fmm}t@z a}6M@U@ٌ3t$>P9+HLI;AG HLH2:|Ѩ FagzS=Grr遫 vUsU΂4wKYrd})cT3Ի NL(=w U@d2DuL6Ful{u6qD|8+;V@+M(UU!7>l JZ4\%X?]wՐtƵ}le-tO6&^}~s{<@S޽ҟ*NQ]ٸ?\EZ m(GD|AL JЇ]pXU])(ghġQzIOb)bi9/=kpIYr4 cJ( JEoGē'Owoc{bwǯxSK>9v%YiuM6_oA8 r_mZ.~T4'< GN)4Noubkqs{ra 2?@{i5D(3+V|ȓ 6/~AL tf|f"]G~O5t2)J/&۟?q2]UY|WX]yVX jcAS65tF@ÃPi*n: P\P9j:ݛr8*I C3Rc$/ ֪!h͐BaaWLw$Z"8a]4Wjniߕkߧ] x4[\+RrD$DI:~-;([E)7[j޴Ơ BH2g.X3E5YrX 1C~ūu'\tB#+,3c*A[^5 φ~3OWj]Wo/-R["A| Dvڱ@y{im`P)ڞF~Fa=z[X!ho ǹ=W6BntH};>o;*}3Tsr|BZFyT|[x餜=4+bQy*=_6:Okߛ ]?xA_o}gd><9GܾnSP;x`w޺C3mlУH-?b/w|~#!d4W}?HY_nC8rAQn;a:t֝a?Sp\4vGd8Zf%b|Bߣi0sgf)ӓ!Wsux#PD+G_R_-CTP_ޗDK7/V߼r]Z|)-ȴOտv7~wqfq@O>ٿ1~s`7#=|.RH?tXeN><мC.ZSxnif/\=kjӹ{kIe͕Ьo.?x7dqJM9>ˣQ7,/@X{hp/o j'??W6.Q@8 zkܳ|{Ꙍr˛-#7ؔk0yB>8pjc%ztSOGNXRjt27߻ LP&ÙkvgL emWl]C;a{pvژ9)ucu}mGL}N_=E}3P>8)=òEgq V[>E{ MtԷud]9)v)ioQTqgop<(*EiZՉspwfZCYEm0B'(ONw@"Rҏ[K+3=PGg|ɘh'#=Tk O%cޡ7sG?\nJRTZ&sBRůß9Huzk% !yxoYXX(psUMJC}B'#>;!X%~HOQq!G?spp0_K~9Í{k*ٿJt@c-tr<7=H^T5q79-U"*a*Yy4;}F>YC"W6] a3Ő+xD}f5( FfhhO&I IYsQNv琮'i"+-i9}LJ<%t}Fqɱ>#=zh_h-dcm`+V>ǣޥYo,h~s ޥ'.N ºg7JmPJ$)Bd a"B(%(=Kt޽t*@E+8ϫb6eg}']:2cp/)+ P}Q#)HŘ2^PUZZN7}ef *ᨨjd2ZtQr [+>nƤGʟS <7`X8z'4BF*&(i%_TSyڱxEd37$a)^T'\>̝҉TDztZ`眝>sqo^a?$ľt?9=) I:>GtFƍ'?#Ύ0yqP;J={>} WVL&|tZ5/-t;x K.??yGd?<?Aۤߩ}ȭk!^tҲn:Z!9O !0=@ENtݡk祛jC3ԥg 677@b?!n0$]{F d'[Մ# WpJ!BoЊ+U֫eFwKQ:J2n KA50|s6JP>=L>u7^;lq%"5 p6ToTq:EVjN4"UĀ!%{A1H7sTSy`!!̈́jaC)u .9>X"QqDoS -߾rጴS^ ʢOvr{s%q]&s/AIm}/5gMȰR&ZMw}W|e2CIh:5y4պ4SdpU16 .i+xѰ`h(‘Ö$=j 5jkw~It׶*.U&?,Eԇ0 KCQJ/ɮk9C(3)Jr?Bh-qV݆`Z=A2jgqZcL]ZdSjoh6;/m椅a~,:eg;Hb=?G*EroфrMF)h=+Hـr10|NM> =}|[ 0A ~4tBK() VB><+I;cӷ*9}'RV(&'̏jp\$YihD,4Vp8]%u<'<o0/![wg(IrSeց0"xK!HҔ*ʏ)&_?~e2eXIa(+Nv]K`8l^ënaNAAM,,lu{3+beNzt XwTMnc Sdgr`j< T3-t?/-w䢭SkEU. ~~5br,^WMi$~W/nV0@{q?bmw~LؿYj=r6ON0UnAis yX"߱tw6;IO_V߻S|V5g1+FT#p%RO9FgSSLO-&On!ݰF^Nu"zx$;zBeJHI1WB 1^vF5>&=ߣSeSjFӢV< ] #h\_o.0?Qyٵ x5^|Ӟ_ B.Gcҳ8A|xH1:DyCTtZ,CBp *ne_5_ Y̓Ҕ!nsJ1UfǏ ]y ds_(dglةِOw.}1Ќ :7HB9}><[H| EWhmkAa|Bp$ѭm]q qt@q]uUR&x[[pqYs ]f ]Vr l~dsyWYMȋ{6)3~u҉ENƙbB;[Lx2ʋuZxBr6JC׊PD; M0n4$Oj 9t:LsWH{R 5|Ye vY#l)O#L-֭Vyŀ,QH |n17ܢҵ68?V~1$sgc$]7=c2<#!G? |)€*츍U [|964lE^$gyi}qk5dgxup6BXp^1:DEel.,{LhQ *#O9\[U:a~؂sTTEI!f|@p<1 I pBOٜCN"b4RNzaTyQLD๾h8) io'@=Y#[LN('|Giz |S 4?\WhMG| -JSf*]66|-*۷7ٌ_'HN{V DYZBK%(ż଴Q<#5?IMO)̏.߳.E^!QA ~uF;:bӧ#%FH;q=g w_"0X;γ[wJDZh+CJRs',R*ҭGH2Jd= "[#ENglXdFٶw)zv3@q@K(DwZ2mS$Hx'C><ށ.@OS+$r!Vn7-|RV1{?]ӗRMb.憚U͑[S fXHY_c}5e%;yZU^6zHON@x{}tlk Sf Qrp^/|Te:RoqsW-o~YTYV1NG|gHյPMPQ^"D]|n[QR0`TŘrZ0 ^oVSEǢxWA\deF*/Wt!GrdgT'hRLOo4<d#u-/ Z> Z_R0lx`J_t4ncK7ߤ Fe :/05mUaZzq:GVJdD mE6z$={M9=[ITY1mkJ9;D _.iIRbZ*Ѷ Sbm ŤbD5#ɋx3t6#9yA|=DQ]()G a.bR\kVw  O4 =9”B';ŸTYH [cWt0]:l$9~m^ys m*<+A#t-8֑*(VhA*K{HEO +5 M KvPb5?x\1N N7vP? g&SY)s]9ahJ>:-P^͒/˒$%R&ۥJ1L<|gP?~'?x(lV~ 6\[ܺ4MU1?xL|V!Z*՟;^0" XR7/~B]2^}s oP"2?#P[© _Dx{•OKrxSݶ@w+ZhAEJ{a̙ k9o#4eYA67Rm^<Ӑ?@(t7bvNrBwFrU3[7fҞ.4~kPq=o]d2ZZrv\1 hfۿ:-~t:tء+ :Cۤ}ܳcܶ]8BϞ !;*Y'RL50J`,I d->e2!^ ;R.Bɱk~G0FPU]s` 3oD-:Z8;q>DŽKweN,zr>=mXfb6q[+sD)vo zb[ʿ0bbk e%ZɧO>'Xlxmt)]WDO>UPxꇕ:6CO>.T9^gՂ$ }į~;OA+^kB\sퟒ ? %]S_^K.)h5W=G5-B46?O&LNp6ǟ]{Gt/ż?tj>oA( >V̏}+P𽅻PtrZya#("սpIO_[+Қt. +C+NI&©+x9e-X8 GlfFJuR|Kç7=%SG7*v@*e"*A\y@~U2fyʩ7zgDH$/(/oQ~#+ |ObUom/i 1e2&;AHp>=YMQ!)'̳S= GgCZTeEhQ}]sy# 2UaӉȍ/ټufɐWFAY vmIA*p0UɛKJ*E "c)İ$0b NCUϱ/,.* ]*otErbzJve2F#rtLzM6#XCPpΦ%R DE ^xPS2[Lڬǟߣ+WɕKs l>_ߚ#5HY!*hֳns6;|)ObzRغR-7|3@-0g|E:HaMszvO w$Vpf`4 Yjc.(RT txr+C5n7$mUM&14MVAID[`B~P>#?#[麨4UMoo:J!H%\QGCyN%k'/MtUns|t@6#\}p!졔G s<& Oe @bhjnR:1|E{#}+du N!hm}htwNѾK1=B@ytN0nM<4Fm|umO'cfSF/d]icB0+PZ D鱽 UT'CJx̶M?5sI่q`5it="Hy,h(E B1ҋ"[OPˍ ]ܸu&dRh^^+~pyl! &y ~}Na'gU W2|Nt]@"d BQf2W9=qg^w}k1l6y4ZHH ^sg=5/ } q7 Qc_8V0c]]$B{9d*lހ{Uf?'S],/.U+HkRԳ Ͽ>Bb̅/^<;B q[D A3 LZPElLU.m&5й^V-%R^ÑE6nOsځCD>c&hLNpsv%Ҩ4PKg 4=*IHZёovWA! NԠ:Hem`sw~FMAb|Y9yWsڏhA>ʦ0 ͭnpQ`*.̙Ԑ8ұ-T: ?c~Ѷ+pg%ܒ/K[?KrbvZ*87j xN_ o& ҋo~E~g Q 퓜_1Uj''#/1;xx }*Ke_ϩ%/H˷67T/?Bܽws+eRw6Z/|tt\ҳĽߙpa|'Bܿo\}s>ן,^~ooO>Rv)QQNmoJ(FbTbqmn 9+KqXw 냘 v 7fF*)1XleA!Jۦ]'F9G&pӃ:?R9pl>c\&Ph^{sO62^W4|L`o@kK W>K'Z,Fd׏ՏX.g+8L Rsn1]A誴(\G?Xšr,&/[i ]+gw9As]$']ғoHO_Ӹ9C@W9RY/)*xJ'ҥQBZ?L]B~p[Xv~t{Bkv:}++]TX{0mtYʙM0Mi[Л pmzSR;X4T.fU2Mrdp\d|-E.{_ּ`U6ts`Aw)#t>'lq.Ee+Wսyh=͏ᆸ>^{mJw7-rYW$O) ^s]唣U6ɵJ>>Ν;xǏbyyٶrt&5Ϛpcˎ \#95WqKW_~=H-jMvJoV;?CHrzt<>{+,Ľ(\Jc}Ê :Ohh@(VyB>ou?/-IzWҿJ R_(ZDg:23=D5L 2oAOԚJ .I9rYA/[^ZʦW9 s6)HA-v ;Òn@*83Lۏ1X[yV>'WJ%%^R%,XjT'ǒ%Wwi6賭N SN {k@)ۆl VYpHNGlxr>IGlnUXI_ص@W8Z(! 7>$2i ֣/Xq.?B/FS&c5 7>0iR,x+y WWuVUmp]FUyR[;[Kfp偭\uh9&=`iUj!`%|꾑ΠD-;߿h JL ɛ}㢂 A0t"umoIrگv/g e)ȏSLJbpq܈^wɧa%|\[ضv>eV:cA#GmL>g~|9a||gq'PD\\ւ s䰟ap({¢</pnM>VX޵xR}r7UO k,7lw|BL3;Nj7{w1DxIYY9 sbߵbUs -ʙu0en)kX븤fOgB7> :W%*Pa ]dLgcL'0PMT됪A]{|Q[(ұ] Vm;#•Z&X>;O;H$/8ͭ%-YJ6:^-wv-&n{ ||__u1~xn0O>@k |FHNA[Goidza$@B㴲ڞ,ԋ(/"?\ tZ14Fyz>h"C8E'gs #KHFTg',"(䬒oupQ,u3JG3|[CL0b{WW{ZH3&/1j\oe.\z|d#eȇ#}>Mr9|w|D"J{s|os! Wuȏp.yR1-Դ"9{> 5U:hV*Z\+c E^ $!Q~S^H><MtEd*ztf"D pFrهn *8܅W i) eAvnUnR Ab8 +|tD><@ֳ -ڴ2[#;L*Gy p]7F1KE1lt4ٷ&nkinKB!'#Κ ~wQIn뒏O:%8+ir}E嶖o(KRyV7!(G1gE8;J0N\Qڂ$= C@JLE#=]wIO^Hg$?&=}u_]Er Ԫ*U:8aiy?~ɥᶖ*V%GK[dCv^>꫺R%۟Zbg]9^ľ?)ÏWH#ڣ ,$l[bq.B\ZG:.^mNڲ0 b6&c˅ 6`VHO_[]P#of0] @x0?DzP)(P ߰fs.֌ \bΊSNJ+:O.R5 ])_6eM-LUƗN̨u.J_oQiMxȉ KDƧxCV! MB?tmhXaه~$7B֌9ѝuR4;xKЂT6p!SN)D *Txc9lִA΁Kqp@w<GGS1G!b&QeyW֔ /%BIT~(2H)^kSLwD S拄g<sb8tTzq7niV*pB:q^{r>"?m-#vm*'HHV\yw-H@l+1(,\,76x۽"_cM]BU)!]T5uMvw6q6fLߌq>['‰ĞҵSu|EEHE~t7Ϟ3F*a5%nQZSDadGvmOO3Z]|N9cC#XZ#geY:?TvY$ OZ!Ր2[*RV'_ަrlܑ%kDPJ ٤vSYP{1SyRW<{ox>»BMCjy'&X{p tąmY$^OЍ1CfO1Uٰh#-᮵ΗnQlA6ǯi?z̛P e?\oCck] 1U:ō{!W99C1 8S4.ۦqFWi<%?nm?g`4Ct5W0";É{vHbVKIif7ks5[qp]j/g,ܹ2%\ζI^ƻ/؃_kPjA茸+EuCTG[ K)&ݥ~ kحU/v}8 ԿRm;)IBEǔ A L#b*nY^txF9`*FJ5Mw)ÙGt<劣9 >^"^387iZGj rD*J䌴^D3ۃ!*C1:[w<&X~\A\K/ q>Ar!%A2ᷖpɓ @O4KlݺCh>\G&b#u¹wwT{w+yWg|5N8LK IL?3(C@|oFu⟏9p g#Mq|@LqEj:$7PD]K~܈teIe|pF Lj}>B g]Zz )Ku(R)N52ÆNݑ(CWH/Jl2-J*IíIO93&ӌ,c8sz>43ZN$n ^zYIg 20Bkb Y)KA8TLQmtD!"w1Fc.0] א[QRUvlYfۧyo㨌>)?&n4IN_SOp&^{lFN0h׶`=Fݰcb_p$| o *wT//MSO VɁ7W(P IH3َ--3M@HE!|l63NTgd\ sX`MPprZJ%U{䐵ۏ]gݵD;%8{:- [X 5fU9lC7vsqxk'g>}LK{@Ҁ)87%KxDYaeVAYW8Lg`R!,Xymcf5_$Ԃ('•Yﻌ):xg0?: ]F5A;̳ 'r1n@-2NGߑ%90lKPXn5[!?:S[0 1Bh"5cڏe'd{OUK稹{8rA.G`\t i< ҳW$_mo֬:Tt$Q1gnc )7L9'QTX PݸIgZq0/%[ .W$3ƭk4EzB.RV]g vdCS"ܐ"ӇKd<ǝߢ* vG+TaպZH55RUٌ(5YazؗNE!~o6S%tǭ ,7G1=+Z`hE1}O&⨛N jLPh>N\vH6#Z;|](X]@(h[AvߺJ#I:ohSP>ݣ6~E)?! vF+q5q6s2Pe3Oi̞uAnmUYՄVӡ/EtT4z2(v;fvMrWB)3+^")VZmئ1VEst2 0UI֏P^DU^%ұ*0*lY#O5}T&X bE*l=ohU'HZ U1#W >0֩9rc!1q>)U6"hϮP`9)JELrػgB.n2{ *Bb:NTZwA%-W'AgC"XYA||p2c^h1]z', OsMƍ6KwZ2op~2 3 i65**3P0MB`2<袲wq.EХ-}NE LQGQlM1B{ޗ4{k*c4yqju-ulpMYt ٹ5W5?}ung+1ZTN~ooIO_urF4+gwq⎕l(L^_XmB7Wns~={ p kf SNdR'/0Z_jQ{Mml]DkcZ`q&+}2鱶v=(q%(+^=!ee=tn\PFHڊ($Mm?JRwKtEq7ɤ3 pI 6^w|߿ٰ0EyU6h.a A"q}S+''`^h#\=CLvPMCWY[ሓ1$ʼnbȘ)3CVWh4V"Lk2'"L&TUIe<2- RL*^_&[0: =yA>ܷ\,bL0?~Nd$OGG c5BȬdsٺrO{[8JXaAWU*n Sa)}L P :2mk0BrIc.إ8=f&;a2W^c޿X6 %t7\QRr RnfVP 84(2.Ur,8(21z`2u%q?E6HJZM4;nN9gj/JsTQ5DNJ~BQhS:C awAV ;"eD4^ 4Sr|^*%۟=k8NaGcCaͦ+mjŞ8пWbaO^YGHE;#jSO | mDC,X6+y1]0V~t} Ni|2p>LM~m?ue) +pe0TLTW@,#9|t<•֙fUqM+o !_A`MH3]y5z_&]R Y5> 7t5b2 n{-9%>UR $6 ^5cu3Nܹ&z QFVh7XqJ4!5¡. < Kp6oQAѢaEv!}_Vfsv gics>S]KS>K73COe20NIg9(ɩdJIY APJT(T$s TIt ],hMO:.P 7g)')A N=O=h!܂kKgSC=۞Vr>ƪdZp&_Z߾Ey B fۿ>8!E^R B)1pv| rNyLF$-Έ {]O>x||Y_#|wl~ Wz84op7 i7aaHI2HbJir+F ,sFXtL2=/sFFs«ڬtژcas-Уe12Ѹe\8.[}3NS)_ԆƠB !׊C3K>JIJ#Bʅr|ttYj>FZĵ)m5|U|Oz4㒿0N jNǠh9ܧJxK1up*g8-Z8Rߤ*ҸS0'jSe3# *hm|կpWHwI9U:"Exc\ {[7p.զεَw b8q68, 2MT58T=OBP2J2@Ucwj6O`Q,&)˒q1a4C!\"gMHلɜt!H(\'|}؅PN]d(?B B9{M W_ۛtl.GJ v\ze dӬb(w) Q.ݶ"EH7i,QNAq<ܷ*zGR*}`>nr-3ɫ_,ݱ369)IEi(%+MwaH6dg;co!SECP$1Rvha6>Y$w0EE%(Su+<"GjccKi4nO~ v0U@INIaccV>mIOξ ڰK=xA5N6&mV>a+)mWXO(fC)w>jls¦!h88FRU9x %J2 +B)e>Jg8Frq1 3Ru͈Yס9r2:7 PWmZ[OH_o~J6إ6=Dc<0ϙS)VP *39%=yIV'RnkxdOfsʪT|BYA"K)S>f9a+&4 M3rire3Gci-?$!#PF JC)Wh],)fjTYɒT4EI:ϖť/2Ei>ZP]V1yqzĊYZsY[$C"T M&V+՛cbS1UYq4ѮDih NKܲN[fiƩ@Api!V0?&;Ǎ2 ׍k9 'Kp% M><  'ho}v) qlvy념Lg7{&*E ;\uJ}i7>&Xp2l 'w Tǯc%vV;!TPA V$K-)BV/$4.:=+kZiҎdBQV.Q'שp v8>HƚvtNQV"-z,5lp燬ܦSlf['/h8< ӊ)J|r(~d _! 8 <7398F5$e&itt-EI, 5{kPv6R`LE*ywKJ410+}NȬhop²e%̄FJ&U'3iʁls $IBZ@}E)5(KCT+^nH6 -Y'="YkWOV/J9dhTfup <>})o _iDuT;h]ZUh41$6MR!mWxſV_ZHKm-n3h&\>ڍqt}coto%%~w 3|keHsm^89a~!ҡӳ{pж F\ˣ ))㤺4^6uSh?d|`.N0p0Rm1SZ[^K20fqvBƉET9Anp[!kfFc:-;֧)D$\O|2 1^U&;}(OPq}OԂ򦵏vh5i)FeW 'e*N;aXݼ4d]V)A=E)m|l[dZF5J46A&ķ@7bZI|g~synlU={TcPR,*hXcrŲ.A~g2LFV88l]#}55oJG@1dEꑫ>MV3 }YP^7*4|ٺw>A{LeLhb/-0J6.!=?!^.Me P%rZDk9t@(gCtD]TT:: ,Zy~kx| n^ث."飇;\)1[4olx@6.4<~g^c<tjlh1n_Y$49%M*xn p]2#Oҭ4=I-Xb4oqTD撋G(f*Byh]y.R(Ŕ !"AVi'- NQARr$EpJ2?ځbO7bھx`9,4<%9}%-dˇ$/rfCIcutz.QaĿ\JA,Xut.e)")!$E^BUAc,Xa E'"EǝX`נ0~Y2g3r?ƍ{ tkKvZ#ĝ=ތx`xNE ҋ)*siF-2ĞZg{$;V碖q]Mw~Jr '5Upr-G93}L5IN+ڣbwq+H|?Tl4ٌ;o~K b[h!xSנR&[o #~wѕhnٸi9 r9nR|QE03]&mio)A#\$/Ij㧤\.rq ω7?B~I{ll5U4>nD2{[|x.۫psFGhs: \\Aj9;ϙCt#g4W?,+ʲDqsf \r1 ?:S'ƿyg-1bT!^wl3rR-D4*I~ҶL,u:z2tC nUJƅشcAzg"^6ye8U(@=I7R>ʏ(&Sۿ6œ5 F7›E\ pyٴ2f}#iI IZ&R- c:! S=fOKNdhcpoQmJ܂R@A>:&UANhb D,5ڑSK~_ >e%e2R5]MfjQ~o ѳD}!PAk1#n$9yA#ѵvM=q[+K*Byj6L>:>s&3Nx=p89K^۷`~N9ҋK@fY īwM*h0 E[mL0yk ddixVX[<`i"d?\!Q[R4L&$y)?4 .'U݌GPRҎ}1MKQG;烿c9qd%Nв6HWRTQ'Q&m҉ZߒKCTT]d2jl[RJʰקx,Q6+wᛜl}>ָ̲ӊdCק0bS$$3hSicsVnYqg)=!lidrΕb.TsɢڸM]oQNV4Q~$Q4w_CRH> ]ӫ SO0FxKF.R :7W[R\Ϯo|t 4 %+ȉpzU@ ('d=鍭8]fz@xUxp`^\]-q}-P(#^e-*dKwE=# wk|(;c(J•$G/(^iW-*Zɸ( 8J⺖CgyZl}!6|g \oE!$CtJg κ=%dxfᵖ7"߷"A!=rg죁*bu[_sx2'\<ߧﲼT^7ұ\^=zƍX՚KZ+)mo3mk-$q)$aTѢɘ`i ="+}2nK6>]Ƕ~`޻ܨek{?ettsq"V'Q@wՋ~a0ڈ5ձUzzd [x?~ -:\xu}wkLQ5t`]jh+QAVUv%[p@d $C7V *nZ(X `V2֊-n\A.-xrNaqy#Ȯz[LOɆ(Aɫ"=&XM6ܳ5(- ܮ#G7Ҋ/ʥuVD H lh_Yһ !TI_Padt!];;B׭0 9<_EGt,vS#`ނ $׊454ju:;4V"umtOhD{kwCx U6ijsgH]ʌ.k7/iQR1Jt;!zk5o\R} +D7WP!Nа/)'SdlNWB1~g524B.w6i^冨z"X-m̲f] )#Xٱy˅Pk iuZd\X|W܉mJ?o2.<).ݕ{{:4|huW,Γ堍FW7:-;%;jv/6!Q[" Gwp^2)8)1*ppux7GGO)CSo zXJ: aE\:[.Vg+o3^<_ɣU] N& ߕmm%oS1CGP~mHV0ΗW6kYdoU̦*yi]"Q-KI 5UWRh<Ǫn~q|n%W]I^׭#>'n/-q$zCV,۵4ΆCпF hx=,ת(5BV@yQ%c5#2Hu]Mw>v)c廋{?6H,4q eYa*0+5"K }hzya;ڰ]]Gv+tj!9|L*>R:5FгژkWJK$:ɦ6rc k9%n8Y.fZZA";ۡ q鉅KwH0CgT];Qi  L6RRLNɫ08ib6M9MFW(#d!mt{ڡTwi >Pu9U3fb~g֧$G/[A-_m|ي&3/"wQyvYZ\MzÊ! W"KN'V]1FWuKϩ҉SVs^W"kK}Cqnk۰j18QJV)Ҭ6@Rqn Q q60-]* #H+gC*NЎbǂ:L)VCT^v:%3E~"\%`RBLs(sC׏1d-U6yBqn}Hxp2))\m4m(˺_] 4K,1U]^;M9>?glݺ?eeOXiv*PuC(02`X_s|\ƥAᬿF0)(!Z^K%X}d?Rbr|HzCtۺu1͇OɎ[i1kYBui)V!)ӝҸc#e2 zoUWy!"bSx4}Ec srP^wmrKd| YlY1Z-̭5|@~Gva"YKM;qpN`߮fP<)pD ɴ(ȭMwɅºeFR@1d'OpȮ*#!?_t÷#Y (/bҼZl:kq ڕD4c9pR>ZJL^u48\iw[}BHvEmuxS_}t7'/rQQ+/X?k-m V".3mT$1QD iVu A jW}G(7tfi(5=GVK20I*.Mӊh#lJvg tBPru4 Ix x R鰞\?ІlR8FIi]k죢D_ ( _y.Ts>pQ4ܻE9S·d]p6[QΆ̏o~,dMJcebR.4^TE۵x[hP[{="F"18sGs2Du@oT UQS@m0`x=!>Ppr>V5ѴyE5ܿKпK1=C#{~w3R6>]flpaի|l++^nFxjxEzcM6[z)fPV>OPV5tѵ[IwAQmvHA-=Ei v#ƕ6|oA69'Z0pTz%qᔮe]u4]֖D^ӧ҆AZRV暸!# y;"ECZP;?{g%tSKnwkCVlJok2߯*bAJEUPZ J;1k'i1Ct X6B(AX*ƶw"#'Fe[2yTdo~lK['`f̬gdxuU%9|B1>"Zo wjʔƝϙ?l|Ƙ#ry硪nL,0$=؆A P)i$դksSqsq""#2*>Ff8kXEuVQ me#2-F$XAGm~T>ZQ9I'HQԶW @M%,Mnf9&񉮽۔Ʉ2!ck,%2( h pQSR ds7iO䨾}oa1]Jȳ~ߕs"jg4+VFkfMj>'6;?YU3͡_%>?#k̩*c7Ʃ#jl,XbkMTKXq ĹsX2ώԨD'#~R;#޽|`ک?z] V)1UW~#lh5_m @y!4UlB:>:v('E3T_(f'(GK!! 뒾08&.]+S3\"_YqnZbJnjmJO~'c;W JS0j z+)ʚ8ԁ"a6cXٵ*;VP^) A`BYu 8ՠB!d(3zap\iE%5iJxtJ[Y&-xx f3IZuJ 9Q[!e!͛s%H(åZP)1zU !3աQ8tصA̰?o,mK6|~v8jZ{B\mg T?m6[yeҍi3ۭUV0 BRܛf4C˳BB 2V^p.(Az!nR!5n\2 lxB LYNTQu{;'i6̫Sh7~a@=0C:9umaxKWϺ9RL A?Ҹʾi 2p%g3AklIa[?߶i^c+Qmyo\sUUxsAgv(f'd뷶.Tm'8*l3f,!1x-2@J­wddh[!tBxihE͹luFMA]yG5󄳍5ҔU7n}Aa.d1JJҲ&3 yA:Qm(_gk|:)%*ޖ]uI;@<ڞT vGY2}Zw ʉY" Uvi ڮʹk݂}2ܿ\KUΗMJKtAxoR)l` olAj*͠M]Wdvns!)# O6ZRG"36o]h| ѺI yRX7-JSj& F9u_鏭vF/i3vC]S)M"ώq+ۻNkvbzBQR5֛8C<܎<|%!Ԓ8wdcR `GޟcaCT-Un<Ӹ^I)Z#lx[!F ­PA:;z\ip(fV Ej|{E_;tWƢ+~RP+jᗟA׶>Ntjg̺8ɕP\\k+Ucy7XiUI>vȭ }ݱG1٣Tv#jz㊵5I>#`].JŹ*ٟG =qM7?' ?xѴ[mIeu`ɢd;W~@X%SdD]Y¹-U#Odr2x~2fq0sV\9F]0\A z RրvdxngdђB9VyJ,^ܷ~p-JL]Fpln A]c”fmū=dWYLv] {)%b1"zgN\,bGZA!{$”#82[VAiD> \n_qn8h yA`l1?c>}:P~;KpejZbWLa}*0ZA}ňN{2Q3u;V=i> H(h[q6;k]@JM!w͏=i] SR/$)K.fntM׭pm$ iل.|6vIfV޼x N_Az G;З6_2+rc+Ƒ܊TK,QW u|%ѵ/|Ⱥ6GڳY+#Al6AUjKL@>9"9xbaaKtfٻ\B9([|my aSǣzg%=b}FT8e2%>'MӋ-`uAM?RY)'''!׮].R zd"-,P%2Ѿ_H ?E}TХJg8Q`+T"dw\E{2zViʢYez,,a݇8zߥn&s2 ߦxi͋S-0I,TXk OY瓟Y+ غeHPaC,[&\'>OO ODN6Y^ʺpO%{8Uڄ޷`Kпfeo}U~d-¨E]f~$kT)43ȓ8Z7>"9yJG((7@(]ּ<$-cV֖_gOvE(*OLJ)V"MIʪ&-쌱20c/^^ R!|Z,"NOb؍aɔ(O[{I1]xB,`'a~x+יڔ[4"{'_`Y&Mp_ F䓇O?C]Z`2ϪeKkQyfpm֖T׶{ҏ h!>W$nBZ[z*yb># tn5kJ2޺u/ػ/_YiP<=+nZt^cg^uOeվfPrG"̎R$MEybA {) /j@xga[n-lƟEkMz=䕡xInfnҟX +Z?r7oO~VCWmÜdgT$]نȶc+X⢲DڮF(Нmlv#7~x [ou#/O㿊J0|F.^m|Um[vvm[kB&+]M]v&FdR;=OM]waG69"hb1D*G{7Ԇ6Ahn|P*V2X,p{ ƛ Jڂ;'Q~1YLUgB]okyI_\;bn|H3J3]|n+yV*A+nWv)I"9P-Gr52 Snv,+7HM'ˠ()++ &> A&穄B(fbNkόjP{䀺@lGhF3KAϔ)&O'hUN}i2v@%l/KS!* jOx8k[M&ſ[6r|&~fC6xFOQ~"iɺDmTأ?G[i_(+0w֙.‹_GſdYJ!;l`<ZnN6'-_qΑ̒<]r#q*d~Z0K- 98)c!ngB9蠋2m_J3lU,6JsiFw\!DfkU s}}ZN@r&</ ? %dzʜqu. j"%Pct{ƫmS-T௪mӀ>=B?b1b|x=nH5X50 \Ye4/ ;>oF/l:@]SV2FdV@ZݺE#ij\{i9!ΩHE8Ay^ZOg[b2VDCFECp+ߦ=GP/}ub Ks}r$wj$- | 2zA!FjGVnVq6W0}Xx ouk ; wElsu@y-+#5^@rpߪ8>R&m4sJjҒ=zc,`t+Y%Ւ q(k%iIWDd0 #p<5%V/>Xkz37q{IdxskSdvP!kc;t:L#1 ; \īZwV >[[V[~bohgDo|֍H0}H⯿cep}~Zmb cpI04 Wv&a7.ϲ.Yշ$jڝ7v6/T}B>Fr41ZD2#;ec^~P^H]ܾP;ݜq"aVd9b0mcŘoRs3jS ]}ETyB>Z~h>noxsDu^C{+*Y!H,0 ~zj(1|`!,#<9E2kHi C6BݽCo8T]r/k˖[`V,rtA7>'ٽO@Ԟ:3mfvu]S ;7{dOq[d$XJ3OK%_X{*_M$#V6Vkw=>U:]Ӣ"V)gN8ZbtA6fU\T_F>:no_ an k\֨`Vާ};KY*[.plK7Эunh_ГKSziV8oLm0BXҞ93g%D$[g)B9ur:Wp-ߦ.3ng!%[hCCHςyvqk jG9$. ys]aJjHfc쏐߶J1U*^o嵨+ 7yb3 SW Xצ$ ^wY6sɿaH˚dE"{|g `{}{;.1UYcOwyzAYK2uMnN,?gR&+CQ\T5qn\(dc/5޷@ [G$Ӈ3OGAi7в^yd1)zx攳BHk̈́uyC;WIEZ|ʫ4F\kTMz|zAHi8o)u+*S&S xL=X +nEEF6zVP~r1$c:%- EY9V 2Ǽˆt6YآJfp|O6xf[9CEcb*ru]too309EUYfp)%|HqongtH,U.rCiUZ\2 L1Y JSiE./0GPc+ ʺfSx?qCFlA]d8ъwum@8+-g.YY[_pj#6|@-!6rM>ޣ6e^XtСGsZ;ڔ5=eI.L+ZY(Q(]ͷm\p_e拌bzfިBj+=,ŋO(Gjz9tM{|G/=}b xYpf01uvvn%D_s7F IG>޵b?'_1+kf!m䢌xޛUSF_'ǸMwuuVzvJuu6S4B8,}+h\FQeM۞G B_|׿BP vȎ[8-ңtne _1ϼܹhYW0yr͎n66*DU:#<2qa- SOZC8Vnlp8dg*D+tNZESխGEΝw(l}s~Q[)5*Ii,E:>Ǐ2 צ$43sSdUy!d]Zҋ?.3^\2SWED)YsZ?k'5!9Ԧ&;yf6(eAnึ5"ax}Ll}g]][wq>nY^]eڮ!-+q%I ,iDk>l]TlIt36dc#drGztŠ^AT 6$=|H|poj[]Z;N|E2ؤzl+6ݺc&Ƀ#ju@o~Z_fB]]|zOϣ{C}SQ)5dzQesd~.o6Q;u RI<Ɯ| BRR|gp翤Xssyd6:߯\ `>tR"E yc5 c ҋ$QT5ZP=Srxeu/YU ֩*ARLCo~A_LAKxb>oܽ(Ja#д{SBj BbTYr4~,эo |i-6G:ѵFz|,AN{2k;[oS̎Ɇ/MO]UY]!F-=d.퐍5Ju Oߡt}{/ѪE⯮R[k1E5_Q% \G!!&켇t#.|ţyi{c{\Ty2إ z% Y%%l4ڋH<#s0tvrQޟF.7VpaA0_ 4kf8:74(A0EJzJ,-¶ʜGXBî&bӌB㣼!:Z-T/lW)f V;48,쟲㠴g5=KYSNԻEY6\- Cε;t6AiÇmhbrXV6\e  QG9|J6|Z{ۡ215ni$2C(9âfu,H7ZJ~M\rxߪDVl|t2 &Gb۾LOUUlSG}T`h$9x4`c8y~@;j]*_Dd)I^4s=!BWc:Y;7רOͼ#K <e,)Ɇ/ݖ}}8M4jcȧ+\QJS TdYfffM w?%(c&=Ҽ}Q6U!Blsb|ӅKmK9XRtЦjŔU89o]=_ٲu$8K* @ 1MRҀ@][pn(Ν$̟|"Ba72!].)CvJ8jAb1iY ; f'تLgs zғg8Qѐ߳ L8~Yi*jLth%Y\9yE]DQ/.k(0-tMT88LmCۺ7>r oS FqIrcd[Si.yz2ߎ|"a88᭻7w[hYEvCH[5( & ?n@.|ZPOy=o=`k9[[lmQPUQqrtgs}"RB!g&:o{dBmJ79/ {?_>+u=I%*PĕӬP]1ʵsZ'xeU>\ވhQ6} C|pE>?+T鵿2(+qd=r>!\ ,\Z*8hG4h8,Hfe"ңGܶ]>nnv6Ȇ)),_.iQ.F'On|d>U qh-QJc-QFNͳ3وgWMcL})Ezj>=r2ru-L[{KfaC:֮w־"Kr1VWRQL( yZ N09#PO-Lmn̕Kb3&lJ6c.T:ۮײ4䱭kCh& vtv:.kBR^ Z =,G_tzl[0OnpIg ~9{_T?y.Tر92!<>Y{(d Lio|_oH?n]cjS;/Bz! "ãO.FLJ_'ɂJ-e:c80/TX-TL^,* ;cM9B;EF|Ԡ͖ ^Z^X4 z!' 0EI2P3+PFpu> p:cы%U6M#Rbh5e:Q U^o"#shϑUAr2۱o[*e2nwkԎE3g8u1/ âkҥiz6#ظK>ڥ.3[6Ik:sv-J,gB7EHd6d9zF !]q!3Xb98%kEuy=J&v{"jP]FhY^Q"_3 D*Z^)RK[ {6@Kr% \|zPV]HgNg??}駟$ɲZttWO`jA>o۔FڃQJ?usG#Վ_׬t笙EsOglqmyѼiU>fs&ŒL+ZR.}z !ptEz/mD`Qye2W.7^@Iq)^Oe.TKG?n構' >b$K l)YB ^ldNO)4 $ƙ%$)l8Z#\7*z+@.ضN>U2@EΕ4Nk!_l{Cybr߶Y!JLʓrwq:vQ·' |bD}rƽLeEZZ5nfv[# CM8,ϙ'UߧlLZX'd]ȶtIQ~ aصT>[I\9+kPpA T+)heGcc6?!xr1Z~H))B8>Z|Ux <-*Bk4J x"ǔ5>i:5WkDԍ̩rR1u#O5HD/J풍p>uOW5ڶR%SLiw:8=8<:A \9( VږJvWƂ{E*B:ZIv`טI߱'+OMܢNIvBrQ 85ti7Rs݊x3F >n&o6no˶4qsWC8UVWskϩ4PU]Urx=:JjL9<"O`\G'iY#zmϹ% U-@F -Q~ 2XJ$o) y7=kW$uJ=v\q9'Qa'fmŢ@ A0eF>|?8>uUڒT( ŪdI[琨j|̖hX~v)*?77?@*sU|ɿy ڏxttY-g4Ƶ(_~Og)#,!p#|pCqZ fY~WTXw!oD4l6q=(mGk!q)jPT\_weD^EA'ZMrzWe9үz; 7./ʜNi`4r@Z=[!P%3HG{h* DiiN' 6qCo/;:Z!=yB9rJv뾳6,Xnqw\}Nzbzd/mum19M&ٵY t}At(+@QXmP")J{_fMeȽ醔S8ECl',ufiE5{ =HNH VרѾ"_%}* G#XCLHO"[|Am ng7$yxRx>V/JkS.9hP/鋭R+v6'.~wǜ3#5Q[y5IJ^A3T5RKBKs6)j`yKiAjn}d],l'Uup+ibie=*),zHbfaoiOlD95V+\Khε'tړ׋װw٬48~!QZI?}?mO -+ܹi}|dV_^w_2uZ͎ R( R9F3L5:b pkTt زECU'ĻZ!7 cಔYgHJr fb߾G:xESd ke&ɲvͮ%,RI|V?w=>Y;Yy5$0^WFD㯬D-(3ڂ7 ޡ:Ɇ/JIaxQFJ;tiEtܻwa\޼2i9|6R8u"h@~YcejD3(*ݦvM?h4:˔n;?FrohO7vٗTQ]s|to8H!8wo_oVKǏ ?+|ۼ8Et ZT/O9'vwbcIGL#}=|Y 8ϟ=6*u8$s /?7d3.?sP9>>fwwׯS-)Q62Cզ~ QH"]q-HbAubǸͷ {=ojE5U9@ FL&mS(z`1WIE<⓳?1捇 =hG xNc"Y3L9<>w?4ϟ/ۙ6kKO-UƋ.MUqgh9Klw{=NM c7C8<:Wt (a}Ɵp^_Vjx67~ú ֐J3 -Ts<r?aEMh\t(+ۖ*_sT S3ϭnNYY?ePJg&E3R -| " ]XFϩ HYD~N褸r0:1305}O 󍬙۸5lA6xFpg_KڕR޷Cmi..9; x)R>NJ *c(ԊVaV:=d1<NAMs2E+ ?xa-5Ujw=ɼ[]RbL R&c6Z)yEVկ\EeU8` *0ٜ"Ip;(|zdY9$c5CK>rhUK{i^gWu;$G R `uxkG3~#ظK]f,v?'w)ClEO(f;I(HTY!mboiVHEZ3YYHm8 \"!z J`uaJCU ڽU"%;yjIж?idvAx3tJ6y9_cg9 (mp͛Vݔ$IR{d! m># ;\+h1bvTthiVlQV'O.u6VwbS$,tn÷nRVH!n‘,D^}XMJ)PkZQxZZFʯ6dtQs_r֫%+K3xWv`3TPKYv|:C۫3$N;R 1UkK-hrW:'O8UL'"B!c޶u<[r'X),$sB= G$i:ZlnymX8+Kz++\U?uqlɾlk$'pcI:/2H=w'V![+h̬Kn|^_iI)yLGqn/z#߳ҩYTbMHbS[Vm@Yb$dc:x!KQ\֖OgS]tԣYаg?))QT5% .*^NՄoͽzflu4iݧR+N[O#\dQQ@rZVZM64[Tɔ|'"UKfh X(ךȻu*[kܾy*R酖dWtLt A*Q)Nk*ܐb1BK=xyH1x5Xy%έBElXh:_ܻxB7i6>}5*@ɨ ~w+ 5HW~OfB`wo{7ɇ~@z y Eh+'3 >ҖaѬ`wLiygAiH|GnK@lfWVJ)>m.{cWIAVohkٜ''qLZnpO9R[NС>ӼKSn.9zdw/[oY<_ՀUinlK|`Y W{_X{zdg5*=yJgFY %7uh{:$GOkdi}ڐ%D]LmRv&{,Awe)^YgA`UM晹r?dWVP UaP,eSMct{}tԵ^B.5gQO,7vp:xF,@:]' ^\0/*vc0 [oUZjט7vY  i^Q68M Cӌ Cv 7; 0nN1<ߩ)>ϼTd:J.&*H]{ыS _zq@v!Cz \L(L  Tڑ&\nEhҋ&Gi_oL:(VZqjBORC3) Rmmr.+Ph|zHΨne͂'|xKށ$ Nd^081=I0I$HI>#O&,eh/2ŤL:[Y;OUrŶuϲTq<";yʖm HIOS99g~SkZ<آ'orܠ +UxH1wl{\_KڎXX(Mt5r"ę! Rz+VH`70oSxΨn56f sg,^--MTh=$S̎Qn[#LnQ BwusW?l)Ҥ'ӥHgty0v3#%b#RzXsš!!,H&KTiB!q|>{u'4UAr!#}?[Nqi!^N%/\jcV񂴭Q,X<x:\zy?K) x7 =Ƌ1n#fO rRV B% i!|͗(Q)- $9J.rt֚TPEmuXJ>O?֗~@,hVD.V g֟L3vfiF9RikoS׆b1DAVPԶTz;1{{xbMyS8W1•Aki9/E\{č(OfcK7oe m[w$cvw?7#JsjbKm9?Y|)~q*D\m 'w+[H܎$l{c pH3-)҂*uAPĘ yNa 硄WIvvZxUG`Ng r̩* cV#tU9n+cԍ~U *Q .\ m7r7-GS:ݚnG2Ժ RPUkQSTÌjͧj31"$@BW⹒Y yY4r[ptx۳-9ǘ,~: r+b]V@%EFrVftxyxZmlSԦ\qsb0/^>N Z-ת2ƪn Cwm醶_.{Yg}]0=9&l\$X@u%, qA)rXݫe a(I +PO6xnoa"_Pe3)'9~Y@pW$P%R^H'Ļ%{Ha[\RZASiXBU23ŨZ Y;+Rtvi!ƍm@ ߑ3 l* ɛ7?E Z 6j2n2K$>zY1;ֲ=zmܹs h[o {˟=w<#WJ+?r04!~We`X9.oq'޻8J*A%)7UA:xڱE-(f'\1n 4|#ToҚdٔ)YJv(jם. s2Cz.hn~.K b{Y9-Ěob1"9~H6E^Kgʍ-hu8CP }UB΂(Oc Y> !IME[* mF`*rڵ\7HD}B^3FWJF}/]SWmH p>9uNb';RKU58Q|^>ާͥjO ό/]rW1'fACTϨGKԫ<~i;KϚ Ȇ)u9Z~2cxPdSm8ھw~ Gv)bS͗ ג`k{>t1!mwz=)?ЛtrϦd٧\VY-`\~A'piUڭ#I·6B9-2Vq1ā8^y#޿2US7F­+ qdKNk*um ~JH#uQ׸+^:CS)8~xNgQVSN]GR+ 5Ȑr[J٥Zk`Q=dЃ 6P^@1|B-GE<7vF'Q1;b g06ޠ.Rk*._&B _RώPao:ْ6tY[m;*8(i9wtgbx^S5%J\JP ^7䀺*l[$#Z`#܆sXYjt[!%9~Ը>St}y*?y!YUp9s^ ň֍aw 5X ll_=YJ9zA[]Zʃ{h'_mN+x8UWL2[%dȈh.z Ai0oZ§bzbs꺲&uM1;2 {ΟV/3.XBm=& Rݿ_|/)h@zN๸UMY*e+kw# <[k!^m4|z|G1^Pg3v <]`3\Ty ݕ/h91U0+l%rHK ïW /+xo2 t7ocuu܌$VeG-fE4%lѹMC|OgdoFmtCQ /VS.7)&&ѿpͥ`/)ȍ!zżX ?lj^$Dw-‰oTqVi{7>dc#J,F<S߯\'Rss*!5o6G;(CLx}~ƗgK׋ݘ mVKYa96(XO|ae3:+yڛq&7~u\V@>'=yJ1nY2y|[D+ϱTiN(YHG e<"9z4V^d}/ H+1oQ'2Pp֔=J]ߡk4(G8kQʹ9j5ZQCr/eucLFmM Ơ~]c "Aqe;3W֍oܣo9MKԘZHdJ?#ݷD "<վ,G,UEҘ*K(SfUEW!r KZ@a^,C|Ot+ עu{٨]hM& .3/WLyO)j Opno4}JQxŌɻ|mބ$.Tu/Q**c)N^n= xϒWnB*M>?-(%9* >bfHNtW^SԕA *ыֱ`[*Pώ0mF>@{W[ C0*ڎpZ6Yk;yɼEfBԔt.u;d1bpnmv` l帿UQNq^FdԢD [e^#9z׿nQRInQ}TGGfd|H1Oc?AG]7%Q_L!5͈?f +%vn+>K)\G1$$,MwP;b93/umwYVQ4k"@g1}rr<)쮨^[Wވ/ܷڒ0ТʴE *Gy-܍T#+kJ1~cDlU?͒,+^[8;FQ#ajC (Gzk81 L׈ZXS<  Kyz)7nHٔԯ-()V+&),V4hQWɂ,%TEA{Tet]"GV JߍrģG|}Crwvwk%jǔrsn6dBLQ cԘ2CՕmq%=~B|p`Rİ{]9<| l;=&[ 7,,N?ö A^ƻ aV -ZU6?`hz)|9K. n|51#ڷ}5'H7Deq ̹%zLa'xk-Lb*C6qZD >ώc'JNlm.`b7ݰx@rI5c kxk8Tbbk\ *x?};uRWj+7]??}o]\F>B}<%y6(fumjoe hILbQa޾-LUXU1Ο} :m6 Ttk}ՅQxFŠCڣ ýC§LDyWKH]!vueٿ ɿQJݷ7~isa ɂ 'qVI uH쬓;2X$iaZ %J@YX4$ͬ e Ҫg LώVWZftqM]xjRdf8߄s+n'ZPAMr*ewo-"^F %Yj &I.]L1>"+70ׄ" 0C]+H.ƙhjWq2я|!'i Yh9b`Q5Qz{O"gCݮɳCՒwA#|yePadΕa6??{+"p-~UH49腝t6YQR0j`2`ϗx3Z V{k,Jð0\lw=tN>XՑt xm-DZyӡJ/>u#nK;tI4?%u&?>eN E$xuvA풫Ul3/ڼԢd `wO_bߵ.5ssA:{z%q%\ A΍85g_XY{#YO߶wBj8b(FlȭZ؉P7WqooW MdiF(&znHvٜ?_[H?6:u#i'Yok@Tﭻ!uU13 tI!z|$-}STMkh䛨F}FR^ ;)TVQc :TyJƭfl#ZKзl)tUUR)QCA)(lN1C{!NU֝u_ oa“~8?duY BWV\ZyᕿT|{ĸvG6~-/|ӐתCiI誆z'P~gmIӆ`-+6Zr>\v>ngӟP%fe9))f.f8)'C+t6n PB/|#v]#}jSYjBd5by灪ABm[YGˀ,V̦5qI<_QKJ:/$B1O >w+m/nC߳$1$=x>r()ZѻH'J L# Eg60 [)'d}K+MVڶ'>PcbnH-H1{1Gގ Mќp۫g&kAeyAPMN]'E~znB5QHnv.5j쒘vErz">M(ԌsPָ)R9h  gE8.qt_Iέj&CJw2fx`.-&xwpx@͎ UmrKWdBrR%(c88ӏg~l6} ^'1Ʉ-׃caUۊ q_=l5f!UK*?7WzΟ{ߥ25i^?^и9@?>#釗m<&~nJյ)ck75-Ylٚ߇Z{93xjSVw)6[hel˂ !CHYdіa0 Ozd 0Ibwt9Gḏ罖֎̓yNMu*##^k}(p],?E(GάomoZJ|9͞uwz=fآަR1 Ӿ\%q]fCZG(o5\q ysl6֒cR,)@tar@:<$}U苢$rY1Ҙy;aa7//=`pH 4mrSR P'TlF6Hkkuq]84 A=\ PNkEӧOZ(?ƻHaҹ}#k"0L+EdD?Z{E1g6 #dJG1q*v5`KqIɵ5}5G{mƹ-KIGL#^z,>#zZ0 u=-h@yL|'llޣJ3^ 6n#tFqEUVΕȮ"1{7J ţk]d{Q\!\wOa k!^Fэ<QTD=34&ڽOH?z6Ad1[MW?-IJ8KW- ,2kӪ5 6L.ǚk2O6ߠ4:۶cFѻdQZa-kOZc L.nQRRU"\^4ʲӏӧ^ɫMUPL jn1(PP.=_~Ώk>7?!=D 7_GK?qv5->ӫD闢a7f$U86/ABLFH2!K̬pmoY ϥJgyP om״|(5#iG ',~a)5@(i" ƽzcZBR`촱wb\dk7(ѕM$nlQGnߠ}^8 hbַ^Dc} OD[, r#ЊyD-ZduA$|J9Հ'lY4 O=g{M:ܸA-#7Iu2g);_]_U|@zzD/UZuw,"^*xγՁeآwb[نHQljn0Op7B wV-?c4?mnWAjQlA C8;;,? ;u@g^WYici}*=N͟r4UIssӸ.- W3*<2g]r1~zJ))#{w1nR#ZGx)ThCRh6[.0,r{o*chUYZ6I1U!lolް Wft>m LrMY:N#9F#Ds渣`#ȡHNZ+h%EMWELm1?T(E*d'bnBD2!WsE!jC]ZK^K(W |)D k%1eAU$-J$RUN(/'C[Qp8ժpM 0?w3A&Kan/ w+5:;CxByώLʌlhÊ`F}1(H4s7(tIB6H ;5tl2"]dxh">1vFuoX ;C 8ZxG\v]p$8W/^O>{{{ܿ[5߱l ZIc* nm5E?SViTc.<61|yc=\_]t!hLƍ=Tm*oJe^}K.͗|үE[/I#;VV-Zɰ}yb,4?ͻI6|V{Ymc%ڊbj%^'gOP~\\HEQA^TJм 00^kJs^kZ7%3L>Ŵ[;óG1^6ͶA 'd:hE1?-\_̇47bIzi:Sl̛)Q ~EFݩ 2eLOT&#N@ RH.B:Z%U#F',#׸A / <4\XIOpVsJ:#dbHGp+E:Ŕ~wZiA԰鵛tZ ځUtt/CNرke\e=1=vR~"$=*[ κ̭@8wBq/_R6J)X,R(bZb:.Ǎ3A$%#ߜ"ǷbH;_~F;[ݕ) OJΐnw"pуnݾi-cʱ_k1koHN"ڠq\LD vC7 /5ѓsLs{ V=havi -4`x1Op||L2lܵ&^cE=M }ϡr68w US?=%۝Jt޹A凌q}ʬo)'R~=6YQrqUq${ln[z3Tw)C;?\?#IO, wyyX~Nyx,>毿tu,a|c5v_+~x&9`^g .R?߸s-ǘZShUkP~J=ih_Iq.r. 0珨ve94} rGfϟlwnïtHF҄o3L;2Kz?'d THǭut7D~S7#XÍ:+QsTңQ?s(ȕ\CJ t:% #J$'_+RmQe+c?P`JOs]!_ɐ{fIoֿoڟi,՗fHdVql+ӵڐ!έvl$yY$sA˳FG?Ⓩ?Ə_M4"Z<nVɔ+yrcd.D{/ 4n}U. w) $YaHyJ;*"lKpdbD:xPV)}EYQ+왗_k*C19fgnvv !t6$i:d:%=6waqZdcmFC`3pZz\qL6Z(tbMgg{]J|"l(hd2ǔŨ⏞rh|xxQ|OƖo<9o 0s`Whmۧ#_Q1h")ZWm|d5Le[HL@YiU`GttzYMuA]cm^ k8?@H t\s]ghRvpTB%̈$ .NBOywV</˂8FCңD!U)jDԕ{]WU]x1hmYte}ۍNY߾Z#J<%:+b]$A2"Q׶;;Tv/ [QlyL,QML/͑EI BV<|tⳒQ"B tN C Qi禯tNm "<%~vNMFY Ncq Ӆ&- ӳ>yLQ s$EfpZwPt`n0+|r.4"MZlm.'qw7j3=3;1&IHKbRQInVN ąG*i%g8=70eNr`.3& [%Nڛ/֟o U9Wѳ4Y߷yoI׎Tв@7.R/p[k7JG e2*px+6?|և2ŋ:Hiy 5\ ϻfa 'G?;f8[]MC6wp8M&*h#&F F(SU(QWb3o:{+m( $~AxS<>B%gG \ XeuYѮldJr5bqJo}F C蹸N'loq\E&S  ct]ksimM^BXnjٰMZU@:ޥ~v6xW_}drm ۨsńG!T'%NfV5{NvЕnU x qW2ĪZiimX^'8}nRzU-Ǐxwع.UY"j.ϱ3'j`d[+n5f]lj2C xL#Yr1#LIk$yi鸔LM^it+[5FwvRR&\?Ty NwVP&l;[dy׋Ϙ=)ڛvd*cF!hD4mgLS1^9k;N`q0ŜȜIF6Qym6j ֻmTkvhuY۹E+ 1Pd!6I67Zŀ!Q) \# \|eu>mQ(j@ǁ >F4_ˀxښhF~F ۙFmgEj}^@~ kP;vi _Yx;!6!BlmWg#sH1c j1UV8~يI5KdpP<]?;MpfT2A/V@0]K/PA 酤}&s$\RJ#jnd=Sx fWrV61R<T&jN*kȲ|Vk%TThK Z zȉ+;x9hU?2U:.4,˨. tY1.8>hJ2(RgřOQx`J5Ϣu]= ջ!l큐:7o.\*c,s6-XuYt]sfמ룼fEgTpAYVkm!5JFƠmJH릀8nd9qUؿ\ZQc+S!G1[H2E8>ƍ{Q*O׺?PЋU\9p e 5z@~8 ni;td0cX4[]HAmjmBٹ^~t{ǿ`gwpNkjzH])zOw|\f9R:R )]v7.r-7_la'j>Ü%85`C%=}T@vVoA* ('Hi/%6eʵvU|?'<;y1uRZ%ˑͅLæ"RphoV%G°Xt6@[Vf+}/BU|~(  gm?$yEUL!v#ĝ&m{TUD#庞r`j_h&/,܎ĐOkVB>QV`g b-Ǣ!z%VO/HD(*(g3tiG$'_޹T8AUex? qf527;/ _Z]|ߝE{%~@6f]XtvvPA'p>&k8ijnd8ǿ_;;/~n9bR2I+:*yC^5}I*U Eeu/R3<ϫ$ʙ=YߊLHYCTքm'l_~ҵopEEKʶ֛EeeFԚ+q.Mꖴ =}HLm:hP#u _EBs2)@wch.NcRkpRLHDdbH r6|T=e:Ü"t캒R-pD(oe|#gGTE9m;O7Z"ly.N$ JT޹A#.ͬTDZT>n"}68D]!Fѹ&ZZ%#頂&R<КrRt[Esn;;5U~ 6|T% !X'WGYB Zw7)~3Kp =,֕dkD:WӓZ+;6CU&&SDlPhA b3  A$ Ҕ\[tbvzbh6i+sH吝=ënzѻ7B`;T\M8 ~ڂ|FXXܲ[:WY䠯 wH5Ux6O?JRJ?ɘI\ԇ]QO.>峸jxre:nkT 2x Z`a[J`E7mTSᵷ10Zcg&Ŭrn(Ayi[ #Yo84)k͒.A =yd eg̺d mߺbZ3[))! V(*Aj]ZabR$ܽhD!kkzzD:il­?hxJU ^wt`+(dc{F8 բ&(IOp=l{ Fލl-3#LrD>|-:+/JSCĚN]Z3=Km*ǔETMV_iE.^e2(Chn3.wYA[0XN*E6:mmPsҾmbP&g*t>&0hD-f(\sܟyZ*5eU+;VS~`&QcŘ*[X NKpO9bN1`Bޘt6[]] t>BلyGljxNU0M+o^^ϊ-7>3 \,3U%K[cìpH5ԔuP%S0&"ȩr֬/^8 `Hy9klp1aR>nB(x![IhUmEG~_|~3w13E4TU:ן{ zWū20PhIn$'fR[`iiӤ"-.JPQa$!$4K㱭Vn^Y~yI '0= QG|]C(kuqk8a&RsHI1ڭk MYAfsq]^E dRbt6`);foEDY;+(rRֿY !B:e,=EE-TxP 2|ƛУge[4 g!?{H::F||H,lw18 u N[U٦F WO"#h g9F4o}ޗkGSEy*-Ƈ'uwPS2taW]"(jrr@s* I2a<:d,NOGLgSEJ{Qϫ۽1-ߋ# g3˔EuFt@J 暠 "*5nٙ.:X5;Giy+r3(fPA>>77 ])~CHDolC:>(?z-uZg}!Z4eF< Ѡʊ7MmyjFeL& 7P^`mj^O6Y_ t2sKmj^]5 W̉O)bۀk(BNSxk5?3,ZFyEA`y8YpQkEr%RӉ,_qzLr(Nǵ0lXXot"djV U6ج*Otmw!퓝='~-2<td"`LSt֦ ŠNT |a]`:/]Aӳ]*)#­{uw_*:gz$}tBktzS:.i ''>}5ђ* Q g\я &qpfi [GВY "x53Tu B!H&'VZJ8.N&>*2U:e{Crm]c:ydKH!L)3ň`mj1$tֲcMcC˩Jy}+#OQ ?%Pth#Wu |jD TyWxyF}J]/\2ˌn͟op9_^=h/˿u޴jK &> p1bAb%['ez(tj42uudJV|em{n/Ϫ ]H[Ŭo%^<̞E !\k[*d+uHO٧O6: 5+7>gt (U먪}bݩ1Cu*grnk\HjXJ{o tFz [Yh8Jލ&3[i:T^!30}Gy 4\wngQHr > mx|dk<ұ S+ڨJ0uuM r>e̖yY=Jy;::O(#ͻ68'SƺMZ]d"r W9mZy!$̭twٹo0H]\ p1F:GT$GC '(4_0ċ8Nǜ}L$h!cEۤޢ٢NgG:NI,5?GTRhiskGcYW) ýOG Q$xwyW77D". q[VʬFQ!e<} tnܦ^[0 DA/-*fi$J֛.quTІQqSVgs:+RSV,K+61̟W)cpHdI)ixQb \pIg6q3gPajc|EKx]4& <+5 R'ť(MB_BK"Ӝsk\h0ɮ:HϞbPqg&zDsQ!PaZuuV#/8u٘|rr]ܨIC9^ BH۪<[v/XP-p[⋯Y۾ nkǶK-T%Kd*vޱ鸘h磒LDt7(/b0L< *+$}RRi(laL ˮҋM_#彺NQVO(Sk7CһH>8{[pfpNxވwm3K,%ppL)yAC08iIMR1J-px9e2z>q:.aQ:7}&CQ!ʏp=ȼnXKS\¬3DzTUH/dY·~@滾Ő1*lZ[Z!-rWqzdf'Dk(϶$gkS[4ߤ2foƶ}i*[F] K?&>~H7Dk@(+0lC'G-}*XRedZX8mUN.U \ʰӇdI"cw-ɆyZ $otv6"=GRNɧ4n~'+m||deDW>;>nػn_fyEvƓ׮`],?_}kjt~ǂX.Ӊ%}й^dZs%hSSfCxN{(Qz}z}}g?޿7!/͊TxrIW-ߦL&i)MMYީ)4ƮZT p{o4A~9pV\8T/nyଏpSj}Kc12>QuN 9:On<kS$_妪~ڢYe)阤J>D A%iz"s! DU?ݯ,kwCz'Z PYs;ϸ>`<[`rprEKzXi=si^ѾUO]d"](]\;VA;*ZgZv~Wk'6HIK?ǿW0mxձ9OhΒ?YN:wQu+CѿRyܺͶw?)Ŭv뚅tT)ggxr=f_2mWt'%YQK KfTCrRza?/?/\pJڹ.1Gl5 .e|S뿶U6> !YGi*x+Y~B(gv\ }lYc{J[6^D6xsM$|y=[SL6߸4 _ _s Ư0ڭ]θԶU {߈EB-wަl-jЄnVdWIځ"eM u%%QMY:q]Ⱦ#]|=ϑhUSE ^QZߵٕG&taTUtZt\dB1J:BuSżs$8nM~O_xO} pbSӰtF6V JX1!?'>Sߊ\/]@||wo#nF`jߙQY~sԡ (0UIybAT"_DU`OjdtkG"㚸~&WV^ D> W7Ċk);9 a[0M14hr(1Op=߰O!`G8{f[En[7KEZj*ޤq[߬ Vzˏ18 H9[K2L4v߭0H/ )fT omPz\:%갴ʳ^z#;xoO)+CݷqepΫF^lwx{J_U"/`U`+A)+Q>*L;T!),eim:".gYI׳>dES:pjvLր!Z]Q%t2aOGdCL`ʜ`εs꼴߫ZѬZWQYq~U._{zHM FײvrtH8X`fe#(k֍koDv"z:r'i >^2G`J>wߞ^[iRR6yUk6ˈX\BZYFƹ]SC[aBS[/?XZMJAq۪7g5HLđDX#aG`JkmRe;)ןм6~9L ۂ*3TPdVTZPUUPi?W"˶MYu{uWgr,&rghLg"uHOW나)s[λ-+댼$ !u!>J&r@ OoN-yfZ[~ػ{ǧ,ܐ!yu]nY՛!._֭Ko ?k>=bzF'Pgϩ9*lGVV:8kwHl\M6tMj8JPVn֑05FdeZۭJjnЍAQYOR蚇h)EI^L 6nM+ճv",~ݲXm{NԥbM60IJ;?jsۏ/^KUW\eۡ ֑ x!|zB)U[:POSc8u%ͩK]ү:y!MSok=vjۿ*e\x Sq<ߧY}[{Ԃg}ζ՘D)$m K tZ5׌6ɵu1(})W2BH <}B7V|D6:SѼ!Ns\ƉYĹt:(~鹿v&1p%Nt$'ǔɌ* \7ZG<1t\q'.W 3Fka@ DL&u }.4#$]T}VEZ W21h#V:/;8h#Sk +.\'+H[2QLN,"2R^YC~ |n!UMHsRr[j`2$`k6A萼(jn;w֨=Ug?!U4;wotZ`r1č6:'޵Q rx( |,RYڬnQkMĹح Db$z^lپW^YYjIVū5M̒eVt+l\f0+iR1IJKr>>atA䵷Ik BJkoY_d?% C+['r%HIVoއ*sMNJ;oRZ*X.Az &nP[md3aG eSv,3ɉɟP%RCV9T&Dnu./2(tvm5_TyVZYuC_>9^{EւlzCOyEZSNYߥ1 we`͒j)f>WwwK#Ɖt[!cl)-I@B˅E '-[׾|H1޿M)o? -ҳ)my GI֛n,S$'&n\'+ꃴJAԏ Tخ-VOst[hض/ƯY 횪d:DUoO|:~ X>*=ӍdY_Wʥ|n:9CE xAz6o +3+7 g&hp^{y燫uv,DK).quۙ& UT5-2Eirlv^Ly1򑯬z )%Ɛ<#0`M{F+3H+x _eNr5>$d[]-?G::Sw#=CB>!ؼj 4oq=yQQt5"+HILWT))`WA)nG! ]jzlTe ۢmoY)=,f(| c@;|jć_nwwej;:.1?F2?yON0en 3jOst<HOogעSOSN!{ZzY$G_2s˵l;leӅ1LU!jLJv/US6mMq+3{Z@Wg(FOyJc#归TEF&q/o437) !fyJv?8Z(>R^d|W%nݻwy뭷EV WVAm=0Z)/"d%}-h$߾dtIRQTzEj Ƭ$ٺr5|oV!U:C~wt2"gKRc#_$øg!ϵUB/rVSL? X b*f}FwkE~ R&I-P}31FԆq\Yp`)ä M!iԋːeA`Op+j]d{,jp I2Ƃ\F(߮Z?9^{&JKhB|%5w:nID'+ [X'l}ߞ FW $[d,-(9U*RcޫچnɟZ^mly[jM]D;XVh%Ԥkgg0y[iCZzL- S&Ŋ!~ ֧o3Ӈw-_;Jۤqu+ 9ei ]O:89+tvRFM ~jV6xp ­7bD>; {\lރVaFMۼNCO"SVvN8Jn4{(?d)ƇZN\( b+3UkU 4ɗ_>dXvV|QLC1^{ۚ >JU +k{C-չZal“-xUnl!ւU/G ҳPY1Jʞ5{ӳ̼{]\*?]b'>hݕrc<&ڻxjka|0I M;PlݫO17:OX p {ziMyYKr*#i3 lCUh j |dft]zjf[1*OeSvQ12='ؼBs2c)=iͮ.PW ֛Έ ,-YoLs¬ݮ"ӌ%zRl y;rRnW.F뷮ViaTs`Ң#k3MGs4.`t)/ ,RW]B`46%8O vCE'R 8=Δ*8`e7 c@DEލtl)߽j+ҡqkk`ggs CᖭdD9/hѥhΙ|H/_`q9@CIiƚX?jvdpȧ?}_Mp/tcN1hKlefg 6*6la 7/$t=,Oqr+\kZRSS+~_gć_иƍ-J\_{bs}4 QI)myS+ۼePe1{4Ӹ|$xq᭸5wf$\~|rBV EOЕ"pK%E-+%%u8>C^WJVW6U["ق6KT'#;Vn`en@A9l@,>#~j X^u03w~*7$bߑmv[땖ڬ۹Xm;\WQ1^pW+-Q.mlU9"q\W 䭶{4Ui3 X^9e;~.qZoR7Ei) $F惢ds^_HNҼLOG;.2>*h~H?,p(! t< LU40B.#i Ռ\ ˉb1-KP튗?%5g9{LG'Qtltz!,]cT,e%*ͽ,9` 86D·>/&t ,B&? wm $k&izE:Doq[(PON1,>yn&3ޥ,*}ZBؙR4C)I *E le nku6M fiIR;Q4`m6@+4uw!y*hnu)HU|vJޯCGMG_뜶[Pң/pMN/XR%><;[>ͦiRQ%M_)똩dʌM:(\i`8<'nܸ{o.kIay`iVnV>\EKii͡WFų?9Qo.)gefz@|T\G_u)j{7dzgAѣJ&Ƞ߻ak[e G4eRv]v^_@xʥ'x`@u3уF]dCLU4(Jc/?EDK&\WBp4&)҈nC;LW(cG,XV_мDi,qiP+A^oqa*"j=zIa3EQJDsmQ] nuƕot kxmɥѥ]/2裨 i^ރnD]pIq-wqzڸ =I×+iB+(쒝=ʼnuճ{wW/.~!za]٠&o}uP^dgOyb. [¶cи59;#aZ ˪H5|(.IrCIB_ =S+PʠxZirm!\PT[JR] bTa>`l9::, 677̸ܺPH*M %٢d,xi&qŢL.Bixsfi8u .V9i*Pk }XG])㜮^Dk<=Eg LH ۖsی2yZ5(P_Y e>N~=z6Y FyEY!w ̏,oX3!h@I з pK$N8'_N0Jd\gT#[&YQRsULdپ>y](l=vA4f:Rp)hz#Lkƹ23hx+t&oOO))W֣R1pMс5۵:ZVWSZ\T)QQ # Ɖ0^|WbdyoyuE6LSM*#Zu^k-uBE/fP^ \ܨk%^V<"L )%ah]G_RW05(Z[[(f+ÔZC`JQEng-cn"9!u,?F:SḚu*:O XM1Ebۤ޴gp[vG2CN ّXkj/,ӌʚzTeIW r aYVBW }Jl[%K+7ljxmLYQ.F u.XF?mv^ JRB(6]INkE-jUAmyYcZ7xcuڛxMdkn2 Ee׍ř<&btE1= ;HL&Eɢto:6:{M#jA޽ kDz-۲_ajEx@f~]lmo#Yd/T]jqڛ2'9}E^+Bǽd} fҩ 2琢+tKD롵r1CZRLN/y)/jK{99'ww-:ø>hGvl+E]Tuնzsz0 [« ,?Lf:[1kTukqɁUTPD7?ӕFU^&6^=Qu;.ԥ4 (f}Ř*ݼDCrٺLrwxpZ5Y||dQU@iWKV߰?e_B@& }{8J^"uW`"vclR:L6wVb]&14)˿ VҵgnPZ>Sd;v"BW )BXнPM4ZQ_Ϩ\F^auY.iLINZ,(hruʯIb~V q>}$_b"hR%SF_RPZ,{vZkQZ02BwVb_irGxN}%Y #p]Zv,k9Jv).g[dKv?kmk'Y!)DКxPDD̏IOBgsnuA-:WUʶ2:8~D)v&PS1`:F:>^Nwmř24gA-|,]Ztwq=1ŬOqbz+K]ddK5Y j#p媥y9@FV0Z[\jNWa]@J< QڻPSL db5i,hw )7Vh\_ :WWnYU'U,2Zk[ܹMcdf֍;8Q=UJg--me|Ky@ЍI^[YW^Vr-Ov_1D>/-rjDN"7Q5Fz'_t(Cк0Gَ$30̲ygk]Ki_T"$UwKWRXIRjZ*K$C׼_?,Xss[yYvUT1\U=)m0ї.yQ"9p?I\i=Z;oV,-4>'%,bAJGUYQ|Ql9|hy"={v+Wԉ1^{/VLE`~f*KtDYd61YjŒ\OOnS(+V[|R/)>MWR К2[Ԁ6vc {YOLX2[Ljж#yO2L2#2 ~o͍?敹'V5Q/%yBPK}bNY~X#~]D2{^:LO1UFIhC>R9UkZ Ue9~KJ$ƍ FU# C/eʍLPCz*Q%S![T*5_-{Ƣ$ޡP/kyR3^oou/<>vʌO=inzCd M.tNc5/ 8QR@+RiOOj苾/{Sx+8<8b/>@^!1Tcl[J稠e:ք@It8**Qw;ĉMl4ե*n)m^#1ɐ|ڷg+dq^-HNuvɆ56Mi 4c?.?Ov%Xe} *E/D~-rUW ";gc{ \tLDK9 qBcaׯ*q/ΞVREﶶn@h|,Yj[yju$Tyv\Im~ Zi*!INR.V φ9;xtܹuxmb4 6!"3wp&ɆD;o_$7U6G:e2FyNTD7>cvY}e8Iukq]Iz9bH_) kI=* \G_Z˽*z=66n1;Xa:cwuE8t`\KrjÈ熳U:Z}6*W[!.#}6> h`uCR`-]3O !%ZK3%i?Ԗf& B[,˽kUu%c!;? tOэ.m"c4g(<,ksWb1>eudJLc+pw1?#=Rj40d< z(A~yϕNqw<_5Ź!/ Dz 82d%,*GSlٛ [/SfAsRXWo D/ !p5u%^uv= Cʗm6j\h@5@]@qF5\/6'o޻B7HO,8'٬B$|m]ܿKPlZ q$*ױHY& 'O>/x&e-г32%{% ڝ|)&B3Lq|tH>>A tf%|E%qV4aGH$\ @v,@ gsnE՜>b/. 7KZcE[r=EFko`Ξxm_м k&芤` BRVF۶ዟJyIkjvHEZx4n}!gD$jUS-vy=J7s؎l~]d,=H isoq3MLW /vER^sۗ #MhŬV|S(48-7?XGt8Ah,uƋ S [mIR9؟!(4tr1Qn]%^iᾝ? X!`֕ tE1.!_!o"b'7'z{yJX IB?۩KttYC}8Ru> ] tu Tc1Ep,5 ڛTֵrާ!{ZXz Y#ĪT%')әe T>L&|d)͹BYYvޚn!*Qes:^P.E8p۰/=ώ4z1ʷUklDjPR{U6i{xø4lz9Ϭi g[{:_)Xzouv.AП"rtybP3]Bn#G_"]*PhfBևL1%T_ע^>qVPeJq裛 UvzV b[%SHڴ@ FW+kŘhB^֭ě{W6s_E6:L&d>o}A𻻖~46֡O6=% "Z[' QGUйIU(uyԔu0r=TYgK4Rbq2G}!LURLO( mo[U v0BC UDAӳvz0$>! N3U1\-z/m}eyL`kkw@Y"K 6R&S;OwKV+ٌT]YB,mÿX!C:xL>9_eȅXz2^mcaˢ`Ynz6|گA|UXymCso+W>K>>"3zW'vіՓ.S3cKsyMaҺe`b>@eGES O9o'_nY۹܎4Y vTv6qu' IVbc/|a裏>ht"<7, ؤ@9U: ;BW9zՅiaU-*kC*C+zO?Ez!3(rZIyehUfK{=~K)4dPQ3Wy.ImmRd}tX5Jc HNF9*hV'MOcte7kp&uP3khz15x[),wn(V j*[QpÈd4B.~E:n_LYjXR9NbQJYEYs,;>CH 1l]j]ɴ+Ceg͸XB8Jx/{f BR-?)A6>9k3K[-גt|"%:)KyaU4iRQ]QA 5:m[^]$1wnhiBYZw(>r6@HK]U1E\tCR-\;ҒnX!<'΋CRe 䌤v+U#d٤Ыi!st:ܸq^ \AJGY/G/o`j||U(y`Շ7RgRz{B1T)SIp*.E:xVmZC>ZewHH"N0傰 #ODެ0+C/Ru|NB TͶ#O UE][mt|Nü1$G_uwљt-醗Q!_)B*dZY8Awn"-4'[na0̟* BU[v3L7INـUǜE^_ Gβq^vեPe'r USD}k/1y:O? eӇ`특\+ 1^? ]q*jdg(A㦝.b1?#>rqtSn@W4}+ŋ RVMyK?":6zltHJä(ii ii\JVO>^kZNN{]Jez}ofaZ1xJ"HkO"r>+ ;-[e6+hdZ3q;>sL&666 [:D:ftd.?okM p1?? Z% MzK&\,l\UaZYq}vꖸAq-MM|չ)!;QvJs!ظKUBv w[i!f!-fyߗBYi(*B-.`rJmm"_2ZWVDӇ\\>$RF2T%;8QiZLo]EZ%]hq32UA>:]K8yiMB̌ H/:WG6i3v+yN`yB9TE m(f0۷q]!U`l۳] k[{(R\`Uv.0)lڑ 5gZ8d@yڄtx*WKݦ20{'~klYV ӳK *]lܹt=}Cx1))VPd]js.B&CIW_%rDQK2#6Es( ,r:B*ѳBt ;{Fg.͈ҐdԘZMh?{NH9-IENDB`quickroute-linux-upstream-2.5/QuickRoute.UI/Graphics/About form background.png000066400000000000000000004041771446222606700275470ustar00rootroot00000000000000PNG  IHDRnS pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڼדlYv>ڏkn\-RgVfe)4{$0엙ry>P4_:/cF㘑=a7@B73o^BkڏܛoUycv,"<ݥO@49I|P-|G/1XF;*E]!,/!3()Os֚f i{sGODAu.qk ]_ kh<tg^bA.T߽[pڕGXJ#Z3yUzר^],/$5 lKP%%Gky )z`=翃\d $P -<[~}k^;X6zlߠo+ƩkD{Kμ]b0s5̍>KfRvp 1r,`G6Ғ4D﯒v 8ņYTi @f(EA8b~ [Pv;p4$?6)W<l,0;I[c$]*Fi ާV9oDRi3L|O g_"jmaDʥe)GBzG4tk'<ūR:YwÏ*Űt$"<.R"u&'*1-^mIO(.N8{OڻngFbP;O(L_$= ͛?_SYw@?|-#l!%+`X~cNl@TvP~4o#vJ v@Jo63E:ψ;{N9K #m1ے6Yyh!Ir 2ט O <8NFVp:Je4o)4KC TBJg~̷iEIQJDDuEރ_6NMCJ %EdMTGI[~rs35.y!<]c;*fR]& x iSc,54Wy|5!y&LAXc fÏJAok?vK/155@a%O]'esdwǞp~S{q,C'Yڋޟt[pvwOY%Չϓ&J_~Ţ˸o֘xqc ?^}#5Zb? $p$1(ǶyGKJ*x 6ׇjX(117N0JC)%>c7R¡kkp U:܏,Z(fe)Vؙ(?`B rZ~La|il#; ڽG8&Y.G'[F1AA&$qH#gtK/8z8U޽)-[f9[3~M&B^z)m}^#g%J J:_lwNMwSmOvFo>s{>wx"1~!'O0o*zQ:Ma nm7plOm8٠ET/WybP1X"[fPztW[]ר]=`>[ .kGL5xa_TkZי.R8m`(?Go߼"T!]&o\@iTGQ$t"Y<8wx2ʁS?:U!K㣒>5,EtW?_k,4yҧu=SYB6hߺ?q8FoKhBPJ /g+^% U¹XdI({)xnMS g/(Ѿ>*t΃\(b?9judҩ7h)ni/ Ƨf淾 ^rνbZwߧr;iSp%=z"WàY;D9ZCJ [֯SZ|WF_7+l^Bյ(9Ni$nnL1Qݵ`KTyeJ5c'-@ԠvV贏EΔ`. ci %/VJ 5H$dcAXP,}Mlb\ÌRhWT=%W!,81ޣsS9KIBh*qO1V"R6nJ=Ѐ5<C#]IOM74Yfѵ?CDoa{.I3(a9>Z7o=ax](jȴd%~AX4 b!_ آu&ګRDdWk$i1Ou"b[#M5ㄵ)6Wm!-^m6[2`PF*߼A K>^&*͙)Mm"Zqd6Is:A%$9I#~&h'(5|EKn}ό̥Dq׾ī͎`FRș3gY\\uny!,}\c^_in߾ykp&k*y)O ĵ%~N;Vak6'm 5Iۄ3WN@X %·ĉhTe _ Y~ϒ/y# գTgKIVw$s!\H4"lAy36ރ.0Av-\VU& LHF--wlaa19u(z mE;(ν̠0qITfv&'ZG9O^/Ef9 Q@O% y KSi]<'>p]6]WDԩ"晆i#?y2PByQxo[d=win[wC0yVn;5)cqp5tlo,<,q{S9&%neOFCOR l@%jt8'4g!m󜒃uӸ^_w!L6>kr Hǧz{Hah|rIX8R2s=QV[Lš^q{狔Δ0?azإ&#,`Ks eï6a $AYl!X{zLMzl,h\p_Bo&Jcd7k$[[@ZlRv)ANo(գuk%5Z`KAtFptWX^8Q,_ _ǫ>l[4}lkyދZT*Akcε6^mu &X*i}~@.]A<>_)5j3SqK'VjoξLgP].xD.Y{TJq>8;L]sW+]ʑCƶ@Z g <[ق\ rx,)>{1sP:/ 7yd0cZX~B#Lk3ؾ`vP%#-;o!>͠u%1` Ҧy*N -A7IK'@H ql M"i)xY7ɣ.v9Zk&SpQ6BIs$H\xV9+L}k=B6n4F0'dٖd[8KC9S'S})XayE젂WkO NQiB"-gh|i&~$nS.^^+ ?h4_oI/+߿JgFn攦_Pz1B` H[4BWAe?S9ɇKH)??u'Ⱥ=,kQt$Ǘt|m&9\)6[Cx!l_nQ ]2Q}\bR\rA)p%FiMkKvt!y!o-މR\[vS 8a387S|L7}lt,$jCX m\[]ݏD(ο(,GBA IOw9KhlE SQ(ߚR-j&Jb^ }T hLd[>{7xh*q{į5 @:>vP iҸ6I1^}HN\9CXctJ~?4g3]o16>F9tQ}mڰ!$`.:YF<:t~Lp͙Z< '8ry4YAg1vB\#_} qP7nҥKX{@w*ѥaB+A;O^ ȻT'OQp[j#E;'RYJcWLD±3׃n+0Gݳ) ']J?OXt>[y ])iG˲puI(y@:ha%BH;;g? 81:}Mj, tDZA0 FiIQ@dl0F-{f.Ӿ+nyp3YbKH {qm~SZH?pksh$ݕY?~⩷h{&&J5֐ffVhpUW~ߐp,÷K؉3jőmس> {V Jˡ#gyb|ֿUCs/PYTMs\NBwXJx5הz[Y&L@^q/Yr{?vWTBzPx2{KT- -r^_.#=OYW$J"['Ꮭ)֒-!Y I'&H 2rpCYN V&qcτza+`, 6o^F FLw!-!tW-̓/No: fN]srkϗ_sΝgF"˂A4i S=wc#K.ŅG%46*cyTNVm5s$R4IUihCZc=:[x9,H٥u<5NP'Y"n5 vv|全d@o}TiXxusRЌrygs'wH2QZ*itr:)21{uJc9.srޗ`ʙw:/=! I]iJ,>cgy't@k;(68fR&Ms[f?ń/lpeWoFJt\:Mwk  vXA>yB,Q}휀m E@^:[sp}(>/V$5.H=F7 U%vWU,jlm' 7b/*ᒝ+XOO_#8s➧ʎr%eQ:M…׎dGoY i{ćN9o-xTQ+CwT*#*=^o~%8pJ.a?xQONK,t^(hM{u6{H Qf#ciEwq,/2*'@wx.3$_ugҼ#Jg-?Y\y^}D/[wIۻdCeO) plmlvP![&O' [2z' Eg3w yQ k爛81ɳ dw9k\ԭUsi%;JBHJs(D[4}b_P{X^Rv%lDڀ qupkS Y8%oVc\876#>|;,:{X;k-0sgm\:ܸ,< 7Ix_c '"~7#(˕FIAԗ:Tiq yIi0[Sܟ:p˟xM,I{woٷUn:u,'NX'X geF8RS柂yƣJHZҡXBc[+HZ5Q,@/)L=OU+:ݕ/[&a?'W%>hPƭJ_yZԉ #/drHC'b??3 .4#p48[c!vL nbc ko~i{8ig _Π_i/M'UPZ| :O49(~çG'in'-%brˇu@9q qKws!٠M;U ~ak%O211n'Ci]oK<78= '>νBGwNrbGo){! ;(eb}t}ܡ~ZÖ,馂,j\Xkن WmeFdT+ҹ²^.[: ivԚi#2+gm{1rI'8o(Ma iW:vX7 4&mm߹G8syt|G%Bڤ bUZZ,V1jgr uDC]GFWP Q:WanSHA0,@ J}/@hId&oǐm"ΤlϰjtAѓCFf=8C^rK.ŋ[8Tq*į1ǵ2B/ J!h?|4;ik/IggS3Zkkpǖ/Ȼ{47q&98SQ:e``/${C$߼S1:O_' B SgqꈤdKIzwWE8.^e/!(l&\k_߸A82_B 3WN`Wxs^'(jwZHr~;)B ik`| (oQ+=ABga2.Mo:VT$im]kE9IJ=XDus 6[)Mj$'b%wj.M4K*BmKNʩtVؽH'<)lY%=j@rhsȏC2x@ރ y "RPC矤?3]Vr[ 8CF$\_itGa9HXk,px81W-Jgߥw3tCJ+;Tz*G 뜞TYb,멵PNiEԉ4^7cy/,νJvqk3֯#ZkK1>H + nfj5fc4|\왲2L-¹0>hMJښnc T8Uݡix{w'v=MP7[8{l¢Xl`Q +TξI0}L4 l7'*l X" Xr?&u+S6^p YTH_d`lDq#m<Gu:75?P<:_'rHVBgnuGM\o\): SqtHTξ BP=SIZ;'H> Yt2A:L{2zA0ozobW&y=cE=zWoܤ|]%8|x;%dPm,ij%1D~g+Q#peOIۻ v^0uhNߺC#jPķqxc^H*}s>kLwAE-:IkQrmʳs$nt2nӺTBZFgLiU}P2 WC^|U=P5n` 6RNy'gҋ́+.|lR$ioc9,ߔ<?~4+)}*u">](:=z;htW/GiL&70ecO^uw9':XRK!=:ܤrỸY g8p`ӔݶLT;/f\kHr1ԅZ?TW_@t l8c%S_+}[}]T[$kdY|xe8/'>wZ̟?T|qޤh82#(O" %ZXF]2|4eA:><˵B.J&vN0q!%:*wp:y`.UgTvS]$ω֌֧[ SpƊPеՂa?g*9DgJR)es=.yEJ]&/_!9Xg烿 2Is̜<6)~ݳ b{>G:ѽm,AxFDo^4Y8CI H=SkH$>YKj#hs$8簟=MEH%"U4WJ9i|H!M#R\Rm #HE@L儡+qtx$/7mThWlB FȷIkDuxei2)V $-..k2 ҡq FɓB@0z^8ʱr *2VQsO0} ?~hGFdʴ4+0_,_q9D|N,zO/ynFnJڦ@A~H:b9ӽN"ڻʓ|/7s~jSg $,Z}JtB6ͻHwSv:)8tc5<tϗ*yzOr MdQN&[ >@Ź8q4 ˡ9-`*my/b%72^mU}IrA#ھkgM74}ﳃelZXc -f vҲmW,XJvCV5sIs? !-uC)֟BM=<2^cp=E;PiL83 ~Ӵz 1D+QԚ]zQiSj yܣq +dlE:,触ךkK&KHBЉrJA)<RSD'|\@g1:vPW OcE!pm2u^Hi %8,#o08'i)6Hs*Ǖv *®U {MYxDZ&&z3dBJ1T}dD!$C7f{#+uj~2ֈy:ΏGU,7<>{k@X~I_݇Tŗ91jNɝM<t>1Zw~N>hǰ<ތDH)LǫN$Z(ir!:֋LBzY!V'v]!7OaK $lɿ#{H8*.[ߦ]9MR>OOVX9^Vܿbm{\p,dvP)FEnA?īN=3fg/f}i ֐Go:qs`yr#e,!un0#7L=-h59ïoUYɣ8X]괙_UN4,̇ 6H+㩅Xt q Uso Ї-@  g/#je6@ZڽMkӎ4Z:h;Z=Ҁ>63z@ vQ:.E3Bl2iRg#,9q*T̒>kFKyz%RS+]D3枔F)< j$Ty,*c}zAvh5#оSWz`qk-,>O#_!_骨C«Ϗ1tzS 'T=:= \[rk('ֵRC-K;]f/3JJ[19tW?g/:P>G3)2)FA|]Tzوs|հWZokm%nnToƫC%=*C/1ބ ߵ+Osl=ѥG7b !J7(z4XL_AVvY^[҅s[-Rĥ:iho8~2\x(r4<8=NUc+i %:}Iǔμl`YGl,o FȪ;aݕ).S']"YeIJDJ =ȍʴ%$fq 38\8֊MQY|eoƆE;oe~c?fڏh,opem8~|'nO]|*uI|ԩSLOO3^Y@^FPoѺ>ny'zhg)~f̪Yt2 DCg/24SC/}1:KۏK@Bިw0yn`l] Sl;C_ӾK8:nu2Ia2[hHv a/Yтj4}j p`exdY#jm=Lb*,}B &W>Ɩtph*coͦmTQ]jܔ^;c40N-a၆nxyQ9 &&/VsBo R>KBv{ D1\ 6n׶)4@exD>CI\%:4a6;RƘmTzr +Ìܡ1J{1pfv?% _ES8'ʜn]^?;6?ݥOHT.| ndFXοgCŭN} })#d59JA,vG7n2ؼͅ"4=s'J7?qm'&㙖TK}$mb+ku|ᇄa=#IZeN# NkR}±}ᫎ|f}6kh™+tW>g}Ƥ zk_RHwYǩQ:r,[+KqM^{Ϝ9_6_:_YY^=,ۡ\.?bPp=+Pg8"xgk<}gi+lgeϰKc8y&n}ϱpmoG}Y2n_2(nhy+~*=h4emKwJk~nj))LG.yaaDavb" [`lS=^0ԙ% Mӆ!%(4F/6Id9H4g.H,cOaڒB΃H:;C2Oj(&Jz3+Ct 4wqb^2Y.]jNX%i[|=%}HwSyubtٸq":=*kؤ))c@i۸'YutR|TsA(\vD^Sd8qĊ85sʝ"5gX(~U,7xůs|_'n'cӏs$3s1;>!dNa.8gQ#hbYIoV>e\/Wx+'>ܠ<}פ~}Sx92\+œYNlE$7Mv>HhMXÖFhы w$ޒ!ͼ@qЊ[F.rKa" C0 ֠WcqfSMk̍綠V(v~ט&~cM5#jJ\v .:in:%J3Hj'3]Ưύ]v?Ktxۨ,22Y泘[D;ȓA{d}g19B[GIk[]']}Tܧ|wI;Xo|o?U{` G^u&inw*i!fEEmV4[f/g8$Z][&w"(M[s/a%> Zs؍/0d6@6Fci<[6Y,?$w+rnСmoӯf$6]EoJ.AReB1y1&WVVOqqSo4(TDZ UW:-#=z8q2Wq 8/0~l`AcѐF.i0o?T(Z|\_X {/Olg40{Ő?v 8$8)r sֹ'&w;ػ~ &i2Zg*g4IH'l [ùNup]7GK혈j(Qrr&*cE:мAU2Q^D%i󦦵@0u0.~@H4砛ڒM` ِG_4L밃U5^}'3ؾ`Isq K8sFv0okO}<MZū[YG;D)񘜜Ç-q-A`ꘖtah>ig2/vhy#:O:M7HCb[QIDo'j#GDXԫҮK3\ ɳ؎mϾyr>CGGy!$}dKu} @ B_WMiڶ7oO>9A*mF*q+)VKw9(mqP$s!(G }y?4 &2"ՎCqI1c=?!>o:Kߧu˦ $,1>)3QJo]#3L]=5n"c?'*2^}=ٗz8ņVS8Yܐpu/J8*OGhk]ftJ}Kpc A+ ӹ[?ŭL>sMnFB:y6{k sP_yAɓ>r8VP9H7r[4o w'>~O:{}a1Οe#sT4_S>m>NOa`4iyƉW)L]|5T: h9ߥ3}H|F;.TO8 RdV i`!bh۶~ope|/ W&q(P]G4y (?E cMG7իWyylGLNqͩ+l6Fq&<~=A+skװҨ 2]9L=2z/ܵvCo^VN^"rGwRJQ/ +h0W"7%l]Ojh2 SZ)IwS;QOgվ-4 dho-*R8,|%~+k0Kۻo'8oq*'1nyP)nmt.-8k'M7q6n[Tξ/m߸aJn1mq~}l4oG _"}h*NN0v<#[ucHtW P9CTU LB:ϾC;|o{_gOM- ddY!k~Nm(dt )Sm/O~BO r*9/K>;Ǣ£IxUع%ƶ/aO_ viK7·UnP#=TiCxf>zcoI#+Qo0y`"6n8Tǝu^և?2̙+t|V93ߠ)i*-tMmO%xt48Ғy(.~ զvJ.}Ja2BJz7:3o47^#{h>fIsF~o!_zˡ@.~v*LZ&r$Bd}6*YB.q+؅1ZSa'U6ְ̃\kiFd=uLG+ !0ֿ:\™K#M$z$\ze~к3@>72z>n@)BF}McɝYHw; ~}kEz;w }wOFuO HOFAcPoNߦ=}X}OYsWN]L|HQ꘨HE\k42hCE8SujA!&$jѡxY˟ξ ǏeAE7N`82Ղe-2iud@26nvy`,/>5z4g'kQ |z*Ƙ[?,qԣ Ji;6vXCejq :K7Fi)zo'&Sf}㞪uS9+Fܦ86L5]BR:6a¹<_6@ Yr݌D^6Crn_H_}Ipo^aSNz;ծv.;L]se*?6Dni+)2[Ò7~?OP>9cz_ާ?~)YJoξW)MiZɉ0݇Q4-Q8u mī6Y#IxlҸ>\|] SL{I`y?":UcAq+]UfRt!QH;&RN_ASZ|khTO>NGmP) WBF{-o~hKٷI^`iԣu}PU6x}rЇ !4 N-& }1F<]ŏ2YH H0O1xⱈp(|Ddyuw}k]ccc6?)xe*738x1/)gM+τ=U2x*A@ꌙGض,O/Sl QRR9-?}oGy:ds;qbe#gAKΒQxGui9yOeo94g%h ]9l]p,lЦڿ%He/],zDoNT3&' 4CГT G-Vq3t?#P'!w wPTxs'wIp V̺W.XBeKlg?լe_Lh[d*,` xo>r  /߸M/B홎,wFq'/ه*s~na8YBa"Ny|1F6`O/zv9![>4NFb{qDPpkVP?SlPݧnfC찎Su-\OP tz^G?x Snc'ؼJ2F0u`g ك<|S&7KHj׽qa=}gFſfH<"QP( JSF `P#,~FQd49/HcS~!m/|ݙ[L]Eeaf>k#oqK:jCe *bjb(8[(x!:IswUYB&{o$";]w8N] >g=djDvczhQi6"t`YP;xS_5̇þ1t);9>Ȫ,%io.ZaTL%8t<"2\[he"8ɺih- E,-F-Z*q]ؖ eΠ#gY,%AJ)G[aVpa$}GHC)z8\~8[ &oE-2upR-N_B[̈́j0U]3d1'V S_v2 R̐K0~`RR;/ip5Jovhq iY<\yT'Xm?!}`#xE; /߼E0KC>hvc{<*jF}1ZS*IsQ<9s8 p,:"s:G}ȭ48$Xx*񳁩O>C"N5vX}``!"ͼQ9vP8Cq5/rE$7Hu0zκfuh M,ǻğ8m:?m*[/uGGz]}ADGi$)OϿ*C]sXz>1Ikw}b.Ա2)n(Xu~P)`9|v;\o` BJ#k'F9FppeJ͙E@219N \&8A$Ҧ! jpdžųv dq^7'BJ**QZHx!bMmsJ7@HI{^o,<y@ޡ%B_ai/} 01c[Ûc6itn"xʙeAf+'y'im7HAYkpJQE2I[1x19"t~<;OqNRN-aq#M$,]0Hy4_9ȼ.Ҵ9=#pp)|%p.tjM`LfǦ(|B?sSlϑMa4-)VhLH0y,`Y?L׎aĠTNX4-t4ܬBa|u=9Vq7Mm-KN\_y3 hUwo P' 豔TxWo? Ն䔣QUCW37V+y睷 aJT`ST(Onʨ٭Jd,{@K:7GR3:*Y2h}*E驱p˫ ǎ[GJ!98 gTQ4SCQr#)#H8}i;`.~vXr x97 at?)GD!-¶l\E!Vh!^yŤ'r*ލ 벹ae+^K4r(NϖɐrEk+WhLLج"iq~VHڻ\NqED{IZ<5U]~䂤mž/̱tϬ~a9!V0fشh ARZƗ+^Ζ-7n~N٥ռ: T$I{ܣwAa7*D.So uNED\}$Ny'<-O ]}_;Zt+Jows{pCt $k,}Dʅ`'Fg}sp]%@µi[z\[:Z+[ۦu%/(5n>R`/Ұ.Ho ,H8~c;(!m>)9P2OL]i#rLbB{B7uE7器8#@ugO.-x<2v/PR[{Myӌ8u,3s :{ƓDH@{Rxex"Y&O3MMӘ$!kF|/Ѕ38cIP(L~@Xdbbm W45E\^ܻ(R;2ԑ@uW^%Q; ;(tvGr~歟]Fq*G,%>B!GP>*ub}-ᬦ03><O6uuTGQYB0aP]4 Q>.$N(L9j BΌWTg E8q0ؾ+G]1HGSIk&}@D+I'JCfu=Ή4G83g&lzD}}'s>$r!R[$[q*ߥ0si$W(#]z7ѹwK=0yj-Β &{&Zp6hƭL~1cFD~h֍&faI]翍t>!|ehpŨiʔu=s^bA{ަ~}D"{cdiC?1M9NJS"U~ myXB;~{U.Y9lt"+4LiE0@ޣzOiy "OI{M6^uft:AcۅA \a=曊ͦihHC*ٮS|}Vu'^;9?ϔ`,?zXy~ ǻ>+lWuU۷wwHpKj aAA$H0$Q  wvzTwy޻M}xO,wf.Uq"y|9UCpuP_ze.PtGBQH /),>`g!xUrcd nBxke!>K'ă5u >xo3"ђb[1FNǾB)PLk4vkn {d=SSq7N>&8R8"\H^} g7ΰ"K/ο*Gψ|V(ZM(~Khϋ*e(0 %3s3(gՏA((:8CdҐ[ehpˍcBOkR$ch>%"AiX]p TA>)'Na$(&`|-ֹ=.=g~T!>Fw2(G+bfE+G7J?|Z}fɓ7u LC2RЩ^ հ=|14!iC"r/H /ݧnvj2,?~sO.C󃐀4=ڠ1B~񛴖'=u̬S 4+Cvgr:^Dϋ)59_ZgއC}gFPKbǧMes$]3)L(D^U lȱwءt8 [N.v{I3LpM5w-~#n{+;Yo;k[āK17n`aaF/d`hrV eL|Sߥ4IFf!j%=="G緿-7oޤZ>u7%ϔmOB7LB >~0h+M$3zdMv/>]60uens٢Kޯ. thxj<=/T1kU|Qx;@$uCTzA<~D4/*1k|EVd54)03Y:;hc~4/2FuiS3Eקze+IN ĴjnSsE+?+M]Xɬ'.T<=4YGs^]Hnuɸ'G4:5bCjL Q5=Y =SWqttibؒIv*֋G->bG9_R/M`QK9|JLp>)jU{kD~tXjGqh Rg6Z,ٶHX4vc,))Ca8'}{~n+|-FKɓ}[;C:}w6jqH eu&53?B~x85$=~w%I"넣 (F.Jz2! 6*O8aUf _C '0` +GR^aB9ǁ*箺ͯ5)c) guL]E%ߩ-t%4+=h*%}W`FiJna{T? l cM]ga-m8-c*'۶Y 1N-/^otOB||N} GOk {3dLupr)֟|QVɏx=й8uЇFNNݽ5z=R㗤?fgg|w>}9In|G<C/X+`"׾ E0 c1 OGd_=Xz<$ғW;XN`2L ݻ~SO .ZT+ܕa#HiG#Լi/Q(% >q痤/@g.^u{b.<ݛ7ar:BQJc3p7h>5ߣx<(M~f,IЏ"EKBjjuUPNt14?p[O-Zn^iR*MMΑLOǖrZ$ 9(w[_~7=&Hzn<B3&ӂLet64OJtq6#o0 c$N!cNPPmg)ƋU@=I19\Pߩs,sӯ_rP;8"CYη?O*H;8pYgt^wЂm(݈F0nV}s:Lʏ>_ڴD0D=T3je,Ox[^7IJ,/b`^.k{DwЮ?zJJr+ v""?IP|3J)gG˂Q=ӸKIO^!BlE3=_{ڨz#TU!!PT HI;"yA|RQ Eҕ_ArP*O|[ǫmLz$p>!o}etBFs:eoy])h>U(P_x穂*bJ^#vxb(b \1/g s_zc~~KF+"J"i0Ǥ#06O͑^ʡ> x(EfQMnQh#gc&U0Gb\? k@㢛Љ=]&\PUl++݆DG3r1Q"JJh"2Z:wBzy/fh2q;]LG){cnCL%ljIDϔ"_xM?W W#23ehpeE5cg" 5r^y-!35pVcFol&' gu) [']2r_'[:v:MyOLϧ]ŭnZgYs {D G:y[:0Ik ($Mo[fLl@R܅:A|28o~}ҧ?=#:YM( p;X@ S#˓4KnU27h-O(\x{D,g4E :.`vPB3].E3dgo4ާK/1==Ϳ7LG|PuS;ç az\%aa{EЌE91 /R鲫^o[x]b-^'BJ2S<.,E1UQeҏ!0YY$M.oIMXxKP?roMSZ߸Y+V>qgd_}ntd,1^c M!ueZ[Q]Umq]Jet hx1ܪuH$B'/8 D=Rr}A!"4}v_&vbx`=⨉i(A3tڇh37P_-az6-QhaLoȭBBh=~_#O FOX>`40&\}me-&^muzkOG~ʣ|C f~-SFv׆[Cq^ h ؗB[ݤ 7ߤ>o !ci'HgD^w#?LG8+(.\3@nyf,ݯD2'C 6pi`=Y~t} n$ {hPHi1{P bߡv}$~~Ҹ֝~uuv#YCBPN 0R(j߸b߈}&^uiarLfhAʼnJFӉpQB BDjDG1}8|[D1hv5Xp*&(=Tʐh2J!Fnۦu]LBvU*/cemRy=$~P-bF '}g:QBaL(إqloXa4qJ"u8;+>^K\y^f: ~c!YCn߁(fg=]]<3#Ry$먺%.B^0ڑ@n _.=H2z3iV`.Qbj}"EjůnKL#Go4~7mPd MV|z2)K dNV 2ķȚ*&KYJVВlp"8ZKЫc F+T4{!=_F80|{Z#\xx(e1SKt7og'B XJūm9L͚Oϋ[C9Z``gc|bhw>* Z@{SL#VyF&HIB=[!Jfy'[#ޝžs?#rc۴qԪu.]{qH\q 9lԺ!)C}e.2q? Ik9N LHĕMkhVN~Y(,^C.KD@)ǺxX\n$/"{ cf3e:H"K3$',SW8lMy}U+KwViAOl :U!q<3tAk<#<~T#%隂-[5|?uDd.a'h-Uxh;T7+h9|hhExs^W?}2OaX!"eibܧPR $@nt!Flׂ '! #JӜS'h*khEm`ؙA礥 'EY`:t۽?}gJt!r[M gD^$p!}"~}[r!V@ 9]l1q|F/RO  &B%h.i;UZ4v (G #H>qu̍3kbu=C7Ie-M297ςQKF틀od%ltmsc))mFtQԄe(jg_~9MOn_?ԕ,o^A@U]YsUʜ1$As+N ?5yxN%?AZ%Hfhџ}p܏bDn%fkݺKz"B3 BR$k]U!ʴ6>&IbPȝ{ KlLw'd?&{̹M7__nܯ$#J4lkb䆿tg+.~_C|ᙌ%gV*}WVinZUZKwyKK*%IP b54OzBF$d#$_T d&mVi_I-f0 X%qZs5RC)|Fgn҅4ưʳx'I(IDwfiUTnnB߃' p@Ih r2؅49KL$"h,})0ҷ9gP4%TMf}%((qO`@twcƥoquE3Iݟi(5l3S׈Z+9 3MUچ~Șɩ$.2jDW]~g_YМ$O Fa{tgL)wںNy2^QmE1 1L6Biĉp}(D`mms(f/RNKԹ9S u' y[y' kG>ۍ0HGhVEܣu-פ"P}҇Q.Jɕg0YO{SW&3fqibUfz Nkl94~b\=նd$ PE302ϰs.>st,u㄃VPݕ*!et '.Pn"/{x8Ag?X&eWipψ3?twk%_z|} 5@ύb'H"$a^@PKkhNV@'\"$:Ib'F#=~؅;gY$,{8{n;DNdgnHsv@ӑ.\<;x$1~'% tRӈҔ !Z-Ʉ5ܓ<^g$L@Tn`y]2W)Ӧ7aҔjk=O{3io&4 /_랊NLs#A1c6F~x+370)T ` 3?[52ó5tbQ4}Z`WfF9hcy}e/gߍ*" & |yGvjo{Aj @!kKSҸ0R ώ]:)Znťo)YK[HD_JV?՝|9e4(trX; I96Vcھ@cߢw:9Oڳ?ܫ8w|Bv# T/85810$$1z߿H1 eQdgߡ]:_P6&j'VG>Ld\(J@8nSڝ\So ֧M  0)2ݷC /m[i-}ЌgGkRH_Afe)]CګP Rmj̛aȭύR {hh8N'.+'Ty+=4/3&SOK:&~OI_tr t8_R4 2@dz V޼Mo1@OHatca50*hI:|(,NvAchȂ4v6qr_+; ytsS#UȗS>2 P!pqJ 9u&Naz Hp7>orӣ D ckM%3GhZ4[O6vqgXY~~m#3q=rCtD?K $«ZAfy5$4b8Fa- oV7(\|#?Jp&BG _pm1iyhYH]B*]{fiAb`U7pVyGQTP3)ՙN⟞My+t;tŽP,«aY׺φkŴjkd^ "";*B((A~M&GCs<55PUm9MN`đLD95Hv}:- }9zրx-23/z=[&y]r"tSZ t?"=yLݮ4h,OhI ̎X)(\9-Ioy;?%L]3/ eE{#VT{;\JŐ t뙧$ҩEO\{aZ46đ08@+-܃%r/?QC^{dC>g$d_*Oo9yv#Ny 孿$ &N9g3OwVygi?:k,g}UFϔxͷy_׷Fo3yj(rC=f!t_{NEl^sH3c,]0ױ (JpCw:,{Vcgd_īnadІSNkj=t4"b*8b>kʌ6E;-|.Vḛ*Ǹ.H2EKDf09fSI}L*pR׈nT3n,N]xC3E8RξL{cL8͙)4)UV㘌*$ID &@MAS[q_0ߒ ۍIp Y$ ijIa\Oȉ)hu.%+`Uf$ȟ>zާaĒW hB:K!Q47ΌAoge ~s.Km,M`GQ4ݞ)K#!i񊀂ɩRҏ+Bտ. 4'F@QPu1S/E8:e.(/FAhT4F1Ib,RKLFqBfzm4;OЩ>'5& \-]s~S,M{.)lQ-cb}P ~Е.$(P 8"r,d '[$'KSңpِnKO,z>[毾g/ID %yǑ͹a/H^&y]HbyA]wg b:"&bDg`p,g!nzr UL=]$V9jvW\*x$ ea5WiG͘ݽsӈҬ;&3%gt>2{$-ՏI_v'# g P52/һd\͡(,LZAݎKC*w$7[G&_@2DLvdFqus/,[ޤ]I=Ows̅B ~:1ݗD((2?1ا7>Xu6] 9) 7Y?S{pΊ,*:E,ޣ7Wy6Yy`E΁eRPB*-,e>ŋA=%{b)E!xC,8!tSA˃8i glw IJ}x;4b;;JqjZ! r ޫ)IYyv]kuHPnj5ith Hq(;?Aty)g<+}!#C>|Bդ%Su9#?!3I~n]~%7&9U98q[ޠ ͇g& 3snݕP5ݔQΑdn =i0 T AOءxKbRCY9X*O~weq_ƉmQ@rn%Bw侈|TtK4 gӑHnuJm8-hi6%F׋bQr,/0d\ q`|a&i}FŰs?x2}k[ EZ+jrM߃)jqo!Afn3Y0+#JY]ʹ~OQ!y/pvb]c5_P]^ckh`[GOpDnEQlN&D ! ?&c9 u (Un#pq͕1YEyn4Wߖfzv/L%g~pE?)Mq( 5zo" & T t`9LU#%ERh-'O> 0jBnKv"U(ᅒ k`loR +YHlIj|Ǥ. LZH2D+^}](!jms\y˲x"_B5SV#2iD^a޾}5LEz4-ϊSzr8 ׷Q y~㸿GI?P|ݍ"qj:W#rZ/l܃~[^IE`j羔ufSFģ[m,k>|j$tzŗpIK\{[B$yZ<Tn z)mYn×Х*87dv#6k>-_.ȗ0U;Y% Y Xi0`u,:Gk@,@ ِI23]-Z/>*{V}NWU]S#N|8q%z.ƚ?=!zbQQf$i`%+u6-P U5DR'0LTwn~to F瀨"rt޽=|TeџuD#AWTrߠһ/ntkkU,MgsΑ[|SztZY#G>sBH7?V]89+||D(Qe B m >e>aξDE$}[?яf`|= ŮcSi YNcc׈)2E\6PjEPHkLyA,A)2g~c_u.οܰEו-!c v-4+G$ևj#Ta$?̮^BwJOC۔Qڶ0K+c]ogϤ #'eNGO-@2F(G tNdfP 8 鸛C0o#RQJZ S.Oc^6&H)>j: Y:s˘1{aIk;-ZyL8%0΄}[dW*D=&LSɻ,*Ah z4GG' U#5~ KwWz%Ɣ k+DyPo)W&鹷IE,I(zoq;u@vet 2Cofal0ۯz!.oguI,^)-ĤC7G\"  '>Bh"h$ )K#mߡ8;Jx#WJdg_F a~ 3:DCWb_FI=O*to2η4!́ܥ2B&oc>Q"oKYԽn&o1BQ&Ѽ 4E[!I$(BëBO%Pk29MIQ4_\S$l"T4Io~}lqc+3rCρny(i=]$=~הkDn#7O3P;ωmyhi:kyB Gx=c'9Gҏ3ֱp79Կ} # ؑ­z)|J(l| ;uW?}G8e660JЬ q!4%ʌѶ'鹁4g^' "jtz/+B =?tx8%BGo7Q53S`I_RF#rPa^^&}^(vE]7֙(Yم]K^c)Q_Ҥύ q4θAo>Q&=څKI۸)QեYA1Cb$x{k8&n3DJY@=CC- z Gq7-vH+5r޺hAiپMЭŴ:un'pǍܸDsp7{"$BAV H:{$BEKss,$1~™>Sa6aG0:9~N0V{ܱywGtogʘqP)4d|B@/>&t/NNO{NDۓbs7O0 bÌ1%i7V>_9BKQ͔-O XijNBUٗ XCāK䶱Pޫa<0q7jaO# aitMHUA qVKeZK6gHV )]AG񗯵#t2t:5y8$Q=r(4/ټ9ѿ&z,Gfy⒯hTqw11=O0Lf*h[`nm-ros}>H#tȊظ#Ps볿sƾt1d)NTJ.,YJM0_B4_l+$ūؓef)C݆gA]uj5[]k2қT/оuc}hu5]]"\=طQ;62JSE3nEI(q+(tP(@ (hcYVe$i%ZHقC-1-2E4Ah7<prfObjb`g͠z5<}YBU5tE!~DJSPtRMbskCq(*㩳3wP4JF"zn Mcd;|HvLmI * ;(d>eHrq1Zq$55q]U}FnM$9;5D%ڭ[Q=8gLK%;޾BqW0mOiVojE CY:nzSnx}8OYi45 [ݐFؙ2aNw?ۃK `{(WN3 U c[gjPآ(*orG []gPT3!'K(0&/ТF˧ WLlr*zw}HQm;DNK+$J#$BLk0[08lpT[&_PQmv_k J}7C@f*mI,J#$٩.{=q2"8qu⍘vo;tR^*bb?~ɧy[K,4BN9)?CxAClRȿB&}#l؏O Qx0m&s;6d. 3["G kOO! Uf` LL"&;$0bOE Oܯ1Տ)\i~DOνFŜdou}v*Aam|DvhϽmjO;Kv!nuPqKT~ߣ03jE†~AzGLL p6~C:)#s)O.fIR5ILt}.m0iEkJ[%1QɦAP]@eDpj̹# ]\Dɗ>׿_FΓ}ľ=Hnt6>=\Cs|z ?["5v|3Cs~sE3>@33r$}ٛo!) JfO.xwÝ 9݋$VO`SH8QoF,2cczuXG&I7+$q0 BJR۞jG@ۋ"RnqT^>HQ(3 Ű1>;Kf:FBw.ݭ;Cӿ\qt/*WST*ZyPԆFɗ*D x ? !gk )BJ#ҞJ@TtE hgTBIpuUDH<%o簇P NMCM8,hJ=&e~t ߜpnݘNhLtOSآXhVjD/͘VL_dr>=闰˳ӉmfSDYPURRI C#HkdҺ5DDCsp z'yyハr^ɐ5ԙ<_o/{\GOtOBBQ7o ڈ8{&!ɶecՋ G<؏pז;uLu~@/DGd3 CbV b) [}2DwpW$V@( O 䎲^4 IŘUGt63pÜtK4t7 h;!ha֍ި0YO!;K٣ZRk88l{ש JP/KwZ[Ĵ-zF,$;Jb^L@1e4@|o>Th9XF*y&ܶx**]&]Σ^NH/)$RTE}(9oh;!zHTy[nT2eaI9$u-՗( Fv'Gw?Hyb79(]tāj=B{>d6qVhl_7(j4(DTr:M/`m+t6,NJpnX>bU3{Y:r~eɸX}Wߑ8qWt Ű𛻒L=B]D ;ͯ~@x,wu2ln, e)T4ꩨ葘ƀ% jbw[#=2kPGtnn -T1=* JC/*&" w߫` )C'eئ0l-M\Dg7gfa L?QrVh>5AVx䠋QBN;R觬&LغBʐp\c;)"3Gej?_ROql|NksTx'+E80ahCB b iBui>5o'xM:[w %Ӱ;xj:~ЧUE1gNO zY9 o ݟ%h zҦ&vÓ<~A>JW~@>< ҍُsyFGE#;2AJ{I~Μ1JaY!ET,`GpCϏ&&!cKR/E(B'\:Ќ1%,@3*rtU7G*P~q5 ek۾GnͳuG ! ˟;-6*h.S=k^ ʄMej>%Sy* *bMמbi~BnhO4CI>BQEݭ;X)rsY#[heY\ZB`zUeY0\)_!=LO1}}Dح)OnB뙛Dl3Muэ tv\--0]AFҎQl|Jc5R}1Q;n tKf!qkYYCRc3$!5q}_/(&Z)b3BRIz1rCxM2/ZYZ+_|ޣ.lgaqlcd+vD!ġ4u*+r3cfFv陙4gOLIMDD^0[FϏ vYK%Jd5Pqx>1LSA&Ȟ-K'æuzO,]^ǐju3{`fr`w?x' #"04}ߦ<ݸK$R1Cf mhp#"¾[Ir3/PPCj71^yl E1.(xhv0i(%Iي1ϿBk#jw~LvzvHu W>x[di|P-TT?FO\)FMěl=D't)LMpCNq  Z$;+'yeTur|fcC"Hت5wYX^_QHkI}2<CJ姵6/䲔%HP{ZtQmb+eY͠y!"ܣ ZnBDIHOvqzbon3"D'IPbr1vI'P"j&zBA+Zdnv|#UMP*̏9-W~37Joq}&H)&MGBN)h@S ߋxjȏsٹW3%8ҟP=Kg6Bem(QB/2-qg8{}{nF5RFϣhHHpְ3h&AmPzDw1 DڇN'戧7oA6z2/trPU졹|AUT"3(CS/x4ȝ{)wEH.kF}P;r[)=೷rygBϋ}k .\nXO_"2q:n˿g=[;,OIA  ɾk|qhw2)\hX}w F1lYt4N`yʼn tU=\%5 tM+N8QTf2Kg`Lnk"tt=UǴ- 4ypT1 Ӳ.!5a1t;G{DI;ɰo8ti찵NiL+:ԫ{KV{eɤT1%I2ٵwZM+Vtz@:a RLC Q_Dz~{Wi% nmS2EHz-S&5z#?BXGU lb ij&U+}3l<@_x8Wݢ>ٗHq_G6E09=(jZF$!~h.fF%]VUFGk7II4M  N4Nn#\Ygbi! w0b&ξAD[q` CQ#2oݴd^>EsD#wb,`'s~E8 >b6BHmc7t- Aۣy'$1Agq8eå(i$I(-M'9ܡTxz]>t 37s&"zniX'ϙZȑ2/4w1_D\91Wfb-^Ee$fMh* Wo F9Ԯ<ǞWO\ҙ m~nK=e?Y6lIFGcz&d?ٌv5`ّ!5Y2G|C@Qb Mc qajlmrPc IBjd'xhG&yJ)4M!"TUZ0qDk})_<"KШ]@t,%(@W^DI Y[c I$PhԻa+7gTT8jǔBIM2 |zLةaUf:$ Z$^o@%$( R9WqLحIXn9X&7jS! ~Q fa t$D^aRq_!mq'djbњZ}Ybˁ209ξD{$ILzs/[y<>cX3Y iTBpy`3"䨹C6=Oc0{?w#1ӄN4#?=<sL9:T֤>ž|apg+1R"WL_'5~}+afKhnFJYp?G;OlR_ Yx&.JKSș_K_+Kgadl}H}>qffVs7) )4k5ZC"O!Ȇ,`>N,穉CJV@F^@Íj:nGI"v#HUXGMʸm2 #0M Ik3ܣu2/cH 5~i`u5`w%a }A'x(asr9N)Rһ9̠ z Quwna*:a:ln=dz&`H%/bZmLͻ(5$N0+:Cz;$o>-0넝S^'譡KA)ϐ DNj*5AAw>!yE`kwvy[#kW ߅y:dAo'^C醿Y) bFL0s۾GNz Dmz+=|b(o!w_7s\S\X6Qc2>N쇄 M/4pm21$6Ic'ȝ-s$0Jةq< .5KxRC~Q/ec;Zag 2.lQ1!r ^+HvK?G53Rd~mƮtQsĴV?C/ȥ4-vټK)i0p0)2 @Tp )=i4 |Amb.Hi/eęiV.1 9:ae6I Lm6a.sAg3 ޑ6;f9:l6mҺXLa.=m5Opݥ~C]O"֫`6ű] k8C` "u% cNυ{MX\&񿨢 ѹ6.PvB1? tp[t7n%AaVfP `=z.F CŘ!^U3'$1SfN%;T$Iҡ "JybJ%80ѭ(μf z1" ^FBv~7$QB>' >FI? ՝AQ $ { :ʑ FQ/4G\a6r7SiVi5;**aK.T&)Μcvzꙻ7-Ux{nٹ]!vZ*z+l\RO:& قz/氛$߸1EKG{W0J١3P8xITpa*hD88KȔ)\Z}1VsDkbGΤbf)*؟!:MOOF!M+lPJiKB@Ϗ93 a:k=R3ݾBSih3;~NQ' kiSBaTt/ hF~=S{L ŋoϓdlޠ<~":wId!f~h%j;k>JS{F;l_-I֨\C QP(a$ ܗg$,M Ï 3EQ XCsi[wi>~e9ط6KaI7kpS U3 o 핏e4(NնM t1LY Vrr}[U x~Me] +? r;x$\+vS%#.og$=zǤ/27vnDLlޢ~GUU5RP,AJz*Oh >Cic am(h(zKY9T3ufDpP4asBv%st$d J(c7i.@qF*|.ЅTLiQR ߤ<j-Z[K=AQ!$cm֭_a$*S 0N1~ R;;1̈́8㑭68 У}u? L0#ty%pcHA(6D1Ik%p1R9"ՠ.ZSoBy̢UEVvڽCMaTv9d.#SL6%f^DXB>DQ.]".\ W4^W(Nb&1tTb_GX(tj5aoMsS)j*Q*QXAU[jgr"- JvwB5N%lyP2I8 H#"bx*zfA|#2T&"pɸ fe̹(3Y6 {<^HQr dP-gdlwH.^u\J5 Q|E5{b3QDɾRby_uZlWqshCٯJrKqc-=*l)ߠCz~x0_jۘAQ|V^SQ7C E%3} (u~,MbӪAwo] DY!MhFDNMm4F~ {\?T&r[8[02(^$1XCsAC%3d!@ӏmE'/y>5G'1`?WہhE[grdZl0WdOESlċ犤rYiX)s2&E1*_|s -Kve&8ZD8 1Mt6/VȌU'r@-e|vҐ`cIcq"z#t?Dόq!Rr lhzyνWcxD&lcPG!O{#?IW0A*i}ǡyR3nU%W~LyBAiV d&A".)*-=Ȋ.R^'"D#QT1aְFv y@h>G8"t)= 8")NLT:YKAW?q$iybyZDHZ`3v /4^Łk64fH33 ,DJdJpjU1ka>S_!@:hSߡ@8%GǍ^@ Db@V$$,QDwhФx=;P $F+@b+iLA߄ODBBj9P}=`{l6QPB .S>J)zB9 +t]2%4ͰtqFE(NRX|-ei/?G2T+3@!0טOt;C,|µoP)= }??w@8^a[(z}]a6&>7 /s88CWU|nd5㌫-A 6nkќ2OP4=Wl[iR9Q7Q.PUokdQFaO'xO0^XRm>\?^Ӹ 9%y;ݹ{f΃_o}4[FcVδ^A_d4E~uv;na'ъSD,/,S,s,OLPt{;>G{ ]nq&"^s}dP"(F:[a wptߓ=̹Q$|Ę~v35"Bai5wڧQ,%'4islgDf 2hǸ툽c JK4nPRR1O>kBAҩ4#[7~##YÃ%fJ3t=i#-E@;ș,K~H tb0* { 3K&Z汾èME._~Y^Acwc{ؚBexQF/HQBR, BgțSWыS$n+GNE,Ce u (I%bL$D1t„ (XFy3}MͤV0e4S; iGFkEeWd^sXB1gy2i0 %ɸRTNk86=)Rߣ}hVc$IˌR%V˲>ˤI=_, y H F!+U"POeq^7PB>R{Y;Z}ھ /kby9`+ߦL]Ь.E]Pxw:E[F8.tSo3XVoHI&zaEDIF2 TT,SGU$ DxRS*ÝCbGy(M!(,+1ǿUi\ŞLuR'hbp_~>U(% Vx6/[U'n|9?ǣ_;V7{/{LmnRӮ:M'zhv![5edq ˘qBĞX" tE)_>gp W1J PRpw^;2shBeYx(%Ctjbp7>7>'Kb&08I(U-*iǑrWkQk)+P PǞ` oU/m뚐4F"UGWa^QyH3NHMUs nܸq}/A?=ęJc(7x48sؠ{-Wx4?k_{ oE?utzf}qPi2}c7!<Տ)*2ˤh[̼=p.Kp' 4pI .L*_7atn̾wF;$G#Dc8̨O!X۽GeuD*(f V?zLj(x= vac<+K,MP jN~a/hI],EґLڋ#&hb/|鲁$/5<[e)x|M #s^q/ⶮ`՗p#t[V~[\4G|$vLboHc o\]3U(%~Nj񔷩9eU^w>59<{3s8eDH\V1޼NDIAIHF>( . bmgDuA_^.Fa}κaTf< ߥ7D?(Y*2`j/F 7G[7H.}ǔ{!% 㔜fA{,KM귟,2&PhblJp>An=W`V|(N 46ql$0Jc7 Zk#?D:KtW?|/-; KQTI8ߖ .+"-˘ T*_kyS=dST^ɒQ( $ =өN&ӄyWG/L0ܹG9[,%2.*dAB`9xf<98*(4 e6ef%IS Me)rW\2@BdX#aCSpÄ~FJ{,/I;$B]4WdQÏRyA9/TPޑHLBkgɍ)eضE1#Hc)=$;c: w ( Sq# IМ" YEUͩJ\v-/Ta,I k9Fl&\%kGUPɦ Rg\F >g؞)<- (ϒS΁kN yEHB-8 i"T8 rfO/-<3}t1:ūݹG/0kXED.E?͚7?'hvbPqaq=͐XU /iSeU&ς| qۓy|5-A@sy'(_:3TaBRȄ.7~@فqʘitb'Q^7Drd&a#4%;ũXEC~3*5nJUŷnݽO{Dq虂ZXEBKKHˆ4~,=Fe(BŞX&%o"4aO]Y̾IOMcRѪK)m4S ak[HlD"0Sx F$NAf$U7i9QCR=W(NpgtS1| D2(LuʖrQE ,%2T=y [ ǿ6]h cAS)*m7&Sv,ۡο$C$&hov(]6pȟ,hMB="eO>1읯$cjY,WȒ*ӡ֖jlbc琟7_?cXڦB~izZ&@!@ԖhSQ6hsXݧ_aF?U7/0 T8 <,ͽ]_ҍF~Gx뷘Yz <ۥ<٪ȭBn+?O74蝫 Oaҧ+B'KdPf}D$Ts*EKQzM3;ge 4["eRyUM~-e) usI:Akҵgl{w=~:r^I*.I O-2ukR*VTZ4]} J'gn3XMP鐥xZ;pJ߽2:;v$UJa# 0r~. 'r. Y*2\&%"&fe_XD6rtc`~ 5[ ]#[t{p雴ꞷ4Dܠ,V}]KR/ =hūߡ~AJUabTr]/!S&:P#ߓ/!$P UBe' x2rH ]SPNLqmܽG(>M\ fJ"&?zE$) 1u=$N_H!@dx;{N_QKe4U:IL(YG/N}~ B, fafN* vp{r U8X!I=s c@xt$} sZ|i\{p./5DE/MHڀzhNPə:q6Xʛr6ܸpWwI!1pIS5 UPXHՀ0LI;UDB^O'~SҗTѹ%օsӯ4+o_hp 7E h Q{rDOsF%jt4&9s?=}8E(L҄"$פ#)Ћ{!T֕ xM;5x?H]Gܬ a~oRTa˃d!'I$BL|kQT'bx#rewpfnw),}C}=_'hNM,'~$;YE8xPK݁,CSUi$iJBDc%3Eя#JLSvռc :nBM0W5tcm6"MCgQ`ܿ{LuTBuFTmhNoOP1.$#I24 rfМ2+/W(wEdI+UHnW=SSC :tJ#7!M5e4^ϝGY܀>EnȀ*gک'SD}aw߸l`O\gGJ T* E2Q(ɻ8=y I WB3sǣEQ~Y;&?&5%Oа`b8D$ssU7LSp.;$u't)*ʼns$JN]#)]/h<*D.ۆ8"˲cˠO¼LEs$"u A^Q4u 1bhvBŴFuLQP{=u)'Bǭ%A)(W-Mxk}=Rf2 P? 쎁^B3jx rx$`$N2wAƨ`'q`&HW&oIOs0sod;'f+$3mB4a}G]X:]"-TR"g`Ą,5IFQ22*՜FfDqbi(y v"f0ؼjT^"i#Tq'rCޘb?,P_ i"{cGvp Tdԥ3׾hQ2nK„t/NbO\,O# a: wA`'[*!rU]L$*e8#L$]D q:feB#bP"U&8P3CjB *DlP+\T^^^dx0A(NZMy~Jm$J2غSCe!tTrE %+ʨe,u U=/}w +&7:zvYExf*g7ڧǽI4f$8񂅠YF)5bN4rKѐ=@8I $:Qf}}~#yO:;PD-%[({ UUް&/, ؍(d4#N2C'Ϟ3U M}Pu Ko3غMOؓH9{s5v0ed0_Tپ'/?뷈|:J22:V6 `H;Z,y7Yqī1fnMJ}DCSH{)Y"PG3XuԪ#[!pfnо1(B?7Lޛ$r5#oݽO~ 4K@_u' K&71khBaFHƲm̾o`Vf.ԙr4 M)\zӨQd3TR>=fRDP4T:~*IWrO~܆8u̕~=0?Veo2ձPhxJS(]L?o0"FePZFoƝɢ Joչu=6):~YѾy -]Dŧ'OIwQ̊G_44v~#U0ΨNݘ* b^'~%B`xynO+'T>\DoͿYn3-3md|"ЋS)r#U:2{ݘR0[[87Kx=-ﳿoT{׃$7 ҵe>Igt'?ޣT*a&j~a7&-raW>$$$T1к<Uo]=bhpßmA^3LY`,g v;Qf*E:LyIJtw9͖{} &璊^^7T? S\/lnQ)o3:?$3QHB #2LDT2ݹBÞXWTG c=6"UY1en8%+]Lɹ7P PmO~G٣xq;l=Q͢Jؖ1ߎ(n8J阂))S}kK87P4E}_3ܹK~3֎tMaQ]bZot#IS uTYVm,Ftj'Gsԏ˲QanR*Ϡ}b.D[;X%8 {*Wx璤ռeC(LXڹ=V(?l^/CՆãtJJ!Ƈvq?$UU H:)M(dgk FmF?I0onR},%UǨLϕɛO0Ixҋ:~Qj}}Sy} Jts4~7ŤeKUXmDnIժ4.3,"suUsX\g5j }zf[똺$6/tm3􎎎{.pȵ׉oS  x;;{Gt^~[)l|:U_¬H2n! PGOa._ ~ЧQ H O,T]^Й(L5#R^buhؔHg@I4*]/& ÔA*D`-8 g钆D_Z3E1|C/|FMrթQĪ/HBo 6Y g*ORL7{$M$DSUTU[@9a-_GH˷pFq[w] -E`8_.Q0&Qo1 MܝDi[F>Ysg L0 GkSWdubvv).^ҾS+ x9$U|&%čQEfm(&p<%AJFU[ 6AkxXQ/ ?Jy CIo?"v0MQK_'.JA$ "kA<ʕ5j9,3Ks* .R NyC(azo=TƚXy, 1("gY`3 =?EmJvh'ziN'vQ&*ۄ'm6{biDΑ.M&>wEƎ1a,dQ Q(:ze|W'N:T+,q?oL9(48șb Yj|iWI:m n=(̀Q3CMPqaVͪϯ`DžX*zL4J1ת/aO,_h$y^uܳ* :5 |L.{~c e&N'L`4Cl]`9[wd\0qG52cpU%x TnP TB;xQ+4=(M?QEO>yZi lt <(s.+rٺ.'5uT3ws2/96 0K bM !"T| 8E;S |IYIRGc1Qh:j1u~ӟ$GL<9{< 9|-1 &NA5DŪ-%Q>sY Ädq=8$^hkn&Hí/HB{1&qᖠDG޸>aLl%7+EX.H_EAқf-dv;dŲevDL^p\^{O'T2VũTGY_ C;Ȓ 4?ZJ":'h]MbOh=$iD&$:{PeOPѿ CwA 'Ҕ`.@-BmA3׈>ak~@o!GV6HF!7+%EhR=Wƙ&bqanjZ^#͠d''I P 8G3\6KL4~v;'iTQ'g>? vՙHN47%D,csIb5 ]B_ċ0/-_\&c6Q5i^]Tepߓļt2/TQՏrUٵLUҨEQFZRw׬?ƪ-f(5dCdT3 tV\FQib0=)ɣi:뷹L0F \4E՞Z= YRCj7bs,=upP=It y_ރ4}W}f1Q,鶛-,%pJ3\ċ@6'ktc`4 =ß͟?f=%W~?Kn_BSx{ }B- K ∊R6yt]$"hna9Pл^9F}-(^fn[b_[5RSA \BLw}H|u!u1D!dV$ w@F7+Eɂ.m貧nJcYgaH[!i/( ŷi~WҘ4E4b} (JG3uDR'v&5k"S}zv}x89;_>(&ux{qPyzDc.ooJ׿?Nv:;K S(tUά4T!i#'1q koM)c*Kd͔ƞX>?ɜEkwdfU[e-m,xoo{!t :SSڹu*.hvٙZXZ*tCJVG86akݮZwK(({/ua A(eyQF@YH:;8rMe;xG8kU1pJٽD[qe6OAgwdm"t)Cܽi\M?Ĭ-ЌlahQ&tRĠǭ)-e~a8f`sW)F3/sQ4;[ÕIRS SK@*A{[8kXK:Տmi]Uu^LǗma ,֤R͙!zg8B(<Cz-1czӟۣurCۗ AfL:*Z],Oc(Pu4߽ I;ʑ-mϧEP/P,+&UAh& ?"KfEc @oJ$"T0c0U ѡkb^e} Z7( c & uOI,e SUu;;;2 Q5^Yb5 xxwM#ffUT0>{R  9yT 2Hd|M0H `)^)oՈY5]r:VK29^̾=Ln5n>O7)lun\}n`REjG"^#M`j ` 圆ymTi7\5q'ftը*M㵱bH=gJʭŽ#ܽfnV&MIi)t`3iba*>ǴDcfݽ=k{Pƕ+pr/ u Jey#(U Ǫ-`ʇR:G𛛸U" Dq:lЦ!8,6V)OGT"h?$F_{\dibX!ʢE/_~y rtJ!77$lןQ,g䦯;2;{I"a>W^ 4a!o%~r膼Q IGOA{8 +$ŗ6玽TuR:> n7]Ƈ13R?_%ٽO%/_)?D:v<};&{l-|0* Ȗlu=b+>kZ.3vx)2K2l=/0D`3ƙ ѠKSDd'wS`h:n?ʏ*|5Y/^9! [iT(5(-Џy7%5]K]L4R#iT-y,a6CD_ Tsd{qfj n+G7 +i#@uIY9nor'(IdK=L]`:`dآp廨v w?+O >XLe8n& Zo^Uo:_}o\kN Y%hnjh) b6`ё_KqMUwPAZ Zۘ 7jِnguM7_BL$P4BpǙYdtuum H i~ͩYYs4Al1QШsPѠMǮ274hVT!7zrAss jܤ1FaadqٌZ(9O$Ъ+ n*Ya{4Ba{Lxm Per txvo?mظu5)J2LMyD.gZp;jnc KL_'|AQjP;^14AHڛ+!pw tȡҮ5I* S4?ZìvPߗΪarޠ dA,1 SdEd2QL1t 7p>p 7H2,&1ܹGWqY)D9>M_O7oT0@MC6S&W(m|h1΀P(jd+R#.Z^ˈztX΃mH;&vg:I {݈Gn0STtn%A=__LP'vj(YM"O>C IOck纝cѰI?&֕)e)w>ۥ{1^nU&pF SR=oͧYZC7 l#XY3y}&+cКffqg0I ݈⍮ S 6r ]\{s8_JucYkQ'KB8~B6=,aH,Ir>EQTհH"\ 3w="n4A;ZC:w#8!=2dԆw&eZ Kkh:YgPPl0i/Q|0ݘC|]{Dx /ϗ% o/ǥxQ]41`op{> {wz>rɟ i"Wf@0 8ҕs; y4ڴ eU$G{]rÀ^c{g+< Du*εuPay)%e*GE!7}*HhBFu'жtDgUTfl~Q@5a$0 DM;&'$ ]N`3'UE+˘EϘP1 $Y#1غM98EUVU tMGMl)%LC,xV9>`]6ߥc+y6z$ CHdj 5k_>X'2]\u a[X.S 1yLM|R>xz _lQa[Ӹx+C,V}00.ý2xpwۘY4+O4l' jOS—&agcD 8u;_ǞXfuEhDC|JSQn})c$xJSHv pMnUJ7XwIu֠NPQ4 n=Ĩ3^cwZvY#R4i_xwn)c@S\:C q2ܹ?JOIBRT!Ȓho'(ASq+ECl3`w J!c0T0 qFt̋U%ICsN%I4(ԓ4j~+#: cgPw֣{-ϡ( ^&eӃYGӧ#S7Gk]{N Iۘ#+M.Q@aXőc2eHmբaf#^ɀ*(*\LM`9(&9տd)$_533ݻww6 zGY){>1GL@*~݋R577%yV}̼T]V+3g\"TRhsp(kUۇCUgRdżIn r" FQJ%wOoG}IFaBjRdIq( fuBf't#tMcucůiL1wZewiPv&BQ躁 7?Ǟo͏5'1?KAEgqkjyIX6yM$[uɕq_glK7S+ &T)CfXw]8׶QT `Hǰ7һs_VSyB1a@Y?nSltnj/ 07G-PJIE#)47G4%KZpL,seޒ'YD:}Jy fLYumq]Dt wY$W؍kf_U5Xyl C M>tv$jܕ/{fK3pw j}-v6PJ!!{(¡X8-)~Je50ac8#`Vt1iMQP.ag¥ozB~qQ y#|Bm< %G,L6vUc]%^Ou]M( `(Y4Yޗ?ITIxyO!Q_d'U(t}Լ;g ̒8ŏS>~_4C;45yZS(H>_8zjxcS/i;lQḱfǒ=bzKE,G\P9DMA1ea KuP &~!R ۶SA!e CdDJO_Fmf_W=_Ǭ̒_|S E}10 ] )_ 6KL,$MpR2] (3?) RF.}ߤZ)S\*M 1ɗjP[Txd9BJh·.bBJ°%t_C9N߰ߣno@9*)))Z䏗-Ë FjWᅡ9v:Nݽ=VVVXZZ¶m=͒hi \~$tbj϶pui_%͢/p|GNpfn4Izt{4kWW$B _aj~bc0vv\bF 1c5AtS]Q=xwU7)U'p< kԧ/ِ*I?sCPTSBH֨P:Azfe4s!})iLp&A=I;$G5N9MH^ĕY P5Tjª-%VO5FYjDxJ%MUXXX`kkKG%]\UNx9Agav/AjQOF萫׮c:BQ8π;ֹyaoPor|mESN J]=8NAn^͵7T*,hG2e?SݯMtU ڔ %găC~Ylnn#nܸ6Ԝ2קy?PsUpsq ՝GJ?wߡ &?RfG49TMCsl|.MOQVyŔRc$"z2xAB"wf"C?7+,~^7bݘ$Ŗ.X9 h㧼0HÓis.w\%ɤOek%n}I&56:7/b`n^{;WK,V6epLNH]ǬaU ;{uP{*/#1B& Kl|JYUmPXz$>Gw:R˶:( aC~3ICnBOg5zMQo/>h1xqzFo~N< 8IoSUc>*+TpZQʬFڻ(&.6 3}gFq g$2akg8=qi[Ҁ8w0Ap!ӤH8%"@*e( txx?ÍOq0sՃad4=7$R0Hɲof3=QT?E`eAk MJmêC7}sGhVKL]hL72ICfV)̧t(>"u >i*(^o [(^溅:؏=u43s4`3i4kI.K'7D*fwȲ BIzqbí;O0JX#!L9ڥIJٓ0c# 様3 O;Uƪ/aVPtDJ(bVЕTh=y1^R-:XDSb~L'xT371-]RHU-E!=C3 A+1_`E+BE̒yRYLˆW=!+~Fih ȧڔsAg UxH4!8Bz^7}=Xc+ă&tա蘺`S5*9$E(MUn6bDB˼vs ][27 JǠ0V;g3[|9~76:{gh<8ry:<.f&&&a˪x?[ͳ?獂mEw OO!PN2ר1gX)+{@bybi55֏.A86)/o{I2 7*l eŞ@?C~ϟT֣g35O+?KY5졐yTr!]I^| E50sE&sإ?1Dq0}6Ѿ;ijS G"}t?h\.$$n=wiuDz_ЏMJyF6F t()}Qrv:x(Own&|\u$\(ɲ-ag6<^0R;(/+bM^xO R,lFh:{8:9?l19ij qs@Q( yyPȗeY0 ^Sϟr*MTØ| L<c(.Ӭ$o|Jؖp/]AkO"(,}}.:az?d}"K#U!yRTObӟh\ǐ,[P&TT2 A1oa83RMrpV縗h N>@ 3QCQX]L5T/|brӓ?Qn1@zdItU)I Ohآ_3? )U"֛!AQFU'e HasWj[?B/NydSݽf楄]ĬbT0GNYbT*F{)vueoe:l^{ʩ. PCv.cR3e֎IGمK4fϴM/;9DRabb3Ɔgw%B}*KH[+yȫPur21?K,Lݔ( DQGӀB%; ]>m Nrti֏MT>?3rtAGS$7*VmA;qjKI=EhXyp. T3{tH#@F)q#T%NbQ!VޙQBJLd;(N%|;8 {GLLL;CRN&TxYYF'q$\JAQP^F (ZRl9?Hb^brj^A19{XS7B=bBa PGh&z=}`(߀$tTU)vYC1ӌ y~XhxQJMO*Q}N$[*abrwc̨Ky*mWX^wũ19.)VgQ'_-%3h*}-@an],Kvcv}_'&*p@=}@Qz/o˛!)kanB1a8d~yVȠfyhϢ+ ֜ U,B4I|afaxLvj1x6 s,@D(ME?x'qJ&dG~nV 1kғF>[y̝Xo`#9-ۭ!T=T6fl #?eMvhڤ *]޺#7_`3Հ wYnsнDZ,WwX(kWnWL+mܹ{m2v 67/#`K0wT4/oI,,7ݿI):ZY b];5J3xsr|z'CS+/&;`%7IcU/L”/VPJ+m/gW '2h2 Uu\*V}ݭ14@=vI]& &mBtk=42U !(]9 qFj: p:aͰ X8l iop3T XU, '/y9Un^F5,- &z& _Lo3Fϓf)IheI&˃XVweEQABLuG&Z7LAR(Roc8#U 9I$I&ɫ{+JRC8=2ExZa(V8TGWlT^P1سWe]gWZ\ 0xԑqP_~fnj(֠X%'sh>!\H"5}r88EZ7hAKE4M59M"Maس$:C_VAQ*Ԓ?@Df]R[fpc9X#QS?>FSY^f낙A(ZOESjNm M*.$;mc3pC<㷞Y2'j֖$U$(5qPMgƹ'(Zˋ4*eP׈kWT<ϣ*,&d7;}C<0)N1x N㸲,8rA{XX 7f֖0˘EziFRtpь2*r=Aը8e[}m, 7+.qz?w K 3,LWPN< JmAIgt%94 $%23GZEfY%?BvC&p FKbU[om/Ge)\4irgB]QǙ!60]/dgcxa~H+j uS#d'F ?>EǮ&q!Jɻ75WlTS1S-mzfOЌw]kJ2T(v>3U Et' 23>g)*huK44__3i2#akңL.wt_KO[c UyB?W](Ke&SSДA q{pع\X[]坷ƪN6HB2G2閬ddOKQsϑ.*q|tHFUu"oȸ7WQ#,^ej+˓0m"qo?}#KyU)H i9ynqX%S&~RXD6i1޾E)C&$Y#ӽ9>^-)FmH cj]_ꖬRLcBS_ 6mo}BFQĠ^fI8TأKG@E`˃chy֙x.>O>G5-iyAwP;,*J2޽͖I>3׾-+0O%)q')a&Q*3)چ~*8"C)pRT#6W4C/`1OcCވɣ>$$14(#UA!qF`H@DQ Fw%煊h(؊B)P(*Fe)i`Ϯ#Eg*X3異0Je`D=ӧX3kV*ٗPT4U[F >s8Ny{̲kL7x#R=`x.ɷL2X$Xpμ?#:z@6<­61MCMeER ai|B4d`GC&]P+׿qGmZ%nV m(PE,om19x(U_T4_ '/UB*/m2r8,տ{/s ]gYcbY&%G)"C"o0;W&~ w]ƇU[&.`rp!T221V(w}[BS2t8opпBS ^F'ϼh1&Eg%|VAwOXU7~fx1ߨ&C4"XYߥ^MM&Ҕ^2qM}rwY 73h疬"aq"hoc5z I0Hѓ &'=`D88c7ĚY_W=<9{ݸ F/dR1uAPF_]=njU"7/9&4Pq- E3˹6K\ v"4L? NI$SUbYhy1 ;~d XxOj T 12Wq0zl*#f h}TL M -"y ͋k),]}0$3^kaUIq4sIޕ Bwהc)fsmjPŵQXyP-l]yp&8}&?"W.?L+TaE"n,-mPF EfuNpl"1kWPYUn(?=ڳ-3+oă481N&dV&'k̗ol9-KXpxߞ1VZqw+_n -/x˹5׌Ϲ]3~#Vէl͑7g?J Rc\oߥ^ME>g ta.js8&Qo_&s+KnA-J?m %Y,ܗ"Va ¶s͟;QE^Vj ,PPCwe" })NL#,vp&C!RTE' P{3Wp~i>NRԒZP9olk`*? ^n&y%݊>$4A4nF3;/Ͳ$v'+]Rsӽ{V>U|lM2129~U_om~tZ'+.)J!6S(ę[GQuM*iw6y&YF4v[f1O7(¬&JR:[Py >ƞY#w(`ͬICg9L6M¸P!L~U>+dt P1RSU W&^ȓ \_C"|ƍ ,Ʈ.`6^k g&VMTgiL(iu!Aj N`{{(PMݲ-oq#z}#۹K : ()UbDIPR&8; ĿKuE-${x~(YU2Bi'h&LNb$|2:%WdaDp<4=!19iMܥwP4+g8:ZB>b'B?ǘYtIY:c+! *zLWU4:뿊^l01qPduf [퀁/m'Uۍ.3I+)qwDԖ{#NCw.3Wp&7Cac;a bƤ"DQ*WǬ/3ڹ3w/2Yy,B4 iP4Cd*u[>1J/W+h|Q^ 1aΖ(_*¼Kn5BM! l1g2_)JX [R43ր3FQ^q*)M>^I?9^l L QCO;UԖ 4VB7 ~|i.BèY[;~P3Gh+*| BIJ٢bIɏ?fEKdQ8QMQҌI:>?C+)~啽NPO9޸G;+1aXշ;x 4ä\BBh?B-axC_!N3+;=s{/?e|)/KeGE¼/[Bx95O+_/O$-icɨC!@(!b3?PLU1fnQ4]n<,G2aeN~ZRfU(|vE2OEQq"~wKmBOW2?F5]y5*0 B- ӧ(UUQ҄pc`?S,ѵQ61J-h6)D!zdG!QC( )kb%xG5 0!K3?xrpÞ]gs$.d &MBFmF;wl)~#` 6|I6cqfzkw;Ô՚.V^1 R* &NnwP{sdW 9vVK<7nH8WMmWϞν?Jͤ֯O}Ͼ_u{&1ھE~OP"կw8A\+,DYLid{RWEC,ݸD_b1x54N:`1+h&E('\scD̘Zu-?=-CnJS1k'ħ=8Q0DƟRݗS-j΅³(Wt=٩oØ .̂'|bT"EwB 4׈N7Zhs?T&ģ6D̕~?uMF@^ƪ/ R_.p)ﱠtm"ofQ q'Ws6~dQ1X"|/# .@]\~_Ht򕷘 _ z㈶Uc}nZbh-3*\=4AO04eRQX~y.KfYgtQMkf BCI/tղU֋p^obMՖDE#bM^Z/ͨ=sģdIBPB39٠x(0iN'ÈGse$IDEA{"NJsBP.G cfLpZ95|Ng`lJ5Sg vFpA&>۔׿\]|(Ǐ)3tG^RqudL?aS%4%˳//}_vp 6 tUAuΦDi{M&Tb WWP3mc2390. 5KzP|.f~?Mae 0d3 A$Hic ֮lΒ ܵsJ}=Ut^]z%{W-&%9T}Y_>YƽG|>e2#K|+<eʊOSBLyc.c:}Ԥ- >(Eǂv*E[e(4Y_AM2ajAw/ NH Y)ޤT%zaasmC8tr^l]E1\b s]1>u8O\;\rO9hU`gq:e3 ^9^=o>/|K-P-Ժvp ַm /Pq Kc*8BT:z}<-h)XlDIF)7 U#<[[awObMZHQ{(wA7g6m)'}ɴ-`@\-^n K]fll4r(1ڽxؐA NJL6I8I~yO]o Ȩ6h`'(`,פWS("g:e[] _a&$q@Uiiؕ8D]|E`im*ЪY_'I1_E(B)y:aBiz!y$3)Kr̰Ak$. .ϞD?n>Ẁ|r\cffU)G+(GDP*/MzQjX6gc k5L4Ȳ\QdBc}La(P*Xu%T1 URqL\EYI;77LJ~H9!9,}I$(Q{mDNyQ,5cTMm7$y*& tcSع/ufUyQŬ- Kb~֓(~ c-:(G vMP C6&Zbsw@}nS$bFeUF&Gy/AUk3X[gm"k_=##rm'@Q4bgUrsnHþ&Ssneff*sP"bTP[`)w&b<~*V1#L ;\Qظ0K D4&jmfL%"B {1 Y5g_~Up|t(~_~e>=*0KCͪ„ 5^Uh5r[(ӧ |e]I_ﱦЏ|l(9R+%a%_845!e"a$!yVcE48Z.4Lg@+V g!7FI?"1KO=.E2y74cz~{\vb@DcUn3޻][i'1\:*~E2Y"J@٪34b:L`v3+J@}r|2.̌B*u_;LD=ί.T \U" JKecAxpJmTLH$`i(:x$^w񦜙]jNa1NRàai^PBKk7xGO 4,֘$F,:dYB9~LRPn}F}B")$ƞ]'8}\% =q\#ο^g dyB닚:eCFwыu!-NP zA-,R%΄ dv ൶$Pcw!B-W,cͬ1ھEы@g¶,;(zJftq*mLg~ia P*:j9cV]R]ٝS2V} D*FD#EUyZ`@:vyar^n\f)"p]Tz4 7_>>DBpM8Ƌ2%BE &c/4(,#cBGapVFXb bXFd51^Ek: N}̸]_Fƌ&1iS(Y][gN' 7H?1ٛdt+*ۧ6O0\&L-e%QaZKˌ&s<'Gl \MQ"@ *p' M3_kũ@EIc(,Uiɋ@r&5{Ub1zY*d"gģ]ª/Ѭ5P[(3jzLCيW)LX-2z.۸;I(}P4!qќ'8@/S5f) Ozx'DSu 76Hr{0ACpiZ:ލ ,Bi4af$hSMKnW (׫Ռ`m.XFpH2Iad$ҕ8e#x'GǠD4HE7εZGapJY^i2MddbDRfdNC½!Yՠ04]yPgs1kߑ !9%8<'єkg,K1*sZS~0YfwpĪcAD{#`ӈb٧.}E^3p5CQYJ?5/Hftg_)F993Wpn#kgIC `hS(uCguNNڸF;4gmLү;=$bwpq ͐p%%KE^l?cr~oU4 I"Ff\P`o?Er)~|l*K$ͦ7ʫg\U"Ŷm$y"!T{$G#Q!T2i'0Mr, *Jq>(TU3Pp]._^+~DT0 9{K>]V+Mee6<ۇ6_bC6bN;1d -MXۯnfkqHP)Y^Z>,vEϠ+,^hQt aEL4 CZp0 &hSNQ2P 3(A S̏ޥw@aDmHa1JK!=ll`a͟cnQ]#1@}IF5ƲTz}Yѹ=ۡ)NBm/>(^cSU 80= K(=[Q +¦F4ʳ-ƻ^2Dfu$7/0#NS,Z8x^y1~eA/4!:#g* &pt)3ڹE?&}bQjbVh< 7s$d,KISەiSoD:O3NBW1(ߚA+Upkإ"> XtŬ,b^X$'܅@VR߰ELZvY[<yt tB";2רЬWhT,5e|ԘC23p HbIrGi@P6T4,a5/_Ǭ.Uo٧.ZPT,% ')d8k*ZSCy֡RU^L[:cղ/y6,)jɲ~T$dbSp8WQsPzt ŶXo]G&nsX~m1"_%WNp%g59bm}|S9I$qLI>Z 73Yk1c̤RkKoxCbVB"̥3 HS9^dOx..М[du:7_q>JU,ˢP*Q)>͕8xf.PVh67^Fsv}H# 6;`F1(D裏04He 3%]@ureFYd1o0\^2SD4.ɏF#~~sNOOXei@޻i w{:%+64Ka=4x{dQj u?`B2 ?!/l݉Mh`d0 ^ !(*nbVl~YèH3{4^,6:hYF~e:`ꊜ 3سP5%yU%5H''Om"z4`G{Q+-6έ0T EҔS z(czфVMSƝ;cw~v':|v/&iP[/W0 :O7>'ǧP:5W9+DFDCX5~d='<:cخ5a W DQW j*vo6V}᳟OgoRBHHC=lCHhaVKK;U?A-ܥwU (yaPUCni m W {쨆ZXw<\:efrpXE,CI*hdf{6ɕԓ0(;! LckM:Q%$)_Z,WM)wBzBztK;"$.IQ\ygT7HF&\H[Fr,TQ둑ο%86_f> FQQ0O֕WJFH(bEeݼLġOTi,U2y:c%]&*s35*/_ҥKՏ>E޾7č ޸7~o|o}!o_e%0LnՄ,a\bFs+`̽kF4l=G7LV\|=4 T5U]j 5WRe2~V~fQ^44i8e";W->.O=dck՛ c6CwkrB gv] u?#ыe{}'=iLw֧UTPtҴf-) m94]'2ajYEI9!iddƈ~1\!rάV2fuhpxF}rLqfϾ维ۂ!vQ6:&TfV!Th<-n%aڣX4hFG[ 7hЌ0e_`srk1Kk뜜g*j*Z.N62*s&V`<9e9:P/3 &|QUhirS-LqkqjFfHNL)1P+ST4p3Sƞ̛f O`\m~T.9y۾*J/wͭM#^R*@_ DzNqv(}DzL!>jzѠ5Lk2652#ڭ6suhvKN'?3fH^f|C?banaClP7pfe@}yyd3={u Mj3nC x=z `e>q ޺xSy+,L2 U˓ M/>d ^3 I,s[E{ di%>%JJKdXe]Y~%r'2Z$J^h\YcͬL.K" >ATp|҆<32V†/ #6IѮ-J{<W^ڜ#z8I2-I,Mɲ ʹM!@ff]6N!NT$wu\|2jv qtAyf D*DlW 9TRY>^\\0mz8hĞj Y]hx+I!+ FAjT z 0Wϝ,#MS._LcVf΅CqE+M&<~LUB۞za^-^`7,yz,Pp{kYi+ s̯ETQ/ՉwZC@ Ob_)2\)T|mQP8+^e)? R( < ?"v1(&( hP$q &dwD3&DuM`)hy!SzA:xcB *1U_5tT!7GU(1 64)S 0'XRG׵<_k9PUMn.+/Z:z (iw( )WSyG)ﭭK۝0BbeM)mJQkIF1I>ʽ.[ۺerA=ooQ8ls, ]sLL|`钴Ҫ"ptcXG_ES]\\ƍ~K)(*N[aˍոcj(L=PG5ݩê-x$<R!@Q4vGtUzBy R-Sb %6bEJan-g6)_:Fixoo=g3(?cܗgT"Ƙƌwna~) &sbͥ0]l86dâ/𝷩gBťU Wަ\y9XaY+Frqu캌*2jIi 4zjLy4}ӇxA7& RrxaeJG޿YՠaO <TmeiY[™IM \ͺߋhH8LZJ}+38xB[4 0d:}ˏ2FaJhR?e\aj+ pȮhlͬktFbUJ7I'Ov\?yS(x35{St*Kh&zq[{{ sUT1T!s*K{U_;K?s>|Cw,Ym(:p:FE/_~Ke/NsNd`R(&ɠ_Nts}F> S浇oEAF5]"h";~TYSNvdK?hczEMVyI)֧ pͭh-%왵Bo=(\8S6O:$٥UJbT` 7yg 7j&pAhF&^JcwY_D0 u|mĽ}2I"rZB[tpnft ]SN$e4 Fg{7d~2]Iu*ҹP|+f`.i=X[>Fy1T Ѩ-37U EsQ)PT9vqܳa7ex^j.% ;{(CyH/xsvoHe;A@f,izb/uj 6~LMJN1kK]Ays"lA0љOح xP9)$tux/2KHG]Կw6FeqV^]It0nBQd>Vm .1޿7UojJ(h] !i{S٫؋.!6e%2T)X25T35ÞYǞhVm G?#Mb1DSzW?F.UyijKs֌T=voe{k ѸwɲF`?g'u|&g=^|fh (*;*CU-TVXjFQX(B"^$sg֛"hxrn%{;Cz ZբR.3|FU'Ϻh~N))E QD1Y9NQO6d褗;'mJsa<y0eEv=9':'x.fsr=f6q>wJ7qQ~{f_ڣ/J>ɵ RB)K}܅ex^0Ψ2g/ʕ}ojځЋU/@Pqd%>a{fxԒ[%dQOzm< \ve{h䱷1ngؾ/[yT>gf/X67؛Y Qɭ[x!ng߲#YH-U'wzpF|Qa#(}/(Y 4?GKSd 5 ~bT^Fyn:v8n .lR,8g>a22L2*JJexA)KE4fs>U5@/61襦$T)ϓ &G])S%.Г|cy1C?eJT.J/U4B4xV>@1l>C˿8Sr~OVi8$ 95sL^Y j,#|u}yz$ݩZ(]["@V4ahw=D% )2LW5W{+]ʽʡo!̖u:C?ŋFV 0Xc:8R&2r8,{!~ ۝^DKիU=,54z!75+ME^ў0ʫܥAsЋhcJ:btD8龴I*OY־>\[$+3r^y؋hb^k\5U_$#TŽY7H" DC +E٫{=ÿ:FY2A &gn1޽b:xmW-/ ^D%RZ]pm1'R"Gs3lFy&϶{w1,BWtFO! Y8&.,=XfsMQ[cb,RBmŒgܾ)dIH'l27/W5NY# 8ϒjke*j:SУX|duSV1:Q~7nԤ!a-mi3WYp!g~SSs1BB}$YKOmS: *-{8ɈSylAW ϳNYf"F{wЬRޚ$)EQp -]$,1.7C/6!dم$0xS*׿" E+OWem6ry3@ Bm*F2˘EFuT5H KbҾS"<@/FH C^cw6SFQ4Il2JW}Y+Dao9YA>!fOZ"];ސf nINe(:V]j!^WBrM;j^q }.fm=Zx'׿%玚I {ԭD(%yr]z@ ]>[./JaddSkxR3l!B5G6YvdSB$fg`p殡hND 6=A$*51jPpLFAE1 hXڂ]9=n G7&m1Ltj2*h-23?O>[T[Ĩf*}%Aメޛ$wC0cϯ0c[SԸO}£]_to:\eqg(31]$'dtEM9ϼ4bJ}ؕtKǰ2 Bd1qh)ݻt,xG_(z6\o jHrߓmT%N\svʹNjIƌLVT#T+߸w3Llh~QQD1_1.+jj˘ec!aBFi86lI0ESaɊjˠ]?%3/tq:d0`qƣ#A tcj ͢ZQ n ,W ڣvq #\m,E ,~]1)*ǃhR'MKSh3BM"^ܠT.4BdYF Bk}&aqp2+B(q'lc "k%<㽻$T |8\\X;ڳWbSQ]kl:fJ0bC3L<CF2Nc .ۍi&x>&?N!H&$xpqЏ|]tIک:F'!!dD6aeu@NG >Þfϭ~{tpU UBbI\G3봺*a\GhFɜŵ.a҉Ƥ 2IJ% Ph]blcӜ&GTu~suz`f(bͥD hN 19Ⱦn8\FvqmaFy|IbmM|_h˾[D^BTܴiӓ]:6).,۶<+yՕl@C"ϣ}G(ͯ[(oOY/n5'񄦥>9lLz,_ `hیGzop8}7.eQ@4}')nyEraeXJԖ_qm4(g_yOޥM|U+Ɉ4AIWt)x9k q+$G3Jd S${'SK3dq q\ۃ?;<dۥ7:X~ٯ6޽t`_;OT6F t4<)Vs?ӟ/7you-19lɹd&l2+tpwt0JR(ރ?Es+Vޟ+,) ,dX6Ql 7!h.( ?!(_~{[>,xO)k!o]|T{7:nT>sJĨvJLc #(W5 g?uoQ\YLB [*b*M7ހcRJevC)>SW0>BI-,#.XDO):S&hm!)A{[LfXZsfZhV)qޯ L; 7$* iNq ͭ OK`0(<{8L*jS8=cvV} c$8P ޛ >R%&T .cge'! a??IӔrЕs8樓CizNzbҗ yI"xG>Z2^𵺓$1J2mTqF/%<ɨz3|#/0xxxJpXG5!ֱԔ)U1l).L[畢5Ug{W޿׵G1Q 15W3N8E П$m,vOO\~g?6Cr{E3Мק*&+Zaw{ rS۾%1|pj ZpV1gъLz-6jc}T|N;_ǯZru}:TQlc"NcPEF<8jn㒌=Kt`rݭ[.]aa3,^ 4_u`j$`z~^WqB&fY1V}9aqUk(%h &[%<ƻwmNG" O?@UWHZ5b{{+f˔+eg8UntR^NK':4*w)#@5LZȲ 1'>рA'it䚤?ES$ԕ .!clIK],WY]=w{S՛wGw_gEEwkC\< h&Qg!2tוj{e\%+ X-+ ˨Vm蘋^Ksg;It2ft|+gك|y|~6eλ|[_D5ެܺ^K־NtAp P5%2|,j<~(]U(ISUHٲK}Fb]BFW˿AglRi|oh&YURu?#K#JjE[A4w+/ 0 [/ڻdirakҏRնup!I*Ӑv[_q,]΃<4E/% d 441JMܥp5x$.Xdx.0,~kFeEӱ?F=KXeҘYei&k p'HP2ʋ37UE EiSP|췶$ 4X.Zq޲yJ2L'F)DFƸjէ4?A{ S~1csOs B~ _% '.+ni `/{;*ƹ+S:QE4*V4nIlx)a%*]a5$yrl6*7xW΍wI4n׾ڥ;A:ąc!yMK(ê.0H&Ȍن4&LԐ.J!1A~*KJXP{)fA~<u'1~$OA,e&U ۍQ$d|" NO7s"5&Iڛ8%yfm,$w.̖?;~JI$ْOI1{ysYk5zyDfҫ -iVMxYh&VcgyaՀT%{#kD A|;ݭb/a_3J< lGS6_ F0kK2ؐD/זqQCtN;ޠ-BZG~QH3cB 2ޯ:AD9%͜rIQJf !ؙ6bsuITuT ڻ(P\{n4 eEq0ix<] >.]f)YZ.UĬ{wn!T]ru :CױƓ1j[}aԞri㘁/-)*c1q0A`z& co P_yL75PSo:Ym۠S%Vꏨ7P I(^`HCjxғIU$`wE3< %=^sDQFwO#R\S}xQj2\p@Ptg%yFsGQfȟo3<_o|\_į Vm/GD/QBή2"I>%M0cC0s$&NdrnL#_ dLQ SX~]R8ɦSSX2Z ESs%Dk DzY P9~JICYÙ=sg BBK/,! F$-gޖ>EFbMbX.zydғ_Pl7՝2A/?…_UWɣuW;7XE]ypOH7$r-$|x #kK C<Ooٔo mx2snePÙU$M" 񆄽TDp={\&߾CRF X3~'z i* Ȃ^HbQ ݭ1z[iƕo9:<_C1tܺ6C@ ?FpP/}[} 9ot#jo%G3J+W]q^@DtIs~w_u6΁Q,sCXUUDQT ēk*ڕytsl J&܍E\ILGd)ntG-B4UPp5{GONP7:^Y09xHog ~=ⷶ!g{^Z4, yg$LHFUj̙0P #M9Moi*oQlH[]Ss Y#1[Ŭ-RX~-O3,Ϝx + nAC6F0l <22&YaՖ ̚f6ރfY~uLFB9?'Aw.YE8 /2 btL!S&Tv%WS ]fR5e֖h?}&[ Y2MRfAw_&D g;RTTlKzՇɆ$X)!=/au*ptxHFLμ+5~~&'RW i渻~|+$҉„};(~4x: \yzB7BQ5 +N?>]"#6v2"1/ L$#L}_7Ej(#9uDpЏҗ7{#>yr*[+%j4{q&a'a/4%f(Qdl6{4*7㇓ U@)rɈ ATUVso. %0mt@w#ĈOnj,sX)ʧ_UV7n eoE>Sjl骕މT`4>)FZ=d°{lQS0fl ԙ3^e-ʲ0h+߾GԋXJ:ϪYO!@WLy4FqN/I#E4ʧ_%l6W)|j+2Kww=nܼk/wc$?:;u6E(&4C24ۿ_}n>4^~?rk_?Hv{4Q'cVju^/vqwCG AZ%J15⚂$SeHE0xĘy +Fh~?HlCiئg!ϫuTϽyݦ&'? w9~hov}r4CU:9hگ4)I u =XĢI7ynyB#{ \s36 Й(H#wh<4Rt yV.s$RB/c8 JE^[N+#$kw#uyT2:13}T5] 3'_RgD+ZA oLSOVͧOoCe|0*综@o*$CΝ_ L .qޝ y0oR{ >Kj3"䯾A44:w8ձ*;)L_U&oCa"<&l ;A<dG2r7o /t âx)z>ŬL lc0EBHZ./N0$zB (Ï2Mͱ"Uu^z%.]ٳg*g_s}M:E$лa)=wքNK~%Ib5Cm6; ,2T1u3Չuf)F9]krz v vm4肦Lj 1 WԺRA׫ژz+!HT%k,̄ LƤ蘜0uxȠ&i0 ;0fff?sZn2װXm&#Gh0z"x$c!u|"sScl{ OnCBk&kإso Ь2WdAKQn4AV4葆db?Ĩotv8QV~=瘕IM⨻ xZΙI=S^%ʁeB.ىr.AsjBs`Ny3GmGIVakځ@ܤKT 4Eȣ0{ ޜ/r@3_u˥zu V8Km:ĭ nS><M[t~@)^Ɲh;RedI2Lqdܘ$}g8')L;P-"%qoʗdiJiYd0X MOD@2("YJ^!1i8~{ݾ:x}'J:r*K'{x+7n)۩*Xu._Jg}'OrY#j,.|@1) BDrnOr$h!4֎|vzLlDt?%7 U$YWz;ukYo􂔦t#k$TK69HFwbD}0]Ý>Ga`oKX373{ Bcbo8 k*T_o`RvW}%%WKH &$ Swu09t{GXT)7j0yZ7 =[2Eno/P{Jha1Kb7~2B~5${,K)X:%'IDwF+=ނm2D {F%5VM6VuJI=jE (ed?Qɮ&(z c\5$ #&v6`zk4fAw.~Q)[VIr[ŗpH~LH#oY8P/]`q\oC[5lg)??:;C̈́!(SI̼M8orBO]K>qM$dI#g]40}^A D\iY ["볿CL83 ߯Ш hagWO2f%;1΋o.JAGfzͿ~5773<[osiE%_#Y3]E30 5 ]iWZ-~Diy  rGޠ0uh} BUFBrxB!\KՉöp Y Q-Jy4BPWkaW` @AZ)bύԕdS4M=.eJ1;M5?tYe+JUb1du8Ob/T6UBZ&2u\miG"<-u4=W!K,PPo:U9mS>l-qkMt88a E0m;#(!I%!ig.af(L(⯈{;οu6GFfvS[.BpbHr@!4LC?019AH ? E܉Fy4`w, /)1|Qax8Dw]M굕`P>Oy9Yl 3 Uqkd:גL2 fЮz7sS֝P]0DwC*gMʢfwI.s9RP\Yܥ0s9p{y^'z?GjW&YtU,J[s=8;ݘvHb3J["WI/|"Ge>I>{j5hΗ]۪} jwHQ}Eq ><7~Ji9Cݦv{J*d?MJ/~L1csfqo7ddȼ5ڧ6?eT@Y͐TJtM g~!^ޤp2b݋YًЅFՙ$ji:&9=a'lvl Sud7wI.=:ۥwCUkiTγSH`)UŠSwBɊdVgmSvnH-:A38)֮uwˀ$xULB-KaV&(L_ȥTϿʕ]}1,x$5HXm 5.rֻDy$25N;?Ь:EwJL/~4iDk]-+}"X90-vVS^=7t_S=m.&H#Oq~wa7NP˫X?p DwtrF;(xnd6 2FJ{ѭb1ѽ> o: QeG|/ӿk?B(u'J-trD%[}i_Bu- ojG1;ϿYwkQ;j[n4wIҾM ۿ@3*_9J 0V2? Eb!g4ŹgIEX^}EI'jx\i40L_l/")\Dtn8x9([A\vtnK+3h]1F$Ѻ4ݯĩNhbDW۵ 9Ӷ ;"g-RcK$ot$>`qum aُxy=jJ$V CpDA³Lhdi5\5M%{_GTNwdʺH$SmmC(Ǒ bֵ(=fZwsꗾ58Xuʙo}9WN:[~{>ǗM XV'4T}TϿ~]haE<<R=t H2bG˿}e?LoPa6W}푉}+P%ng t!0M'=лϿoVҠG̷, ^r "`HV^vM^N;:U~taU>ʈ%P5ڄ?,S<,m/i~N[ɠylC Pe /u2ۼY]zS9$*ԟg$2FNPa"y%4pǬ#pMS|ɣ5ZD&!DMuG2Va:{^bsl)Q4<;umߺ Ftd$[?AKQ9ݻ# {NaJtȒHqDb_" wB!Q0s,Cg|Br۴5Js#Q40l޶R4jmh$h6̐8GOiCe4#C/P7(DrTNC-FWل E#H2WÚp1& ʫqՋoaڷޥ0}aD-}Nϩ]| a,6B3SS LBb psZm- 8p'4e4MUaz?2MFVZA_-,VeKYWTAXA0NeH/5=Ve޽V]1 5KB% hlAՕD^"ʔ^1 \[nF.Ye8Z}&zSgGg%lQFs֝GHJⵔC\V2&΢?i4&HIۺҒ3uh f;&i'~LWmݍig>/??%$fYP[X,/I\AAɷG\%[^ԩ18`'r#}TsHL!"|>U ؾLlE-L!3նOPc9|rUzXOӄФIY8uOM.Qw+<1 Jڣ:XLuO16>AkA.Fd_ naE Źgp'hvu4_W6x;0C.rs͢"f%o/74/7,@a=7~2XJph9t}B{ʔ))yS]p An\v6" qo5*qo,YL#Gu`= (F  l.v3 H߰ JN+J)%!suUϓoTS. $RTY6Ì33j.gqId|mP4u$ۼn8F~=v@$ ͙n<;HR 7WT1ո,bcj;{;Orh=Z)CxmS,1ubcQK3,r}nLΐ L34KQ!lR)saZ  NHMC7H*Y*S,lo,a2(MWT´*8'1KV.b%K|ڹ?ew 5Gyt> j",*@&H1CӄBҮ\Ѷ?S/X)t6,bfOZ+zi8'I{Jq\GM# tOeASqj$ ֮c7Q|,7nEibUhix?uG)C gR2190z4 2CwՁ[c1g,nź:VM㧰dI0Ұya.-N9v.oby&{^{ ,ekFQ+Œv`~LizQFK j$ao-rl, T(I/ ôve9k"傁3vNpJnMq~J+O3I~(D7X"K.D3 30Gk+ʔD?)oAUo"lLMNaW8Q]Or=e[BװSnE&;ĽE@c(JuMG`BzHf-J J5TmV3-*p'`缨LS;K!lzJ2#Z,Zh 7~Nc,%]RQm#n"Ӕ_fVep&N"t`XYj!K0c{+Tfg6nD sp&{ȨGyь 3Qlbid{S@u0+;9)9a':9,]?RE$6Q363OѠIo .P: VyM7iDZfN,:ڊFɪEOY~}QB)Mߧ[8`GH*@{ҠL#dax0jXɄְGwCE i7/[n hZtkHI-MWMCM'YW. Aާa?U/ȸSJ&I e=Wy9/R`>n g$ F+wL'joLC;w~Iߣx)w'h<_9G1q?:s c{NY?TEbjh=6Dv?TH`YE)_5EZ0sA־yj2^PXGtv2 %~z7Pq7"()_sLAq]I^&n.cP=mTeyQn$D!k_MF({ w4D,*TimsʙoѼ7Oȅ_=ʓ+ kdAkH> m,C񋶮E?#;TϿ0nw=nR>_ qʗjf:Y"7ЄmJBH^xcT 0zP|^ G%m)eiR_P=}ȣ?ae`hHk.cm~KþR12, ZTξ6eRGrDe䰡,C%[Ji맸gF`>+_P Op"Baܽs??wxseҹȌxR-굯UTlFF?NG4Ѿ {,$iZO<˖yNOi6\u@e4w}1udo`wɗR=U^8Sg֮S8vwAR6udҽ7OUyG%0dHIS<:IY,O,R֑+Ƶ_T/H̷0صi:u0:7}$ZTJea!c3XG8^́16],]/ 4=>80:wC/Ԏ FC͎ҹta Y R/)e o>$#:;uFptt>0}Wz2crT_IX,St>b4s G"\ k5!VLt|t8J`'qi8"TNBGtG›p+ng4-|п&IiyIj7S~W?vhƪNcU/H־(sj]v;aX~zNbl5 9>*o^H{0R`8&40rpW׸ р jo/(lݥvpAK4BQ)mTv%upl/R<4ɠ`+*^?dҹ.F͹<#a_C`2KWoTϿqe$T:7<X"2om83*cL@6-Ǒ0Bl/cUgT&|eҼ#ߨ׶V.Q3 V0la$6Y#h0U^<S?]_㑰/kL~&l1XNߣwH<X^m$b&=$tySJdo~Y>AX./*Dhc'r:~FhEѺ1XkU[!͑Cò۸I+TH#?oqKzj  /HДPCW[8vg ͫ?TDu_x@bhUH*k n{ iTG<"k;L\Aq}&tܩst?0}+5&+,@ r΃Ƈ|&p8AcsN FJa!pLcz>!U֍BART/|yM :wPxV[T6m--] ob:^:r$p4A(/e$鋏 xM{*pJ)|$zeiLB.| &^iL_{{y;ʃ{iAtVAkgq%N=U1wMe{$&iC`幧1kh]'Gnpo{lkQ3vx5 bhܥf݋t\:TJSޮ >'`&aI.:BSVo6cKUI F;b`UF a~gDco6Mac?A G\PR6qr+Vf)Qw;GWFIT o_8E:[lE'\&[Q> HI1S<%翃Qgu)zWQr3&h?ࣂbK"e]S+*٣!Wڥ2^D#LBU:~5(::P|0=I#,,,kt=HFZY]3p<~ogl^-} #ҧD-*'_z$Q^qv8 c!mfڣHpΑwRv2ܢ|rʩI`IP=Nosqۡ|uE~w4;cJJjr (Hw5PCEezUa%}K 8MG)GfՏMP?YطuN^V͟ᔫSZΝdѹKn)TSʤ+;`vi]?vu/}36Qj]H!A*j̟YӇlA y>'Gm=O47vCG Ar9!Df Qg,G#W6WЄ12eHCέQ9Ot♑؉{z~-esBo2Kɂn2r%""j[ Ύ B Ja>|]Cݢy凘#6:j& 6L2j rI#/>sQVqL^? |YKHKUS& Xu#I,(JFnV]?Jz DJܥ2K0cO=AEj,FL2XJ\Aw f.!~G'_@в\۸ F:AkA.Won-'Mevz3S3tAfXAAs~ ʰt5Y܋hvz @Z2K~3vg|>+b7a']SYxm}3;>#ݘ^m\(r,vRZF\,5脂BAQY:J5abZQofP:´sCH =W%RV7afxq)0Q V m_M/ECkӼ7hBۼ8 Yl=?:C ~bucp*bdl1SWʄM% 8LBAgۛ]&Թ}cV/ToA@׷;%j`LSK ԁ ,}0C*!!(Z)Uau]A݇YйSMaҁૂ})SX)g8!Ȳ B 眘ܹs "mAKZӭ"nxVSW? ưb( 5no(75K u0VbuN2IgX'/N{&;éV K$T@ a*ȌP[SUtõ@ Ȃ6 rooLs)ͽfX$dxRw 銉i޺+ ]hLLʎ@JQ\tiߠ4졠[2_l_%eFSgH.asM\!jo;}~b` t6XnY!ڼaZ4s$nfi@.X:|mC\%!e^oQg0IM:qoWq>XPmjO] L?c~qe)k?":OJVBg|;bR6ٹG4U- `͋cc_[ĝ lG`l+zsw.}x' :@6qwg2XF .í[d"Lw28eۏi8ABX0vuHzdI.J5ؾ~V}L ?wo~''Nj8^4Tz; VR9"Yn"jbVuEl ȭrԐWڡ0,%mrȨuhPfSv,ܺy˿d{{9 ,*(Hih:h-6n_!̲tGw>lª\Z_{5 2K,{xQ{gh]i ?.a:v[)cư/b'-|UU7T{9T=m-_G/LP<,I, Z;6T~-JA:2x$ԁ)CZAG @ZN+ILBлaR:sTN:´ k8O0;SiT| :8Q#@@6RE7K 1lBb5,n5Ws=`=2SLP4Sffyݭ.o%l-H頥+ UC&qЇ sc.YwJT7.?4M;8[g{lwViʗ?Yy(Z\z0 ]ӈ2eO&4^Znkf1 medP{ȄtRXUؠjANfHۣp)bf/! 'p,֑iJosykS:W٢1Н2kaZE>k4)QTgɑiq?UԋS/ѻY.V-^ ȥp=6G2vMTr0hSǬL`8eR`+6HhYIUPILf.3IENDB`quickroute-linux-upstream-2.5/QuickRoute.UI/Graphics/QuickRoute icon.psd000066400000000000000000006052311446222606700264510ustar00rootroot000000000000008BPS@@I8BIM8BIM%\/{gdպ8BIM$9b adobe:docid:photoshop:fdd395e5-db41-11dc-9519-e92523cd9272 uuid:B31C128E2735DD11B3BADDAA85DDE585 1 960000/10000 960000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;8C483943C4CA9FCE4B3D2B59FF171341 2008-06-08T08:56:35+02:00 Adobe Photoshop CS3 Windows 2008-04-25T15:06:40+02:00 2008-06-08T08:56:35+02:00 -1 64 64 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;0229477653ECECB28E598A473B5C4787 application/vnd.adobe.photoshop 3 8BIM``8BIM&?8BIM Transparency8BIM Transparency8BIMd8BIM5d8BIM8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM0 8BIM-8BIM@@8BIM8BIMS@@QuickRoute icon@@nullboundsObjcRct1Top longLeftlongBtomlong@Rghtlong@slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlong@Rghtlong@urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM8BIM 8BIM @@0JFIFHH Adobe_CMAdobed            @@"?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?TsXִIqqZչ:(Ť~s#L˖8g3Q̙#r:G5r4NO=e;Wy2&ܨnSm{c_PGﰒOmg[Ì3寎\QqY-Z۞+`'NDOOP͝>q\%۷9sdӑKs~k?(DV\32q8C,ߝC/?xkH DؐGPY_ު> {G[SMԙs9w]},6dVN ȹCH8NpQ#Փ0Cgk8#7լFtL{ώ[CjTAa ƫX 6:74@̭냻õt);||6n~|xs?XNJ)WeXEzo$=S]jYJ\>/2薋GT+ke>e-p#i\%N`qkxo?bVOY6d=D72FoW9R&y\&D?׏O{ ]J~m9N"ɚتz}"Zmx.e2\Ypv6K}c0 p?3pPk쥗Ɔs\?:TC$R3Te9【d:p_X6W2+5*]5f,ii?c, QCA)aef|6{~zosgp8L_rcgT~?v>ά/ m1uKFwҲqNW-80vHOf]TI%50[*QW&R.2V~H4Fƞ#/BgLBTIm̐Y}aoLw&X:}M^NM> Z_k]Y:5k # ˌ*vwφX2'#9;{){|[g۳3?.֮M"=@[4qFURR8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i''Adobe Photoshop CS3 Windows2008:06:08 08:56:35@@&(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlongH:AFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslongH:ALCntlong8BIMRoll8BIMmfri8BIMnff333YvffD#3333|ffffᙙh333ffxL@@8BIMnorm+( Background8BIMluni Background8BIMlnsrbgnd8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp @7T{8BIMnorm (Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp @7y8BIMnorm (Layer 28BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp908BIMnorm*D(Q for document icon8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluni,Q for document icon8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@&=p @0\(<7Y8BIMnorm*+(Q copy 38BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@YGradObjc GradientGrdnNm TEXTBlue, Red, YellowGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub@F) Grn doub@L2 Bl doub@b- TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@m3@Grn doub@?y`Bl doub@B-TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@m"`Bl doub@= TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@P@Sz UntF#Pxl?Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H?yL?yL@>{)@Gb~2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ copy 38BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@,0d@<7Y8BIMnorm(+t(Q8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H?yL?yL@>{)@Gb~2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@,0d@@@ 8BIMnorm*H(Q copy 28BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@YGradObjc GradientGrdnNm TEXTBlue, Red, YellowGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub@F) Grn doub@L2 Bl doub@b- TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@m3@Grn doub@?y`Bl doub@B-TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@m"`Bl doub@= TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@P@Sz UntF#Pxl?Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluniQ copy 28BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@(0d@@@ 8BIMnorm*@(Q copy8BIMlfx2nullScl UntF#Prc@`masterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@YGradObjc GradientGrdnNm TEXTBlue, Red, YellowGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub@F) Grn doub@L2 Bl doub@b- TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@m3@Grn doub@?y`Bl doub@B-TypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@m"`Bl doub@= TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl?Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluniQ copy8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@(0d@6?N8BIMnorm:d(Shape 18BIMSoCopnullClr ObjcRGBCRd doubGrn doubBl doub8BIMvmskff33љ3333lfflffI^ff&ff#33<&fft)L33nffffff33~ffff^ff8BIMluniShape 18BIMlnsrshap8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpxoi`ZTNH?<60-'$+-.*-*'&$(#&%"#(/)+%/)(%+)#,'%('&&!)"%## %#                      *(,#$&'!%$!#$)(),.*($&&#%!'(($ #("%#$                 * ' ' $ !!   ,LYxlUH'Iȅ= <俙'{JZUV rd/W@M=frk %8i4U NpppuostuZ.'? "NQ ԬUW/ , ( n47F U "y`G B0yA`B 2DFFG5A#6n (%QvS2 G|l/"%"    @@``@@00РP p   `00pP`0 `00P0p``` 0`pp`0@@@@ @p@ @` `pp@p0```00p P  P@p00`@@pp0``p@``0@` 0@ ppP0@`@`00` p `0`0P` "%"    @@``@@00РP p   `00pP`0 `00P0p``` 0`pp`0@@@@ @p@ @` `pp@p0```00p P  P@p00`@@pp0``p@``0@` 0@ ppP0@`@`00` p `0`0P` 657679?@AAAAAA:852.***)((*******-9>==@AAAAAAAAA??=94489666.-)%!0 &1:HYfox|uj\OE8( %1:HZhq{wl]PE8(  !/;ETdr{wh[PB1$ 0"/@NYhx}pdUB3(1 #-=O^hu~scP@4' 3 &2>Oapx~{vrpnoqtw{s`PD5# 7 (:HVfyzqkhc_][\^adiqzwg[K6&<(:N_m|{rh]WSNKIGILNPV_hr~~p_I7( =*9Lbsxk`UIB>:75358:OcxxfWK@4-)&#!!"$%(-6ALZlztaO<( ?  .BVh|vfSB7,!$-7EXft{iT?0&?"-M`y{dRD7%  (4>NdyzfXC884?Ufy³{eM:/$   (8NcuǻpYLLDQi|ɿ|iR:(  'VlŬaA+  ,GawɴlK3$  3PlзͺuU;+  %)*(% "9XuȮpq̾~_F5! #+38:961*" *Ba~ƻZ=gƾmWE0   )21$?+8EScow|obVF6+!=#-;KXcq˿~thVF:.  ;)9FQcwövgVA1& ; -9DVl~~{zɹn]I2" 7  *4G]o}wsrxϾgS=%#$4I[hywoihkx ¥aK2 .$7GTdxzphb^am{¤^F+. +8DQcqyxpia[WZcp}ҿ^E+. )2=KY`gnstroid^XRNPWam}ͽcK1 &2=CJQWZ$WSOID@BFNXfzɼlV>&  2 &+18>BEFFDA=8447=DPcuƽzfP:)2 %*.367652-*)+.2AAAAA@>==94**.*))))))**-/;>>>AAAAAAA?AAA?=936:9667-)*$ '/Pd}|pe]VSPPMLLMOPSYclwu]H7'  =#0DXkyi[PH@<::87679:-  4Ifɹ׾oN3%-@[ħϲbB+&7Qtϲ ťpR3 ,Dg ڼ}dG)  %<]}̾ Ӵu\@$  #8Ww ͮnV;!  !6Tq ʪhQ7 3Pn ȨgP5  2Ok ȨhQ6 3Ok ʪlU9    5Qm ͮqY=#  !5Tp ҳu]A$  !6Uq ַzaD'  "8Vs ۾iK-   %<[yȺǨuW8#   +Bd׼дdC- $('%"!1Jm̯սnM5% $+27973-& '8Ru¥)ĭzYA1)3;DJMLGA90%  /A\ó?ȶjRC0 ,;FPZbffb[RG;- *=OiϽsq?jkyȻycTB/$ !(1=MXdnw}}zsj^QA2&&8K]un__V=c{ƽrdSC8446;CO^it~tgWG:2-,-7HYiñv\OOA=Laqug[RNMPTZdpzrcWOIGHO\jws`I>>+=4ETez}tomlmos{{rliimtkYI5,,?$2?Ocv~kVE7'%0>Qcr xjXD5) " +GSbmtz}wrmifdiu˹xXA(/ #,3@@?=94027>HVjȿjU>/&2 $),021/-($$(,4@RexĸmXI>6//1/-,- !##!"*:K]qƿtdYOGEGA=<   #2BXqtg]ZZRNL  "2Hcztpmc\Z(>Ypķ{nfd1J`t{mec *BWkŽ{mfd *AViÿ|wib`  3Bf3 i~6iZ$? '0o$c``]0?0-fE ~ *ol~!uf  $K~< *QxH-~Z-38BIMPatt8BIMTxt2 /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (PoorRichard-Regular) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 0 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 1 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 1 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2 #&$*($"" !   %(..*,,(&%  #&$*($""%(-1/0/-,+&'%! %#%(-1../-,+$%$  %##&,-(+,(&% ϾնݭqdeXMZghni?,!$(*.1BRi{xF"%(+.259KVTGA<@DGKNRVi} q+ .St wjUOSWZ_bh{ j!)X r_`cgjns{k"%8u}pkosw{~ k "&)Kz yx| y# #&),C >$'*-1=z  c(+.248r  5/359<[  a36:=AH{  H;>BEIc „ v?CEJNQw ͝ eGJNRV]  UOSWZ^n څ |TW[_bfw ߗ u\`cgko| pdhlpsw  tmqtx| vuy} {~       Ʃ ݾ Պݥ ڨ ٲ ӓم࿹ ņم  ƅ ଙƅ͌͜ŝ嵖־ŝ դ‘ݥϾնݭŹȰ Ѯ  ː  ڡޣ ©  ó ޅ Ž  Ǎ ȩ DŽ ͬ ώ  Ӱ ֠ ؖ           Ӽ θ ǫ Ÿ ݾ ݥ  ĥ #ƶ#ׅ˱¿ņńڶ˟&ԸƐ%ƞ¿~}}z{!|yx~|xu|͜~{wtqwŝ}|xsplil嵖|khea^v־ ia]ZWd rYVSOMq WNLIENkHEB?<963Nymr<631.,3^ttU=rb0.+)'%#! y o.'%" YyP%:ly`MYrݥϾնݭo__O?O__gg8 /Www@/oH/?77wo ?ooOggGWOgow/Og/w7gw/w'w'WgwG7OwOw?7OwogwOG'7GwwOg___??'? ' ?!?@"?@"?1"_o"2w_"AG`77p_ݾQ-oݥ3RGGw`@@Hhx w@ A R DO O1h x w@ 19 hK Eo (ņ wX pp "W1`Ih x iP)w``K Li! UP I`Q&  Uh,xb Ux2&D6 *qh+ c͜pK NŝxZD6(())**8F#,嵖jd־ %; Vd!)W>ŝ)>ylk%YrrS9rXylYyL:ly`MYrݥ!!0A0!!*IbiQ2 "RqZ2ZШb*BАS[Ȉcc{cyaQAIaq{c萀R"JscZЈ[ SZ:S2B sB2RS:Z{ȀcZ"B*{ZbȀZR*BJqbbiȀR:  0""!AAi؀YAaaYaaaBaBAaAAaAQa"aЀQ !bAq9"RȀJ*i "AA92؀bq"ZqR"Z:RR2J{{2cRZZS" 蘀c"{ :Z[[ZB ؀:yS耀"[ ZJs耀Js ؈!cc{ aBAA{{؈{c{S[2ckB:bkJi2 )AQaQiЀkJJ{耀2 R ЀR:bc{bJ 𰐐c {bcؘ{Zc"Zb: )A0quickroute-linux-upstream-2.5/QuickRoute.UI/Graphics/Website header.psd000066400000000000000000024044231446222606700262620ustar00rootroot000000000000008BPS Zz8BIM%8BIM$9 application/vnd.adobe.photoshop Adobe Photoshop CS3 Windows 2008-06-07T21:13:28+02:00 2008-06-08T00:30:06+02:00 2008-06-08T00:30:06+02:00 uuid:886613CEC534DD11B3BADDAA85DDE585 uuid:4C12F6EECA34DD11B3BADDAA85DDE585 1 720000/10000 720000/10000 2 256,257,258,259,262,274,277,284,530,531,282,283,296,301,318,319,529,532,306,270,271,272,305,315,33432;3318B1234A499D72077B19A25AD0094B 780 150 1 36864,40960,40961,37121,37122,40962,40963,37510,40964,36867,36868,33434,33437,34850,34852,34855,34856,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37396,41483,41484,41486,41487,41488,41492,41493,41495,41728,41729,41730,41985,41986,41987,41988,41989,41990,41991,41992,41993,41994,41995,41996,42016,0,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,22,23,24,25,26,27,28,30;82298995B10434EFE74A3F64715F5957 3 sRGB IEC61966-2.1 8BIMHH8BIM&?8BIM x8BIM8BIM 8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMQ Website header nullboundsObjcRct1Top longLeftlongBtomlongRghtlong slicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlong urlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM @: $JFIFHH Adobe_CMAdobed            " ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?Lmcs* 3kn.>Ŵb 7v^l=7Eh77Rֲ2qotSKXk%Z;GeZ,Qe(F2>)w8$ԑR*aoTg0M6U{13g 1`< aun}`oiOYoaťWc\?e7R~ҭ6o}}X>X9_G qd4D!8YYt225*5DU)5CcN#e>Z։ha&,g{?7! *ev@.e[gOzjY[Kg;]mBGol4fqok8[S9 2dTCkO--.1@e9p{kέo[` C@ޓ6$# ':tCS`sֵۚ1]]{\h1k/wV+a2Yk-߹R˫=G][ƛ_KK\:P&_5!'oOXeմ9{K] ȳl HM{[01dm͏Okލ]]UѧkD}=<+I"OMpq`%~{c? mim$vl}ۂXE hG.nM[?%jwV^4{Jv;3/i~h22C %b?׈yoN\k!Qϡw4J=6~X]9sn&9.vVt:Y_bs_mR-w765=vn[=J]?X?ຊ:eN9UE]}ޞCmߕףJxLgCԒ@t&C]*kFC4{6okш˳Y]Y͕ {c=}9,o[#M.=R_sY&ksw_oiսYmef溟k]iu{4w7]^Q}FTxk2讑3J/q׋fϦ]if:f_mvǩño|xil[>s#=4eA;?;nMPim*X P4v$P<$@iH 4,%h5m-5lƸ Sȣҷo>]]6ͲZ w!k-{c &,U$hv7}=~@B߂$p865Y펐~[]gثuw>;]VkK5{~:hY!Vߺhٖ\XG vF:(Kz_5Px@$X}oca5ovFsl/XF] ~-CƲAgmmmn4fv5 Pe1ݻsq2@EwqN:y%ZDu9̥ `6~X7{lmsgo.=um%/{ZYs~և3qsHkYi{=w^;"F@R?J?-N+B_8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIM".MM*bj(1r2i ' 'Adobe Photoshop CS3 Windows2008:06:08 00:30:06 &(.HH8BIMmaniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong nFStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong nLCntlong8BIMRoll8BIMmfri`<  b.%?w:8BIMnorm(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp7f|tNNN8BIMnorm(+t(Q8BIMlfx2nullScl UntF#Prc@YmasterFXSwitchboolGrFlObjcGrFl enabboolMd enumBlnMNrmlOpctUntF#Prc@VGradObjc GradientGrdnNm TEXTCustomGrdFenumGrdFCstSIntrdoub@ClrsVlLsObjcClrtClr ObjcRGBCRd doub?Z@Grn doub@i Bl doub?ffTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@oGrn doub@oBl doubTypeenumClryUsrSLctnlongMdpnlong2ObjcClrtClr ObjcRGBCRd doub@n/Grn doub@= Bl doub@=TypeenumClryUsrSLctnlongMdpnlong2TrnsVlLsObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2ObjcTrnSOpctUntF#Prc@YLctnlongMdpnlong2AnglUntF#Ang@[TypeenumGrdTLnr RvrsboolAlgnboolScl UntF#Prc@YOfstObjcPnt HrznUntF#PrcVrtcUntF#PrcFrFXObjcFrFXenabboolStylenumFStlOutFPntTenumFrFlSClrMd enumBlnMNrmlOpctUntF#Prc@ISz UntF#Pxl@Clr ObjcRGBCRd doubGrn doubBl doub8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+8BIMscrn8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMTySh#H@*@&@VV@U nZ2TxLrTxt TEXTQ textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (Q ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 2 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 2 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (PoorRichard-Regular) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluniQ8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrp@P z^g@6?=,Zv&RRR8BIMnorm$|( QuickRoute8BIMTySh#?k]Zm;*\?k]Zo@W$4ᎈ@`;;2TxLrTxt TEXT QuickRoute textGriddingenum textGriddingNoneOrntenumOrntHrznAntAenumAnntAnSt TextIndexlong EngineDatatdta! << /EngineDict << /Editor << /Text (QuickRoute ) >> /ParagraphRun << /DefaultRunData << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> /RunArray [ << /ParagraphSheet << /DefaultStyleSheet 0 /Properties << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> /Adjustments << /Axis [ 1.0 0.0 1.0 ] /XY [ 0.0 0.0 ] >> >> ] /RunLengthArray [ 11 ] /IsJoinable 1 >> /StyleRun << /DefaultRunData << /StyleSheet << /StyleSheetData << >> >> >> /RunArray [ << /StyleSheet << /StyleSheetData << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 1.0 0.0 .00009 ] >> /FillFlag true /StrokeFlag false /FillFirst false /YUnderline 1 /OutlineWidth 1.0 >> >> >> ] /RunLengthArray [ 11 ] /IsJoinable 2 >> /GridInfo << /GridIsOn false /ShowGrid false /GridSize 18.0 /GridLeading 22.0 /GridColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /GridLeadingFillColor << /Type 1 /Values [ 0.0 0.0 0.0 1.0 ] >> /AlignLineHeightToGridFlags false >> /AntiAlias 2 /UseFractionalGlyphWidths true /Rendered << /Version 1 /Shapes << /WritingDirection 0 /Children [ << /ShapeType 0 /Procession 0 /Lines << /WritingDirection 0 /Children [ ] >> /Cookie << /Photoshop << /ShapeType 0 /PointBase [ 0.0 0.0 ] /Base << /ShapeType 0 /TransformPoint0 [ 1.0 0.0 ] /TransformPoint1 [ 0.0 1.0 ] /TransformPoint2 [ 0.0 0.0 ] >> >> >> >> ] >> >> >> /ResourceDict << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (FrutigerLinotype-Roman) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> /DocumentResources << /KinsokuSet [ << /Name (PhotoshopKinsokuHard) /NoStart (00 00    0=]0 0 0 00000000A0C0E0G0I0c000000000000000000?!\)]},.:;!!  0) /NoEnd (  0;[00 0 00\([{ 0) /Keep (  %) /Hanging (00.,) >> << /Name (PhotoshopKinsokuSoft) /NoStart (00 0   0=]0 0 0 0000000) /NoEnd (  0;[00 0 00) /Keep (  %) /Hanging (00.,) >> ] /MojiKumiSet [ << /InternalName (Photoshop6MojiKumiSet1) >> << /InternalName (Photoshop6MojiKumiSet2) >> << /InternalName (Photoshop6MojiKumiSet3) >> << /InternalName (Photoshop6MojiKumiSet4) >> ] /TheNormalStyleSheet 0 /TheNormalParagraphSheet 0 /ParagraphSheetSet [ << /Name (Normal RGB) /DefaultStyleSheet 0 /Properties << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 8 /Zone 36.0 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /AutoLeading 1.2 /LeadingType 0 /Hanging false /Burasagari false /KinsokuOrder 0 /EveryLineComposer false >> >> ] /StyleSheetSet [ << /Name (Normal RGB) /StyleSheetData << /Font 1 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /AutoKerning true /Kerning 0 /BaselineShift 0.0 /FontCaps 0 /FontBaseline 0 /Underline false /Strikethrough false /Ligatures true /DLigatures false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /StrokeColor << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> /FillFlag true /StrokeFlag false /FillFirst true /YUnderline 1 /OutlineWidth 1.0 >> >> ] /FontSet [ << /Name (FrutigerLinotype-Roman) /Script 0 /FontType 1 /Synthetic 0 >> << /Name (MyriadPro-Regular) /Script 0 /FontType 0 /Synthetic 0 >> << /Name (AdobeInvisFont) /Script 0 /FontType 0 /Synthetic 0 >> ] /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 >> >>warp warpStyleenum warpStylewarpNone warpValuedoubwarpPerspectivedoubwarpPerspectiveOtherdoub warpRotateenumOrntHrzn8BIMluni QuickRoute8BIMlnsrrend8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMfxrpnąoռ@Z/t9 >.9$/%")CK_j`cXK@   $2'$.$ 8)+5G.2%*06 "$!B**V󤖘 p惖 2 !XHƲ̵ ׯղ䳳 浣gߑ^$  ŭϫ"ބ˲ ްମߢ˲ɿۼ־¸  ǣtk ^ Ҽ ؿUJ"ZJ zȾȽͻ̲hw w ܿȾǽǻ,#YYȿ ǻ ̴   窴ܬu設 Ʊ}d ޜ͹  ʱڰ̱'Ι㸬DŽ˯ ڼ괴l ͫi밳   &i   (ò   ͠ӛ ܞgš i۪Y   񤞛š!ڙ t皗    쩗   jl Q 䞛˜&󥙜  ퟕѕ韛 d]螘  ȜݚҔڜ 3آܚ  z ܈  ր  튇廄暈͉\: ԉσOefć |쎃㚆ԇ 䍈ㆈǸ9    kT)!  쨩 ־ ھ ޿ A ͊̑>z   ڕ ͉֎Z~U 앏Ǎ ޑ^[ 7c] Ô   ֺ  )\Q {풂{~~Ƈg;h~}T^ { }~տ ~ lIMp ޿{ ㉃~~ {~88z ‘   Z Ϛ qz 𿻺x Z 勨 ӑ⟓g?W Ɏ  ޿Ѧ. Ȑ ﹵ڑƏ  +  uǓut   񰐓Ў擓V 㓒 ܽ 妑ڢŽoW 掑  ÿ ֿ   /  㢰 ӿɠܢ~{ꬨ  ۢ  ߩ ﭧ䩨 ҥ 詨 y  ~ܱ      GPs k   ↓  Ф제י ޜ _ 矜xǘ Ơ  윚 ~  搇   rn'  赐  ႊ ĴӅ u }.׾  勄  ѧÅΚ  |沙v    ӿs`lnɉ锏ӍQ͆z Ɩ ̑   0뗏ƍ Exȍ  É荬測~ l ƶ  1ԫ&g~ ~҆ |}~zĠ|z{ } u{Ӂ ѿ я몀} ) 劃{^ Ȍ  uÁ  Ǡ^ 疜 畎yA   ˯ꖖӒ"򕕎ݣk׫ hÐ ㏓ ܠ Ў ̆K9o ׺峻  Ґ 뀷戭 5v ˕ ` π  =z R  Ȍǟۍג儦֕jޔ$9 ϔ ʉe   ?Ÿ   ؽ  ӑPk﹇ Pf  ۓ qҶÖv{ zĵ   馧ء݄ͤpέ|dw [hc ڳ!lפ zB[“jĬԿ 裟   ٤ʤa  ׋v~of_ ע @ X 쯃t~   ¡|ϭ ԙȕZ׷vٴfxkeY\l   ъ ܤѬԨ{brg Ȯ 쬱 𱱰̬    ȾݾŬ xl_l]pjgp  h2ȂݵҾsėlYW ſ! 'ìT"ܼú   ǿ ƃ¡{w|s$ܶ 5ަ}~vyzܫЫyrvl » ú¶orԼĹᵺgٶ̷  ϲ{kʿ¥ tp~"׳w[ ي Ʃبq䙘ҍkɸq̵ķ㲸F괹ѵM(궸+ }޴޳-ێt)cݒ 9㻘~|v}~ֹ}⸰̿xw˙)ʖЇwӸVϕqYnlEԳD2E K⦡ò Ɵӟ巜7ëxĽy~{~}ҹÿ{q'辐OIDQ̼wffc $lԿydQfբ`m|ڸnQ򪛷٫硥UۙݳꨤB| Κ ҆=٩{p|ʹly(ɤӻz}l|Z“uRaٔ{ѩs׺  e/ֲδ$Cǩ Ț Ę ν ¿c{x׽߫~ouơֳl\m»踹ٱ?wĩknwƵҳ|y੢ǘch弖 ɘ ʚϮ6z旚ؽ ;  %䞚)b|}z ϧ   ܆Ί跏vkyKp`r|ùњ{:Əzᵑwn봊 qΉ Tkȿۤ * f%ةYපɃ  ˃ 񔀔לtFϤSQyuyخ~j_UୈxlGknR{{}̅f䳉œ`QS\ajo̷}g~쫂 ӡ ;ѥ΁" օݿ~qjlڎƸ  qֿͅ Eʮٸܓv¼dz,|mˡ̣ ױ*|О*  񙊇 u Dkӭj򎎏ԏyʙƛ֦a吐Է f̅ ̅хpoqpobL m ҁ )撝 ю~عƚ } ţථ褦â r H(|̗˼{ڣ 戙֡՞˥I݂\ڠ£    nZwՖs"uyցˉ Īτg| ٶĬ Ҭ ޭ ɷӫۻқ rғϯҪ Ũٶ˪Ŀ۽ǿ ~zW ۽ ˮټ     ߌӿœ¿לλ ¿Л  m ׯ ”Qqu϶Ѝ쵺᮶įЕƴ̿ﲶ  ׻ Bz  הNj  ކߏ   誡ٿ bf'먥 ɻ긢Ԛ Ԛi 򢞢Ց 쥥ךꗮɛ 맶8Ϣ ϵɟ ʽ Q     瘟께 ֝ Օ؝ڛ ؝Җܘ^֞܌왰󯝟ڟޙĜ洜 ׾] ц'{Ǘȿ  پҼښ𣅈 𔅈ψ q҉ Άÿ !򊋌Չ ִ؃ ꌊ  ~  fK dׇ  v  ஍⋏ϊѕ̿Íϓ Ϝ͔ zʊ  䨧Ǜ% u 蒂z{ۄƇ  ~蕁 zx 釂|Ӏυ&}~}S_j ~ ˲~؁ I N ۇz   * x ݏ˅   H  ? 㕒켏Л|l 嗑m7 x݈אŽ׊Ҝ  ׳ɏoGBE ˓ 唒# sr jӥ~~ˆk   Fw    񘈋u⣍Áz  Ӓ  gp ]劐עP ݩªl  lUp ׭   ȯ ;~֎ ̋  [֛q" ժ ᪪窧 }%9Ȣu}ĞQ̏Ţи վߺlpȢ   w R֌ i     ޿ 壠 BY"  pooĜ!  ԗ՚ߙ  K,Rݺƶy dž} ╲ 6` 򰀎玉 ԍ ܹy?߸𑅅ʅ֍ ߕZ 騆׍ΑCĈ쮃J 玆g鯯n{v߭j}Y  m  ډ騄  Wq p ߔђ߬ }ʴo͊ ̔zX[wˊ `{Й ߚ `= mÍ ȍپɍ ۽'o |ɦ ۈ  Ô  d  |}䆂~x z|ׄ"~ ?mꏀɧ ؇҂ q{΅Wz˖Q}~  چ_M Ӌ  ԍ  ~  q ~趓׏Ӿ v@ T s ҥ𯏐ӐÎړ˜x=[ޡĎڰnm jdUŽ }F̽dɘп!Υa8쳋阑 쭏  ? X𗆿혆  yﷀ򽮝Nʒ瑎ˠޏ ω !ϠᨙGLc ҫL ؼ]YgΎߒ  æ޽/ iI  ԽǶ{v ‹ʷ|ѿ :uv ϣu 󻡣򯢣ò̠ૣʠÆ}gڡׇhˢ̛ȑyꥠy  /jƞ!۞ ~ ֹu} uo  T= ~  z֛æ̧̭֧߱ŨԞ ުރnߪ 띰ht䍇  ݪ ܦ    ȃ Ɋ  m gks XSP`J,8پ  >' ǻݻѽȾ޻ ݼιܼѽubWj ϴ  ㎈|ۼؽyL༾ӻ ν α۸ƻ˻ݸ Ժ ۺƱ Ы~}ʯ z  𴴺òkâ 񵳱 Ժo ձg ,8 _䮅}4히  ꦢ x٣llk*  ܥܟڶͮΦ  褌͛tҿ ʦҁ馡 ] ģՎ㌒ҦHqtzO,)   η ձĩp u  zTrV  ' 壠okuѽĺ Pɝ}Ьyrњ сɜΙ|{ 飜V[װahcַt| /   ؇Ԯyvrd ͖ !ä{›ۿ ~ _ Ռc ݒӌ dxʝkǿՆր a$ޡڨ~ѱrG}XҡR  ꘊ  žz)> Ղ㟄󲂩 W }0Ԗ   .c}ůꏎsɵ 和]Ϫޮ| (|¹ʎUpܟYpc /΅ [;  H,ߨ~ۻx |  0|򺏖辋< 񠟰ΚhŞŢe#鶁Ȋ ĒÝ ퟞ}՚ңzw`WɆӜ }ÿ@ʩ  QtrՏw  ͤ(駨ɲþ֦sȩϥܺ}ayѥ  h 뢧~htj񦡢쨨  lᮥЀ  ه  Հ ༺!޺ŵϽṼ հҺǵ b ڹlʻ ݷ ϓۣ ᰶ%vrख़dz̹ﻴ䱺ƽ޿ 趶߿㻾 ܽӼø˵yeՐ˻ nӳ ޱ  e췶 ɤy༙wdz~ ľҼ    b7vܮձǏ~v־ء~  y| 󬦪ۡӧݬ d' ҥʟEޑ_s䙊JI̳yܔ | ߩ ڃ~> 򼡤ǯw㮕㎱ b Ʃ"bj "ȫٸ~t܅娅.tƾ˶mn ļ̂>GA  vyԱb ݐ  _  ֝؞~} ަ ըEJ  wx#̕iyuuJMcȻwy㠠 m h]uj{ 縢ßߣڗ۠a   ƁƔ͟{|KmٳxzȥYWw ͘l ݍlS 匊~䍎 ]Բ } ݿvpʲߌȲ̵}Lʟ  ⊈狋ݑ$ৢ{ѱ{yr ȖÅX ƚⵇ& A~浢 Г̑ȁ 򛑓̖ 驐 ̍Ґ󠐏Őy fh܋ ВΫkRXyqr{鿌yÏ ͏С ﬖ锒 T  v ~)ᨍھ ŋl Რ}π~񒁂|舂~刂Ї 䇁}Oy۽úsъ࣍hOŒ 䠭}{҂{ʄvֿ ֔   ʚvwyz w}ͼ#svͼvҚuվ ͘   Í̊ ׳䋒 䋍 󞏑勒Ҕ    YШylq{rw^\WQSQVm Ν ԥ  Ë    Oq=̼uytz|j|{ |üz Ϳz܉ èƩ 鐋ӊ 󚅡瑋ԇ|΀I~x}zp㈌뉏Z@lwS ӄȽk掌 Ŏ]lw  З0 '#θ{s{zⴧ𴍦ż lك M*$ ͍2fV ƔvȽd 󁢪~ 9 ߫ +Ʃꨭ٧ Ӥ裨ڧÿ שּׁ ܝuĎؼ డͻp<  s2  Ϻ   ? ҰL آᢵ2͡ݣ̡^﨤 砥 ͤ i}Ўמ gg 1    ֬.ЊÁ / 璎0㉐ˈ 򐐍Ľ ƿ w֊ ꟎攎Ë +? ‹DZي~Ҋ A~~ -   г  $ ꗑꖒՐ 镒ϼޓ цկY t a^ z 粢 7 B} }~x}~ |d 򅃄  ~} ၁ۄͿҁ{yJ{ -»}ǃ  ݽ #  d Kjr  ΍ Ў 󜚖 ϋ ΐ̉ƍ֑  oō* 㘏     :qڞ򋄊  掊猙 ɥ݌ 򕈇ϑ QVa豏ՌvCXʼn ك    Ɲ}  ƛߟ 諾 ֚w礛֟ǝiCӟ䝙ӌ ۝d%S]Ԟݟݞ  8ҭ 醴Xڠݥ ٢Ƞպݧ0(L暨җӥ B;{枝ՙҘΥߧXsw̫ҳܪbЮ c    Z׿ оԋսt|M ȯU[Ű»zʻ ж߶ ⵱ jiK ׮ٶϹ{xˬ zĬǰʬȹvlŇ2ձذV}Kz 4׹ 꺳 翹kG ֶ ϶¾ֿ÷Ȗn źaԸ3OʿuW ĽŻ ؾ ǻ 鱕Έf ½ ڼ (Ϋ oŴ ף  ʹž EȨ n ۣģ mϤè [ۉmʨ  eQ   ܲӏ  Ȗ  ݏҪ  }~|i} | 冁|˃|ހ{wn|y} ߃ TL}ڃyۃܱ{ ئ ԑ ȿɕׂh{ ʼnˋᓐ߆  բ ˑ͚⊑ x壏ŚʑhSڑA ٝ EI6 ʖ  Ɖ !"==  .  )Gl[^DVJA-Jai|smqqdW2C' <:0' #  ,F825=BH;C0! =FZNDAD\OUJPRO6,-1/ZEL$/39! q 騈 ٻǾȠ ̆瘔 ޽ |pZ&nєg4ܲ~ʷӯ͛Țӕ XѼʪ硤!ҙҍN q$ØēėҀĥ܁΍抬ϻ ܊ ͻ߉碐Çÿ˺տak{t|Vjԡ Ț Α ݆㹚{Თ"Ηʓtr͌ڥΓ аħ񕊯ꈫď̋üꑶ ϏžՑv—ؚ ԍ п߻enq_Z m1򔒎֌ɕ ߈ 5Joב"Ȫ̄Ou3򫕝 «݊ݲŽt~䞓bŔܜΰ뤉ֲr噘 Ҝ쿜u δh{\!xՕ w ܐے҉ z톯#JSԺ ߒŒוґ ߁ȉeȒΎΧzښю ˼ǹ ˗ ٖdeqj ȸؒyoU{ ׺ǩ|к̒ܘ ۃֿ(˗܍踠M͉ ڏњēڔl҈ ύҊ ݟ{qť͓ׄ ғԏ喩뺎̤x攕r盛 c%dk`͊ ɶ 'ȚddƍԠڪ Ĉʅª ćԈ ʋϊ Ѧ 쭥ƿ֞Ǖ“ͷޕא ւ²ʉ {ےϋɍӛωf ˃̑Ŷ ҩo }0'͌{nڱ Вň܌ ㏒ح҇ (vvʏɭۚvŶʾ tٽ Ά  䙩ޗӋ΅ў钸ݰ ҋħȑ Վ ن .v۴vﴰΚŰq˄ ՜ |ΙsڅPl܈Ҏ َ׍ϐД&拦zϣŤѦ 番ľً9,60BRz ٪ }Ŷ Ȣuq2[p͎Բ巆瘋 З下܌֊}z Ӝ{7 ܎ˠ ռʑS㦜؆ }X:2496884+,3MϏՕУ t,% 斑 ۈݻ ˅㭚xa~مԍr䀬rm ˂唸ճɳ׶a'v݊ڑՅ ۟ ݊龤ʒ<*erE0.PLUlmksOɪӈ׾߱ ӯʪpwkOّ {@! 䰲 vyx}񆎸 ̜lC.7Xx˰ʱ؏ӉЁܛ֘黊ѓ , ېﷲӭυӦ熑ƒˣ͙ݷ߫nku὘GyxЧVTlb`xuuvV>@B@54;4(')0112=7?8QijkWEtȚТ몬wy.#͇Ϩ ƈǬՔ|בŝAaܖ:3* `Ԉqך} ` 葌嶈ԱYB Ȥϙˆڗн ľټv~Ͻ使"$Kz汑zVJؾJåþzX_o|]XZX=3378/(%,250"#(9AMDESwtĘ̼ ѣԝ젣ʵ)# ݈ۼ ؟ʦaʄV&3}xI+! 㼿 ۓ蕯_ŒMߎՐ؊˲Ԍ󖻂a馉ܧ裂J:o 拥ʻָըƌ뚯ٍ잱ǏˉކȘϓו1/c ˤ؄Š錼z:iPlzG3Pg]E8(:2-/!0./03 %/PaLEgv}R\n쏽̉Ћ2'Ľށἇ@2Du~R6 wd 藔9ݧ֗{餓疛ؕ̌ ײ¤嗹̠È ЎǪع~Ό ׻ݷݯˊB3]ŗղu鼔xhÓmCsNj¼˲ɔLꭋ۳vwvvxXAC8# %<%,!#4&&#"2Sd7-5]mϹͺ  ص;~xӺڴɜ Ð˦ ȹ ԋþ ĚЃӓ ykʹݍȆܿv:jy_&xhްxW頊8k. Ck_6@a>2',6*)1.0(-//0:<=5N_\^}؁ ސޕI  ۈϧzx}XM}܈X0;/:7։ Iל伃ң ޅ݇ 딋͋ Ԉ ᒜԊݶћߓᒵ!}덚xߋL8t⹤J۴ً Ս!ī`Jׁ_sN,[<,/,)58B:Nqkq؅ L޵E٪ѺwտHp:?m95唘͊r׋쏯ȯ쪒 Жū  Ǚ Ǹߒ ǃ털 {軃+tT[vsq։ߒ ˻p/I̫igoU=?97>%/5*')/00. 88#J:hj 9*݇콝%͗q~䩵z2'P:3sa lѐé¾܏͒~Ǖ؏ ϔ䒮 ƸhӗՆ }gÿ 坆͡珝_K6擜ǙiSUis אڍfg ҅»\mf}}^XZT%2( 2Wj.A9$:?>LOMOuĈ 𣑠ߋ%tęӉm|؍+)·׌ŎE4t xb бeҢޞ߉x㡘 φϔͻ vp֌֏ˡ ʐ v]Ӑ跠ᗐ XTyT(tƓTd~dv܉ ԑþeӵkqË!2<@7(;H2,-./3$@NKSmsN=퓥2tZʥ{sQĞxkr<0a5=!ʆ͍쩊~Ɣ ښ֏"ό| ̘ Ϋ ʴŔªƛ럦͎tkg0%ג|ɽ$؝t|䟉ۊ ټȏw}i4=ƯktvxZBDF9783((.,"4081(H1*6-452//.3:*#-8QRQZ@#6w漄Ӽ雲эrԚ~1 ,nt{]5K4؝d;(ӕ͙k~–Պ햢衽Ӿ-ЙԘ葀ֆȏd.ٖȂ󸈡|~֠W04 ͍攻9ⷖ۰ؾѱᶟia͋ Ӡ峎Ηͤ',Ћ5̛݀dJfe@BD632 $#(9;;>=;2K?1#oyq~˼})f ߎsf܍Ϫf… h%ѫi뒳~z$ވ废ę,omγ  ĔūČ݌Ј Ȍ 𴍗 ZaZJ922Of_c~ƒҺtfዶ⪄ͧ^Lwvs֓ɣhzfxwsŮ6{綌é\sgpǡw[_2й}ENd`Z8+.+$zҽ{WvX;g}+YԸj ɟq⿧yѤ9m}̢[  $␕]ϼ aw׋o fklŌܠ֑  řΒҾ ׽ԍñE348+iث⎟趏tNKʔtrKӁڞsn຦ٱɾ̊:~dzlᶚ㶑vuƾu#Ǧv꾁9?n}%krgÀ НVḾro Rms^̒Ⱦꛀ Ȃ" gԚmKۭ׾v^ޱʰ ݂DZǑЅ䮒 ಴ٱ bŗȮ1$]~yܘFϤzjTeӦt͗|u\đs|frcmKz}XcV7<!]m5纊Ӕwhgmq{ֳdźƹmqv|dL}L˱ 卙ݖѼ /ceᰴ ԝᤴj#ױر|߯͸ێżƸ Ħ׋ ۉ^y툅1-sڵ ՈĖEИіƺraަ_rאUyyĻӦɐ݌.zNܯ~5g֐|Һ ٶ.tޕ܍r+ȗ߳ӷێ|o ʪ͍͡Ե쪆ɵ ͌Ƶ  n UФL*R |бVҍAϒ΃~Ԋ/a T͙{뺘ȞvXٵݑ ȿÅ唡 g Fö ȵ ƣf߳ Ϟ೸덺׎Ҵ͕Ķ빑ϐۉbL Ջ roP*;қ ىΛ)֠ʪĵéos}ݖ Շ"QQ཈~۰ђld {yX*풤|²Ř㫰Ʊ̚~̪óӓηؐҝ ͪ꒙ 61>HΧݏ(يʘpY~x~W^…c{ 㖇fj놘{ِ͟ʸ̰]}ٽ~ʉ"%ߑ󠽵ت恵  ̳ ̧ҘųӼғLJϞ œލg[ؐn<8Гsϋׯɩ"f?}NȪ芬krՇX!bũʿӮ ڋ˒אzbڒԐb`wӆ젒 Ժꑑכ˂䵙ŵ ئԂ|yג B6 Ғĕ~Ƀے؊ ψ [2^Țiy P*͓ο Ώ؍ϻ ۛכkbڛȸأ̈`y̱<7 шr̙馊峕\-Ҍ݃ 㹂󝓣ʋ ޓ쮛“ ݘ°o Ŕ퇿·⒚n ނߌK1ω`}؈裵Cӎԏؼj݁{̟Ɍwدÿ  ؎ƗƒؓЃ쓢ݑΖ ˿Ŀ دĻȺѱ ہ …͠—]-tȽ~݂ԜDꢔ|͂emܦ-(u}ޒ_ѽ  Ȓǥ ԓǯ 宽ԓ®Ż B ʌĂ᪊i}r ܘ붜Ԏ 涍͗x+o 󺌖ݒ ކ㙐L 똭 Đ͙ظk L"RȔ_z{^c˓ ĂczbЍ񧞔隷͟i$ 񬈺͵̄ Їhag ͱ G2Q短 Ժ 汭ɸ 6߇ߍܸ%Ψ&F܌ؿ}diNuج߽̏֗Ĝw ƢqҨ8݄ˉҧ 􏬝 Ŷ մݧ͆ הџ Ŋ3T˟͌ԙ :6ʌ׏ ׉.1ِ륑 ߕ䌮ǖӊݐы ͓ މ ѭӒƆΠ Ւn4LͿb^c񘗊 ϚÜّٓ )&׌ה啚`6Z햢݋oׄއ٪ޠֱüˁ²𵁽~Ջjb>0댂ѿ’ۑಈg =9"ǫ봱гE/Iڥ˚jb וډɎ 菅ڝY ӎ фЇ֏ޥ̵ 徙 q۫P}@=HKi ȳi^”Ŵݖ K # 䓦海 ܉ұ50AhrsJE õȐۯٱڟ }ֲز╳̲ܚȐʶ错މ j_ܚېfK̄H<71-/-4KkԊӣʈى䎻卯 锹p?<ōȜߗk3%*]rWpnOњ$+5xK7ʛdsdĐ޳ ԋ뿈ΰՑ {sբß٫غѨɰɦѺvɺ΋݇1el"RuvR:)= 呦ӻԠԈ âǡԺԜ~!"ýϿλމ⸻l+1%&>7#!;Ll#d/Hɀ^ȞȻѺǻںuhȈ⽼ ɏȻ̕üب ꜐Ԓ}nޖϵׇ͇ݯӌ T3Eˆ؎ ⍡f䖫 Ň~@<ĒՇV5655%$!Qh+xq%ߋԑ ¬ۉħ}Ԍ Ԑًjh |b݉ߍտϪȈޭóЃ}8.Io} `oӐΔ ԒÔ‰Ɩ°}`g ]Օ1*Ѯ䰰֢郻Ӈь?2ܖ$˭튧 铕v֮ ш˲wʯ’}Ҧ汱 I捚ʀ Ht։~\ؖÌP/;ܓҢizΔ gqه /| axK1T ǤӞ{}1M ȅ HЉ Ч !ƾ²= {ᘞwۣ޿ʌĿn"-D~Yde߭{ýۡn7 ^葾V ۻӞvb(o ݒ푰Ȋ̺һǼޜҿ޼oGBI Њޔٻ |þ ܉ǁɎ"y `d݊ˌ50S[h~񓶔ׇ>Ϧ〶ҙfҍnև@ȉՎߌˎQ  ꔬ GҺd̘˜ h_̎쒻Ƈ ͒ϒ̷ݦ ؽ\1J}(mø՝碘񗋶ʌꠓ͸֔xl.5ʷʮ ajԌjl& η͖Ѩ ճ ^tﶺɄƍ摱зܩ؊ߍlj xCƆ19RA3ќޢꛉ ׮Ѥ FV,1ɣawމRNa$n슘 ߞӘ ͝ _׎ ճ݆dž ՐܴՔ䞕Œ <ܫWeo +?؊Ҕԍټ n᚞Ί& پͫ ԉʋ|ΌPO`1'ތ"䗵̔꣐~ }Äʺ鹕⍼ Þʋ Y*92S 33aޚլ} ͡ɈᠫꏾpP΋0\ۗoe۔ ؊ֈ\̏gMT}'ەʜ˚щʻ ̚Ɏ۽ۈ{ đ  ʔƫʌw Q}/׈]~ >2ߊܕփ΂ m ~qw֊>(I^{d ̇ƶՌ~V%r߄~|Ċ Њ Ј `v҉±  ƷߍǕ CB"ֈΛ6? m u#rԕ㟪ω~ >ShM^"u`ͦÐݓܓَI͢'w!ĉҐ߈ ֆ 徭͹VFW9&01N=?Љ҅螊 L/UϢ蕪眝Vbɷ~| EԔΘߣ̕韐贙f^r5U➑h׊Ԁ q鉱/H 휡,הՙϗ؉̨ٔѾԍU46$@IB8:(O ̗c{{ސߍʲ˿ݸหߐ 눬ѴʊlH-hx}W2Ș،vκjkp5E´ݪn☏ ܳYBݰEڋō̶蹈۵Ͳ>g~[t޻j01/> Ϊ𹴵 ߜʏ턈 ̠}Hxh@=sv%[Ï ͆݃ 󒍩Yp3`ك ڌˍcŵɛK9  Ww˯Ӊ節̒ pQ20[ڊꙜĬ׌~żཌྷ쿽ݾ݌ފ߬ͻߊ eMP}ǫ wƧx(d柞焰ӈ ¡qrt/z 倸 ђ Պa Z+: =ênɍǙܻȔϩ=.M“߻ܒٞZ之ėǖ߻ 푥 m'oɴˈn qTSA}Ъy)x Lj힘븕zʚ݆h.ƙꉸ Ϗэ çɖ ۉƗ κFhېҲ ϣđ\ s茱 D+Dz'މߺǤˍﴱƞȪˮԲ"etɩ߉ф @m述ԉfdɸy چ~Y$o ɲ#sƯºwl!&נ߭ Ώܓ ꎭ_p ט췊c ;ɗݳ܂ԑ ϔ݇ۯ 帷/,ډ ^ބ կª ~ŋǮ ȐՖώƓN ~҈ҋُԽ_&>┏ތчԏڐ</ނ ܓɁg] ۶ /(}a~knA U𜀗ܔͤtՍ߹ƞ07룏 џɋfػϼ伽ۻھ +|^፾ͽۻptŽ 萹}㖏̷Őzj­#؏ڻՆ߶ېӈy ȼƾĿ¥\ tj2Jǒ^g#_xЅq_<6ӹֽԽ>.ߊ솨ʋß ܒljμ ꏤ͖ ꖗ?XyΤҥ됓 򜔘ſ枮֑י <-冎ᵓỤ⹈ᝐҜحԈ뼉ΌC:y΃萄qۼ6“`.`ﻈ#ﺝ’ЊǓe񻸳ĄΩεƒ츷޹˶ޟߪ լҩ߷ Ѳδ!Цz,9`_yδukѩØﲔ ȡʥb" µ܊ ߓք բóԮɓ÷ރd[ߑ/NԼػŸ 혜ܿ6GЩ狮Ͳۇ۵ތ֓ duT߫ѕ$艺ވ ׆h=ȍ Ƕz꒓-+(uɼӟČ“ 뵖ڎŻ~9 + ԇ㢲ɵwfẑ液o8"_评 ߡ²ޙ4uօ ɳH)jӊ Րcqؚər{ŴףދԓÔה)D/o^9 7ZtŠαې󙕕☠̺)  գӘ҄ѵԒ_zˉʤŞh_.&ˉ Ҡ噐 -w'5ڑ zs鼏fԖ㱢ՇߡǨ׉ ҈͉ӝ^.H'޸K"%7Zx߮ꓓƤڰy/<okmr~7Ǡh ȝט ̝ M=l, I֝x Φ m蠊 фmk 뺌ǕŠԉѧx/bypB;[zx{~s̠ޏ}ӆ9׍h c:ebOD︴Ǣqo Ӵώ م =Al݈ N [Ø cn ɦˌ ߬j Ĥ ͊̊͐ӛԉo)7 ۣܡϢk[]p{Zu݊֕ 訤s(Aۺ׎яLH2t ߼s ܑƔÏ䎘.Sg]+82[[ ⌘ݙ~엯—ڈ ǖ>' ≪ڇȎъ߭ ٟʇǍaH̤ҟd`|}KXbtrXH:K㍥Ԛɼ}~_%> ۑȚփ ﹵Ž篏Hq.ډɦҒG+~kcܷ ꡎ#𬕒nj眰墝Ԥҏωȟ ͋֌ܩ 7JΒ ߗ۱ENLI3 60i촉גSKQf$= 쵈 ᠄̽64sʎ Y0 ї5>gzE\پݍŖϖB䷖Т,>ēٛ71P DzԚ֒kL9God"Qyuiiq(A ىيΚ ׏및 ݂qɨxǟ90⤗xًݥܳX1qv?!I岌Â3Kx էoвah*ތ ښ à—ų،wЍ t4;wΊ묁گd&54Kp^o 렙֎tlԼL:׌ ْ ّrx+*ʮjmԚY0ѷe|~Jᘜ;M٦y}t$ɐ՛ē‰˥ەє ꦐϋǢ絊 ߪ N0?{Ԛ ƼυĖr,)?<3-7Gm ӥҟڊߗ+4?E92169b ыœ wQpe*l듦Ԍl~˿,Ӏz\^i3;j)J u̅#Ƌη Uڿkuʝ֌݈󴅶֓ o91]ŽΖ 혞w?MmuW;)*.H^ԊӷʩƥĢe-?(MPgb ?.1">`çҋdc܄ Ylclג{z Ȋ+jбuYih~$1o}Ȋfk -ڇߚ 왐ܑԧѵ錵؈籫 ׎Š㖳غY.3f ŠƦƏ)ڈ}WӴW<0*1Ab}ɆГ!ȇߥ<0cɪC ܳl׶vG=80&&Dwjje`v_slm_bӉ-kjw ꍧƋ ѻ酪 ŕًߑهuɗ Ȳ ~M1"#3445,!/'Y ҟ0œkF%0*)6@g0Ɏ=0H|8.Q􋟇)Aݖ֍⸈{ǩG/a mkΑɦɷ2hUC*))?TLE^㾞z|xꍎy _ ڇۏ ֐דǟǠȷ / kkځǶ   ŗG17:421- Mяض˴>ĞʑHGC4;,-Ot㼹70Zw҉ ̶s!R Xؙތ쑠䌏&˵쮅M!6miA$62O︗aGO>$2*BMmڭлƥ}sȯec`RВ¸ۺ \ڭ ζ&᳻” } ^-ѸĈ dz ݒ̑م񺍟߽듺 NJДeJŭ*ǩnWmR0,)5@d䠭ɏG/jׂ-,x ڟ t'tqO#x^)6*-=_Z$" ׶vH))615Ri0aݹȷpx|zջΔՍ`㓝 ࠿< 𛙕ʻ,Ń鑸Ԩإzp羖ꌫĎϛr|^Lَ굁ٵѠ~XA,*,*Tl™Љݠc,QÖamꞸϏΛid2v쁑گz@=R85]\yɎܯfTC*,2JJ=뷕m]nkt sxwtڗrԝ̉f᧫Ӝ °Ŷ ًο 뛫뿑Œǹh]×{㾅麘@ɩy԰W5.*e䳗3E˘u+.af߇ shz62Tp풭x吔ʒLiGܕˎۙվˇ ŵȪ ҋ $苸趒ֆÚ璶 qTӐgaC*,Sr|㰦.plߌ Ƌ'4տ؉Ҏ܇u *lኖХ K6!h3ԗبcT>'"%C\l搲ڻÏίps’ʚԋڍ jkh{!ڋ“ۈ뢑 ̣Ӏđ @q2첔uJ7++-)eyv61a:҉E|⦫һ麬ߋ Ʉ| Εȼa,V혆ã7%c֚߸moycN4,*4>N|Ϧ%޵xbﭙ`sэ́ ; {˗՜׈ 䡓㖤ȌɒڵYyˌ˟_'-!2nȖA/ێ b@xzъە$G؎  -1 ~$o ϊタnD6%%=v ̶lܲ{n~HϘ ħَߌȡ ϗՉܰȌ ݍ‰ ͊ģHڱ7~möIJRopiyĕzNܢwΎL8݉ق۶X.oءﴸ 4< ֜֩f<#*--GXn UXԼt͜Z7-E뒭Ͷٞ ﺍ ڶ ؆ɲ }Ƀ'Ϡą}Պ ÍԛE몗F+uo_!7BNך\jxҳ{,zΘ  }<(`Awƶʎ.fؕš}d//-4B=<ҍξһj~۶z_4,dݜ э h Ӡ‹҇Ӎߔ݋师"bj燽͔ ҉C✨Оysמ܄}¢諊2~c4z·W^ʒ1GҋJ??hCʹB#\ޓIBA8,).EQ>Ȑ |ƤkEw էՈ9*`#•ÖE.;뢻堾 ̂ g ~ س갘~Ր~ܪ ɵ ޠEJ햜 ޏ׍ ̑̊̚8옅۷sxbh͎϶°˗rQWyo|פhȄҋ/:ٌӿ؛ [xca%J Ϻ__G#-'*\䕏ۖ{qzګ%3"6he[" /bߐ ɧ䩃Ѩa׏ ʃ  nb ˞Ʊ }Њă̦vf{rccMKrbi\lO7wa}á s?dim䕕 X0–zd:*#4&Yr\ ޮÑtÐ#UG_7(0/+28>]ǰuZ⭡̃ 顱ﷶ̶ڹ脪܆Дɳ ϻxiߴ] ʲ܉·׊ ȍˍ]fɏGeֽϵ[h؋Ǟʹ; ]υY2{ z_ @ΕՅ$z1gV=:+%Sts$ﮕ좍önijتى"AE>c^uέŔߍ焐ٳʶݤʑڜ冀  Ҍ׈ԅˊjOuڒiǗAܚƋBFtڳ0-담 n j/u{Ƒ!p+EyYI4)*;SZn饵ߴҭӓtּ׋ ۏ'@ħŊ…鲪礧ÅϲƽԎýӻ  и꾏˼ Ŀ伾Ę񙏳蹌ۚƼ҆ oŏQëƋ֕ fMǖ܋jQ{mQ̤ H7ԗ΅ -1.6Gbzw~ӍÓɍx̵uۻ }.AʟƼ 襝އ ŎԔɎp hgӄ ݺًۙԕ´ Ijb(_҇ԝ ­.V܄*٤L#KͣŶ{xyϜ$ޗԸl V/ǑԯÍօߙ Ѐަʌį֋œÛfsβⰲӮے񵱰ȿ܋ﵱ筈ތ͉݌ӼƐֆM9 俪̤򵱯կͼ+iѐФ^'a﵂ԩqh\z^Ie` 輤liOѮ۷ xK2O֯배ҭˋд屲dn騏_{崰ޖ⪮˕юيՉǛʉ|笐_Ʒ̙\ ͋ʞ-V麓ߪΓ †ť೨ҍϏӓ©X*U⾾ʐw|f]ֵԳdJQfa_My{Ģtxkz\ `R3O͈ կ`‘h~ w ИDŽڈ̻ ߍÇϋw׈ܶ Մ ꙝȽѹ Ҽغ ﹺ Żﹽ`(Ѳ֧*|ʰ ̑ͧʻ¡n]*>檇Ȼy7ptЪ|~|~tffcd^hb^g\SmǕnا~}xŻ̲A5s䶑չ эκ۶ ڷ ᨋ㖪 }ً萘߲ˆ䜋 ߔ`e ¦ 型,e𶏈ʒ茹壮_1 汣խ͞·h.Or<ɽ{֪¸ơx~cMպijʜRNǺܽhM3̤֏ උy~π Оݒի` ⤾ʟǓ䗌w~ж׵ʵ 򺷵 tbѳ̒ub 񻷵Ѷ钿>2À0bЖzzέ֖ס‹-bIﴗjﷸ󷻻`dy_PZ~ldf͵܎vNE4öǿ ؋ ܻ Yl x ׎׈bʧ }΋ȷ0 a˿ތ t,v Ꞇِ35® ፏ ݔ䩍?:Gⱛ̵}wyT巧_UJȾbǯٷxgjh̅ בOf94؅Ꮊ `M Ѿ-$ Ջ 쫇ܕ݈Їy󠏦و yn76Ŵņp`Xދ ܜڟ`0᳑Òye6]ޓѿՕϕϵҤ΂ ӟ򅲦01𧌟7m bҒѐ; Ҍ ⑾꫒١2Ѕ ؈i]k/PX$- ޻̸ޗ Ҫ+ ՌRExõ挣ۻƣƓ_n30﹃M~Ï d`me※ܥ 늟׍~⏝ ͊ 2܆ی ݐ C0m4/ ʎs b  iקּ2RԈkeƝه4 唟 đ?5ΕQ{yh؋ 㞟{dhڋΊފ د2乡緳ܷ45u2o݊ Ɏvjϔƶ  eϸG1ԉ LJۚ j 떿6K }b}诏⪇フuuڒͼΊۍʔĆ򦈰1ު݊┇֙c$)Bώ wѮ߉e -K֊ݒu#x֝ 㥉掙1͑ ϓۄ6M  ؘކ ͢Ԩ͎ۖ׷ޛ᥇0˵϶øߵ϶ ø׻ʷ`(&QԒ ِ݋ɓ嶻 ЛȖ疎ùT.lp ؝?0𽹸 ۷ ύꔜ? dž烩 ˆ6K綹 ؂䈥܊|ֆ Cî Βޱ- ی쾭C08z ԍ87ß2-v풒ӫ 렍ʊ,] {妐ӌΤ ͼΖ诗$ػ ؜㥔 μżٻμż 򿽼 e5,@RONGJMG,''-P>I#&-3m vEZYYWdȗZ_eexwxߚlSÔe]Tj[Pbbt bJA^W H}˘z\VY_ rkBKV*5Ȇ4=⾩D鵱fb]`UXSWC` r唐ƶ|HPzyzjq!J^?5K [RhHsNniI[t[?C`7XksBr:L؞\EdKG}鬦 Hatjp^K㬧|p[rFzHXmQZPޡBJUߩp{~vIkz V|g_HrAluon QKURgjE Bӑ`0Ax~Ѕ[S^"\NPzM~Lh`Fr_lQzT =d]ZggLohwnuYHHQXTM@jHS`Cy>R?tZOJﯚPу_mBn^LL|}N󶠤S(UzNJy\\`MnU l=Mp֣q}l[WܨXTMJYo̾S D  JJQ"sx.7 Nl`uRa|O ՟z_Qx`QFʆ@zQLPX%4fT dVbSnFmʽ CYg|^]dsfL JKGcXfec>qd#= |CR΢tt«Y@ Li\w PMS@POJME =A#W5Jm.;ZnMd^eMS{dakS=JGFXQ ~9uE[FSMG੦hXpSdt/`LWQ IХb jl[SPH [bLf<MfS7 Iimlӣm~jĭI x]uhܮT>]{ NCWw=[F(ȕxUrmQLݒd6U2F I\UhVZIHlDqBŦ |K@{ 6F< hVU\\ggo/!orWTWYWVSfTs=lvUKaES[XךG CeVNEcYwJN{qDD(NXXʚw{q evJWlG KT BH|fF5_QI&` {LjXd|vbbaZP@yn |LSDeEk B]hCCHG @l{oιt q]ܭQcfg{OoYVZYP hm`;維E ~/EaTSjuIJKcEFecUsJz0ńZM SDJ P?|\4{B^ (O)'Paԩ_}^"x}{ KtkFm —Dja AT㝞ixClB} ` {RO^P_xoVb>Lta[IMjz@bfbQmwWFُ_a \Q]hdHtR{K WpcMbe r PV0SƉ(剄cVгaShfhᣃ S O>S J8aJH]ewc0_#6?8lEUL NML~Q}|ɹV&Is.YzXQN~xRPXstoST Xy۱_SaPl~YmPLSL U̻zc^SpfF2ì lvwp]\/%Q`ذNӼtSSjnkM֍Ar]Iv7 _AgE]KGIKFaX_k1/p~ b.<cQSe LkkE[jdk DtiTj.?T\@\D izŋHKWOWMusOg\TZXԶoIˑ 뀂}s;Zp [RTTUYVd DVT}Fɔ 6Zauop+3bW?K"s8}AK#0\CSJ ?;iWQNrޚ~G@Ye3S7xy}SX@`δ iYRcp HݘpuU£`2h;GS^B`BSUjdTRajӴxwzgmPHmvxYLMg6 5m0`xaf(x6VSXo_Fi ם/N~M{p {9gU XޡIY{tc domӗo IxZ/HFw,IۓMf?𛑓 ƢYHrl cEhjQY|DJ ȹsI ʀPGG DXeOv{ Xa⼽ѐ{w ûĔruzXSO;SMqcacXr[*6CJdH`J_ Դyl.U}z@Y AbJs+J fBIHړvu ~f7_Cg?CJQi?l]> tȯ JnccQpyںҀ[OnKm8_Uz|qMR L5; \kwp᰼J _6sEo$>m:Ϲc˅iA C\GuXT},_Qc沘I` VfSO=~6KUtTyv HUM@a:d GfHeNHK Pڒ HYTStq$DֵB|A?CAGfb\c/ Wڷ@gTk ]鸸 GN\sfξ\ 9T R㾴 evvf ̽A~ʾऌR}CTh }K cGO&/RvAJNW`IK㓆vSyC 8'upUp2lHbaOMQAR`PACwdo\?fetL bϡIo FC嚎qFB荅Dy V6򵧽ݳіpB BR͡f˵ک; ]M`s|WB6|ewgXܟvxDLCaHsN?8/efЙͷsSpݜhtY rh9@ JNDN]gSzDX5[RUl҃emV] rXP_ EgYTGPaRrgbY%GbBk }THݗ g<괴]F n]]iѶ,FULLxhU F[aYORW|MCbf]mWRSSVUQlrz?ט6#&m{hn\S]=JsGZtPWV uMS `{RnayEaSWXIW NY >< %[Ṋjpjq4SATT`mɈcL}Ak sGũ A\oˢG ᢀswrtzhUT J_v<f@ vlWGVTNـNrQ:O8NܖRPw }y {I HIBrXcGKIH{QTgP~cM^^}F`WWCUKxSy_R fJ _K׶#TKVp~KUjye;RxBraeȵYdTXM}\(i?YpUPWwK| vdxHا 絥ݸR] pdRenH>˱ ߫^ql}wnFbD5S AFGUrʰ XIOS0?5JfJkf}Fbs*DٶSV zuEuAik@\ JzYEC\ ]Rfgk̀RE YO付f ][KSLj[Dpᏸb|UwH[spOVy_;McU Ɏϱ=m㓒 XvX}w|y|~7DwklR~U^HCyXaC♒DdG>,y: gK`\<F ёPf c±g @q~{ׅAHKIh\JB Q1P^BLўJMLIqݐWcxSz`#s`n:ZfX0=W/pVGgAOnkRQY~I`hkK֮ QU᫬Fc#҉yuz{q +/,ZO}l< YVJVPɩOK"̭kIVHJ iKclMQʭNTe }eܴBuS[j ymSuMRWwWcH8MAɄRTiDt\ΕT޴[SvSc JcL@M=eU XۜrWVWυleeȔ ֫S Ǹ>n_"鿰|mH@D:)`ً>; nTUa xM Jfq_GdKJ"ʋi| TUt LdMnUN>JײӶDS'Qۿ_nzY qa]kOުsFk^OFoS|MqIHm^ٰg}=bnpS1Bu&]`Rg`_[I acnTMpPe?uPVgcTʵ & WGFspad]w-p.v<)E*MG,*DmڸyJaC̆ ־Nд|d)@(u 9ZOudPQ w ̽EI{dNOF8bYe]XRh۔Gp_TM SWczcC/ pZQ6[>_otAx@TStٳnBwhH_]G{jZɏDw9鋓З^O#Nxp.-E>%4d`5kźöy;_ nPBrXLsݔlGcx}gzغXm>S[ `=yV VOM^r -LRK;\ct5jKT^۶ˣt-5OKKT$w\ndjEyw7ESTA}úu6ɏ3ÏfplDcQI HKz{VgRm c[J~DqYf.rXLI]?$YDŶ}|OFGhY [bKaDϖ=n_moT ?gpX\raqTT^CWHI CieH\fF ˫V[Bh FTcuGeaʌaQDSN!軩fxL`W!]wiJ8>!F?X?IH Li@WU(E@FjOɷja^rsRenzq 4^DzKuRs}traJABGJIn}Y]Y}ҿPBV]ѰH皉HqOHIrC?|]9xS PL Zji{ eeX Gȧ` Ѿý⹦jVSue h뷦I/CsGҥbͶ:@ldi` `xAB}eNYYX%2gHCC@AILKJLLWU#S~vr}w1JbYG <xl#p aZiх=jw\`;TOTs4YyROݨXOSN VSW؟ E\TUDTD:xA 2iPRnɷ|oEeBlK|V8ĹU_pM0G:7|q5S:K JPLcp ?~RTɲ6qMzU]WJĝ9ĻYB hLgI%GJJEKNLJMLKGBCCFC#n}ktܜ:߱@KNO Sr, Y kq\P@R=KLEJX+LIKml^V OA}MVxw볧 c(ѿJPYkVnA P;} '`xLP״Iڌi\Q *Ka2k-}yϒf)1y>2_DGu~l> SJHecPv:`bw5LsGƹC~ؚF[~Y1k%$eq{|ijHwL^ROb^ede]Yn RyGtdbXKedrȷauTBmxz|TseFHtnytv#ͣɳudy}5AumzyPA LdJ WSg^` IOBtQ jNsjKyлF>¸Y@x0%0#cy|~xϲpE?Ydv}B֐qoqx{eSav{{Mn3fSvmGd H+(@KpVeE/tI\Ec~G[YsxCH_쟜ufIYfϽjPꭢjb_c^HR7K_@[_PL_cV]SNq.ZOSeU;DjzY_ƶ BLY9㻘}}twzxs˨pmzw{t^,pqq7gG^H ޺iP{p Kԯ[UXtjdIdJ.@]C`Fm©E OcjOY\Y\QYíwkMCB:Ơ{ps~i[n~sw]fVʷk^*DHUPc@B2?}TFьHEE RJj_x`LRc Td`i\ļEћ rm-DA?[JsNg?wz^?thFFWQeLAlsPWqŶd?C7ɻsqyqpwpxsS0/&(+5DBKcx$o~b.No~~C:՜nFwHu\^Z[t}pOP(FϞX#62*dA1u@KG 0 YBv慀s#fKsruqyspvoqv07PfFԭur}zQ横ѦmR]j}ϜzykXYYZ^W:u zSF ΜSUrW} tZZ?ߪWJTSRTV[Bf< ̣VOwL`s`\AMM}~diVQSWsHY7DөxA^aHO4 v"ߦzt F{!q{l9GʮĽ]\PݯuX xsrSЪTq䢛 MQ@nOE*͸@ЈiTG GZSS]bmZpܨ;ꠙԋ_I֤ tut;XS2-asyuT {| lOq}O S@Y4U9QaH >ǻt~ ǽsFFTQX\Wn |{dõgUl NMtxpd 荑OgPZafmb]E>aEoޫ\_wn_⫞AD- ܯvYYRw~q T CL!7Y^U\TsF^U@trƸf{Dp`J< wdUnqLTm ⢡ {sUbTMX][Urϋ]8| zjV詠 beǤWVNܧCvT`| :`\jOLW_q᭪t~uFD5MD_?R~wRjMO]@xny[tQX쵧>tR ހ{ٰiBhI(_A| uvnUx NQ\qUHUo;UlICNb[ e` U=ͫལ_KᮣCojDSԔ ]9 >ҰhXGrrtg>s}w5:=[ctAqsSmW1y:\UnuSTec^ ᯮw|<S5մvI樦r rSߔr ^U꧁w@ w׀UBR=K~G\aoA ЮIr;w~ywxGVo3"Ad\YmcYZpM ؋LVq{еQYT[gA_QbBp]~UT P_yGRÏBpl󾫼WegTx{NOx:Ji bUCv< /䖎WOJbOK|^rfWUN_kٙip]l! ѳ }C= BQBbs۱RoN "9tkh~ ܻkRl ׅ~u?AB^LǐjFQhW%ۨJRSrb7+g}l[Urv|N[̗cU) ]kj!pw8 MsFEqt uqs^[un@dBWԮƷi{uV x<=shxITfN_ v`t pRsJLLNDbڴWDeۛGe rSk mbq򰋃JZqSE\QoI oRVUiZ CFV F}Ep[Q^kSRAj~} |0To Q]\H h`^qIcVJ|Up JvkTXPukZWX`e_│FZlswT|Xd>AQmyHپUSSiPv8H[Ѵ9?>PUP:p4H>U_OoTZ^VQKd%볡I;TQUφDfs`Ws txtmOzBJ߉=힛YBݾjq}p$G X_^[EpEXWJ N>^ISb@\eh ʲN >BOrcSL]T Sn{{4#%Lپ }^p bDSWZP>W aUsRp?QZ EḶŚgMyyl[ NLkTK]xL{{㬚iPǁcI[` 2WRWPSsWP`̧Lű۽V_E vaYSWQJ`IWQfKO[Qa^jSEoCPAD]NFLYDL U kKSd銽:naZE˾UѢA^?0^xbb\lnaJdN VLA }fQQcXɈcUsQ IiW\CSc涒IRpTK 0#[}mIi|NyDJsvH[|js W{9@iZvJfSaMh]'7mʵTuNVIR ?{WjEceL}EߢueMJKPUWI @[d^FHzDu<>fѹùp| tPV TޢUmOE[kNX \p7Jcv{sxhKܘg1^JZRI UXkҙ' E˲M*`SLk3k[sLINL`MSReiL]\Pf7= Be!?OFf5t֭MZI¶~g)D-aW@;Y o YUXmC{VMm3*HS YE}\=FqY^BgJTFqr&N޹ FUTR@ ȷyVvuHEjѻkrT FǴuE SC]T!mL; v]d*6n컯Iƨk])h ~0:L<jkCB$RsS8^^b`mN[xwI`B^]FFނmNlItnT0 _fSvS[G CxJSZW} SfrHϔQ\Jd MUNaNS@PpBBmŭބAs ;TTgRTo ]b㙋Nb鼟z%|BnݳVhP^[IIM^MtjwiUckͮfqirYAfLDZ QieJILKY 敚KРZJw`Yܰ[wB[ s WRI^nY?Tf]=lM[ѥLQVwqsoCޅErFgmKDIcXX {;k6Bu鵷\}e_zY6`BxYObE_jxpӘn !wkMbHOnQ)TXdTEtp~|,N.zo[fG]Wh\cTXg9fMV WN 9彇dg?}BU]fUTRțEsW^reX^aQFJ ?Mo=yPXIs} زuG?L8Ė^Gמ~ A.}zGE-yEÙdߥX Ec]I62SW^[G ve.깯VU`MpJ|p?E"\WmwFUmQqLVykG5O 7YA<P׋SJL fG 7j.9MئX}=, ⫸_|3M l5L}]nvZkgnHOӰ`LPO'GİZWPF bc xujxFRGhCWPڡt-=;ʤӶvTYnXdO^u`lETIJ\ ZyqEƗ]El0ۅQ Ffwjj V✖ǂUeSJwTOFqҷUx7Q 伷=GY2q7zInx QZ֥r lt3oINpBTq`0 7{w B_YGij@hK4}^r<;xį>s}41eFG DLGsMD H:C]IFVOVpzcrm; b鿪LY C-"@a TY^N ʭXKFӌvxtN|FRi[5 폇Q(K(dPIsslOTYC[VMnBYK':zܩ"lF][APrD|N u@] ֙~x[\njXKGe`ˑHD =rHet|@nfGMꞎGj L2XlORUu@cfSzUҽxz ΦXC\xԌj\DS\ fO&3?5+xqϰKO `GK@G<p UInGwtU`1KH]< [JNL[?urͿVN V~~P{viS`{NFjwZ\[PTXV qHkzG^c`7|gsI5dΗMqJlJGgYi߬؂G \06m}}{xy xy~uϳggpx^VbDm>GD`[LULMn{vkW. *lb/s NͷTeS GGisZGwxyy|n v`Q9K =yF|DnpÝKpa^Ea ]WVWqٻTSgKjԐIZEd{\Xͦ[MvRrF WKRzqnPe'oDM EG>%s~Ы|ӷ bDsg\GߎX\/`DcCq]EY;9e ]աtG[aϐZ npGșw |_M;tO nꝂUI >vZ_JI S콴}~.H'EHco͒`GipUܭLbf7b!8 %xF}K= @m]cF] FW u| byBFL##ؼHGi{tޣOi>?k WLM~tsBP7dn ~F[kwx n|x9|[]ɇLDQ vJ\RHC?YR| NӶIES `I> TžޝTurxw 3SĢH_QKPGXHʲJN.~BDHr}Kps^XgLVOsKDCuv}Q𝎋ODs:j5@Fo{qr9P7\SɑYy vHRLW5|KfBt Vd8[WerjZj7K̒@[fݶGbS oNKR~]QZ hmHqH^8?^LDOUc{wbzBx!m`JrtQJ}po\htucM P܈3}UZPLn?SKPװiMjwwmDЛPv2k8SˌubDz|=coqPhDr@-H gyy oKETUGaD&7+NF?^bMAe4CgSi껵GAv¬Hk;tM;HTX ~vTQЬFfq pRZiC> i\MQZ[[>XFEmwyh]{u PUY"cV^Pg@Lm7eWДpVN?ґCeQ?WnzPNٹdG}TAфpHśL=P>!wGiƼM #UP{sǵCd`kM?@6}Wae_Gn uywZw[^^=w <dx: }Bhcq u!ӧZV]t{frwA[czo]Wy jDtx F濱PZr|py F CU3 mMCe~^YcQפֱgz{iQůEFwP[I` ]cmaHLK5JIU I 'TU rNXzYzEWMCf @h2J~ nF.i筞tR`mrw{uth>nJPT ߋZK<fMazx Y 8Ee`)H`1y}Jej\lBG akKWZY/v>J ꪈSX߀hSN=orFrYHQ>zWI `Zf=fLBmDfH^CYUpZ݊V|j ַȖ]MQ[cmps 뭁^Q\SJ_XX]j@իZat F ϋT?]c=C\.vr,QbS #jUj7KEX\ N]_i_QT +DHnEXUYP sE݂ X.$ݗNWXkL߭^ݼ[r ybALTkmڧvZRgEy aDE?a̵㻕dPRWU`kjfl{^?gUTXpϘSăFw}n OaEQ`Yv>ԑ!(1]xVvM[C|Ykja e^K[ Ce@ G=^CXaμڠs  mMc*s isI INjFt Z= ޏnXfEdNNGEtj \nQR_ǐjTPQQU\cgmsuqiDgKpNʨMj|wѦJ HxاD8 [g#14t^OHTMLlg `NP ?ps_  SDz .[_tBgC  tn4QK {>fX6 pJf QWzImGinLbDEQ?a EnDjm\ɄeZ_]`_bfhjvvsRDuGTX ֫~w٭MUMcSO떎蘨Pe1[^#|W=V ̕yx}#z RWXfPYzL]Щ Vor+8gt|bc]\\ZjxU JZxjZ[5!_ZGsDzCZR|>'MRTDzA}?saG{USMP N[CLZi9uXckW7oƢ~edfcb8):cheT@nKrD`ĝ/Lzl0Nw5VD`p&EFoYMp@ OŶ ;jzJS弘]qsqlK}YZОP}ZrҍZkyBmsur,BQU`JV`ZQ㿜QNhpW U`TyY7'--%9b:{? wSsX(0ۭFFhOa MO߂NwGcP ϾO{ilOVFĦGL~i`SPC.)zKj^MbvJ߽uJOTC RiESetqPD.QNMMnC@q沪 BīCYqZaXŶއjx}HV]XЭf]jr.3Lz)F:HUEVHTpr|Zm}OW ׳m| PtQCδHmևCsuWOQ ȿsXYaZI{S` YDT֚w_#B¿0kICrphւ||1+UzRjIPU i^ KXPOI;8ɴUtI5Zڮ׵ہqwgfj3<Fr `A'1:d }R\VS`Fy F[PkueIDV<TPKkd~ ̹NV ]fHWy!szv{~M$AȺdGtxaSr]nW`Rx =eueKIk rdF T=fa -.8뢞O^T/.j HsbOhgԶ֑luz}thz~KJWi2G[U6UbXG2@BE(8fH^ dk^QSiu |xNIDل{HNROrEdX’TjŶW ~t^OPߐozR/iĺBU^!B_L]quk7@8ܻsXwN- ̻LuQ^jR |PNe~kd `A@=[ܶfVJ3TK ݏEt 80¯uxyozA wmQHu@PiMR 隊I @ޙU`cFQw\aQH䗅Sӻ1 RRwp{s-k}s}"]ǹ}V/9ӾQNŐvxY!D÷nK'b ƭWlkKl[fDPhdoW оx\Sm~~vny{zyfynzr xFaTܵbB+b wLsڶ{;S8pE ف@x CSJJ]RPa%_@[dTd מ|f^`T`M 4Xs^wDHNNLIz hJ{b0,0itՆLdEG^0M\P`QejsHkn9件{kuMԷGhB)CWTThLPi8Rz~cPy¢D P„?SOEs[zwVVo2ýŰith\wv}zLLzYֱJ=J COc ǘAKGdwPbjzge[րueo 0 9Ljf g鶝pd ` pґ\``^FmٿGh X9OBoIkz~vu}Ϧ2?IX9SKFH⹶kW ͥ Hڇ\LJQjBD?J&nt"la`9Ӽ;WZ][``bQNtW<;Zl62Fuxsnv{{wyyr}|xfS=Kƒ mI[x~ ՑJS 4EhK t\dvR#LW"[D~ЎC TQTm{R>ZBߒLiX GRW L6OR|sywsu{try{]CǶxc}BiO￶q{|Zܲhu=`k] hr@z Щ>%'zQSi]{`п`4Ghk ݡMtKc Uw˽0Et|vyynXPtM^sUe` =׏Q<` PDa^Zb&ȴsxM\ť9NTfNcc 6P\Qt T/tfqQº<9_ro5LýѐI܃Xͮuo|{{}}xJyElZwvԈ\᷾}s ]IbʰhyrcB IU$FmQOԶLzVoPQoTɹRVsW̦ECtm?V|URĺּ_`] bK1#Bv oI,WlO^hn?BKaZ>ĔO@L (izvK{x~WI<;GTpxq󔏑AݜFSIcm?oA{0Oi=XqhpFw@Gz|{|uZ^9[BP孄qQf綣_hj^SC,nQ_U zqNN*tzWq̈́L@^i?WD Jͧ CGd`:XOPc=ZQ. rj8xb`X;X%X_9ҝMJ^@ln=V}> 㯪 ^ey Vcv3cZNqQT_̸LakO2|xt~NtUxJ{sA?t#QTcaIRtkQ\`?: U~/!Im<UD񏐑mR@ o?pկoC 8IRQl] wz&V~2DóC7k'#N{NXe jrE`ff^t{f}H>m@V2 sw辦G˱\@`os\`^TXrɖ^LWʿ ErhZntwyuwPYPJz~_rI$FLUWe\˧;9Kx ڦFYײ_ix 0[̌dJXCj ZMkVZoHIʩQLOa_]e[zI1q>IGnN$,sv}>Qzt_Zѵ^T7vwy}Y~k[ h}n?J r`kCmfRSQbtN׽ٚ^]LrMhĆq?*5F>3pd]f]WnwGt]z[)JbZǸPM]}?d Q>e oWlE[uNro Mj[ IfB݁LXw9gj5S"bjBGDڛ{]QSOmV`U OFCEas_0lq`ru{|M&Eku5-$i,R7EoTL綾SIb\tdEEQYΨTIq|_]A7NNEwxvЫzk:WeNh~CG۪ Hx}txrL2g tPJDaE)(]p#Jöljѝ~wxw}M Q̐2 p 75 ‡jZW\bjZX~MQ汋,Y5uYU킁EIZcS PXrLW _QG8t}~J$KDAU~~C/xvr{r-1hplY$sm02rLɸIﶺJz:^PUahfP xq_l}aCQxE` M5?U`LEYO]dQZi/Lnujs{x~rxxE^%WWgCWmU;TOoEi vJX\4SP`P]wQc|atO՞ p0|8 eS y@ecV gTZq履Su5 wG=f1QFɄza(#RP*K;~rt}^vLJN*9pLCxv{/FdSwqfSɸm* 2nT^Wlex TddcYY``aXYs:лȶ{DACՇg ˁ@{]wgYw~~k{P#K]bXd?dAa\DbQ}]T3tIH} g}ɜzUE]cJ=zDպr3/HW #]ȶ ۬lXtyehE>F ]KRKjyOA~Y4$]|%xҹ8GmLERbչrz$-n@HO\p0|zm/DQ dX|}{?$aHemmĻoekh$YDmM[nQ^>RIc;M1oOgSGYx 9FILZZ^Ucb jUJDiQdz|@eFciz{ys'i}@[XAO^y~P&#hň;IK tVdg εuyoR!lnBſ|rwvr̉^Uи~ה~g$8O$wsrl N~t[iu8x;v5zSZv2Q賆FcMgI? pOL ޘNH PPn]^_OMۑJU_@ M˔{y{1{JY f3VXސb0zo4nIp MR ՘~zp?W m:gտ[K_VϐtyT3gwk Zm\PAqVXO3 y?BNNfCMEORzz6>c|k ʒ`Ev;I^FXe ENh"dשэFAhiZXUe E~]rt*p?x]Imܩyw|xwsquy[Jktc^Xzsy~mжlq xykvKY?c=K6_WΊ[ Tᕄ1SfIUHvQv?HCWPb`$CPTTs^TjթH~D`IdEJKu|Mm15>qĎ\DiiX]]V_FN ԚzigmqQL״%nspL[ZS˯AԷttyu!vxrnO,7kaʷ>ze~v~:kO~S Y{nv|S:g:3[\f iwPU.P铓GWXpEWcQNO59bFؤ2}P[S̬>nA^IiwuuwgEU7ntv ~>H0~L/liݓVUws~zH˱Ts~` ArDh·vLsPOmUIxFdhI|ĴUuLJyzt3*nxnrxg?u~{z~|~T/8D=r>Gxwuy{&o{qIM}s*~W9P] ,DaPJtONjdA iU=eL _b `Zꪧ[Ƕg`CLDbKV8ڴ=ҦTV qtC~>>pSBu<]iQtIV~lKM˴pw#.}}|xl7a {xovzqmulnqy@9`mi y|}}d,|mj{qox+RoH]=pDR I3Le\_ޚ C PY>ܛ}Yy ЖbhHs[R^폊cM@LNNrA o~bHF KWF rWE eHӴNDwSuFiQǷw o؃mjrbB~LȯgYyj AE B`ԫ ELSW~^XtUlXH twC \4ہNfOMzBZzIsVD\J&&yvKFLw X}6V/MrC1>HyZF}QVB`}^IevvHq>HU*M఑EI @x\ڵHWSOQeϱd ҕ qEG_ϯԭcb^JVJ3 OQ uy[ gc_Fs<\dAE dmvoŰQiu뢾qZUMUq] N-L/qB fyJDup=wK묎sSV^][R]na|T G ڮIU [cYPYNrõ eX 㹲  KWcJ@n? @;wlp q}U ߽Q[<eDqdHG蝎{lu1IgA EZg|LZ` VLXd/H- K<~|øyєyxM _Z`Lv~}lEvOKR{~>乹gH TSM{w dM6BP[y~ֵFo3rQbYIuodf aaӶmxYۂ[%xE _IVGET=  ɷV\JkW٩+{ Aɥ]bTR ε@>K 䴰Wj_F ֱƵovҳSSz|QabUu'^ZcNSqF^ŋ PȢGQ{RyyҳH϶lFFS7^zE`OwcXtB uQQBL\ sTX^ Nc@Y4  FMʓpnHתL C跖k[ ~M k[TYi꺷 hEFH@念`͉9SJ[V xs˵h?~Ӆ[?' < 5\ q^?C\d ?jc:ŝTCMۣQn MfѹE\m_LeނceDM }_bUXLIQkRs 뢢]C{Q ?POkdڷpXIV^[ڐ 񯏏 e7W[= |vĶG]`bO_lwf够 G8{QdYdT =t\Pzljč[~ HUyhqgJv[Bu nK9F pHKSKh|zVè]Wf?XJɓLٻ ޺sLʯ aˡ`^ @\ wƶf Yy٘-.Drܦ {@AB>[J_MlKTcWX `K֥oN >IhQa:QRDhG 5ޖO<YE$BUM[PFrY\ʶIfVVǒ ^g!Y_tSJROɲsqywøW= JqpnNي<_ZPW<}bYUxdҰGq MUo=GknnVKQ [aO @٢gPN ;ktҞVWpIY V^_?Yx'_ ķmǫZط F!kgVOhRNu+">?ﵸXEWNPalq KGXYI X eO]]yWsn[c~y!OVDz^nHm`Xޙ lO[z[dWfQQ wmP;SXYJK[Vtj~\`S4v VWqJ3NkQH [GddaH |xyO\]sKcOor^[AUbu#e\IadddgD?Z(Kl]LZs̝H¬ͭҪCBw㾖b%R4Je芖P=\ B:c]N؜w BHDOXB`@EY?l {gsKtRJrDeMx8QGWWzJtnrHBdda[mS_kL2¬bccaf螘֗cW9 r醴Wۋ^e ldZVCf=1KQ WiKSY~ii~b\AذQ}LI{MY]Fyd0(N ?9SzTrIԛ̊>Y`bjuYrNV@Kbᰬ߬Izx~jťܪf搕e0v]߷_Vl@H yaR#ccf˔ \U`RxvIXD= C_EGGIT{I?LPS ֈ ~y]ZTE}p] N՘Fd=OZP[Z[^e{bV{ljL`Ry|RTSOUIR™ǚvnҮM |OYnLBV]Rّ|JtLBF7W[k=ڹSw_9}a`[`HBwkiDTNq =dN 분d O#PKW ` Dd  8|GwiTdY?N[c⫥բrost|t:IfZs:Lgї}Ќq(4ZgZVOY~gDU RIV CbJHOIC[չ@vҀ40,nH ddJLHUOsVMNW o Wm8K ]Z}y ָ^eJU -KDQJ@ :]Qdq~wyiɏCIQǐ^O[ SSozs@^Hac@ rNKjW]Mۗ;Z?_OMY@؏`d{`Q]o MNՆlxUfW_ JxdKz=KL , 1K1 FRFh|ƕw}PXq}w|>Jf]QBE @ (:K >Bw ȣwM߰U^ YRqE{M yfUz z8=mDO]Pl fo]oTHD {}KXWڢ딓GPxVvwy೿Q Cki.i   $$%!!    @ @ఀ@``  p@ 0PP` p0P`@`@@@ 00000P@`p @` `000`P@P `P@`@@`@@` @@0@`P@`0@ @p@ `@``@p p@ P0`P@`0`Pp`0` 0````@`0P`p Pp@@0@@  P@p 00P`@ `  @  @`@0P00@@ pp !&1+i`la]W_`fsYh 0@00@p @ ` `@@` p@P`0@0@@00 @@@p p @``@ `0@@`@@ @ ppP@0PP@00@@@`@0@ 00 @@  @@@@@@@ 0P@@00P@@00P@@p@` p@@@0@@ `@p@@``@` P@ @@P0`p@ ``P@0 @0P@@ p@@ ` `  `P@`0@```p@@ @А`00@ `  `0@@pP`0p 0@8BIMPatt8BIMTxt2 /DocumentResources << /FontSet << /Resources [ << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (FrutigerLinotype-Roman) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (PoorRichard-Regular) /Type 1 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (MyriadPro-Regular) /Type 0 >> >> >> << /Resource << /StreamTag /CoolTypeFont /Identifier << /Name (AdobeInvisFont) /Type 0 >> >> >> ] >> /MojiKumiCodeToClassSet << /Resources [ << /Resource << /Name () /Members << /ClassMappings [ << /R (55) /C 1 >> << /R (77) /C 1 >> << /R (99) /C 1 >> << /R (;;) /C 1 >> << /R (==) /C 1 >> << /R (??) /C 1 >> << /R (AA) /C 1 >> << /R (CC) /C 1 >> << /R () /C 1 >> << /R (;;) /C 1 >> << /R ([[) /C 1 >> << /R (  ) /C 1 >> << /R (00) /C 1 >> << /R (0 0 ) /C 1 >> << /R (0 0 ) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (00) /C 1 >> << /R (66) /C 2 >> << /R (88) /C 2 >> << /R (::) /C 2 >> << /R (<<) /C 2 >> << /R (>>) /C 2 >> << /R (@@) /C 2 >> << /R (BB) /C 2 >> << /R (DD) /C 2 >> << /R ( ) /C 2 >> << /R (==) /C 2 >> << /R (]]) /C 2 >> << /R (  ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (0 0 ) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R (00) /C 2 >> << /R () /C 3 >> << /R (^^) /C 3 >> << /R (0A0A) /C 3 >> << /R (0C0C) /C 3 >> << /R (0E0E) /C 3 >> << /R (0G0G) /C 3 >> << /R (0I0I) /C 3 >> << /R (0c0c) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R (00) /C 3 >> << /R () /C 4 >> << /R () /C 4 >> << /R () /C 5 >> << /R (00) /C 5 >> << /R (  ) /C 5 >> << /R () /C 6 >> << /R (00) /C 6 >> << /R ( ) /C 7 >> << /R (00) /C 7 >> << /R (  ) /C 8 >> << /R ( % &) /C 8 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 9 >> << /R () /C 10 >> << /R () /C 10 >> << /R () /C 10 >> << /R ( 0 0) /C 10 >> << /R ( 2 4) /C 10 >> << /R (00) /C 11 >> << /R (0B0B) /C 12 >> << /R (0D0D) /C 12 >> << /R (0F0F) /C 12 >> << /R (0H0H) /C 12 >> << /R (0J0b) /C 12 >> << /R (0d0) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R (00) /C 12 >> << /R () /C 13 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (00) /C 14 >> << /R (2 2C) /C 14 >> << /R (22) /C 14 >> << /R (22) /C 14 >> << /R (33W) /C 14 >> << /R (3q3v) /C 14 >> << /R (33) /C 14 >> << /R (N) /C 14 >> << /R (09) /C 15 >> << /R (!~) /C 16 >> << /R () /C 16 >> << /R (  ) /C 16 >> << /R (  ) /C 16 >> ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /MojiKumiTableSet << /Resources [ << /Resource << /Name (Photoshop6MojiKumiSet4) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet3) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet2) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (Photoshop6MojiKumiSet1) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (YakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 1 >> >> >> << /Resource << /Name (GyomatsuYakumonoHankaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 3 >> >> >> << /Resource << /Name (GyomatsuYakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> ] >> >> /PredefinedTag 4 >> >> >> << /Resource << /Name (YakumonoZenkaku) /Members << /CodeToClass 0 /AutoTsume << /TsumeMappings [ << /Before -.5 /Code () >> << /Before -.5 /Code (;) >> << /Before -.5 /Code ([) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code ( ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0 ) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /Before -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (=) >> << /After -.5 /Code (]) >> << /After -.5 /Code ( ) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0 ) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code (0) >> << /After -.5 /Code () >> << /After -.5 /Code (0) >> << /After -.5 /Code ( ) >> << /After -.5 /Code (0) >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code () >> << /Before -.25 /After -.25 /Code (0) >> << /Before -.25 /After -.25 /Code ( ) >> ] >> /Table << /DataArray << /SparseArray [ << /Index 1 /Elements [ << /P [ 1 5 ] /Data << /A << /R [ .25 .25 .25 ] /P 1 >> >> >> ] >> << /Index 2 /Elements [ << /P [ 2 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 2 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 2 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 2 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 11 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 3 >> >> >> << /P [ 2 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 2 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 3 /Elements [ << /P [ 3 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 3 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 3 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 3 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 3 15 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 3 16 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 4 /Elements [ << /P [ 4 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 4 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 4 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 4 15 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 4 16 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> ] >> << /Index 5 /Elements [ << /P [ 5 1 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 2 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 3 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 4 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 5 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 1 >> >> >> << /P [ 5 6 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 7 ] /Data << /B << /R [ .25 .25 .25 ] /P 1 >> >> >> << /P [ 5 8 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 9 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 10 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 11 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 12 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 13 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 14 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 15 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 16 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 5 17 ] /Data << /B << /R [ .25 .25 .25 ] >> >> >> ] >> << /Index 6 /Elements [ << /P [ 6 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 6 3 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 4 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 5 ] /Data << /B << /R [ 0.0 .75 .75 ] /P 1 >> >> >> << /P [ 6 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 6 8 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 9 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 10 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 11 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 12 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 13 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 14 ] /Data << /B << /R [ 0.0 .5 .5 ] >> >> >> << /P [ 6 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 4 >> >> >> << /P [ 6 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 7 /Elements [ << /P [ 7 1 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 3 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 4 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 5 ] /Data << /B << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 7 7 ] /Data << /B << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 7 8 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 9 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 10 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 12 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 13 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 14 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 15 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 16 ] /Data << /B << /R [ 0.0 .5 .5 ] /P 2 >> >> >> << /P [ 7 17 ] /Data << /B << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 8 /Elements [ << /P [ 8 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 8 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 8 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 8 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 8 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 8 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 9 /Elements [ << /P [ 9 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 9 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 9 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 9 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 9 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 9 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 10 /Elements [ << /P [ 10 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 10 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 10 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 10 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 10 15 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 10 16 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 11 /Elements [ << /P [ 11 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 11 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 11 15 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> << /P [ 11 16 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 4 >> >> >> ] >> << /Index 12 /Elements [ << /P [ 12 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 12 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 12 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 12 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 12 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 12 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 13 /Elements [ << /P [ 13 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 13 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 13 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 13 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 13 15 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 13 16 ] /Data << /B << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> ] >> << /Index 14 /Elements [ << /P [ 14 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 14 3 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 14 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 14 8 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 9 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 10 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 12 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 13 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 14 ] /Data << /A << /R [ 0.0 0.0 1.0 ] >> >> >> << /P [ 14 15 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 14 16 ] /Data << /B << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 15 /Elements [ << /P [ 15 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 15 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 15 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 15 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 15 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 15 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 15 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 15 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 16 /Elements [ << /P [ 16 1 ] /Data << /A << /R [ 0.0 .5 .5 ] /P 3 >> >> >> << /P [ 16 3 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 4 ] /Data << /A << /R [ .125 .25 .25 ] /P 4 >> >> >> << /P [ 16 5 ] /Data << /A << /R [ 0.0 .25 .25 ] /P 1 >> >> >> << /P [ 16 7 ] /Data << /A << /R [ 0.0 0.0 0.0 ] /P 2 >> >> >> << /P [ 16 8 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 9 ] /Data << /A << /R [ 0.0 0.0 .5 ] /P 4 >> >> >> << /P [ 16 10 ] /Data << /A << /R [ 0.0 0.0 .5 ] >> >> >> << /P [ 16 12 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> << /P [ 16 14 ] /Data << /A << /R [ .125 .25 .5 ] /P 4 >> >> >> ] >> << /Index 17 /Elements [ << /P [ 17 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> << /Index 18 /Elements [ << /P [ 18 1 ] /Data << /A << /R [ .5 .5 .5 ] >> >> >> ] >> ] >> >> /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> << /Resource 5 >> << /Resource 6 >> << /Resource 7 >> ] >> /KinsokuSet << /Resources [ << /Resource << /Name (None) /Data << /NoStart () /NoEnd () /Keep () /Hanging () /PredefinedTag 0 >> >> >> << /Resource << /Name (PhotoshopKinsokuHard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (PhotoshopKinsokuSoft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> << /Resource << /Name (Hard) /Data << /NoStart (!\),.:;?]}    0!! 0000 0 0 0000A0C0E0G0I0c000000000000000000000000 =]) /NoEnd (\([{  00 0 0000 ;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 1 >> >> >> << /Resource << /Name (Soft) /Data << /NoStart (  0000 0 0 00000000 =]) /NoEnd (  00 0 000;[) /Keep (  % &) /Hanging (00 ) /PredefinedTag 2 >> >> >> ] /DisplayList [ << /Resource 0 >> << /Resource 1 >> << /Resource 2 >> << /Resource 3 >> << /Resource 4 >> ] >> /StyleSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /ParagraphSheetSet << /Resources [ << /Resource << /Name (Normal RGB) /Features << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >> >> ] /DisplayList [ << /Resource 0 >> ] >> /TextFrameSet << /Resources [ << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> << /Resource << /Bezier << /Points [ 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ] >> /Data << /Type 0 /LineOrientation 0 /TextOnPathTRange [ -1.0 -1.0 ] /RowGutter 0.0 /ColumnGutter 0.0 /FirstBaselineAlignment << /Flag 1 /Min 0.0 >> /PathData << /Spacing -1 >> >> >> >> ] >> >> /DocumentObjects << /DocumentSettings << /HiddenGlyphFont << /AlternateGlyphFont 3 /WhitespaceCharacterMapping [ << /WhitespaceCharacter ( ) /AlternateCharacter (1) >> << /WhitespaceCharacter ( ) /AlternateCharacter (6) >> << /WhitespaceCharacter ( ) /AlternateCharacter (0) >> << /WhitespaceCharacter ( \)) /AlternateCharacter (5) >> << /WhitespaceCharacter () /AlternateCharacter (5) >> << /WhitespaceCharacter (0) /AlternateCharacter (1) >> << /WhitespaceCharacter () /AlternateCharacter (3) >> ] >> /NormalStyleSheet 0 /NormalParagraphSheet 0 /SuperscriptSize .583 /SuperscriptPosition .333 /SubscriptSize .583 /SubscriptPosition .333 /SmallCapSize .7 /UseSmartQuotes true /SmartQuoteSets [ << /Language 0 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 1 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 2 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 3 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 4 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 5 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 6 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 7 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 8 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 9 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 10 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 11 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 12 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 13 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 14 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 15 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 16 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 17 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 18 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 19 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 20 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 21 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 22 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 23 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 24 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 25 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 26 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 27 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 28 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 29 /OpenDoubleQuote (0) /CloseDoubleQuote (0) >> << /Language 30 /OpenDoubleQuote (0 ) /CloseDoubleQuote (0 ) >> << /Language 31 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 33 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 34 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 35 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 36 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 37 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 38 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 40 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 42 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 43 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> << /Language 44 /OpenDoubleQuote () /CloseDoubleQuote () /OpenSingleQuote ( 9) /CloseSingleQuote ( :) >> << /Language 45 /OpenDoubleQuote ( ) /CloseDoubleQuote ( ) /OpenSingleQuote ( ) /CloseSingleQuote ( ) >> ] >> /TextObjects [ << /Model << /Text (Q ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /Hanging false /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /EveryLineComposer false >> /Parent 0 >> >> /Length 2 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 1 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /Ligatures true /DiscretionaryLigatures false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst false /LineWidth 1.0 >> >> >> /Length 2 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 2 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 0 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 2 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.33302 /SelectionDescent 7.19401 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 0.0 7.19401 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 2 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -12.736 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.33302 25.472 7.19401 ] /Glyphs [ 52 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 2 ] >> /VisualBounds [ -12.736 -28.33302 13.09711 7.19401 ] /RenderedBounds [ -12.736 -28.33302 13.09711 7.19401 ] /Invalidation [ -12.736 -28.33302 28.73585 7.19401 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 1 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 2 ] >> /EndsInCR true /SelectionAscent -28.33302 /SelectionDescent 7.19401 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> << /Model << /Text (QuickRoute ) /ParagraphRun << /RunArray [ << /RunData << /ParagraphSheet << /Name () /Features << /Justification 2 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 8 /PreHyphen 3 /PostHyphen 3 /ConsecutiveHyphens 2 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 1 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << /Font 0 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> /Parent 0 >> >> /Length 11 >> ] >> /StyleRun << /RunArray [ << /RunData << /StyleSheet << /Name () /Parent 0 /Features << /Font 0 /FontSize 33.33333 /FauxBold false /FauxItalic false /AutoLeading false /Leading 249.99991 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 1 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 1.0 0.0 .00009 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst false /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> >> >> /Length 11 >> ] >> /KernRun << /RunArray [ << /RunData << >> /Length 11 >> ] >> /AlternateGlyphRun << /RunArray [ << /RunData << >> /Length 11 >> ] >> /StorySheet << /AntiAlias 2 /UseFractionalGlyphWidths true >> >> /View << /Frames [ << /Resource 1 >> ] /RenderedData << /RunArray [ << /RunData << /LineCount 1 >> /Length 11 >> ] >> /Strikes [ << /StreamTag /PathSelectGroupCharacter /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 0 /Children [ << /StreamTag /FrameStrike /Frame 1 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /RowColStrike /RowColIndex 0 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 2 /Children [ << /StreamTag /LineStrike /Baseline 0.0 /Leading 0.0 /EMHeight 0.0 /DHeight 0.0 /SelectionAscent -28.29996 /SelectionDescent 8.41471 /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.29996 0.0 8.41471 ] /ChildProcession 1 /Children [ << /StreamTag /Segment /Mapping << /CharacterCount 11 >> /FirstCharacterIndexInSegment 0 /Transform << /Origin [ -90.73888 0.0 ] >> /Bounds [ 0.0 0.0 0.0 0.0 ] /ChildProcession 1 /Children [ << /StreamTag /GlyphStrike /Transform << /Origin [ 0.0 0.0 ] >> /Bounds [ 0.0 -28.29996 181.47775 8.41471 ] /Glyphs [ 52 88 76 70 78 53 82 88 87 72 3 ] /GlyphAdjustments << /Data [ << >> ] /RunLengths [ 11 ] >> /VisualBounds [ -90.73888 -28.29996 90.73888 8.41471 ] /RenderedBounds [ -90.73888 -28.29996 90.73888 8.41471 ] /Invalidation [ -90.73888 -28.29996 106.73872 8.41471 ] /ShadowStylesRun << /Data [ << /Index 0 /Font 0 /Scale [ 1.0 1.0 ] /Orientation 0 /BaselineDirection 2 /BaselineShift 0.0 /KernType 1 >> ] /RunLengths [ 11 ] >> /EndsInCR true /SelectionAscent -28.29996 /SelectionDescent 8.41471 >> ] >> ] >> ] >> ] >> ] >> ] >> ] >> /OpticalAlignment false >> ] /OriginalNormalStyleFeatures << /Font 2 /FontSize 12.0 /FauxBold false /FauxItalic false /AutoLeading true /Leading 0.0 /HorizontalScale 1.0 /VerticalScale 1.0 /Tracking 0 /BaselineShift 0.0 /CharacterRotation 0.0 /AutoKern 1 /FontCaps 0 /FontBaseline 0 /FontOTPosition 0 /StrikethroughPosition 0 /UnderlinePosition 0 /UnderlineOffset 0.0 /Ligatures true /DiscretionaryLigatures false /ContextualLigatures false /AlternateLigatures false /OldStyle false /Fractions false /Ordinals false /Swash false /Titling false /ConnectionForms false /StylisticAlternates false /Ornaments false /FigureStyle 0 /ProportionalMetrics false /Kana false /Italics false /Ruby false /BaselineDirection 2 /Tsume 0.0 /StyleRunAlignment 2 /Language 0 /JapaneseAlternateFeature 0 /EnableWariChu false /WariChuLineCount 2 /WariChuLineGap 0 /WariChuSubLineAmount << /WariChuSubLineScale .5 >> /WariChuWidowAmount 2 /WariChuOrphanAmount 2 /WariChuJustification 7 /TCYUpDownAdjustment 0 /TCYLeftRightAdjustment 0 /LeftAki -1.0 /RightAki -1.0 /JiDori 0 /NoBreak false /FillColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /StrokeColor << /StreamTag /SimplePaint /Color << /Type 1 /Values [ 1.0 0.0 0.0 0.0 ] >> >> /Blend << /StreamTag /SimpleBlender >> /FillFlag true /StrokeFlag false /FillFirst true /FillOverPrint false /StrokeOverPrint false /LineCap 0 /LineJoin 0 /LineWidth 1.0 /MiterLimit 4.0 /LineDashOffset 0.0 /LineDashArray [ ] /Type1EncodingNames [ ] >> /OriginalNormalParagraphFeatures << /Justification 0 /FirstLineIndent 0.0 /StartIndent 0.0 /EndIndent 0.0 /SpaceBefore 0.0 /SpaceAfter 0.0 /DropCaps 1 /AutoLeading 1.2 /LeadingType 0 /AutoHyphenate true /HyphenatedWordSize 6 /PreHyphen 2 /PostHyphen 2 /ConsecutiveHyphens 0 /Zone 36.0 /HyphenateCapitalized true /HyphenationPreference .5 /WordSpacing [ .8 1.0 1.33 ] /LetterSpacing [ 0.0 0.0 0.0 ] /GlyphSpacing [ 1.0 1.0 1.0 ] /SingleWordJustification 6 /Hanging false /AutoTCY 0 /KeepTogether true /BurasagariType 0 /KinsokuOrder 0 /KurikaeshiMojiShori false /Kinsoku /nil /MojiKumiTable /nil /EveryLineComposer false /TabStops << >> /DefaultTabWidth 36.0 /DefaultStyle << >> >> >>8BIMFMsk 2 #(QBJ5>2,4QUfspndTM, $ #$ %/$!( &6-+ 2%&.7L.2%*06 "$'B7=87?@!V!"==   27P)9WooWeVG5Ojm~wwvxg^9J0!(NI=&4&1 %" 8=@-- >M_MD'CGOTIQ<-"'LN\MMBEaOUJPRO6,-15$VKRSWd^B0)#q!<0 & ):rZfJZD</GbatoqqrYX,># 26.+ ) #/8!)1+Q?9?ADQ@C6+ @CRHI?AWONGJMG,''3LDORN_Z>$, m󤖘 p惖 2 !XHƲ̵ ׯղ䳳 浣gߑ^$  ŭϫ"ބ˲ ްମߢ˲ɿۼ־¸  ǣtk ^ Ҽ ؿUJ"ZJ zȾȽͻ̲hw w ܿȾǽǻ,#YYȿ ǻ ̴   窴ܬu設 Ʊ}d ޜ͹  ʱڰ̱'Ι㸬DŽ˯ ڼ괴l ͫi밳   &i   (ò   ͠ӛ ܞgš i۪Y   񤞛š!ڙ t皗    쩗   jl Q 䞛˜&󥙜  ퟕѕ韛 d]螘  ȜݚҔڜ 3آܚ  z ܈  ր  튇廄暈͉\: ԉσOefć |쎃㚆ԇ 䍈ㆈǸ9    kT)!  쨩 ־ ھ ޿ A ͊̑>z   ڕ ͉֎Z~U 앏Ǎ ޑ^[ 7c] Ô   ֺ  )\Q {풂{~~Ƈg;h~}T^ { }~տ ~ lIMp ޿{ ㉃~~ {~88z ‘   Z Ϛ qz 𿻺x Z 勨 ӑ⟓ƿg?W Ɏ  ޿Ѧ. Ȑ ﹵ڑƏ ϱwyxry +  uǓut   񰐓Ўr[JHLx}c``e||si擓V 㓒 ܽ 妑ڢŽoW 掑 ䷆r eYYZZ\edWXeyurv ÿ ֿ   /  㢰 ӿ^TA/ !#%2DUkdYܢ~{ꬨ  ۢ  ߩ ﭧ䩨 ҥ 詨 y2ȫuedehbD'  !$&(*,.135Me{nghz  ~ܱ      GPs l.  "$&)*,/1358:2469<=@Bbncc ȾݾŬ xl_l]pjgp  h2ȂݵҾsėlYW ſ! 'ìT"ܼú~p57:<>ACEH|} Ğbbqƍ~ ǿ ƃ¡{w|s$ܶ 5ަ}~vyzܫЫyrvl » ú¶orԼĹᵺgٶ̷ikJ:' ǻݻѽȾ_޻ ݼιܼѽubWj ϴ  ㎈|ۼؽyL༾ӻ ν α۸ƻ^^_ ݸ Ժ ۺƱ Ы~}ʯ z  𴴺òkâ 񵳱 Ժo ձg ,8{qoggh͕}u _䮅}4히  ꦢ x٣llk*  ܥܟ{ml^Un~zyhfsΦ  褌͛tҿ ʦҁ馡 ] ģՎ㌒ҦHqtzO,)  ukn}ont η ձĩp u  zTrV  ' 壠okuѽP؇P N^ĺ Pɝ}Ьyrњ сɜΙ|{ 飜V[װahcַt| / ڼt ؇Ԯyvrd ͖ !ä{›ۿ ~ _ ՌcJIIfjkݒӌ dxʝkǿՆր a$ޡڨ~ѱrG}XҡR  ꘊy΅j  žz)> Ղ㟄󲂩 W }0ԖtGGFx}sm  .c}ůꏎsɵ 和]Ϫޮ| (|¹ʎUpܟYpc /΅ [; ssvzÇimouH,ߨ~ۻx |  0|򺏖辋< 񠟰Κh̑ecsª}}ŞŢe#鶁Ȋ ĒÝ ퟞ}՚ңzw`WɆӜ }_osS~@ʩ  QtrՏw  ͤ(駨ɲþ֦϶}xh?ȩϥܺ}ayѥ  h 뢧~htj񦡢쨨  彟p lᮥЀ  ه  Հ ༺!޺ŵϽṼ հҺǵ b ڹlʻ ݷ ϓۣ ᰶ%vrख़dz̹ﻴ䱺ƽ޿ 趶߿㻾 ܽӼø˵yeՐ˻ nӳ ޱ  e췶 ɤy༙wdz~ ľҼ    b7vܮձǏ~v־ء~  y| 󬦪ۡӧݬ d' ҥʟEޑ_s䙊JI̳yܔ | ߩ ڃ~> 򼡤ǯw㮕㎱ b Ʃ"bj "ȫٸ~t܅娅.tƾ˶mn ļ̂>GA  vyԱb ݐ  _  ֝؞~} ަ ըEJ  wx#̕iyuuJMcȻwy㠠 m h]uj{ 縢ßߣڗ۠a   ƁƔ͟{|KmٳxzȥYWw ͘l ݍlS 匊~䍎 ]Բ } ݿvpʲߌȲ̵}Lʟ  ⊈狋ݑ$ৢ{ѱ{yr ȖÅX ƚⵇ& A~浢 Г̑ȁ 򛑓̖ 驐 ̍Ґ󠐏Őy fh܋ ВΫkRXyqr{鿌yÏ ͏С ﬖ锒 T  v ~)ᨍھ ŋl Რ}π~񒁂|舂~刂Ї 䇁}Oy۽úsъ࣍hOŒ 䠭}{҂{ʄvֿ ֔   ʚvwyz w}ͼ#svͼvҚuվ ͘  ?? Í̊ ׳䋒 䋍 󞏑勒Ҕ    YШylq{rw^\WQSQVm Ν ԥ  Ëjm}jlo    Oq=̼uytz|j|{ |üz Ϳz܉,h>3 èoƩ 鐋ӊ 󚅡瑋ԇ|΀I~x}zp㈌뉏Z@lwS ӄȽk掌 Ŏ]l,x_YϿ׽_? З>|0 '#θ{s{zⴧ𴍦ż lك MUIãͻ ͍?|2fV ƔvȽd 󁢪~ 9 ߫ wN4:wuO??_}?tio?+Ʃꨭ٧ Ӥ裨ڧÿ שּׁ ܝuĎؼ డͻp<  z/??j?// _t/2  Ϻ   ? ҰL آ3H?? Ͽx= ? rտOo￿/Ty?2͡ݣ̡^﨤 砥 ͤ i}Ўמ gg 99u_?r 6y_}e??qF ;1    ֬.ЊÁ / 璎$$W~?_wX ~ /|/=E?k0㉐ˈ 򐐍Ľ ƿ w֊ ꟎攎Ë +? ‹DZي~Ҋ<,;96l AvO?~ -   г  7O76{/$vnn$# ꗑꖒՐ 镒ϼޓ цկY| |' m???:_o _ a^ z 粢 7|k Rn'?oo_!# OO??U?} }~x}~ |d 򅃄  ~} ၁ۄͿҁ{yJ{ -»}ǃ l-]5Oߏ?O_n7O_/?>t.= #  d Kjr Zv// x?/O?o/?$/m Ў 󜚖 ϋ ΐ̉ƍ֑  oō* 㘏 [_/oi4=6O/o?? o?o??OOC?oL/'>t   :qڞzr򋄊  掊猙 ɥ݌ 򕈇ϑ QVa豏ՌvCXʼn ك,    Ɲ}  ƛO 諾 ֚w礛֟ǝiCӟ䝙ӌ ۝d%S]Ԟݟݞ  8ҭ 醴Xڠݥ ٢Ƞպݧ0(L暨җӥ B;{枝ՙҘΥߧXsw̫ҳܪbЮ c    Z׿ оԋսt|M ȯU[Ű»zʻ ж߶ ⵱ jiK ׮ٶϹ{xˬ zĬǰʬȹvlŇ2ձذV}Kz 4׹ 꺳 翹kG ֶ ϶¾ֿ÷Ȗn źaԸ3OʿuW ĽŻ ؾ ǻ 鱕Έf ½ ڼ (Ϋ oŴ ף  ʹž EȨ n ۣģ mϤè [ۉmʨ  eQ   ܲӏ  Ȗ  ݏҪ  }~|i} | 冁|˃|ހ{wn|y} ߃ TL}ڃyۃܱ{ ئ ԑ ȿɕׂh{ ʼnˋᓐ߆  բ ˑ͚⊑ x壏ŚʑhSڑA ٝ EI6 ʖ  Ɖ 騈 ٻǾȠ ̆瘔 ޽ |pZ&nєg4ܲ~ʷӯ͛Țӕ XѼʪ硤!ҙҍN q$ØēėҀĥ܁΍抬ϻ ܊ ͻ߉碐Çÿ˺տak{t|Vjԡ Ț Α ݆㹚{Თ"Ηʓtr͌ڥΓ аħ񕊯ꈫď̋üꑶ ϏžՑv—ؚ ԍ п߻enq_Z m1򔒎֌ɕ ߈ 5Joב"Ȫ̄Ou3򫕝 «݊ݲŽt~䞓bŔܜΰ뤉ֲr噘 Ҝ쿜u δh{\!xՕ w ܐے҉ z톯#JSԺ ߒŒוґ ߁ȉeȒΎΧzښю ˼ǹ ˗ ٖdeqj ȸؒyoU{ ׺ǩ|к̒ܘ ۃֿ(˗܍踠M͉ ڏњēڔl҈ ύҊ ݟ{qť͓ׄ ғԏ喩뺎̤x攕r盛 c%dk`͊ ɶ 'ȚddƍԠڪ Ĉʅª ćԈ ʋϊ Ѧ 쭥ƿ֞Ǖ“ͷޕא ւ²ʉ {ےϋɍӛωf ˃̑Ŷ ҩo }0'͌{nڱ Вň܌ ㏒ح҇ (vvʏɭۚvŶʾ tٽ Ά  䙩ޗӋ΅ў钸ݰ ҋħȑ Վ ن .v۴vﴰΚŰq˄ ՜ |ΙsڅPl܈Ҏ َ׍ϐД&拦zϣŤѦ 番ľً9,60BRz ٪ }Ŷ Ȣuq2[p͎Բ巆瘋 З下܌֊}z Ӝ{7 ܎ˠ ռʑS㦜؆ }X:2496884+,3MϏՕУ t,% 斑 ۈݻ ˅㭚xa~مԍr䀬rm ˂唸ճɳ׶a'v݊ڑՅ ۟ ݊龤ʒ<*erE0.PLUlmksOɪӈ׾߱ ӯʪpwkOّ {@! 䰲 vyx}񆎸 ̜lC.7Xx˰ʱ؏ӉЁܛ֘黊ѓ , ېﷲӭυӦ熑cIjˣ} ͙ݷ߫nku὘GyxЧVTlb`xuuvV>@B@54;4(')0112=7?8QijkWEtȚТ몬wy.#͇Ϩ ƈǬՔ|בŝAaܖ:3* `Ԉqך} ` 葌嶈ԱYB Ȥϙˆ ڗm  ľ_wjټv~Ͻ使"$Kz汑zVJؾJåþzX_o|]XZX=3378/(%,250"#(9AMDESwtĘ̼ ѣԝ젣ʵ)# ݈ۼ ؟ʦaʄV&3}xI+! 㼿 ۓ蕯_ŒMߎՐ؊˲Ԍ󖻂a馉ܧ裂J:o 拥ʻָըƌ뚛¿잱Ǐ|{{wYyنȘϓו1/c ˤ؄Š錼z:iPlzG3Pg]E8(:2-/!0./03 %/PaLEgv}R\n쏽̉Ћ2'Ľށἇ@2Du~R6 wd 藔9ݧ֗{餓疛ؕ̌ ײ¤嗹̠e^ē ЎǪع^ZCl~Ό ׻ݷݯˊB3]ŗղu鼔xhÓmCsNj¼˲ɔLꭋ۳vwvvxXAC8# %<%,!#4&&#"2Sd7-5]mϹͺ  ص;~xӺڴɜ Ð˦ ȹ ԋþtBpŠm ĚЃwiIX ykʹݍȆܿv:jy_&xhްxW頊8k. Ck_6@a>2',6*)1.0(-//0:<=5N_\^}؁ ސޕI  ۈϧzx}XM}܈X0;/:7։ Iל伃ң ޅ݇ 딋͋ ԈWeO ᒜԊeeu|Npݶћߓᒵ!}덚xߋL8t⹤J۴ً Ս!ī`Jׁ_sN,[<,/,)58B:Nqkq؅ L޵E٪ѺwտHp:?m95唘͊r׋쏯ȯ쪒 Жū  Ǚ Ǹ oǤNj ǃ |ss}[}털 {軃+tT[vsq։ߒ ˻p/I̫igoU=?97>%/5*')/00. 88#J:hj 9*݇콝%͗q~䩵z2'P:3sa lѐé¾܏͒~Ǖ؏ ϔ䒮 Ƹhӗy}Φggw }gÿ 坆͡珝_K6擜ǙiSUis אڍfg ҅»\mf}}^XZT%2( 2Wj.A9$:?>LOMOuĈ 𣑠ߋ%tęӉm|؍+)·׌ŎE4t xb бeҢޞ߉x㡘 φϔͻ vp֌֏ˡʥ ʐznn v]Ӑ跠ᗐ XTyT(tƓTd~dv܉ ԑþeӵkqË!2<@7(;H2,-./3$@NKSmsN=퓥2tZʥ{sQĞxkr<0a5=!ʆ͍쩊~Ɣ ښ֏"ό|v{~̄y Ϋܱnn}u ʴŔªƛ럦͎tkg0%ג|ɽ$؝t|䟉ۊ ټȏw}i4=ƯktvxZBDF9783((.,"4081(H1*6-452//.3:*#-8QRQZ@#6w漄Ӽ雲эrԚ~1 ,nt{]5K4؝d;(ӕ͙k~–Պ햢衽Ӿ-ЙԘ|lrϒko葀qqkC}ȏd.ٖȂ󸈡|~֠W04 ͍攻9ⷖ۰ؾѱᶟia͋ Ӡ峎Ηͤ',Ћ5̛݀dJfe@BD632 $#(9;;>=;2K?1#oyq~˼})f ߎsf܍Ϫf… h%ѫi뒳~z$ވ废ę,omγ Ĕū ԰bc݌ybb}{ Ȍ 𴍗 ZaZJ922Of_c~ƒҺtfዶ⪄ͧ^Lwvs֓ɣhzfxwsŮ6{綌é\sgpǡw[_2й}ENd`Z8+.+$zҽ{WvX;g}+YԸj ɟq⿧yѤ9m}̢[  $␕]ϼ aw׋o fkl֟ Ōzzܠ֑  řΒҾ ׽ԍñE348+iث⎟趏tNKʔtrKӁڞsn຦ٱɾ̊:~dzlᶚ㶑vuƾu#Ǧv꾁9?n}%krgÀ НVḾro Rms^̒Ⱦꛀ Ȃ" gԚmKۭ׾v^ޱʰ gQrߟ DZZZǑЅ䮒 ಴ٱ bŗȮ1$]~yܘFϤzjTeӦt͗|u\đs|frcmKz}XcV7<!]m5纊Ӕwhgmq{ֳdźƹmqv|dL}L˱ 卙ݖѼ /ceᰴ ԝᤴj#ױر|߯͸ێż~xh^CƸ Ħ׋ ۉ^y툅1-sڵ ՈĖEИіƺraަ_rאUyyĻӦɐ݌.zNܯ~5g֐|Һ ٶ.tޕ܍r+ȗ߳ӷێ|o ʪ͍͡ԵoCUjvɯ\\ee~ ͌Ƶ  n UФL*R |бVҍAϒ΃~Ԋ/a T͙{뺘ȞvXٵݑ ȿÅ唡 g Fö ȵ ƣf߳ Ϟ೸덺׎Ҵ͕Ķu\qbLvwxz Ջ roP*;қ ىΛ)֠ʪĵéos}ݖ Շ"QQ཈~۰ђld {yX*풤|²Ř㫰Ʊ̚~̪ó؝ҝmd dc| ͪ꒙ 61>HΧݏ(يʘpY~x~W^…c{ 㖇fj놘{ِ͟ʸ̰]}ٽ~ʉ"%ߑ󠽵ت恵  ̳ ̧ҘųӼnj{Ϟޝwntt œލg[ؐn<8Гsϋׯɩ"f?}NȪ芬krՇX!bũʿӮ ڋ˒אzbڒԐb`wӆ젒 Ժꑑכ˂䵙ŵpY\Ԃܽff|yג B6 Ғĕ~Ƀے؊ ψ [2^Țiy P*͓ο Ώ؍ϻ ۛכkbڛȸأya`uU`ؾnn`y̱<7 шr̙馊峕\-Ҍ݃ 㹂󝓣ʋ ޓ쮛“ ݘ°o Ŕx``v·IMֻmmn ނߌK1ω`}؈裵Cӎԏؼj݁{̟Ɍwدÿ  ؎ƗƒؓЃ쓢ݑΖ ˿Ŀ دĻu^^Ⱥ\ҷkkѱ ہ …͠—]-tȽ~݂ԜDꢔ|͂emܦ-(u}ޒ_ѽ  Ȓǥ ԓǯ 宽ԓ®Ż B ːbbʌĂ᪊ϫqqi}r ܘ붜Ԏ 涍͗x+o 󺌖ݒ ކ㙐L 똭 Đ͙ظk L"RȔ_z{^c˓ ĂczbЍ񧞔隷͟i$ ɖd_񬈺͵̄ Ї˖cchag ͱ G2Q短 Ժ 汭ɸ 6߇ߍܸ%Ψ&F܌ؿ}diNuج߽̏֗Ĝw ƢqҨ8݄ˉҧ 􏬝 Ŷ մvtݧ ǔvv͆ הџ Ŋ3T˟͌ԙ :6ʌ׏ ׉.1ِ륑 ߕ䌮ǖӊݐы ͓ ahyމ {cc ѭӒƆΠ Ւn4LͿb^c񘗊 ϚÜّٓ )&׌ה啚`6Z햢݋oׄއ٪ޠֱüˁy² z𵁽~Ջjb>0댂ѿ’ۑಈg =9"ǫ봱гE/Iڥ˚jb וډɎ 菅ڝY ӎ фЇx֏ޥ[[l 徙 q۫P}@=HKi ȳi^”Ŵݖ K # 䓦海 ܉ұ50AhrsJE õȐۯٱڟ }ֲز╳̲ܚȐʶ错މx j_ܚ||fK̄H<71-/-4KkԊӣʈى䎻卯 锹p?<ōȜߗk3%*]rWpnOњ$+5xK7ʛdsdĐ޳ ԋ뿈ΰՑ {sբß]^ѨɰɦѺvɺ΋݇1el"RuvR:)= 呦ӻԠԈ âǡԺԜ~!"ýϿλމ⸻l+1%&>7#!;Ll#d/Hɀ^ȞȻѺǻںuhȈ⽼ ɏȻ̕üب ꜐Ԓ }nϿpׇl}ݯӌ T3Eˆ؎ ⍡f䖫 Ň~@<ĒՇV5655%$!Qh+xq%ߋԑ ¬ۉħ}Ԍ Ԑ ً jh͕ n>ki1Xߝ݉Fj{ϪȈޭóЃ}8.Io} `oӐΔ ԒÔ‰Ɩ°}`g ]Օ1*Ѯ䰰֢郻Ӈь?2ܖ$˭튧 铕v֮ ш˲wʯ’}Ҧ汱 I捚 vʀЌ~ $O:]kD~\ؖÌP/;ܓҢizΔ gqه /| axK1T ǤӞ{}1M ȅ HЉ Ч [uc_``gpA={pLOwۣ޿ʌĿn"-D~Yde߭{ýۡn7 ^葾V ۻӞvb(o ݒ푰Ȋ̺һǼޜҿ޼oGBI Њޔٻ |þ ܉ǁGx{yя<[ `d݊ˌ50S[h~񓶔ׇ>Ϧ〶ҙfҍnև@ȉՎߌˎQ  ꔬ GҺd̘˜ h_̎쒻ÆueaaQ^[]ʺۂ͊`XJ̷ݦ ؽ\1J}(mø՝碘񗋶ʌꠓ͸֔xl.5ʷʮ ajԌjl& η͖Ѩ ճ ^tﶺɄƍ摱зܩSQjCl.zzÑx͊OPvr xCƆ19RA3ќޢꛉ ׮Ѥ FV,1ɣawމRNa$n슘 ߞӘ ͝ _׎ ճ݆dž 7yH}noYo{Ք|\LLMvŒ <ܫWeo +?؊Ҕԍټ n᚞Ί& پͫ ԉʋ|ΌPO`1'ތ"䗵̔꣐~ }Ä8HdfadѲoYY`JGW|_wqqÞʋ Y*92S 33aޚլ} ͡ɈᠫꏾpP΋0\ۗoe۔ ؊ֈ\̏gMT}'ەʜ˚щʻ ̚Ɏ۽ۈ{ đ J}|~ϴfcUIPgsutʌw Q}/׈]~ >2ߊܕփ΂ m ~qw֊>(I^{d ̇ƶՌ~V%r߄~|Ċ Њ Ј `v҉± ܂Xvx̃[X}nvofeccߍǕ CB"ֈΛ6? m u#rԕ㟪ω~ >ShM^"u`ͦÐݓܓَI͢'w!ĉҐ߈ ֆ 徭͹VFW9&01N=?Љ҅螊;|jzxzwjҺiik}yyz{yy L/UϢ蕪眝Vbɷ~| EԔΘߣ̕韐贙f^r5U➑h׊Ԁ q鉱/H 휡,הՙϗ؉̨ٔѾԍU46$@IB8:(O ̗c{{ސ1ҝ{eYƸ[\fsSTa\`i\หߐ 눬ѴʊlH-hx}W2Ș،vκjkp5E´ݪn☏ ܳYBݰEڋō̶蹈۵Ͳ>g~[t޻j01/> Ϊ𹴵 ߜ.μ||v}}|턈 ̠}Hxh@=sv%[Ï ͆݃ 󒍩Yp3`ك ڌˍcŵɛK9  Ww˯Ӊ節̒ pQ20[ڊꙜĬ׌~żཌྷƲ_|zh_݌ފ߬ͻߊ eMP}ǫ wƧx(d柞焰ӈ ¡qrt/z 倸 ђ Պa Z+: =ênɍǙܻȔϩ=.M“߻ܒٞZ之ėǖ߻ 푥~~|zw{~ m'oɴˈn qTSA}Ъy)x Lj힘븕zʚ݆h.ƙꉸ Ϗэ çɖ ۉƗ κFhېҲ ϣđ\ s茱 D+Dz'މߺǤˍﴱƞ Ȫ}mmgY]ii}|yvm\Y"etɩ߉ф @m述ԉfdɸy چ~Y$o ɲ#sƯºwl!&נ߭ Ώܓ ꎭ_p ט췊c ;ɗݳ܂ԑ ϔ݇ۯ 帷/,ډ ^ބ կª ~ŋǮ ى%|{xvty}ՖώƓN ~҈ҋُԽ_&>┏ތчԏڐ</ނ ܓɁg] ۶ /(}a~knA U𜀗ܔͤtՍ߹ƞ07룏 џɋfػϼ!~|zxusg_f +|^፾ͽۻptŽ 萹}㖏̷Őzj­#؏ڻՆ߶ېӈy ȼƾĿ¥\ tj2Jǒ^g#_xЅq_<6ӹֽԽ>.ߊ솨ʋß ܒljμ ꏤ͖2ٍ|v~|ywtspt|ꖗ?XyΤҥ됓 򜔘ſ枮֑י <-冎ᵓỤ⹈ᝐҜحԈ뼉ΌC:y΃萄qۼ6“`.`ﻈ#ﺝ’ЊǓe񻸳Ą>ΩεYh}[Xv}{yvtromje\\f˶ޟߪ լҩ߷ Ѳδ!Цz,9`_yδukѩØﲔ ȡʥb" µ܊ ߓք բóԮɓ÷ރd[ߑ/NԼػŸ 혜ܿ6GЩ狮Ͳۇ۵ތ֓ duT߫ѕ>艺ƍxx}oDt}{zxwtqoljhecuxx ׆h=ȍ Ƕz꒓-+(uɼӟČ“ 뵖ڎŻ~9 + ԇ㢲ɵwfẑ液o8"_评 ߡ²ޙ4uօ ɳH)jӊ Րcqؚər{Ŵףƭ~oEpwlmhccezpbddhkjgeba^_dduԓÔה)D/o^9 7ZtŠαې󙕕☠̺)  գӘ҄ѵԒ_zˉʤŞh_.&ˉ Ҡ噐 -w'5ڑ zs鼏fԖ㱢ՇߡǨݽkDlyppq|wpqqthdb`^[YYsuu҈͉ӝ^.H'޸K"%7Zx߮ꓓƤڰy/<okmr~7Ǡh ȝט ̝ M=l, I֝x Φ m蠊 фmk 뺌Ǖklb_][XWTRZeewŠԉѧx/bypB;[zx{~s̠ޏ}ӆ9׍h c:ebOD︴Ǣqo Ӵώ م =Al݈ N [Ø cn ɦˌ ߬j Ĥ ͊̊riZWVTQOMMmoo͐ӛԉo)7 ۣܡϢk[]p{Zu݊֕ 訤s(Aۺ׎яLH2t ߼s ܑƔÏ䎘.Sg]+82[[ ⌘ݙ~엯—ڈ ǖ>' ≪ڇȎъ߭ eSQNMKHFTl ٟʇǍaH̤ҟd`|}KXbtrXH:K㍥Ԛɼ}~_%> ۑȚփ ﹵Ž篏Hq.ډɦҒG+~kcܷ ꡎ#𬕒nj眰墝ԤҏωȟyNLJHEDB@`llm ˸ ͋֌ܩ 7JΒ ߗ۱ENLI3 60i촉גSKQf$= 쵈 ᠄̽64sʎ Y0 ї5>gzE\پݍŖϖB䷖Т,>ē}wXGEDA?=<=lppq͕~yٛ71P DzԚ֒kL9God"Qyuiiq(A ىيΚ ׏및 ݂qɨxǟ90⤗xًݥܳX1qv?!I岌Â3Kx էoвah*ތ ښ à—ų،w |udCA?=<976=be|{qpЍ t4;wΊ묁گd&54Kp^o 렙֎tlԼL:׌ ْ ّrx+*ʮjmԚY0ѷe|~Jᘜ;M٦y}t$ɐ՛ē‰˥ەє ꦐϋǢ絊 suY<;975320`çҋdc܄ Ylclג{z Ȋ+jбuYih~$1o}Ȋfk -ڇߚ 왐ܑԧѵ錵؈籫q71/.,*)(&%(EPaO0)d~Š㖳غY.3f ŠƦƏ)ڈ}WӴW<0*1Ab}ɆГ!ȇߥ<0cɪC ܳl׶vG=80&&Dwjje`v_slm_bӉ-kjw ꍧƋ ѻ酪 ŕًߑهuɗ| l3'&$#! -yI Ȳ ~M1"#3445,!/'Y ҟ0œkF%0*)6@g0Ɏ=0H|8.Q􋟇)Aݖ֍⸈{ǩG/a mkΑɦɷ2hUC*))?TLE^㾞z|xꍎy _ ڇۏ ֐דǟǠȷ / kkځ\sF"! 8c`R[  ŗG17:421- Mяض˴>ĞʑHGC4;,-Ot㼹70Zw҉ ̶s!R Xؙތ쑠䌏&˵쮅M!6miA$62O︗aGO>$2*BMmڭлƥ}sȯec`RВ¸ۺ \ڭ ζ&᳻” } ^-ѸĈ dz xyoqg7&=IPUȇم񺍟߽듺 NJДeJŭ*ǩnWmR0,)5@d䠭ɏG/jׂ-,x ڟ t'tqO#x^)6*-=_Z$" ׶vH))615Ri0aݹȷpx|zջΔՍ`㓝 ࠿< 𛙕ʻ,Ń鑸Ԩإ؃=8arS4'4:Sr}yz羖ꌫĎϛr|^Lَ굁ٵѠ~XA,*,*Tl™Љݠc,QÖamꞸϏΛid2v쁑گz@=R85]\yɎܯfTC*,2JJ=뷕m]nkt sxwtڗrԝ̉f᧫Ӝ °Ŷ ًο 뛫뿑ŒǹR.W zp×{㾅麘@ɩy԰W5.*e䳗3E˘u+.af߇ shz62Tp풭x吔ʒLiGܕˎۙվˇ ŵȪ ҋ $ 彟XUcq苸趒ֆÚ璶 qTӐgaC*,Sr|㰦.plߌ Ƌ'4տ؉Ҏ܇u *lኖХ K6!h3ԗبcT>'"%C\l搲ڻÏίps’ʚԋڍ jkh{!ڋ“ۈ뢑 ̣Ӏđ @q2첔uJ7++-)eyv61a:҉E|⦫һ麬ߋ Ʉ| Εȼa,V혆ã7%c֚߸moycN4,*4>N|Ϧ%޵xbﭙ`sэ́ ; {˗՜׈ 䡓㖤ȌɒڵYyˌ˟_'-!2nȖA/ێ b@xzъە$G؎  -1 ~$o ϊタnD6%%=v ̶lܲ{n~HϘ ħَߌȡ ϗՉܰȌ ݍ‰ ͊ģHڱ7~möIJRopiyĕzNܢwΎL8݉ق۶X.oءﴸ 4< ֜֩f<#*--GXn UXԼt͜Z7-E뒭Ͷٞ ﺍ ڶ ؆ɲ }Ƀ'Ϡą}Պ ÍԛE몗F+uo_!7BNך\jxҳ{,zΘ  }<(`Awƶʎ.fؕš}d//-4B=<ҍξһj~۶z_4,dݜ э h Ӡ‹҇Ӎߔ݋师"bj燽͔ ҉C✨Оysמ܄}¢諊2~c4z·W^ʒ1GҋJ??hCʹB#\ޓIBA8,).EQ>Ȑ |ƤkEw էՈ9*`#•ÖE.;뢻堾 ̂ g ~ س갘~Ր~ܪ ɵ ޠEJ햜 ޏ׍ ̑̊̚8옅۷sxbh͎϶°˗rQWyo|פhȄҋ/:ٌӿ؛ [xca%J Ϻ__G#-'*\䕏ۖ{qzګ%3"6he[" /bߐ ɧ䩃Ѩa׏ ʃ  nb ˞Ʊ }Њă̦vf{rccMKrbi\lO7wa}á s?dim䕕 X0–zd:*#4&Yr\ ޮÑtÐ#UG_7(0/+28>]ǰuZ⭡̃ 顱ﷶ̶ڹ脪܆Дɳ ϻxiߴ] ʲ܉·׊ ȍˍ]fɏGeֽϵ[h؋Ǟʹ; ]υY2{ z_ @ΕՅ$z1gV=:+%Sts$ﮕ좍önijتى"AE>c^uέŔߍ焐ٳʶݤʑڜ冀  Ҍ׈ԅˊjOuڒiǗAܚƋBFtڳ0-담 n j/u{Ƒ!p+EyYI4)*;SZn饵ߴҭӓtּ׋ ۏ'@ħŊ…鲪礧ÅϲƽԎýӻ  и꾏˼ Ŀ伾Ę񙏳蹌ۚƼ҆ oŏQëƋ֕ fMǖ܋jQ{mQ̤ H7ԗ΅ -1.6Gbzw~ӍÓɍx̵uۻ }.AʟƼ 襝އ ŎԔɎp hgӄ ݺًۙԕ´ Ijb(_҇ԝ ­.V܄*٤L#KͣŶ{xyϜ$ޗԸl V/ǑԯÍօߙ Ѐަʌį֋œÛfsβⰲӮے񵱰ȿ܋ﵱ筈ތ͉݌ӼƐֆM9 俪̤򵱯կͼ+iѐФ^'a﵂ԩqh\z^Ie` 輤liOѮ۷ xK2O֯배ҭˋд屲dn騏_{崰ޖ⪮˕юيՉǛʉ|笐_Ʒ̙\ ͋ʞ-V麓ߪΓ †ť೨ҍϏӓ©X*U⾾ʐw|f]ֵԳdJQfa_My{Ģtxkz\ `R3O͈ կ`‘h~ w ИDŽڈ̻ ߍÇ??ϋw׈ܶ Մ ꙝȽѹ Ҽغ ﹺ Żﹽ`(Ѳ֧*|ʰ ̑ͧʻ¡n]*>檇Ȼy7ptЪ|~|~tffcd^hb^g\SmǕnا~}xŻ̲A5s䶑չ эκ۶ ڷ ᨋ㖪 l:8:?}"=萘ߜLvpFKNaˆ䜋 ߔ`e ¦ 型,e𶏈ʒ茹壮_1 汣խ͞·h.Or<ɽ{֪¸ơx~cMպijʜRNǺܽhM3̤֏ උy~π9i=!Оm ` jo⤾ʟǓ䗌w~ж׵ʵ 򺷵 tbѳ̒ub 񻷵Ѷ钿>2À0bЖzzέ֖ס‹-bIﴗjﷸ󷻻`dy_PZ~ldf͵܎vNE4öǿ ؋ ܻ Yl.iRYϿ♺ fRnp6 bʧ ;x}΋ȷ0 a˿ތ t,v Ꞇِ35® ፏ ݔ䩍?:Gⱛ̵}wyT巧_UJȾbǯٷxgjh̅ בOf94؅Ꮊ `M _Rľ⁴h{o쫇 ?xܕ݈Їy󠏦و yn76Ŵņp`Xދ ܜڟ`0᳑Òye6]ޓѿՕϕϵҤ΂ ӟ򅲦01𧌟7m bҒѐ&;oM#2ire m{O??_꫒?\Dzo?١2Ѕ ؈i]k/PX$- ޻̸ޗ Ҫ+ ՌRExõ挣ۻƣƓ_n30﹃M~Ï d`me※ܥ 늟׍/??~I?/s~/ _͊b/ 2܆ی ݐ C0m4/ ʎs b  iקּ2RԈkeƝه4 唟 đ?5ΕQ{yh؋ 㞟>A?$?^Ͼmz9?xڿOoΊ￿/X?ފ د2乡緳ܷ45u2o݊ Ɏvjϔƶ  eϸG1ԉ LJۚ j 떿6K }b}诏⪇;;hフ_?^ *m_~??vI<ۍʔĆ򦈰1ު݊┇֙c$)Bώ wѮ߉e -K֊ݒu#x֝ 㥉掙1͑ ϓۄ6M  ؘކ ͢Ԩ..Z|?_kM { /u/>[Qyޛ᥇0˵϶øߵ϶ ø׻ʷ`(&QԒ ِ݋ɓ嶻 ЛȖ疎ùT.lp ؝?0𽹸 ۷ ύꔜ? dž烩 ˆ6K綹 ؂䈥܊=. 41)hO CpOWv Βޱ- ی쾭C08z ԍ87ß2-v풒ӫ 렍ʊ,] {妐ӌΤ ͼG M+(t/$vf#/. ؜㥔 μżٻμż 򿽼 e5,|b-> ܍ƛӈ#ԙٞҎ ȭ Ķϫ ܏ݡ22U褔p5虗 f̄ W1ﻘMkt 技ūו˜ͻv// mޟ?/O?o/?̻/.ڶ 㻽ͻύʷͻĻ ߽⹹λ _ݒฺ܍ș۔ݺĽӌݺ=/A ԿÎ  ۗ Z0 jbͼtȿ+mļӺˆƺ Å]_ /oa#_;(rO/o?? o?o??OO0?oM.y?y ޚƤ Αڈ ۟ ~꽰ԃtbCzaʊi/-D֋ !‘Φ~P2rČڔٖ搔͖Ҳ" ӊ õ܄ 𸶷⍡ģ萳 ɗÛ׏ͳϟɱܷ ߂Ġ镥؋ޯߕ oʲf=ua V1,0TfbϹ !桞Ӕ̭Uz19DX܂Ɩ Ɗӷ-띖 ʬ˸~׳݄ ؋  ǻᗯƘܔ֛ޭƒqL/..,-EઙΕ Ӣ ȟf$' ŏbeΰ ٓˡc Ŝ읛嬩䪏՜Ǘޕv slŜ֜ҞɽCi͖(ˠgǻɇӆՐ/0c%SHآ ч͋ݎ ׇċч†ٕ҅ όΈ󝎩8uiל֜|˵ρ 5X醴XԙΈɃփ豱 ⠍ΒϛҗƮɫս蘊ѹ᪝0(MA:ȹ򪒥ދ㿴ߴÕ֛Ж҅óӹŻiyjWܪeȵ|ԘDž sc ҷɋ狅 ǭ{ 폮佉݃▐ݴ ۪Đz|&\M g­̽ΝެnV[؄ûík ̗݋؇Έ  Ѱ ZEN ؚÈe] ̀ahɕŅݎ˗о˻奣ٹw]W6͐žォܾz⠚ՔX~P C‹ ԇޏӆǨˉމ ֝ڎєߑ`JɎ  Ô؀ɗcy݈ؐȿſлᭈxH{e⽳e׎ޫٌ 3O,Y Ց ߦڎύߌߍБᕆ縚̫ 䲢 yd||| ҉̑ͽ͏㓟rM{݀a檟Бߊ (ځ s ɩ͒ ɷ–祸ܫ ɇύ ɚŜ޻Όà 籋܋ rϛǴɹպm痀̽9ȑĐۏ 瓒 g Ç΂ Ϛʋˎ}칌 󪬪â𞦲ʐ繻昜̉Ɨ ‹ ꛦŦҏԁ܍H?Ĭ ׈ב ĕѮѮц ׆ӟ ﳰω̯˲ړ،백ӸwnŋjͨǮcٗծ ׉me#۲͈إ ӭ Ο̣ ɜ޷ܲՍ҆”ږď彿؍؉ ̈u]ƹ⡎vkv˒楼ىƙȚB;h{氩 ؙܸ׈ ͻچߝѹ Ȋ ҍ˽ۜĤߏ˺ 砈ȼcbׇհíȺÓོΨ㞵ۻk{+Û<ʻ 񏥔ٗ Ⱥļ ֕ ꎸz떊ՈĈFK4 ފ֪͎ф܋ވ njį⏰Њ*M ·šy vEZYYWdȗZ_eexwxߚlSÔe]Tj[Pbbt bJA^W H}˘z\VY_ rkBKV*5Ȇ4=⾩D鵱fb]`UXSWC` r唐ƶ|HPzyzjq!J^?5K [RhHsNniI[t[?C`7XksBr:L؞\EdKG}鬦 Hatjp^K㬧|p[rFzHXmQZPޡBJUߩp{~vIkz V|g_HrAluon QKURgjE Bӑ`0Ax~Ѕ[S^"\NPzM~Lh`Fr_lQzT =d]ZggLohwnuYHHQXTM@jHS`Cy>R?tZOJﯚPу_mBn^LL|}N󶠤S(UzNJy\\`MnU l=Mp֣q}l[WܨXTMJYo̾S D  JJQ"sx.7 Nl`uRa|O ՟z_Qx`QFʆ@zQLPX%4fT dVbSnFmʽ CYg|^]dsfL JKGcXfec>qd#= |CR΢tt«Y@ Li\w PMS@POJME =A#W5Jm.;ZnMd^eMS{dakS=JGFXQ ~9uE[FSMG੦hXpSdt/`LWQ IХb jl[SPH [bLf<MfS7 Iimlӣm~jĭI x]uhܮT>]{ NCWw=[F(ȕxUrmQLݒd6U2F I\UhVZIHlDqBŦ |K@{ 6F< hVU\\ggo/!orWTWYWVSfTs=lvUKaES[XךG CeVNEcYwJN{qDD(NXXʚw{q evJWlG KT BH|fF5_QI&` {LjXd|vbbaZP@yn |LSDeEk B]hCCHG @l{oιt q]ܭQcfg{OoYVZYP hm`;維E ~/EaTSjuIJKcEFecUsJz0ńZM SDJ P?|\4{B^ (O)'Paԩ_}^"x}{ KtkFm —Dja AT㝞ixClB} ` {RO^P_xoVb>Lta[IMjz@bfbQmwWFُ_a \Q]hdHtR{K WpcMbe r PV0SƉ(剄cVгaShfhᣃ S O>S J8aJH]ewc0_#6?8lEUL NML~Q}|ɹV&Is.YzXQN~xRPXstoST Xy۱_SaPl~YmPLSL U̻zc^SpfF2ì lvwp]\/%Q`ذNӼtSSjnkM֍Ar]Iv7 _AgE]KGIKFaX_k1/p~ b.<cQSe LkkE[jdk DtiTj.?T\@\D izŋHKWOWMusOg\TZXԶoIˑ 뀂}s;Zp [RTTUYVd DVT}Fɔ 6Zauop+3bW?K"s8}AK#0\CSJ ?;iWQNrޚ~G@Ye3S7xy}SX@`δ iYRcp HݘpuU£`2h;GS^B`BSUjdTRajӴxwzgmPHmvxYLMg6 5m0`xaf(x6VSXo_Fi ם/N~M{p {9gU XޡIY{tc domӗo IxZ/HFw,IۓMf?𛑓 ƢYHrl cEhjQY|DJ ȹsI ʀPGG DXeOv{ Xa⼽ѐ{w ûĔruzXSO;SMqcacXr[*6CJdH`J_ Դyl.U}z@Y AbJs+J fBIHړvu ~f7_Cg?CJQi?l]> tȯ JnccQpyںҀ[OnKm8_Uz|qMR L5; \kwp᰼J _6sEo$>m:Ϲc˅iA C\GuXT},_Qc沘I` VfSO=~6KUtTyv HUM@a:d GfHeNHK Pڒ HYTStq$DֵB|A?CAGfb\c/ Wڷ@gTk ]鸸 GN\sfξ\ 9T R㾴 evvf ̽A~ʾऌR}CTh }K cGO&/RvAJNW`IK㓆vSyC 8'upUp2lHbaOMQAR`PACwdo\?fetL bϡIo FCȇ|coFB荅Dy V6򵧽ݳіpB BR͡f˵ک; ]M`s|WB6|ewgXܟvxDLCaHsN?8/efЙͷsSpݜhtY rh9@ JNDN]gSzDX5[RUl҃emV] rXP_ EgYTGPaRrgbY%Gbn/.l|Bk }THݗ g<괴]F n]]iѶ,FULLxhU F[aYORW|MCbf]mWRSSVUQlrz?ט6#&m{hn\S]=JsGZtPWV uMS `{RnayEaSWXIW NY >< #[Ṋjpjq4SATT`mydDgu0,nucL}Ak sGũ A\oˢG ᢀswrtzhUT J_v<f@ vlWGVTNـNrQ:O8NܖRPw }y {I HIBrXcGKIH{QTgP~cM^^}F`WWCUKxSy_R fJ _K׶"TKVp~KUjye;RxBraeȵyB,2C?^n~fV?V~M}\(i?YpUPWwK| vdxHا 絥~v(Gkrse@+lr|] pdRenH>˱ ߫^ql}wnFbD5S AFGUrʰ XIOS0?5JfJkf}Fbs*DٶSV zuEuAik@\ JzYEC\ ]Rfgk̀RE YO付f ][KSLj[Dpᏸb|UwH[spOVy_;M{ygW~Owvϱ=m㓒 XvX}w|y|~7DwklR~U^HCyXaC♒DdG>,y: gK`\<F ёPf c±g @q~{ׅAHKIh\JB Q1P^BLўJMLIqݐWcxSz`#s`n:ZfX0=W/pVGgAyK'6 ?AUrĥtm2 wT$1}hkK֮ QU᫬Fc#҉yuz{q +/,ZO}l< YVJVPɩOK"̭kIVHJ iKclMQʭNTe }eܴBuS[j ymSuMRWwWcH8MAɄRTiDt\ΕT޴[SvSc JcL@M=p2zyI VmNJ9;L_(nυleeȔ ֫S Ǹ>n_"鿰|mH@D:)`ً>; nTUa xM Jfq_GdKJ"ʋi| TUt LdMnUN>JײӶDS'Qۿ_nzY qa]kOުsFk^OFoS|MqIHm^ٰg}=bnpS1Bu&]`Rg`_[I1[_opPʆr] w?uPVgcTʵ & WGFspad]w-p.v<)E*MG,*DmڸyJaC̆ ־Nд|d)@(u 9ZOudPQ w ̽EI{dNOF8bYe]XRh۔Gp_TM SWczcC/ pZQ6[>_otAx@TR)5wnBw~vH_]G{jZɏDw9鋓З^O#Nxp.-E>%4d`5kźöy;_ nPBrXLsݔlGcx}gzغXmnhb `=yV| ']+AOM^r -LRK;\ct5jKT^۶ˣt-5OKKT$w\ndjEyw7ESTA}úu6ɏ3ÏfplDcQI HKz{VgRm c[J~DqYf.rXLI]?$YDŶ}|OFGhY [bKaDϖ=n_moT ?gpX\raqTT^CWHI CieH\fF ˫V[@!G4 FTcuGwwh_{2FʌaQDSN!軩fxL`W!]wiJ8>!F?X?IH Li@WU(E@FjOɷja^rsRenzq 4^DzKuRs}traJABGJIn}Y]Y}ҿPBV]ѰH皉HqOHIrC?|]9xS PL Zji{ eeX Gȧ` Ѿý⹦jVf?2S h뷦I/CsGҥbͶ:@ldi` `xAB}eNYYX%2gHCC@AILKJLLWU#S~vr}w1JbYG <xl#p aZiх=jw\`;TOTs4YyROݨXOSN VSW؟ E\TKvHD:xwwhOA 2iPRnɷ|oEeBlK|V8ĹU_pM0G:7|q5S:K JPLcp ?~RTɲ6qMzU]WJĝ9ĻYB hLgI%GJJEKNLJMLKGBCCFC#n}ktܜ:߱@KNO Sr, Y kq\P@R=KLEJX+LIKml^V OA}MVxw볧 c(ѿJPYk?A P;yy-} '`xLP״Iڌi\Q *Ka2k-}yϒf)1y>2_DGu~l> SJHecPv:`bw5LsGƹC~ؚF[~Y1k%$eq{|ijHM&/2.4n RyGtd~xx/y1[XKedrȷauTBmxz|TseFHtnytv#ͣɳudy}5AumzyPA LdJ WSg^` IOBtQ jNsjKyлF>¸Y@x0%0#cy|~xϲpE?Ydv}B֐qoqx{eSav{{Mn3fSvmGd H+(@KpVeE/tI\Ec~G[YsxCH_쟜ufIYfϽjPꭢjb_c^Hzaj<`gR7K_{{6_ |[_PL_cV]SNq.ZOSeU;DjzY_ƶ BLY9㻘}}twzxs˨pmzw{t^,pqq7gG^H ޺iP{p Kԯ[UXtjdIdJ.@]C`Fm©E OcjOY\Y\QYíwkMCB:Ơ{ps~i[n~sw]fVʷk^*DHUPc@B2?}TFьHEE RJj_x`LRc Td`i\ļEћ rm-DWwuUJsNvvXW3A?wz^?thFFWQeLAlsPWqŶd?C7ɻsqyqpwpxsS0/&(+5DBKcx$o~b.No~~C:MjPǿS ꇀ a|^aT enGrKs7Yu&buyMh꺑a#x@hRƂil|3(R(e5gA]tz+r{j]}k"Iv~~|yC=B876#919^z]b͊_Wy漓xoy{:;wvtzx{yyvvssr&32zlt&Z%et jEѱ !6m ]P̵eh<r Qp$QaBU`7 s_A id `I=뼹^7|)@ WW8khTD ~IrrG_Q@S_bfDԁTM {RF mpSB@x PqZxV~JM]]DFcOتigQ%L?8=qg`,kx}eyw%3$IXO}ypw|ZD}|f8BHTR!X7-A~vm |Œur|}j#vvuogsr{ e۲O[gnrs|PBu_ҥ ImTY JXR#< | teio``CL%Yh;MMtWѴܮNZt? IK!rƸM_Oi TţsMIbV EwO,H~+_ŊbXZ] DoLLXhE\X_sݡzov|k.3:I`=}t#`:`ъPcK9g[an}x;.rNVKBٹt|qM|t||4Au|yr}zvt3 ݸcJvnӸ[_䬕WgLI6+[剀KQ1dlzS[ ykKKŬO =^qLLssl9vpdD wJ eSyE i6zFv}ةOi ʞvm0fTgV˵MzjRaL]az{m_C8o{9/TRb~GD{}XCs~zu{j3OR OBix~Vl w^㻭fQ٤oy`f fD{tGe LvNivjTFjY߸흗oH ibLN|}}/~JTE vF[G Y\BibzP KFbHiRݳtIVa3p2BkY P Bdr"6Hbr@zwztQ qQP\=x|pQñSq1ؐDzCHΞx|}cSJUR\{Z_La4uùTz@ZȑkتfNyvvv zu_YXirU]qpOW(,'>՜nFwHu\^Z[t}pOP(FϞX#62*dA1u@KG 0 YBv慀s#fKsruqyspvoqv07PfFԭur}zQ横ѦmR]j}ϜzykXYYZ^W:u zSF ΜSUrW} tZZ?ߪWJTSRTde{f<˝}z || ̣VOwL`s`\AMM}~diVQSWsHY7DөxA^aHO4 v"ߦzt F{!q{l9GʮĽ]\PݯuX xsrSЪTq䢛 MQ@nOE*͸@ЈiTG GZSS]bmZpܨ;ꠙԋ_I֤hS^t;wwXS2-asyuT {| lOq}O S@Y4U9QaH >ǻt~ ǽsFFTQX\Wn |{dõgUl NMtxpd 荑OgPZafmb]E>aEoޫ\_wn_⫞eQOnA*N yy- ܯvYYRw~q T CL!7Y^U\TsF^U@trƸf{Dp`J< wdUnqLTm ⢡ {sUbTMX][Urϋ]8| zjV詠 beǤWVN ܧeQQqCv*0 yy| :`\jOLW_q᭪t~uFD5MD_?R~wRjMO]@xny[tQX쵧>tR ހ{ٰiBhI(_A| uvnUx NQ\qUHUo;UlICNb[ e` U=ͫ ལhSS_KᮣCojDH !xxԔ ]9 >ҰhXGrrtg>s}w5:=[ctAqsSmW1y:\UnuSTec^ ᯮw|<S5մvI樦r rSߔr ^U꧁w@ w׀UBR=K~G\aoAЮnKM'Ir;w~ywxGV0zz3"Ad\YmcYZpM ؋LVq{еQYT[gA_QbBp]~UT P_yGRÏBpl󾫼WegTx{NOx:Ji bUCv< /䖎WOJbOK|^rfWUN_kٙip]l!xh,w}C= B=vvBbs۱RoN "9tkh~ ܻkRl ׅ~u?AB^LǐjFQhW%ۨJRSrb7+g}l[Urv|N[̗cU) ]kj!pw8 MsFEqt|xZ_ uqs^[un@O||dBWԮƷi{uV x<=shxITfN_ v`t pRsJLLNDbڴWDeۛGe rSk mbq򰋃JZqSE\QoI oRVUiZ uxoV|CFVZvv F}Ep[Q^kSRAj~} |0To Q]\H h`^qIcVJ|Up JvkTXPukZWX`e_│FZlswT|Xd>AQmyHپUSSiPv8H[Ѵ9?:|>PUh}P:p4H>U_OoTZ^VQKd%볡I;TQUφDfs`Ws txtmOzBJ߉=힛YBݾjq}p$G X_^[EpEXWJ N>^ISb@\eh ʲN >B/7|OrcS`ss]T Sn{{4#%Lپ }^p bDSWZP>W aUsRp?QZ EḶŚgMyyl[ NLkTK]xL{{㬚iPǁcI[` 2WRWPSsWP`̧Lű۽V_EO{ vaYSWB;~~`IWQfKO[Qa^jSEoCPAD]NFLYDL U kKSd銽:naZE˾UѢA^?0^xbb\lnaJdN VLA }fQQcXɈcUsQ IiW\CSc涒IRpTKw 0#[}mIi+YttyDJsvH[|js W{9@iZvJfSaMh]'7mʵTuNVIR ?{WjEceL}EߢueMJKPU WIO ?͕ c ke5d^Fh+$azDu<>fѹùp| tPV TޢUmOE[kNX \p7Jcv{sxhKܘg1^JZRI UXkҙ' E˲M*`SLk3k[sLINL`MSRe p7=э !2I?O; a_#f5t֭MZI¶~g)D-aW@;Y o YUXmC{VMm3*HS YE}\=FqY^BgJTFqr&N޹ FUTR@ ȷyVvuHEjѻkrT FǴuE SC]T?!ovvwvnW;=2 ;x g.2*6n컯Iƨk])h ~0:L<jkCB$RsS8^^b`mN[xwI`B^]FFނmNlItnT0 _fSvS[G CxJSZW} SfrHϔQ\Jd MUNaNS@PpBdVP=6tss> P ;PI! vB*o ]b㙋Nb鼟z%|BnݳVhP^[IIM^MtjwiUckͮfqirYAfLDZ QieJILKY 敚KРZJw`Yܰ[wB[ s WRI^nY?Tf]=lM[ѥLQVw`97^:!`~6tF36Z L\IcXX {;k6Bu鵷\}e_zY6`BxYObE_jxpӘn !wkMbHOnQ)TXdTEtp~|,N.zo[fG]Wh\cTXg9fMV WN 9彇dg?}BU]fUT_ R)|yzV 6fxWzG  //0EFJ ?Mo=yPXIs} زuG?L8Ė^Gמ~ A.}zGE-yEÙdߥX Ec]I62SW^[G ve.깯VU`MpJ|p?E"\WmwFUmQqLVykG5O 7YA<7  (TwuvGVVQ6 )%?CLZ OfffG 7j.9MئX}=, ⫸_|3M l5L}]nvZkgnHOӰ`LPO'GİZWPF bc xujxFRGhCWPڡt-=;ʤӶvTYnXdO^u`lETIJ\ ZyqEƗ]El0ۅQ Ffwjjw &+{~NKM% 2cA*3at  /~SJwTOFqҷUx7Q 伷=GY2q7zInx QZ֥r lt3oINpBTq`0 7{w B_YGij@hK4}^r<;xį>s}41eFG DLGsMD H:C]IFVOVpzcrm;gB|}.Q_UV9 O~y}{n ovvLY C-"@a TY^N ʭXKFӌvxtN|FRi[5 폇Q(K(dPIsslOTYC[VMnBYK':zܩ"lF][APrD|N u@] ֙~x[\njXKGe`ˑHD =rHet|@nfGg]~}uO_KKQ3 o~v h}}Gj L2XlORUu@cfSzUҽxz ΦXC\xԌj\ T~=_zs>DS\ fO&3?5+xqϰKO `GK@G<p UInGwtU`1KH]< [JNL[?urͿVN V~~P{viS`{NFjwZ\[PTXV qHkzG^c`7|gsI5dΗMh #Wtvwvtt1 NtJlJGgYi߬؂G \06m}}{xy xy~uϳggpx^VbDm>GD`[LULMn{vkW. *lb/s NͷTeS GGisZGwxyy|n v`Q9K =yF|DnpÝKpa^Ea ]WVWqٻTSgKjԐIZEd{\Xͦ[MvRrw"Jp \ WKRzqnPe'oDM EG>%s~Ы|ӷ bDsg\GߎX\/`DcCq]EY;9e ]աtG[aϐZ npGșw |_M;tO nꝂUI >vZ_JI S콴}~.H'EHco͒`GipUܭLbf7 B )CXX^rkXX+ 'fr!8 %xF}K= @m]cF] FW u| byBFL##ؼHGi{tޣOi>?k WLM~tsBP7dn ~F[kwx n|x9|[]ɇLDQ vJ\RHC?YR| NӶIES `I> TžޝTurxw 3SĢH_QKىp2 \GXHʲJN.~BDHr}Kps^XgLVOsKDCuv}Q𝎋ODs:j5@Fo{qr9P7\SɑYy vHRLW5|KfBt Vd8[WerjZj7K̒@[fݶGbS oNKR~]QZ hmHqH^8?^LDOU^2 Ht}wbzBx!m`JrtQJ}po\htucM P܈3}UZPLn?SKPװiMjwwmDЛPv2k8SˌubDz|=coqPhDr@-H gyy oKETUGaD&7+NF?^bMAe4CgSi껵GAv¬Hk;tM;HTX ~vTQЬFfq pRZiC>ٍ~|pC @~MQZ[[>XFEmwyh]{u PUY"cV^Pg@Lm7eWДpVN?ґCeQ?WnzPNٹdG}TAфpHśL=P>!wGiƼM #UP{sǵCd`kM?@6}Wae_Gn uywZw[^^=#wrw~sr}g, /ssdx: }Bhcq u!ӧZV]t{frwA[czo]Wy jDtx F濱PZr|py F CU3 mMCe~^YcQפֱgz{iQůEFwP[I` ]cmaHLK5JIU I 'TU rNXzYzEWM ˍ}}e!P[D=()*)7ETa#p}}f @h2J~ nF.i筞tR`mrw{uth>nJPT ߋZK<fMazx Y 8Ee`)H`1y}Jej\lBG akKWZY/v>J ꪈSX߀hSN=orFrYHQ>zWI `Zf=fLBmDf͠ e$f}yyxvvw}zvP8vv^CYUpZ݊V|j ַȖ]MQ[cmps 뭁^Q\SJ_XX]j@իZat F ϋT?]c=C\.vr,QbS #jUj7KEX\ N]_i_QT +DHnEXUYP sE݂ X.$ݗNWXkL߭^ݼ[r ybALTkmڧvZRgݽ`"`}z~|z{u||y aDE?a̵㻕dPRWU`kjfl{^?gUTXpϘSăFw}n OaEQ`Yv>ԑ!(1]xVvM[C|Ykja e^K[ Ce@ G=^CXaμڠs  mMc*s isI INjFt Z= ޏnXfEdN:y>EvvGEtj \nQR_ǐjTPQQU\cgmsuqiDgKpNʨMj|wѦJ HxاD8 [g#14t^OHTMLlg `NP ?ps_  SDz .[_tBgC  tn4QK {>fX6 pJf QWzImGin{ltzzLbDEQ?a EnDjm\ɄeZ_]`_bfhjvvsRDuGTX ֫~w٭MUMcSO떎蘨Pe1[^#|W=V ̕yx}#z RWXfPYzL]Щ Vor+8gt|bc]\\ZjxU JZxjZ[5!_ZGsDzCZR|>'MRTDzA}?saG{USMP<;y N[CLZi9uXckW7oƢ~edfcb8):cheT@nKrD`ĝ/Lzl0Nw5VD`p&EFoYMp@ OŶ ;jzJS弘]qsqlK}YZОP}ZrҍZkyBmsur,BQU`JV~|;tzz{ ͕}`ZQ㿜QNhpW U`TyY7'--%9b:{? wSsX(0ۭFFhOa MO߂Nw~|l)pvȩ~~zzGcP ϾO{ilOVFĦGL~i`SPC.)zKj^MbvJ߽uJOTC RiESetqPD.QNMMnC@q沪 BīCYqZaXŶއjx}HV]XЭf]jr.3Lz)F:HUEVHTpr|Zm}OW ׳m| PtQCδHmևCs{|I*o|}yfuWOQ ȿsXYaZI{S` YDT֚w_#B¿0kICrphւ||1+UzRjIPU i^ KXPOI;8ɴUtI5Zڮ׵ہqwgfj3<Fr `A'1:d }R\VS`Fy F[PkueIDV<v)Sv uyf=LTPKkd~ ̹NV ]fHWy!szv{~M$AȺdGtxaSr]nW`Rx =eueKIk rdF T=fa -.8뢞O^T/.j HsbOhgԶ֑luz}thz~KJWi2G[U6UbXG2@BE(8fH^ dk^QSiu |xNIDل{Hk @L_L-"U}EdX’TjŶW ~t^OPߐozR/iĺBU^!B_L]quk7@8ܻsXwN- ̻LuQ^jR |PNe~kd `A@=[ܶfVJ3TK ݏEt 80¯uxyozA wmQHu@PiMR 隊Iuttc3*0cFQw\aQH䗅Sӻ1 RRwp{s-k}s}"]ǹ}V/9ӾQNŐvxY!D÷nK'b ƭWlkKl[fDPhdoW оx\Sm~~vny{zyfynzr xFaTܵbB+b wLsڶ{;S8pE ف@x CSJJ]RPa%_@[~k%-y*W מ|f^`T`M 4Xs^wDHNNLIz hJ{b0,0itՆLdEG^0M\P`QejsHkn9件{kuMԷGhB)CWTThLPi8Rz~cPy¢D P„?SOEs[zwVVo2ýŰith\wv}zLLzYֱJ=J COc ǘAKGdwPbjzge[րueo 0 9Ljfsx@7WN8; ` pґ\``^FmٿGh X9OBoIkz~vu}Ϧ2?IX9SKFH⹶kW ͥ Hڇ\LJQjBD?J&nt"la`9Ӽ;WZ][``bQNtW<;Zl62Fuxsnv{{wyyr}|xfS=Kƒ mI[x~ ՑJS 4EhK t\dvR#LW"[D~ЎC}hif3%*6=UR>ZBߒLiX GRW L6OR|sywsu{try{]CǶxc}BiO￶q{|Zܲhu=`k] hr@z Щ>%'zQSi]{`п`4Ghk ݡMtKc Uw˽0Et|vyynXPtM^sUe` =׏Q<` PDa^Zb&ȴsxM\ť9NTfNcc 6P\Qt T/tfqQº<9_ro5LýѐI܃Xͮuo|{{}}xJyElZwvԈ\᷾}s ]IbʰhyrcB IU$FmQOԶLzVoPQoTɹRVsW̦ECtm?V|URĺּ_`] bK1#Bv oI,WlO^hn?BKaZ>ĔO@L (izvK{x~WI<;GTpxk vdv}}󔏑AݜFSIcm?oA{0Oi=XqhpFw@Gz|{|uZ^9[BP孄qQf綣_hj^SC,nQ_U zqNN*tzWq̈́L@^i?WD Jͧ CGd`:XOPc=ZQ. rj8xb`X;X%X_9ҝMJ^@ln=V}> 㯪 ^ey Vcv3cZNqQT_̸LakO2|xt~NtUxJ{sA?t#QTcaIRtkQ\`?: U~/!Im<UD񏐑mR@ o?pկoC 8IRQl] wz&V~2DóC7k'#N{NXe jrE`ff^t{f}H>m@V2 sw辦G˱\@`os\`^TXrɖ^LWʿ ErhZntwyuwPYPJz~_rI$FLUWe\˧;9Kx ڦFYײ_ix 0[̌dJXCj ZMkVZoHIʩQLOa_]e[zI1q>IGnN$,sv}>Qzt_Zѵ^T7vwy}Y~k[ h}n?J r`kCmfRSQbtN׽ٚ^]LrMhĆq?*5F>3pd]f]WnwGt]z[)JbZǸPM]}?d Q>e oWlE[uNro Mj[ IfB݁LXw9gj5S"bjBGDڛ{]QSOmV`U OFCEas_0lq`ru{|M&Eku5-$i,R7EoTL綾SIb\tdEEQYΨTIq|_]A7NNEwxvЫzk:WeNh~CG۪ Hx}txrL2g tPJDaE)(]p#Jöljѝ~wxw}M Q̐2 p 75 ‡jZW\bjZX~MQ汋,Y5uYU킁EIZcS PXrLW _QG8t}~J$KDAU~~C/xvr{r-1hplY$sm02rLɸIﶺJz:^PUahfP xq_l}aCQxE` M5?U`LEYO]dQZi/Lnujs{x~rxxE^%WWgCWmU;TOoEi vJX\4SP`P]wQc|atO՞ p0|8 eS y@ecV gTZq履Su5 wG=f1QFɄza(#RP*K;~rt}^vLJN*9pLCxv{/FdSwqfSɸm* 2nT^Wlex TddcYY``aXYs:лȶ{DACՇg ˁ@{]wgYw~~k{P#K]bXd?dAa\DbQ}]T3tIH} g}ɜzUE]cJ=zDպr3/HW #]ȶ ۬lXtyehE>F ]KRKjyOA~Y4$]|%xҹ8GmLERbչrz$-n@HO\p0|zm/DQ dX|}{?$aHemmĻoekh$YDmM[nQ^>RIc;M1oOgSGYx 9FILZZ^Ucb jUJDiQdz|@eFciz{ys'i}@[XAO^y~P&#hň;IK tVdg εuyoR!lnBſ|rwvr̉^Uи~ה~g$8O$wsrl N~t[iu8x;v5zSZv2Q賆FcMgI? pOL ޘNH PPn]^_OMۑJU_@ M˔{y{1{JY f3VXސb0zo4nIp MR ՘~zp?W m:gտ[K_VϐtyT3gwk Zm\PAqVXO3 y?BNNfCMEORzz6>c|k ʒ`Ev;I^FXe ENh"dשэFAhiZXUe E~]rt*p?x]Imܩyw|xwsquy[Jktc^Xzsy~mжlq xykvKY?c=K6_WΊ[ Tᕄ1SfIUHvQv?HCWPb`$CPTTs^TjթH~D`IdEJKu|Mm15>qĎ\DiiX]]V_FN ԚzigmqQL״%nspL[ZS˯AԷttyu!vxrnO,7kaʷ>ze~v~:kO~S Y{nv|S:g:3[\f iwPU.P铓GWXpEWcQNO59bFؤ2}P[S̬>nA^IiwuuwgEU7ntv ~>H0~L/liݓVUws~zH˱Ts~` ArDh·vLsPOmUIxFdhI|ĴUuLJyzt3*nxnrxg?u~{z~|~T/8D=r>Gxwuy{&o{qIM}s*~W9P] ,DaPJtONjdA iU=eL _b `Zꪧ[Ƕg`CLDbKV8ڴ=ҦTV qtC~>>pSBu<]iQtIV~lKM˴pw#.}}|xl7a {xovzqmulnqy@9`mi y|}}d,|mj{qox+RoH]=pDR I3Le\_ޚ C PY>ܛ}Yy l3%+>bh<[R^폊W&_Z &'1rA o~bHF KWF rWE eHӴNDwSuFiQǷw o؃mjrbB~LȯgYyj AE B`ԫ ELSW~^XtUlXH twC \4ہNfOMzBZzIsVD>>IJ_?Kyn^_? ?|M>Lw X}6V/MrC1>HyZF}QVB`}^IevvHq>HU*M఑EI @x\ڵHWSOQeϱd ҕ qEG_ϯԭcb^JVJ3 OQ uy[ gc_Fs<\dAE dmvo99ŰQyiu?__C qy/o/? seUq] N-L/qB fyJDup=wK묎sSV^][R]na|T G ڮIU [cYPYNrõ eX 㹲  KWcJ@n? @;wlp q}U ߽Q[<eDqdHG>. 蝎$)l73 EjOqM|LZ` VLXd/H- K<~|øyєyxM _Z`Lv~}lEvOKR{~>乹gH TSM{w dM6BP[y~ֵFo3rQbYIuodf aaW ӫF m /%w4+:9 _IVGET=  ɷV\JkW٩+{ Aɥ]bTR ε@>K 䴰Wj_F ֱƵovҳSSz|QabUu'^ZcNSqF^ŋ PȢGQ{RyyҳH϶lFFS7^zE`OwcXt +:Q?oo_! OO?\?sTX ? Nc@Y4  FMʓpnHתL C跖k[ ~M k[TYi꺷 hEFH@念`͉9SJ[V xs˵h?~Ӆ[?' < 5\ q^?C\o-_?j{c+Oߏ?O_n'TO_C/??CQ,? MfѹE\m_LeނceDM }_bUXLIQkRs 뢢]C{Q ?POkdڷpXIV^[ڐ 񯏏 e7W[= |vĶG]`bO_lwf够 G8{QdYd// ct˟?/O?\o/?:h.č[~ HUyhqgJv[Bu nK9F pHKSKh|zVè]Wf?XJɓLٻ ޺sLʯ aˡ`^ @\ wƶf Yy٘-.Drܦ {@AB>^_ /oX;M8=O/o?? o?oT??OOg?oN,G?} `K֥oN >IhQa:QRDhG 5ޖO<YE$BUM[PFrY\ʶIfVVǒ ^g!Y_tSJROɲsqywøW= JqpnNي<_ZPW<}bY+UxdҰGq MUo=GknnVKQ [aO @٢gPN ;ktҞVWpIY V^_?Yx'_ ķmǫZط F!kgVOhRNu+">?ﵸXEWNPalq KGXYI X eO]]yWsn[c~y!OVDz^nHm`Xޙ lO[z[dWfQQ wmP;SXYJK[Vtj~\`S4v VWqJ3NkQvH [GddaH |xyO\]sKcOor^[AUbu#e\IadddgD?Z(Kl]LZs̝H¬ͭҪCBw㾖b%R4Je芖P=\ B:c]N؜w BHDOXB`@EY?l {gsKtRJrDeMx8QGWWzJtnrHBdda[mS_kL2¬bccaf螘֗cW9 r醴Wۋ^e ldZVCf=1KQ WiKSY~ii~b\AذQ}LI{MY]Fyd0(N ?9SzTrIԛ̊>Y`bjuYrNV@Kbᰬ߬Izx~jťܪf搕e0v]߷_Vl@H yaR#ccf˔ \U`RxvIXD= C_EGGIT{I?LPS ֈ ~y]ZTE}p] N՘Fd=OZP[Z[^e{bV{ljL`Ry|RTSOUIR™ǚvnҮM |OYnLBV]Rّ|JtLBF7W[k=ڹSw_9}a`[`HBwkiDTNq =dN 분d O#PKW ` Dd  8|GwiTdY?N[c⫥բrost|t:IfZs:Lgї}Ќq(4ZgZVOY~gDU RIV CbJHOIC[չ@vҀ40,nH ddJLHUOsVMNW o Wm8K ]Z}y ָ^eJU -KDQJ@ :]Qdq~wyiɏCIQǐ^O[ SSozs@^Hac@ rNKjW]Mۗ;Z?_OMY@؏`d{`Q]o MNՆlxUfW_ JxdKz=KL , 1K1 FRFh|ƕw}PXq}w|>Jf]QBE @ (:K >Bw ȣwM߰U^ YRqE{M yfUz z8=mDO]Pl fo]oTHD {}KXWڢ딓GPxVvwy೿Q Cki.iquickroute-linux-upstream-2.5/QuickRoute.UI/Main.Designer.cs000066400000000000000000002073041446222606700241460ustar00rootroot00000000000000using System.Drawing; using QuickRoute.Controls; namespace QuickRoute.UI { partial class Main { /// /// Required designer variable. /// private System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); QuickRoute.BusinessEntities.LineGraph lineGraph1 = new QuickRoute.BusinessEntities.LineGraph(); this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); this.canvas = new QuickRoute.Controls.Canvas(); this.dynamicHelpLabel = new QuickRoute.Controls.ScrollableLabel(); this.rightSplitter = new System.Windows.Forms.Splitter(); this.rightPanel = new System.Windows.Forms.Panel(); this.lapGridPanel = new System.Windows.Forms.Panel(); this.laps = new System.Windows.Forms.DataGridView(); this.lapsLabel = new System.Windows.Forms.Label(); this.rightPanelTopSplitter = new System.Windows.Forms.Splitter(); this.sessionPanel = new System.Windows.Forms.Panel(); this.sessions = new System.Windows.Forms.CheckedListBox(); this.rightPanelBottomSplitter = new System.Windows.Forms.Splitter(); this.lapHistogramContainerPanel = new System.Windows.Forms.Panel(); this.lapHistogramPanel = new System.Windows.Forms.Panel(); this.lapHistogramToolstrip = new System.Windows.Forms.ToolStrip(); this.exportLapHistogramImage = new System.Windows.Forms.ToolStripButton(); this.lapHistogramToolstripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.lapHistogramBinWidthLabel = new System.Windows.Forms.ToolStripLabel(); this.lapHistogramBinWidth = new System.Windows.Forms.ToolStripTextBox(); this.bottomSplitter = new System.Windows.Forms.Splitter(); this.bottomPanel = new System.Windows.Forms.Panel(); this.lineGraph = new QuickRoute.Controls.LineGraphControl(); this.momentaneousInfoPanel = new System.Windows.Forms.Panel(); this.toolStrip = new System.Windows.Forms.ToolStrip(); this.toolStripNew = new System.Windows.Forms.ToolStripButton(); this.toolStripOpen = new System.Windows.Forms.ToolStripButton(); this.toolStripSave = new System.Windows.Forms.ToolStripButton(); this.tstSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripUndo = new System.Windows.Forms.ToolStripButton(); this.toolStripRedo = new System.Windows.Forms.ToolStripButton(); this.tstSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripZoom = new System.Windows.Forms.ToolStripComboBox(); this.tstSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripToolPointer = new System.Windows.Forms.ToolStripButton(); this.toolStripToolAdjustRoute = new System.Windows.Forms.ToolStripButton(); this.toolStripToolLap = new System.Windows.Forms.ToolStripButton(); this.toolStripToolCut = new System.Windows.Forms.ToolStripButton(); this.toolStripToolZoomIn = new System.Windows.Forms.ToolStripButton(); this.toolStripToolZoomOut = new System.Windows.Forms.ToolStripButton(); this.tstSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripOpenInGoogleEarth = new System.Windows.Forms.ToolStripButton(); this.toolStripPublishMap = new System.Windows.Forms.ToolStripButton(); this.tstToolsSeparator = new System.Windows.Forms.ToolStripSeparator(); this.toolStripFullScreen = new System.Windows.Forms.ToolStripButton(); this.toolStripRightPanelVisible = new System.Windows.Forms.ToolStripButton(); this.toolStripBottomPanelVisible = new System.Windows.Forms.ToolStripButton(); this.tstViewSeparator = new System.Windows.Forms.ToolStripSeparator(); this.toolStripHelp = new System.Windows.Forms.ToolStripButton(); this.toolStripApplicationSettings = new System.Windows.Forms.ToolStripButton(); this.tstSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripDonate = new System.Windows.Forms.ToolStripButton(); this.routeAppearanceToolstrip = new System.Windows.Forms.ToolStrip(); this.colorCodingAttributes = new System.Windows.Forms.ToolStripComboBox(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.colorRangeStartValue = new System.Windows.Forms.ToolStripTextBox(); this.colorRangeIntervalSlider = new QuickRoute.Controls.ToolstripColorRangeIntervalSlider(); this.colorRangeEndValue = new System.Windows.Forms.ToolStripTextBox(); this.colorRangeIntervalButton = new System.Windows.Forms.ToolStripButton(); this.toolStripAutoAdjustColorRangeInterval = new System.Windows.Forms.ToolStripButton(); this.gradientAlphaAdjustment = new QuickRoute.Controls.ToolstripTrackBar(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.routeLineWidthLabel = new System.Windows.Forms.ToolStripLabel(); this.routeLineWidth = new QuickRoute.Controls.ToolstripNumericUpDown(); this.routeLineMaskVisible = new System.Windows.Forms.ToolStripButton(); this.routeLineMaskWidth = new QuickRoute.Controls.ToolstripNumericUpDown(); this.routeLineMaskColorButton = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); this.secondaryColorCodingAttributeLabel = new System.Windows.Forms.ToolStripLabel(); this.secondaryColorCodingAttributes = new System.Windows.Forms.ToolStripComboBox(); this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.smoothingIntervalLengthLabel = new System.Windows.Forms.ToolStripLabel(); this.smoothingIntervalLength = new System.Windows.Forms.ToolStripTextBox(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.circleTimeRadiusLabel = new System.Windows.Forms.ToolStripLabel(); this.circleTimeRadius = new System.Windows.Forms.ToolStripTextBox(); this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.menuFile = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileNew = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileOpen = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileSave = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileSaveAs = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileExport = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileExportImage = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileExportGPX = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileExportKMZ = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileExportRouteData = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileImportSessions = new System.Windows.Forms.ToolStripMenuItem(); this.menuFileRecentDocumentsSeparator = new System.Windows.Forms.ToolStripSeparator(); this.menuFileSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.menuFileExit = new System.Windows.Forms.ToolStripMenuItem(); this.menuEdit = new System.Windows.Forms.ToolStripMenuItem(); this.menuEditUndo = new System.Windows.Forms.ToolStripMenuItem(); this.menuEditRedo = new System.Windows.Forms.ToolStripMenuItem(); this.menuEditSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.menuEditChangeStartTime = new System.Windows.Forms.ToolStripMenuItem(); this.menuView = new System.Windows.Forms.ToolStripMenuItem(); this.menuViewFullScreen = new System.Windows.Forms.ToolStripMenuItem(); this.menuViewRightPanelVisible = new System.Windows.Forms.ToolStripMenuItem(); this.menuViewBottomPanelVisible = new System.Windows.Forms.ToolStripMenuItem(); this.menuTools = new System.Windows.Forms.ToolStripMenuItem(); this.menuToolsOpenInGoogleEarth = new System.Windows.Forms.ToolStripMenuItem(); this.menuToolsOpenMultipleFilesInGoogleEarth = new System.Windows.Forms.ToolStripMenuItem(); this.menuToolsPublishMap = new System.Windows.Forms.ToolStripMenuItem(); this.menuToolsAddLapsFromExternalDataSource = new System.Windows.Forms.ToolStripMenuItem(); this.menuSettings = new System.Windows.Forms.ToolStripMenuItem(); this.menuSettingsLanguage = new System.Windows.Forms.ToolStripMenuItem(); this.menuHelp = new System.Windows.Forms.ToolStripMenuItem(); this.menuHelpHelp = new System.Windows.Forms.ToolStripMenuItem(); this.menuHelpSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.menuHelpAbout = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripContainer1.ContentPanel.SuspendLayout(); this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); this.toolStripContainer1.SuspendLayout(); this.rightPanel.SuspendLayout(); this.lapGridPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.laps)).BeginInit(); this.sessionPanel.SuspendLayout(); this.lapHistogramContainerPanel.SuspendLayout(); this.lapHistogramToolstrip.SuspendLayout(); this.bottomPanel.SuspendLayout(); this.toolStrip.SuspendLayout(); this.routeAppearanceToolstrip.SuspendLayout(); this.menuStrip.SuspendLayout(); this.SuspendLayout(); // // toolStripContainer1 // // // toolStripContainer1.ContentPanel // this.toolStripContainer1.ContentPanel.AllowDrop = true; this.toolStripContainer1.ContentPanel.Controls.Add(this.canvas); this.toolStripContainer1.ContentPanel.Controls.Add(this.dynamicHelpLabel); this.toolStripContainer1.ContentPanel.Controls.Add(this.rightSplitter); this.toolStripContainer1.ContentPanel.Controls.Add(this.rightPanel); this.toolStripContainer1.ContentPanel.Controls.Add(this.bottomSplitter); this.toolStripContainer1.ContentPanel.Controls.Add(this.bottomPanel); this.toolStripContainer1.ContentPanel.Controls.Add(this.momentaneousInfoPanel); resources.ApplyResources(this.toolStripContainer1.ContentPanel, "toolStripContainer1.ContentPanel"); this.toolStripContainer1.ContentPanel.DragDrop += new System.Windows.Forms.DragEventHandler(this.toolStripContainer1_ContentPanel_DragDrop); this.toolStripContainer1.ContentPanel.DragEnter += new System.Windows.Forms.DragEventHandler(this.toolStripContainer1_ContentPanel_DragEnter); resources.ApplyResources(this.toolStripContainer1, "toolStripContainer1"); this.toolStripContainer1.Name = "toolStripContainer1"; // // toolStripContainer1.TopToolStripPanel // this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.routeAppearanceToolstrip); this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip); // // canvas // this.canvas.AllowDrop = true; this.canvas.BackColor = System.Drawing.SystemColors.AppWorkspace; this.canvas.ColorCodingAttribute = QuickRoute.BusinessEntities.WaypointAttribute.Pace; this.canvas.CurrentMouseTool = QuickRoute.Controls.Canvas.MouseTool.AdjustRoute; this.canvas.CurrentSession = null; resources.ApplyResources(this.canvas, "canvas"); this.canvas.Document = null; this.canvas.MaxZoom = 2D; this.canvas.MinZoom = 0.25D; this.canvas.Name = "canvas"; this.canvas.PreventRedraw = false; this.canvas.RouteDrawingMode = QuickRoute.BusinessEntities.Document.RouteDrawingMode.Extended; this.canvas.RouteLineSettings = null; this.canvas.SecondaryColorCodingAttribute = null; this.canvas.SelectedSessions = null; this.canvas.SessionsToDraw = QuickRoute.Controls.Canvas.SessionDrawingMode.Selected; this.canvas.Zoom = 1D; this.canvas.DocumentChanged += new System.EventHandler(this.canvas_DocumentChanged); this.canvas.BeforeZoomChanged += new System.EventHandler(this.canvas_BeforeZoomChanged); this.canvas.AfterZoomChanged += new System.EventHandler(this.canvas_AfterZoomChanged); this.canvas.RouteMouseHover += new System.EventHandler(this.canvas_RouteMouseHover); this.canvas.CurrentSessionChanged += new System.EventHandler(this.canvas_CurrentSessionChanged); this.canvas.ActionPerformed += new System.EventHandler(this.canvas_ActionPerformed); this.canvas.DragDrop += new System.Windows.Forms.DragEventHandler(this.canvas_DragDrop); this.canvas.DragEnter += new System.Windows.Forms.DragEventHandler(this.canvas_DragEnter); this.canvas.MouseLeave += new System.EventHandler(this.canvas_MouseLeave); // // dynamicHelpLabel // resources.ApplyResources(this.dynamicHelpLabel, "dynamicHelpLabel"); this.dynamicHelpLabel.MaxHeight = 36; this.dynamicHelpLabel.MinHeight = 36; this.dynamicHelpLabel.Name = "dynamicHelpLabel"; // // rightSplitter // resources.ApplyResources(this.rightSplitter, "rightSplitter"); this.rightSplitter.Name = "rightSplitter"; this.rightSplitter.TabStop = false; // // rightPanel // this.rightPanel.Controls.Add(this.lapGridPanel); this.rightPanel.Controls.Add(this.rightPanelTopSplitter); this.rightPanel.Controls.Add(this.sessionPanel); this.rightPanel.Controls.Add(this.rightPanelBottomSplitter); this.rightPanel.Controls.Add(this.lapHistogramContainerPanel); resources.ApplyResources(this.rightPanel, "rightPanel"); this.rightPanel.Name = "rightPanel"; // // lapGridPanel // this.lapGridPanel.Controls.Add(this.laps); this.lapGridPanel.Controls.Add(this.lapsLabel); resources.ApplyResources(this.lapGridPanel, "lapGridPanel"); this.lapGridPanel.Name = "lapGridPanel"; // // laps // this.laps.AllowUserToAddRows = false; this.laps.AllowUserToDeleteRows = false; this.laps.AllowUserToResizeColumns = false; this.laps.AllowUserToResizeRows = false; this.laps.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader; this.laps.BackgroundColor = System.Drawing.SystemColors.Control; this.laps.BorderStyle = System.Windows.Forms.BorderStyle.None; this.laps.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; resources.ApplyResources(this.laps, "laps"); dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight; dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; dataGridViewCellStyle1.Font = new System.Drawing.Font("Calibri", 10F); dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText; dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False; this.laps.DefaultCellStyle = dataGridViewCellStyle1; this.laps.EnableHeadersVisualStyles = false; this.laps.GridColor = System.Drawing.SystemColors.ControlLight; this.laps.MultiSelect = false; this.laps.Name = "laps"; this.laps.ReadOnly = true; this.laps.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None; this.laps.RowHeadersVisible = false; this.laps.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.laps.VirtualMode = true; this.laps.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.laps_CellFormatting); this.laps.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.laps_CellMouseEnter); this.laps.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.laps_CellMouseLeave); this.laps.CellToolTipTextNeeded += new System.Windows.Forms.DataGridViewCellToolTipTextNeededEventHandler(this.laps_CellToolTipTextNeeded); this.laps.CellValueNeeded += new System.Windows.Forms.DataGridViewCellValueEventHandler(this.laps_CellValueNeeded); this.laps.ColumnHeaderMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.laps_ColumnHeaderMouseClick); this.laps.SelectionChanged += new System.EventHandler(this.laps_SelectionChanged); this.laps.KeyDown += new System.Windows.Forms.KeyEventHandler(this.laps_KeyDown); this.laps.MouseDown += new System.Windows.Forms.MouseEventHandler(this.laps_MouseDown); // // lapsLabel // resources.ApplyResources(this.lapsLabel, "lapsLabel"); this.lapsLabel.Name = "lapsLabel"; // // rightPanelTopSplitter // this.rightPanelTopSplitter.BackColor = System.Drawing.SystemColors.Control; this.rightPanelTopSplitter.Cursor = System.Windows.Forms.Cursors.HSplit; resources.ApplyResources(this.rightPanelTopSplitter, "rightPanelTopSplitter"); this.rightPanelTopSplitter.Name = "rightPanelTopSplitter"; this.rightPanelTopSplitter.TabStop = false; // // sessionPanel // this.sessionPanel.Controls.Add(this.sessions); resources.ApplyResources(this.sessionPanel, "sessionPanel"); this.sessionPanel.Name = "sessionPanel"; // // sessions // resources.ApplyResources(this.sessions, "sessions"); this.sessions.FormattingEnabled = true; this.sessions.MultiColumn = true; this.sessions.Name = "sessions"; this.sessions.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.sessions_ItemCheck); this.sessions.SelectedIndexChanged += new System.EventHandler(this.sessions_SelectedIndexChanged); // // rightPanelBottomSplitter // this.rightPanelBottomSplitter.BackColor = System.Drawing.SystemColors.Control; resources.ApplyResources(this.rightPanelBottomSplitter, "rightPanelBottomSplitter"); this.rightPanelBottomSplitter.Name = "rightPanelBottomSplitter"; this.rightPanelBottomSplitter.TabStop = false; // // lapHistogramContainerPanel // this.lapHistogramContainerPanel.Controls.Add(this.lapHistogramPanel); this.lapHistogramContainerPanel.Controls.Add(this.lapHistogramToolstrip); resources.ApplyResources(this.lapHistogramContainerPanel, "lapHistogramContainerPanel"); this.lapHistogramContainerPanel.Name = "lapHistogramContainerPanel"; // // lapHistogramPanel // resources.ApplyResources(this.lapHistogramPanel, "lapHistogramPanel"); this.lapHistogramPanel.Name = "lapHistogramPanel"; this.lapHistogramPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.lapHistogramPanel_Paint); this.lapHistogramPanel.Resize += new System.EventHandler(this.lapHistogramPanel_Resize); // // lapHistogramToolstrip // this.lapHistogramToolstrip.AllowMerge = false; this.lapHistogramToolstrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.lapHistogramToolstrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.exportLapHistogramImage, this.lapHistogramToolstripSeparator1, this.lapHistogramBinWidthLabel, this.lapHistogramBinWidth}); resources.ApplyResources(this.lapHistogramToolstrip, "lapHistogramToolstrip"); this.lapHistogramToolstrip.Name = "lapHistogramToolstrip"; // // exportLapHistogramImage // this.exportLapHistogramImage.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.exportLapHistogramImage, "exportLapHistogramImage"); this.exportLapHistogramImage.Name = "exportLapHistogramImage"; this.exportLapHistogramImage.Click += new System.EventHandler(this.exportLapHistogramImage_Click); // // lapHistogramToolstripSeparator1 // this.lapHistogramToolstripSeparator1.Name = "lapHistogramToolstripSeparator1"; resources.ApplyResources(this.lapHistogramToolstripSeparator1, "lapHistogramToolstripSeparator1"); // // lapHistogramBinWidthLabel // this.lapHistogramBinWidthLabel.Name = "lapHistogramBinWidthLabel"; resources.ApplyResources(this.lapHistogramBinWidthLabel, "lapHistogramBinWidthLabel"); // // lapHistogramBinWidth // this.lapHistogramBinWidth.Name = "lapHistogramBinWidth"; resources.ApplyResources(this.lapHistogramBinWidth, "lapHistogramBinWidth"); this.lapHistogramBinWidth.Leave += new System.EventHandler(this.lapHistogramBinWidth_Leave); this.lapHistogramBinWidth.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lapHistogramBinWidth_KeyDown); // // bottomSplitter // resources.ApplyResources(this.bottomSplitter, "bottomSplitter"); this.bottomSplitter.Name = "bottomSplitter"; this.bottomSplitter.TabStop = false; // // bottomPanel // this.bottomPanel.Controls.Add(this.lineGraph); resources.ApplyResources(this.bottomPanel, "bottomPanel"); this.bottomPanel.Name = "bottomPanel"; this.bottomPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.bottomPanel_Paint); // // lineGraph // resources.ApplyResources(this.lineGraph, "lineGraph"); lineGraph1.EndPL = null; lineGraph1.Session = null; lineGraph1.StartPL = null; lineGraph1.XAxisAttribute = QuickRoute.BusinessEntities.DomainAttribute.TimeOfDay; lineGraph1.XAxisCaption = null; lineGraph1.XAxisMaxValue = 0D; lineGraph1.XAxisMinValue = 0D; lineGraph1.XAxisNumericConverter = null; lineGraph1.XAxisScaleCreator = null; lineGraph1.YAxisAttribute = QuickRoute.BusinessEntities.WaypointAttribute.Pace; lineGraph1.YAxisCaption = null; lineGraph1.YAxisMaxValue = 0D; lineGraph1.YAxisMinValue = 0D; lineGraph1.YAxisNumericConverter = null; lineGraph1.YAxisScaleCreator = null; this.lineGraph.Graph = lineGraph1; this.lineGraph.HoverXValue = null; this.lineGraph.Name = "lineGraph"; this.lineGraph.GraphMouseHover += new System.EventHandler(this.lineGraph_GraphMouseHover); this.lineGraph.GraphMouseDown += new System.EventHandler(this.lineGraph_GraphMouseDown); this.lineGraph.MouseLeave += new System.EventHandler(this.lineGraph_MouseLeave); // // momentaneousInfoPanel // resources.ApplyResources(this.momentaneousInfoPanel, "momentaneousInfoPanel"); this.momentaneousInfoPanel.Name = "momentaneousInfoPanel"; this.momentaneousInfoPanel.Paint += new System.Windows.Forms.PaintEventHandler(this.momentaneousInfoPanel_Paint); this.momentaneousInfoPanel.MouseClick += new System.Windows.Forms.MouseEventHandler(this.momentaneousInfoPanel_MouseClick); this.momentaneousInfoPanel.Resize += new System.EventHandler(this.momentaneousInfoPanel_Resize); // // toolStrip // resources.ApplyResources(this.toolStrip, "toolStrip"); this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripNew, this.toolStripOpen, this.toolStripSave, this.tstSeparator1, this.toolStripUndo, this.toolStripRedo, this.tstSeparator2, this.toolStripZoom, this.tstSeparator3, this.toolStripToolPointer, this.toolStripToolAdjustRoute, this.toolStripToolLap, this.toolStripToolCut, this.toolStripToolZoomIn, this.toolStripToolZoomOut, this.tstSeparator4, this.toolStripOpenInGoogleEarth, this.toolStripPublishMap, this.tstToolsSeparator, this.toolStripFullScreen, this.toolStripRightPanelVisible, this.toolStripBottomPanelVisible, this.tstViewSeparator, this.toolStripHelp, this.toolStripApplicationSettings, this.tstSeparator5, this.toolStripDonate}); this.toolStrip.Name = "toolStrip"; this.toolStrip.DragOver += new System.Windows.Forms.DragEventHandler(this.toolStrip_DragOver); // // toolStripNew // this.toolStripNew.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripNew, "toolStripNew"); this.toolStripNew.Name = "toolStripNew"; this.toolStripNew.Click += new System.EventHandler(this.toolStripNew_Click); // // toolStripOpen // this.toolStripOpen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripOpen, "toolStripOpen"); this.toolStripOpen.Name = "toolStripOpen"; this.toolStripOpen.Click += new System.EventHandler(this.toolStripOpen_Click); // // toolStripSave // this.toolStripSave.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripSave, "toolStripSave"); this.toolStripSave.Name = "toolStripSave"; this.toolStripSave.Click += new System.EventHandler(this.toolStripSave_Click); // // tstSeparator1 // this.tstSeparator1.Name = "tstSeparator1"; resources.ApplyResources(this.tstSeparator1, "tstSeparator1"); // // toolStripUndo // this.toolStripUndo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripUndo, "toolStripUndo"); this.toolStripUndo.Name = "toolStripUndo"; this.toolStripUndo.Click += new System.EventHandler(this.toolStripUndo_Click); // // toolStripRedo // this.toolStripRedo.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripRedo, "toolStripRedo"); this.toolStripRedo.Name = "toolStripRedo"; this.toolStripRedo.Click += new System.EventHandler(this.toolStripRedo_Click); // // tstSeparator2 // this.tstSeparator2.Name = "tstSeparator2"; resources.ApplyResources(this.tstSeparator2, "tstSeparator2"); // // toolStripZoom // resources.ApplyResources(this.toolStripZoom, "toolStripZoom"); this.toolStripZoom.Items.AddRange(new object[] { resources.GetString("toolStripZoom.Items"), resources.GetString("toolStripZoom.Items1"), resources.GetString("toolStripZoom.Items2"), resources.GetString("toolStripZoom.Items3"), resources.GetString("toolStripZoom.Items4"), resources.GetString("toolStripZoom.Items5")}); this.toolStripZoom.Name = "toolStripZoom"; this.toolStripZoom.SelectedIndexChanged += new System.EventHandler(this.toolStripZoom_SelectedIndexChanged); this.toolStripZoom.Leave += new System.EventHandler(this.toolStripZoom_Leave); this.toolStripZoom.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.toolStripZoom_KeyPress); // // tstSeparator3 // this.tstSeparator3.Name = "tstSeparator3"; resources.ApplyResources(this.tstSeparator3, "tstSeparator3"); // // toolStripToolPointer // this.toolStripToolPointer.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripToolPointer, "toolStripToolPointer"); this.toolStripToolPointer.Name = "toolStripToolPointer"; this.toolStripToolPointer.Click += new System.EventHandler(this.toolStripToolPointer_Click); // // toolStripToolAdjustRoute // this.toolStripToolAdjustRoute.Checked = true; this.toolStripToolAdjustRoute.CheckState = System.Windows.Forms.CheckState.Checked; this.toolStripToolAdjustRoute.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripToolAdjustRoute, "toolStripToolAdjustRoute"); this.toolStripToolAdjustRoute.Name = "toolStripToolAdjustRoute"; this.toolStripToolAdjustRoute.Click += new System.EventHandler(this.toolStripToolAdjustRoute_Click); // // toolStripToolLap // this.toolStripToolLap.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripToolLap, "toolStripToolLap"); this.toolStripToolLap.Name = "toolStripToolLap"; this.toolStripToolLap.Click += new System.EventHandler(this.toolStripToolLap_Click); // // toolStripToolCut // this.toolStripToolCut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripToolCut, "toolStripToolCut"); this.toolStripToolCut.Name = "toolStripToolCut"; this.toolStripToolCut.Click += new System.EventHandler(this.toolStripToolCut_Click); // // toolStripToolZoomIn // this.toolStripToolZoomIn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripToolZoomIn, "toolStripToolZoomIn"); this.toolStripToolZoomIn.Name = "toolStripToolZoomIn"; this.toolStripToolZoomIn.Click += new System.EventHandler(this.toolStripToolZoomIn_Click); // // toolStripToolZoomOut // this.toolStripToolZoomOut.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripToolZoomOut, "toolStripToolZoomOut"); this.toolStripToolZoomOut.Name = "toolStripToolZoomOut"; this.toolStripToolZoomOut.Click += new System.EventHandler(this.toolStripToolZoomOut_Click); // // tstSeparator4 // this.tstSeparator4.Name = "tstSeparator4"; resources.ApplyResources(this.tstSeparator4, "tstSeparator4"); // // toolStripOpenInGoogleEarth // this.toolStripOpenInGoogleEarth.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripOpenInGoogleEarth, "toolStripOpenInGoogleEarth"); this.toolStripOpenInGoogleEarth.Name = "toolStripOpenInGoogleEarth"; this.toolStripOpenInGoogleEarth.Click += new System.EventHandler(this.toolStripOpenInGoogleEarth_Click); // // toolStripPublishMap // this.toolStripPublishMap.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripPublishMap, "toolStripPublishMap"); this.toolStripPublishMap.Name = "toolStripPublishMap"; this.toolStripPublishMap.Click += new System.EventHandler(this.toolStripPublishMap_Click); // // tstToolsSeparator // this.tstToolsSeparator.Name = "tstToolsSeparator"; resources.ApplyResources(this.tstToolsSeparator, "tstToolsSeparator"); // // toolStripFullScreen // this.toolStripFullScreen.CheckOnClick = true; this.toolStripFullScreen.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripFullScreen, "toolStripFullScreen"); this.toolStripFullScreen.Name = "toolStripFullScreen"; this.toolStripFullScreen.CheckedChanged += new System.EventHandler(this.toolStripFullScreen_CheckedChanged); // // toolStripRightPanelVisible // this.toolStripRightPanelVisible.Checked = true; this.toolStripRightPanelVisible.CheckOnClick = true; this.toolStripRightPanelVisible.CheckState = System.Windows.Forms.CheckState.Checked; this.toolStripRightPanelVisible.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripRightPanelVisible, "toolStripRightPanelVisible"); this.toolStripRightPanelVisible.Name = "toolStripRightPanelVisible"; this.toolStripRightPanelVisible.CheckedChanged += new System.EventHandler(this.toolStripRightPanelVisible_CheckedChanged); // // toolStripBottomPanelVisible // this.toolStripBottomPanelVisible.Checked = true; this.toolStripBottomPanelVisible.CheckOnClick = true; this.toolStripBottomPanelVisible.CheckState = System.Windows.Forms.CheckState.Checked; this.toolStripBottomPanelVisible.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripBottomPanelVisible, "toolStripBottomPanelVisible"); this.toolStripBottomPanelVisible.Name = "toolStripBottomPanelVisible"; this.toolStripBottomPanelVisible.CheckedChanged += new System.EventHandler(this.toolStripBottomPanelVisible_CheckedChanged); // // tstViewSeparator // this.tstViewSeparator.Name = "tstViewSeparator"; resources.ApplyResources(this.tstViewSeparator, "tstViewSeparator"); // // toolStripHelp // this.toolStripHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripHelp, "toolStripHelp"); this.toolStripHelp.Name = "toolStripHelp"; this.toolStripHelp.Click += new System.EventHandler(this.toolStripHelp_Click); // // toolStripApplicationSettings // this.toolStripApplicationSettings.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripApplicationSettings, "toolStripApplicationSettings"); this.toolStripApplicationSettings.Name = "toolStripApplicationSettings"; this.toolStripApplicationSettings.Click += new System.EventHandler(this.toolStripApplicationSettings_Click); // // tstSeparator5 // this.tstSeparator5.Name = "tstSeparator5"; resources.ApplyResources(this.tstSeparator5, "tstSeparator5"); // // toolStripDonate // resources.ApplyResources(this.toolStripDonate, "toolStripDonate"); this.toolStripDonate.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; this.toolStripDonate.Name = "toolStripDonate"; this.toolStripDonate.Click += new System.EventHandler(this.toolStripDonate_Click); // // routeAppearanceToolstrip // resources.ApplyResources(this.routeAppearanceToolstrip, "routeAppearanceToolstrip"); this.routeAppearanceToolstrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.colorCodingAttributes, this.toolStripSeparator1, this.colorRangeStartValue, this.colorRangeIntervalSlider, this.colorRangeEndValue, this.colorRangeIntervalButton, this.toolStripAutoAdjustColorRangeInterval, this.gradientAlphaAdjustment, this.toolStripSeparator2, this.routeLineWidthLabel, this.routeLineWidth, this.routeLineMaskVisible, this.routeLineMaskWidth, this.routeLineMaskColorButton, this.toolStripSeparator9, this.secondaryColorCodingAttributeLabel, this.secondaryColorCodingAttributes, this.toolStripSeparator5, this.smoothingIntervalLengthLabel, this.smoothingIntervalLength, this.toolStripSeparator4, this.circleTimeRadiusLabel, this.circleTimeRadius}); this.routeAppearanceToolstrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; this.routeAppearanceToolstrip.Name = "routeAppearanceToolstrip"; // // colorCodingAttributes // this.colorCodingAttributes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.colorCodingAttributes.Name = "colorCodingAttributes"; resources.ApplyResources(this.colorCodingAttributes, "colorCodingAttributes"); this.colorCodingAttributes.SelectedIndexChanged += new System.EventHandler(this.colorCodingAttributes_SelectedIndexChanged); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); // // colorRangeStartValue // this.colorRangeStartValue.Name = "colorRangeStartValue"; resources.ApplyResources(this.colorRangeStartValue, "colorRangeStartValue"); this.colorRangeStartValue.Leave += new System.EventHandler(this.colorRangeStartValue_Leave); this.colorRangeStartValue.KeyDown += new System.Windows.Forms.KeyEventHandler(this.colorRangeStartValue_KeyDown); // // colorRangeIntervalSlider // resources.ApplyResources(this.colorRangeIntervalSlider, "colorRangeIntervalSlider"); this.colorRangeIntervalSlider.BackColor = System.Drawing.SystemColors.Control; this.colorRangeIntervalSlider.Name = "colorRangeIntervalSlider"; this.colorRangeIntervalSlider.ColorRangeStartValueChanged += new System.EventHandler(this.colorRangeIntervalSlider_ColorRangeStartValueChanged); this.colorRangeIntervalSlider.ColorRangeEndValueChanged += new System.EventHandler(this.colorRangeIntervalSlider_ColorRangeEndValueChanged); this.colorRangeIntervalSlider.ColorRangeStartValueChanging += new System.EventHandler(this.colorRangeIntervalSlider_ColorRangeStartValueChanging); this.colorRangeIntervalSlider.ColorRangeEndValueChanging += new System.EventHandler(this.colorRangeIntervalSlider_ColorRangeEndValueChanging); this.colorRangeIntervalSlider.ColorRangeClicked += new System.Windows.Forms.MouseEventHandler(this.colorRangeIntervalSlider_ColorRangeClicked); // // colorRangeEndValue // this.colorRangeEndValue.Name = "colorRangeEndValue"; resources.ApplyResources(this.colorRangeEndValue, "colorRangeEndValue"); this.colorRangeEndValue.Leave += new System.EventHandler(this.colorRangeEndValue_Leave); this.colorRangeEndValue.KeyDown += new System.Windows.Forms.KeyEventHandler(this.colorRangeEndValue_KeyDown); // // colorRangeIntervalButton // this.colorRangeIntervalButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.colorRangeIntervalButton, "colorRangeIntervalButton"); this.colorRangeIntervalButton.Name = "colorRangeIntervalButton"; this.colorRangeIntervalButton.Click += new System.EventHandler(this.colorRangeIntervalButton_Click); // // toolStripAutoAdjustColorRangeInterval // this.toolStripAutoAdjustColorRangeInterval.CheckOnClick = true; this.toolStripAutoAdjustColorRangeInterval.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.toolStripAutoAdjustColorRangeInterval, "toolStripAutoAdjustColorRangeInterval"); this.toolStripAutoAdjustColorRangeInterval.Name = "toolStripAutoAdjustColorRangeInterval"; this.toolStripAutoAdjustColorRangeInterval.CheckedChanged += new System.EventHandler(this.toolStripAutoAdjustColorRangeInterval_CheckedChanged); // // gradientAlphaAdjustment // resources.ApplyResources(this.gradientAlphaAdjustment, "gradientAlphaAdjustment"); this.gradientAlphaAdjustment.Name = "gradientAlphaAdjustment"; this.gradientAlphaAdjustment.ValueChanged += new System.EventHandler(this.gradientAlphaAdjustment_ValueChanged); this.gradientAlphaAdjustment.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gradientAlphaAdjustment_MouseDown); this.gradientAlphaAdjustment.MouseUp += new System.Windows.Forms.MouseEventHandler(this.gradientAlphaAdjustment_MouseUp); // // toolStripSeparator2 // this.toolStripSeparator2.Name = "toolStripSeparator2"; resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); // // routeLineWidthLabel // this.routeLineWidthLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.routeLineWidthLabel, "routeLineWidthLabel"); this.routeLineWidthLabel.Margin = new System.Windows.Forms.Padding(1, 1, 2, 2); this.routeLineWidthLabel.Name = "routeLineWidthLabel"; // // routeLineWidth // resources.ApplyResources(this.routeLineWidth, "routeLineWidth"); this.routeLineWidth.Name = "routeLineWidth"; this.routeLineWidth.ValueChanged += new System.EventHandler(this.routeLineWidth_ValueChanged); this.routeLineWidth.KeyDown += new System.Windows.Forms.KeyEventHandler(this.routeLineWidth_KeyDown); // // routeLineMaskVisible // this.routeLineMaskVisible.CheckOnClick = true; this.routeLineMaskVisible.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.routeLineMaskVisible, "routeLineMaskVisible"); this.routeLineMaskVisible.Name = "routeLineMaskVisible"; this.routeLineMaskVisible.CheckedChanged += new System.EventHandler(this.routeLineMaskVisible_CheckedChanged); // // routeLineMaskWidth // resources.ApplyResources(this.routeLineMaskWidth, "routeLineMaskWidth"); this.routeLineMaskWidth.Name = "routeLineMaskWidth"; this.routeLineMaskWidth.ValueChanged += new System.EventHandler(this.routeLineMaskWidth_ValueChanged); this.routeLineMaskWidth.KeyDown += new System.Windows.Forms.KeyEventHandler(this.routeLineMaskWidth_KeyDown); // // routeLineMaskColorButton // this.routeLineMaskColorButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.routeLineMaskColorButton, "routeLineMaskColorButton"); this.routeLineMaskColorButton.Name = "routeLineMaskColorButton"; this.routeLineMaskColorButton.Click += new System.EventHandler(this.routeLineMaskColorButton_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9"); // // secondaryColorCodingAttributeLabel // this.secondaryColorCodingAttributeLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.secondaryColorCodingAttributeLabel, "secondaryColorCodingAttributeLabel"); this.secondaryColorCodingAttributeLabel.Margin = new System.Windows.Forms.Padding(1, 1, 2, 2); this.secondaryColorCodingAttributeLabel.Name = "secondaryColorCodingAttributeLabel"; // // secondaryColorCodingAttributes // this.secondaryColorCodingAttributes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.secondaryColorCodingAttributes.Name = "secondaryColorCodingAttributes"; resources.ApplyResources(this.secondaryColorCodingAttributes, "secondaryColorCodingAttributes"); this.secondaryColorCodingAttributes.SelectedIndexChanged += new System.EventHandler(this.secondaryColorCodingAttributes_SelectedIndexChanged); // // toolStripSeparator5 // this.toolStripSeparator5.Name = "toolStripSeparator5"; resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); // // smoothingIntervalLengthLabel // this.smoothingIntervalLengthLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.smoothingIntervalLengthLabel, "smoothingIntervalLengthLabel"); this.smoothingIntervalLengthLabel.Margin = new System.Windows.Forms.Padding(1, 1, 2, 2); this.smoothingIntervalLengthLabel.Name = "smoothingIntervalLengthLabel"; // // smoothingIntervalLength // this.smoothingIntervalLength.Name = "smoothingIntervalLength"; resources.ApplyResources(this.smoothingIntervalLength, "smoothingIntervalLength"); this.smoothingIntervalLength.Leave += new System.EventHandler(this.smoothingIntervalLength_Leave); this.smoothingIntervalLength.KeyDown += new System.Windows.Forms.KeyEventHandler(this.smoothingIntervalLength_KeyDown); // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); // // circleTimeRadiusLabel // this.circleTimeRadiusLabel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; resources.ApplyResources(this.circleTimeRadiusLabel, "circleTimeRadiusLabel"); this.circleTimeRadiusLabel.Margin = new System.Windows.Forms.Padding(1, 1, 2, 2); this.circleTimeRadiusLabel.Name = "circleTimeRadiusLabel"; // // circleTimeRadius // this.circleTimeRadius.Name = "circleTimeRadius"; resources.ApplyResources(this.circleTimeRadius, "circleTimeRadius"); this.circleTimeRadius.Leave += new System.EventHandler(this.circleTimeRadius_Leave); this.circleTimeRadius.KeyDown += new System.Windows.Forms.KeyEventHandler(this.circleTimeRadius_KeyDown); // // toolStripSeparator12 // this.toolStripSeparator12.Name = "toolStripSeparator12"; resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12"); // // toolStripSeparator11 // this.toolStripSeparator11.Name = "toolStripSeparator11"; resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11"); // // menuStrip // this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuFile, this.menuEdit, this.menuView, this.menuTools, this.menuSettings, this.menuHelp}); resources.ApplyResources(this.menuStrip, "menuStrip"); this.menuStrip.Name = "menuStrip"; // // menuFile // this.menuFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuFileNew, this.menuFileOpen, this.menuFileSave, this.menuFileSaveAs, this.menuFileExport, this.menuFileImportSessions, this.menuFileRecentDocumentsSeparator, this.menuFileSeparator1, this.menuFileExit}); this.menuFile.Name = "menuFile"; resources.ApplyResources(this.menuFile, "menuFile"); // // menuFileNew // resources.ApplyResources(this.menuFileNew, "menuFileNew"); this.menuFileNew.Name = "menuFileNew"; this.menuFileNew.Click += new System.EventHandler(this.menuFileNew_Click); // // menuFileOpen // resources.ApplyResources(this.menuFileOpen, "menuFileOpen"); this.menuFileOpen.Name = "menuFileOpen"; this.menuFileOpen.Click += new System.EventHandler(this.menuFileOpen_Click); // // menuFileSave // resources.ApplyResources(this.menuFileSave, "menuFileSave"); this.menuFileSave.Name = "menuFileSave"; this.menuFileSave.Click += new System.EventHandler(this.menuFileSave_Click); // // menuFileSaveAs // this.menuFileSaveAs.Name = "menuFileSaveAs"; resources.ApplyResources(this.menuFileSaveAs, "menuFileSaveAs"); this.menuFileSaveAs.Click += new System.EventHandler(this.menuFileSaveAs_Click); // // menuFileExport // this.menuFileExport.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuFileExportImage, this.menuFileExportGPX, this.menuFileExportKMZ, this.menuFileExportRouteData}); this.menuFileExport.Name = "menuFileExport"; resources.ApplyResources(this.menuFileExport, "menuFileExport"); // // menuFileExportImage // this.menuFileExportImage.Name = "menuFileExportImage"; resources.ApplyResources(this.menuFileExportImage, "menuFileExportImage"); this.menuFileExportImage.Click += new System.EventHandler(this.menuFileExportImage_Click); // // menuFileExportGPX // this.menuFileExportGPX.Name = "menuFileExportGPX"; resources.ApplyResources(this.menuFileExportGPX, "menuFileExportGPX"); this.menuFileExportGPX.Click += new System.EventHandler(this.menuFileExportGPX_Click); // // menuFileExportKMZ // this.menuFileExportKMZ.Name = "menuFileExportKMZ"; resources.ApplyResources(this.menuFileExportKMZ, "menuFileExportKMZ"); this.menuFileExportKMZ.Click += new System.EventHandler(this.menuFileExportKMZ_Click); // // menuFileExportRouteData // this.menuFileExportRouteData.Name = "menuFileExportRouteData"; resources.ApplyResources(this.menuFileExportRouteData, "menuFileExportRouteData"); this.menuFileExportRouteData.Click += new System.EventHandler(this.menuFileExportRouteData_Click); // // menuFileImportSessions // this.menuFileImportSessions.Name = "menuFileImportSessions"; resources.ApplyResources(this.menuFileImportSessions, "menuFileImportSessions"); this.menuFileImportSessions.Click += new System.EventHandler(this.menuFileImportSessions_Click); // // menuFileRecentDocumentsSeparator // this.menuFileRecentDocumentsSeparator.Name = "menuFileRecentDocumentsSeparator"; resources.ApplyResources(this.menuFileRecentDocumentsSeparator, "menuFileRecentDocumentsSeparator"); // // menuFileSeparator1 // this.menuFileSeparator1.Name = "menuFileSeparator1"; resources.ApplyResources(this.menuFileSeparator1, "menuFileSeparator1"); // // menuFileExit // this.menuFileExit.Name = "menuFileExit"; resources.ApplyResources(this.menuFileExit, "menuFileExit"); this.menuFileExit.Click += new System.EventHandler(this.menuFileExit_Click); // // menuEdit // this.menuEdit.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuEditUndo, this.menuEditRedo, this.menuEditSeparator1, this.menuEditChangeStartTime}); this.menuEdit.Name = "menuEdit"; resources.ApplyResources(this.menuEdit, "menuEdit"); // // menuEditUndo // resources.ApplyResources(this.menuEditUndo, "menuEditUndo"); this.menuEditUndo.Name = "menuEditUndo"; this.menuEditUndo.Click += new System.EventHandler(this.menuEditUndo_Click); // // menuEditRedo // resources.ApplyResources(this.menuEditRedo, "menuEditRedo"); this.menuEditRedo.Name = "menuEditRedo"; this.menuEditRedo.Click += new System.EventHandler(this.menuEditRedo_Click); // // menuEditSeparator1 // this.menuEditSeparator1.Name = "menuEditSeparator1"; resources.ApplyResources(this.menuEditSeparator1, "menuEditSeparator1"); // // menuEditChangeStartTime // this.menuEditChangeStartTime.Name = "menuEditChangeStartTime"; resources.ApplyResources(this.menuEditChangeStartTime, "menuEditChangeStartTime"); this.menuEditChangeStartTime.Click += new System.EventHandler(this.menuEditChangeStartTime_Click); // // menuView // this.menuView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuViewFullScreen, this.menuViewRightPanelVisible, this.menuViewBottomPanelVisible}); this.menuView.Name = "menuView"; resources.ApplyResources(this.menuView, "menuView"); // // menuViewFullScreen // this.menuViewFullScreen.CheckOnClick = true; resources.ApplyResources(this.menuViewFullScreen, "menuViewFullScreen"); this.menuViewFullScreen.Name = "menuViewFullScreen"; this.menuViewFullScreen.CheckedChanged += new System.EventHandler(this.menuViewFullScreen_CheckedChanged); // // menuViewRightPanelVisible // this.menuViewRightPanelVisible.Checked = true; this.menuViewRightPanelVisible.CheckOnClick = true; this.menuViewRightPanelVisible.CheckState = System.Windows.Forms.CheckState.Checked; resources.ApplyResources(this.menuViewRightPanelVisible, "menuViewRightPanelVisible"); this.menuViewRightPanelVisible.Name = "menuViewRightPanelVisible"; this.menuViewRightPanelVisible.CheckedChanged += new System.EventHandler(this.menuViewRightPanelVisible_CheckedChanged); // // menuViewBottomPanelVisible // this.menuViewBottomPanelVisible.Checked = true; this.menuViewBottomPanelVisible.CheckOnClick = true; this.menuViewBottomPanelVisible.CheckState = System.Windows.Forms.CheckState.Checked; resources.ApplyResources(this.menuViewBottomPanelVisible, "menuViewBottomPanelVisible"); this.menuViewBottomPanelVisible.Name = "menuViewBottomPanelVisible"; this.menuViewBottomPanelVisible.CheckedChanged += new System.EventHandler(this.menuViewBottomPanelVisible_CheckedChanged); // // menuTools // this.menuTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuToolsOpenInGoogleEarth, this.menuToolsOpenMultipleFilesInGoogleEarth, this.menuToolsPublishMap, this.menuToolsAddLapsFromExternalDataSource}); this.menuTools.Name = "menuTools"; resources.ApplyResources(this.menuTools, "menuTools"); // // menuToolsOpenInGoogleEarth // resources.ApplyResources(this.menuToolsOpenInGoogleEarth, "menuToolsOpenInGoogleEarth"); this.menuToolsOpenInGoogleEarth.Name = "menuToolsOpenInGoogleEarth"; this.menuToolsOpenInGoogleEarth.Click += new System.EventHandler(this.menuToolsOpenInGoogleEarth_Click); // // menuToolsOpenMultipleFilesInGoogleEarth // this.menuToolsOpenMultipleFilesInGoogleEarth.Name = "menuToolsOpenMultipleFilesInGoogleEarth"; resources.ApplyResources(this.menuToolsOpenMultipleFilesInGoogleEarth, "menuToolsOpenMultipleFilesInGoogleEarth"); this.menuToolsOpenMultipleFilesInGoogleEarth.Click += new System.EventHandler(this.menuToolsOpenMultipleFilesInGoogleEarth_Click); // // menuToolsPublishMap // resources.ApplyResources(this.menuToolsPublishMap, "menuToolsPublishMap"); this.menuToolsPublishMap.Name = "menuToolsPublishMap"; this.menuToolsPublishMap.Click += new System.EventHandler(this.menuToolsPublishMap_Click); // // menuToolsAddLapsFromExternalDataSource // this.menuToolsAddLapsFromExternalDataSource.Name = "menuToolsAddLapsFromExternalDataSource"; resources.ApplyResources(this.menuToolsAddLapsFromExternalDataSource, "menuToolsAddLapsFromExternalDataSource"); this.menuToolsAddLapsFromExternalDataSource.Click += new System.EventHandler(this.menuToolsAddLapsFromExternalDataSource_Click); // // menuSettings // this.menuSettings.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuSettingsLanguage}); this.menuSettings.Name = "menuSettings"; resources.ApplyResources(this.menuSettings, "menuSettings"); // // menuSettingsLanguage // this.menuSettingsLanguage.Name = "menuSettingsLanguage"; resources.ApplyResources(this.menuSettingsLanguage, "menuSettingsLanguage"); this.menuSettingsLanguage.Click += new System.EventHandler(this.menuSettingsLanguage_Click); // // menuHelp // this.menuHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuHelpHelp, this.menuHelpSeparator1, this.menuHelpAbout}); this.menuHelp.Name = "menuHelp"; resources.ApplyResources(this.menuHelp, "menuHelp"); // // menuHelpHelp // resources.ApplyResources(this.menuHelpHelp, "menuHelpHelp"); this.menuHelpHelp.Name = "menuHelpHelp"; this.menuHelpHelp.Click += new System.EventHandler(this.menuHelpHelp_Click); // // menuHelpSeparator1 // this.menuHelpSeparator1.Name = "menuHelpSeparator1"; resources.ApplyResources(this.menuHelpSeparator1, "menuHelpSeparator1"); // // menuHelpAbout // this.menuHelpAbout.Name = "menuHelpAbout"; resources.ApplyResources(this.menuHelpAbout, "menuHelpAbout"); this.menuHelpAbout.Click += new System.EventHandler(this.menuHelpAbout_Click); // // toolStripSeparator3 // this.toolStripSeparator3.Name = "toolStripSeparator3"; resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); // // Main // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.toolStripContainer1); this.Controls.Add(this.menuStrip); this.KeyPreview = true; this.MainMenuStrip = this.menuStrip; this.Name = "Main"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing); this.Load += new System.EventHandler(this.Main_Load); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Main_KeyDown); this.Resize += new System.EventHandler(this.Main_Resize); this.toolStripContainer1.ContentPanel.ResumeLayout(false); this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); this.toolStripContainer1.TopToolStripPanel.PerformLayout(); this.toolStripContainer1.ResumeLayout(false); this.toolStripContainer1.PerformLayout(); this.rightPanel.ResumeLayout(false); this.lapGridPanel.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.laps)).EndInit(); this.sessionPanel.ResumeLayout(false); this.lapHistogramContainerPanel.ResumeLayout(false); this.lapHistogramContainerPanel.PerformLayout(); this.lapHistogramToolstrip.ResumeLayout(false); this.lapHistogramToolstrip.PerformLayout(); this.bottomPanel.ResumeLayout(false); this.toolStrip.ResumeLayout(false); this.toolStrip.PerformLayout(); this.routeAppearanceToolstrip.ResumeLayout(false); this.routeAppearanceToolstrip.PerformLayout(); this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ToolStrip toolStrip; private System.Windows.Forms.ToolStripButton toolStripNew; private System.Windows.Forms.ToolStripButton toolStripOpen; private System.Windows.Forms.ToolStripButton toolStripSave; private System.Windows.Forms.ToolStripSeparator tstSeparator1; private System.Windows.Forms.ToolStripButton toolStripHelp; private System.Windows.Forms.ToolStripSeparator tstSeparator2; private System.Windows.Forms.ToolStripComboBox toolStripZoom; private System.Windows.Forms.MenuStrip menuStrip; private System.Windows.Forms.ToolStripMenuItem menuFile; private System.Windows.Forms.ToolStripMenuItem menuFileNew; private System.Windows.Forms.ToolStripMenuItem menuFileOpen; private System.Windows.Forms.ToolStripMenuItem menuFileSave; private System.Windows.Forms.ToolStripMenuItem menuHelp; private System.Windows.Forms.ToolStripMenuItem menuFileExit; private System.Windows.Forms.ToolStripSeparator menuFileSeparator1; private System.Windows.Forms.ToolStripMenuItem menuHelpHelp; private QuickRoute.Controls.Canvas canvas; private System.Windows.Forms.ToolStripButton toolStripToolAdjustRoute; private System.Windows.Forms.ToolStripButton toolStripToolZoomIn; private System.Windows.Forms.ToolStripButton toolStripToolZoomOut; private System.Windows.Forms.ToolStripSeparator tstSeparator3; private System.Windows.Forms.Panel rightPanel; private System.Windows.Forms.Splitter rightSplitter; private System.Windows.Forms.Panel bottomPanel; private System.Windows.Forms.Splitter bottomSplitter; private System.Windows.Forms.ToolStripMenuItem menuFileSaveAs; private System.Windows.Forms.ToolStripContainer toolStripContainer1; private System.Windows.Forms.ToolStrip routeAppearanceToolstrip; private System.Windows.Forms.ToolStripComboBox colorCodingAttributes; private System.Windows.Forms.ToolStripComboBox secondaryColorCodingAttributes; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; private System.Windows.Forms.ToolStripTextBox colorRangeStartValue; private System.Windows.Forms.ToolStripTextBox colorRangeEndValue; private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private QuickRoute.Controls.ToolstripColorRangeIntervalSlider colorRangeIntervalSlider; private QuickRoute.Controls.ToolstripNumericUpDown routeLineWidth; private System.Windows.Forms.ToolStripButton routeLineMaskVisible; private QuickRoute.Controls.ToolstripNumericUpDown routeLineMaskWidth; private QuickRoute.Controls.ToolstripTrackBar gradientAlphaAdjustment; private System.Windows.Forms.ToolStripButton routeLineMaskColorButton; private System.Windows.Forms.ToolStripButton colorRangeIntervalButton; private System.Windows.Forms.ToolStripButton toolStripToolCut; private System.Windows.Forms.ToolStripButton toolStripToolLap; private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; private System.Windows.Forms.ToolStripButton toolStripUndo; private System.Windows.Forms.ToolStripButton toolStripRedo; private System.Windows.Forms.ToolStripSeparator tstSeparator4; private System.Windows.Forms.ToolStripMenuItem menuEdit; private System.Windows.Forms.ToolStripMenuItem menuEditUndo; private System.Windows.Forms.ToolStripMenuItem menuEditRedo; private System.Windows.Forms.ToolStripMenuItem menuHelpAbout; private System.Windows.Forms.ToolStripSeparator menuHelpSeparator1; private System.Windows.Forms.Panel lapGridPanel; private System.Windows.Forms.Label lapsLabel; private System.Windows.Forms.Splitter rightPanelTopSplitter; private System.Windows.Forms.Splitter rightPanelBottomSplitter; private System.Windows.Forms.Panel lapHistogramContainerPanel; private System.Windows.Forms.Panel lapHistogramPanel; private System.Windows.Forms.ToolStrip lapHistogramToolstrip; private System.Windows.Forms.ToolStripButton exportLapHistogramImage; private System.Windows.Forms.ToolStripSeparator lapHistogramToolstripSeparator1; private System.Windows.Forms.ToolStripLabel lapHistogramBinWidthLabel; private System.Windows.Forms.ToolStripTextBox lapHistogramBinWidth; private System.Windows.Forms.ToolStripSeparator tstViewSeparator; private System.Windows.Forms.ToolStripTextBox smoothingIntervalLength; private System.Windows.Forms.ToolStripButton toolStripApplicationSettings; private QuickRoute.Controls.ScrollableLabel dynamicHelpLabel; private System.Windows.Forms.ToolStripSeparator tstSeparator5; private System.Windows.Forms.ToolStripButton toolStripDonate; private System.Windows.Forms.ToolStripButton toolStripToolPointer; private System.Windows.Forms.ToolStripMenuItem menuSettings; private System.Windows.Forms.ToolStripMenuItem menuSettingsLanguage; private System.Windows.Forms.ToolStripButton toolStripRightPanelVisible; private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; private QuickRoute.Controls.LineGraphControl lineGraph; private System.Windows.Forms.ToolStripSeparator menuFileRecentDocumentsSeparator; private System.Windows.Forms.ToolStripButton toolStripAutoAdjustColorRangeInterval; private System.Windows.Forms.ToolStripButton toolStripBottomPanelVisible; private System.Windows.Forms.ToolStripMenuItem menuTools; private System.Windows.Forms.ToolStripMenuItem menuToolsAddLapsFromExternalDataSource; private System.Windows.Forms.Panel sessionPanel; private System.Windows.Forms.CheckedListBox sessions; private System.Windows.Forms.ToolStripMenuItem menuFileImportSessions; private System.Windows.Forms.ToolStripMenuItem menuToolsPublishMap; private System.Windows.Forms.ToolStripMenuItem menuFileExport; private System.Windows.Forms.ToolStripMenuItem menuFileExportImage; private System.Windows.Forms.ToolStripMenuItem menuFileExportGPX; private System.Windows.Forms.ToolStripMenuItem menuToolsOpenInGoogleEarth; private System.Windows.Forms.ToolStripMenuItem menuFileExportKMZ; private System.Windows.Forms.ToolStripMenuItem menuFileExportRouteData; private System.Windows.Forms.ToolStripMenuItem menuToolsOpenMultipleFilesInGoogleEarth; private System.Windows.Forms.ToolStripButton toolStripOpenInGoogleEarth; private System.Windows.Forms.ToolStripSeparator tstToolsSeparator; private System.Windows.Forms.ToolStripButton toolStripPublishMap; private System.Windows.Forms.ToolStripButton toolStripFullScreen; private System.Windows.Forms.ToolStripMenuItem menuView; private System.Windows.Forms.ToolStripMenuItem menuViewFullScreen; private System.Windows.Forms.ToolStripMenuItem menuViewRightPanelVisible; private System.Windows.Forms.ToolStripMenuItem menuViewBottomPanelVisible; private System.Windows.Forms.ToolStripSeparator menuEditSeparator1; private System.Windows.Forms.ToolStripMenuItem menuEditChangeStartTime; private System.Windows.Forms.DataGridView laps; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.Panel momentaneousInfoPanel; private System.Windows.Forms.ToolStripLabel smoothingIntervalLengthLabel; private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; private System.Windows.Forms.ToolStripLabel circleTimeRadiusLabel; private System.Windows.Forms.ToolStripTextBox circleTimeRadius; private System.Windows.Forms.ToolStripLabel routeLineWidthLabel; private System.Windows.Forms.ToolStripLabel secondaryColorCodingAttributeLabel; private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; } }quickroute-linux-upstream-2.5/QuickRoute.UI/Main.cs000066400000000000000000003642161446222606700224150ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.IO.Ports; using System.Net; using System.Text; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.BusinessEntities.Actions; using QuickRoute.BusinessEntities.Exporters; using QuickRoute.BusinessEntities.Importers.Garmin.Forerunner; using QuickRoute.BusinessEntities.Numeric; using QuickRoute.BusinessEntities.RouteProperties; using QuickRoute.Common; using QuickRoute.Controls; #if !__MonoCS__ using QuickRoute.GPSDeviceReaders.GarminUSBReader; #endif using QuickRoute.UI.Classes; using QuickRoute.UI.Forms; using System.IO; using QuickRoute.Resources; namespace QuickRoute.UI { public partial class Main : Form { private string untitledDocumentFileNameProposal; private bool documentChanged; ColorfulHistogram lapHistogram; private List lapInfoList; private Dictionary momentaneousInfoLabelRectangles; private readonly Padding momentaneousInfoLabelPadding = new Padding(6, 3, 6, 3); private Bitmap momentaneousInfoPanelBackBuffer; private Graphics momentaneousInfoPanelBackBufferGraphics; private RoutePropertyCacheManager cacheManager = new RoutePropertyCacheManager(); private int updatingUINowCounter; private bool UpdatingUINow { get { return updatingUINowCounter > 0; } } private readonly bool startingUpNow; private bool updatingZoomNow; private bool openingDocumentNow; private readonly Stack undoStack = new Stack(); private readonly Stack redoStack = new Stack(); private int workLevel; private Cursor previousCursor; private int lapSortOrderColumnIndex; private SortOrder lapSortOrder; private int lapIndexToDelete; private MainFormState formState; public Main() { startingUpNow = true; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; Application.ThreadException += Application_ThreadException; var log4NetLogFileName = ConfigurationManager.AppSettings.Get("log4netLogFileName") ?? Path.Combine(CommonUtil.GetApplicationDataPath(), "QuickRoute.log"); LogUtil.Configure(log4NetLogFileName); Util.EnsureApplicationDataFolderExists(); Util.UpdateApplicationSettingsToCurrentVersion(); CommonUtil.ClearTempFolder(); if (ApplicationSettings.UiCulture == null) { //Util.SelectUICulture(false); } if (ApplicationSettings.UiCulture != null) { System.Threading.Thread.CurrentThread.CurrentUICulture = ApplicationSettings.UiCulture; } InitializeComponent(); Util.CheckForNewVersion(); // Display the splash screen //SplashScreen SplashScreen = new SplashScreen(); //SplashScreen.Show(); toolStripZoom.SelectedText = "100%"; gradientAlphaAdjustment.TrackBarControl.Minimum = -10; gradientAlphaAdjustment.TrackBarControl.Maximum = 10; // add color coded waypoint attributes to combobox List cca = new List { new WaypointAttributeString(WaypointAttribute.Pace), new WaypointAttributeString(WaypointAttribute.Speed), new WaypointAttributeString(WaypointAttribute.HeartRate), new WaypointAttributeString(WaypointAttribute.Altitude), new WaypointAttributeString(WaypointAttribute.DirectionDeviationToNextLap), new WaypointAttributeString(WaypointAttribute.MapReadingDuration) }; foreach (var item in cca) { colorCodingAttributes.Items.Add(item); } colorCodingAttributes.SelectedIndex = 0; List scca = new List { new WaypointAttributeString(null), new WaypointAttributeString(WaypointAttribute.Pace), new WaypointAttributeString(WaypointAttribute.Speed), new WaypointAttributeString(WaypointAttribute.HeartRate), new WaypointAttributeString(WaypointAttribute.Altitude), new WaypointAttributeString(WaypointAttribute.DirectionDeviationToNextLap), new WaypointAttributeString(WaypointAttribute.MapReadingDuration) }; foreach (var item in scca) { secondaryColorCodingAttributes.Items.Add(item); } secondaryColorCodingAttributes.SelectedIndex = 0; routeLineWidth.NumericUpDownControl.DecimalPlaces = 1; routeLineMaskWidth.NumericUpDownControl.DecimalPlaces = 1; UpdateUI(); UpdateRecentDocumentsListInMenu(); CreateMomentaneousInfoPanelBackBuffer(); //SplashScreen.Close(); //check for /openInGoogleEarth flag if (Environment.GetCommandLineArgs().Length == 3 && Environment.GetCommandLineArgs()[1].ToLower() == "/openingoogleearth") { OpenInGoogleEarthFromCommandLine(Environment.GetCommandLineArgs()[2]); } SetupGarminUSBReader(); startingUpNow = false; } private void SetupGarminUSBReader() { #if !__MonoCS__ GarminUSBReader.Instance.CacheDirectory = Path.Combine(CommonUtil.GetApplicationDataPath(), "GarminUSBReaderCache"); #endif ReadGarminUSBData(); } private bool garminUSBLastConnectionState; private void ReadGarminUSBData() { #if !__MonoCS__ var autoread = ConfigurationManager.AppSettings["autoreadGarminUSBData"]; if(autoread != null) { bool b; bool.TryParse(autoread, out b); if(b) { var isConnected = GarminUSBReader.Instance.IsConnected; if (isConnected && !garminUSBLastConnectionState && !GarminUSBReader.Instance.ReadingNow) { GarminUSBReader.Instance.BeginReadData(); } garminUSBLastConnectionState = isConnected; } } #endif } ~Main() { if (momentaneousInfoPanelBackBuffer != null) momentaneousInfoPanelBackBuffer.Dispose(); if (momentaneousInfoPanelBackBufferGraphics != null) momentaneousInfoPanelBackBufferGraphics.Dispose(); CommonUtil.ClearTempFolder(); } #region Public properties public ApplicationSettings ApplicationSettings { get { return Util.ApplicationSettings; } set { Util.ApplicationSettings = value; } } #endregion #region User interface commands private void NewDocument(string routeFileName) { if (documentChanged) { // save any unsaved document if (QuerySaveDocument() == DialogResult.Cancel) return; } using (var cnf = new CreateNewForm(routeFileName)) { if (ApplicationSettings.RecentPersons.Count == 0) ApplicationSettings.AddRecentPerson(new SessionPerson() { Name = Environment.UserName }); cnf.SetPersons(ApplicationSettings.RecentPersons); if (cnf.ShowDialog() == DialogResult.OK) { BeginWork(); try { openingDocumentNow = true; ApplicationSettings.AddRecentPerson(cnf.Person); canvas.PreventRedraw = true; canvas.Document = new Document(cnf.Map, cnf.ImportResult.Route, cnf.ImportResult.Laps, cnf.InitialTransformation.TransformationMatrix, cnf.InitialTransformation.ProjectionOrigin, ApplicationSettings.DefaultDocumentSettings.Copy()); canvas.CurrentSession = canvas.Document.Sessions[0]; canvas.CurrentSession.SessionInfo.Person = cnf.Person; canvas.SelectedSessions = new SessionCollection { canvas.CurrentSession }; InitColorRangeIntervals(); untitledDocumentFileNameProposal = cnf.FileNameProposal; documentChanged = true; updatingUINowCounter++; PopulateSessionList(); updatingUINowCounter--; ResetActionStacks(); lapSortOrderColumnIndex = 0; lapSortOrder = SortOrder.Ascending; CalculateLapInfo(); //updatingUINowCounter++; //laps.Rows[laps.Rows.Count - 1].Selected = true; //updatingUINowCounter--; CalculateMomentaneousInfoLabelRectangles(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); canvas.PreventRedraw = false; canvas.Init(); canvas.CurrentMouseTool = Canvas.MouseTool.AdjustRoute; openingDocumentNow = false; } catch (Exception ex) { canvas.Document = null; Util.ShowExceptionMessageBox(ex, Strings.Error_NewDocument); documentChanged = false; } UpdateUI(); EndWork(); } } } private void InitColorRangeIntervals() { var was = new[] { WaypointAttribute.Pace, WaypointAttribute.Speed, WaypointAttribute.HeartRate, WaypointAttribute.Altitude, WaypointAttribute.DirectionDeviationToNextLap, WaypointAttribute.MapReadingDuration }; Route r = canvas.CurrentSession.Route; foreach (WaypointAttribute wa in was) { if (ApplicationSettings.AutoAdjustColorRangeInterval) { List values = r.GetOrderedValues(wa, GetAutoAdjustColorRangeIntervalPercentages(wa), new TimeSpan(0, 0, 1)); if (values.Count > 1 && values[0].HasValue && values[1].HasValue) { double span = values[1].Value - values[0].Value; values[0] -= 0.1 * span; values[0] = Math.Max(0, values[0].Value); values[1] += 0.1 * span; if (wa == WaypointAttribute.Pace) values[1] = Math.Min(30 * 60, values[1].Value); if (wa == WaypointAttribute.DirectionDeviationToNextLap) values[0] = 0; if (wa == WaypointAttribute.MapReadingDuration) values[0] = 0; UpdateColorRangeInterval(wa, values[0].Value, values[1].Value, true); } } else { ColorRange cr = ApplicationSettings.DefaultDocumentSettings.DefaultSessionSettings.RouteLineSettingsCollection[wa].ColorRange; UpdateColorRangeInterval(wa, cr.StartValue, cr.EndValue, true); } } } private static List GetAutoAdjustColorRangeIntervalPercentages(WaypointAttribute attribute) { // use different start and end percentages for different waypoint attributes switch (attribute) { case WaypointAttribute.Altitude: return new List(new double[] { 0, 1 }); case WaypointAttribute.HeartRate: return new List(new double[] { 0.1, 1 }); case WaypointAttribute.DirectionDeviationToNextLap: return new List(new double[] { 0, 0.9 }); case WaypointAttribute.MapReadingDuration: return new List(new double[] { 0, 1.1 }); default: return new List(new double[] { 0.1, 0.9 }); } } private void OpenDocumentShowDialog() { if (documentChanged) { // save any unsaved document if (QuerySaveDocument() == DialogResult.Cancel) return; } using (var ofd = new OpenFileDialog { Title = Strings.OpenQuickRouteFileTitle, Filter = (Strings.FileFilter_AllQuickRouteFiles + "|" + Strings.FileFilter_QuickRouteFiles + "|" + Strings.FileFilter_QuickRoute10Files + "|" + Strings.FileFilter_JpegFilesExportedFromQuickRoute + "|" + Strings.FileFilter_AllFiles), FilterIndex = 1, AddExtension = true, CheckFileExists = true }) { if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.OpenDocument)) { ofd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.OpenDocument]; } if (ofd.ShowDialog() == DialogResult.OK) { QuickRouteFileFormat fileFormat; switch (ofd.FilterIndex) { case 2: fileFormat = QuickRouteFileFormat.Qrt; break; case 3: fileFormat = QuickRouteFileFormat.Xml; break; case 4: fileFormat = QuickRouteFileFormat.Jpeg; break; default: fileFormat = Document.GetFileFormat(ofd.FileName); break; } OpenDocumentWithFileName(ofd.FileName, fileFormat, false); ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.OpenDocument] = Path.GetDirectoryName(ofd.FileName); } } } private bool OpenDocumentWithFileName(string fileName, bool querySaveDocument) { return OpenDocumentWithFileName(fileName, QuickRouteFileFormat.Unknown, querySaveDocument); } private bool OpenDocumentWithFileName(string fileName, QuickRouteFileFormat fileFormat, bool querySaveDocument) { var result = false; if (documentChanged && querySaveDocument) { // save any unsaved document if (QuerySaveDocument() == DialogResult.Cancel) return result; } try { BeginWork(); openingDocumentNow = true; canvas.PreventRedraw = true; fileName = CommonUtil.GetDownloadedFileName(fileName); Document document = null; switch (fileFormat) { case QuickRouteFileFormat.Qrt: document = Document.OpenFromQrt(fileName); break; case QuickRouteFileFormat.Xml: document = Document.OpenFromXml(fileName, ApplicationSettings.DefaultDocumentSettings.Copy()); break; case QuickRouteFileFormat.Jpeg: document = Document.OpenFromJpeg(fileName, ApplicationSettings.DefaultDocumentSettings.Copy()); break; case QuickRouteFileFormat.Unknown: document = Document.Open(fileName, ApplicationSettings.DefaultDocumentSettings.Copy()); break; } if (document == null) { // unrecognized file openingDocumentNow = false; canvas.PreventRedraw = false; EndWork(); MessageBox.Show(string.Format(Strings.UnrecognizedFileFormat, fileName), Strings.Error_OpenDocument, MessageBoxButtons.OK, MessageBoxIcon.Error); return result; } canvas.Document = document; canvas.CurrentSession = canvas.Document.Sessions[0]; canvas.SelectedSessions = new SessionCollection(); canvas.SelectedSessions.Add(canvas.CurrentSession); //if (ApplicationSettings.AutoAdjustColorRangeInterval) PerformColorRangeIntervalAutoAdjustment(); updatingUINowCounter++; PopulateSessionList(); updatingUINowCounter--; ResetActionStacks(); lapSortOrderColumnIndex = 0; lapSortOrder = SortOrder.Ascending; CalculateLapInfo(); //updatingUINowCounter++; //laps.Rows[laps.Rows.Count - 1].Selected = true; //updatingUINowCounter--; CalculateMomentaneousInfoLabelRectangles(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); canvas.PreventRedraw = false; canvas.Init(); canvas.CurrentMouseTool = Canvas.MouseTool.Pointer; if (canvas.Document.FileFormat == QuickRouteFileFormat.Qrt || canvas.Document.FileFormat == QuickRouteFileFormat.Jpeg) { Util.InsertIntoRecentDocumentsList(fileName); UpdateRecentDocumentsListInMenu(); } if (canvas.Document.FileFormat != QuickRouteFileFormat.Qrt) untitledDocumentFileNameProposal = canvas.Document.FileName + ".qrt"; result = true; } catch (Exception ex) { canvas.Document = null; Util.ShowExceptionMessageBox(ex, Strings.Error_OpenDocument); } documentChanged = false; UpdateUI(); openingDocumentNow = false; EndWork(); return result; } private void PopulateSessionList() { sessions.Items.Clear(); foreach (var s in canvas.Document.Sessions) { string text = (s.SessionInfo == null || s.SessionInfo.Person == null ? "" : s.SessionInfo.Person.Name); if (text == "") text = (sessions.Items.Count + 1).ToString(); sessions.Items.Add(text, canvas.SelectedSessions.Contains(s)); } if (sessions.Items.Count > 0) sessions.SelectedIndex = 0; } /// /// Saves the document using the current filename, or if an untitled file, queries for the filename in a dialog /// private void SaveDocument() { if (canvas.Document.FileName == null || canvas.Document.FileFormat != QuickRouteFileFormat.Qrt) { SaveDocumentShowDialog(); } else { SaveDocumentWithFileName(canvas.Document.FileName); } } private void SaveDocumentShowDialog() { using (var sfd = new SaveFileDialog { Title = Strings.SaveAsTitle, FileName = (canvas.Document.FileName != null && canvas.Document.FileFormat == QuickRouteFileFormat.Qrt ? Path.GetFileName(canvas.Document.FileName) : untitledDocumentFileNameProposal), Filter = Strings.FileFilter_QuickRouteFiles, FilterIndex = 1, AddExtension = true, OverwritePrompt = true }) { if (canvas.Document.FileName != null) { sfd.InitialDirectory = Path.GetDirectoryName(canvas.Document.FileName); } else if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.SaveDocument)) { sfd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.SaveDocument]; } if (sfd.ShowDialog() == DialogResult.OK) { SaveDocumentWithFileName(sfd.FileName); ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.SaveDocument] = Path.GetDirectoryName(sfd.FileName); UpdateUI(); } } } private void SaveDocumentWithFileName(string fileName) { BeginWork(); try { canvas.Document.Save(fileName); documentChanged = false; Util.InsertIntoRecentDocumentsList(fileName); UpdateRecentDocumentsListInMenu(); UpdateUI(); } catch (Exception ex) { Util.ShowExceptionMessageBox(ex, Strings.Error_SaveDocument); } EndWork(); } private DialogResult QuerySaveDocument() { DialogResult result = MessageBox.Show( String.Format(Strings.PromptSaveChanges, (canvas.Document.FileName == null ? Strings.Untitled : Path.GetFileName(canvas.Document.FileName))), Strings.QuickRoute, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation); if (result == DialogResult.Yes) SaveDocument(); return result; } private void ExportImage() { using (var sfd = new SaveFileDialog { Title = Strings.ExportImageTitle, Filter = (Strings.FileFilter_JpegFiles + "|" + Strings.FileFilter_PngFiles + "|" + Strings.FileFilter_TiffFiles), FileName = (canvas.Document != null && canvas.Document.FileName != null ? Path.GetFileNameWithoutExtension(canvas.Document.FileName) : Path.GetFileNameWithoutExtension(untitledDocumentFileNameProposal)), FilterIndex = 1, AddExtension = true, OverwritePrompt = true }) { if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ExportFile)) { sfd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportFile]; } if (sfd.ShowDialog() == DialogResult.OK) { try { // TODO: change to saved PercentualImageSize and Quality when dialog is working IMapImageFileExporterDialog selector = null; switch (sfd.FilterIndex) { case 1: // jpeg selector = new JpegPropertySelector { SizeCalculator = canvas.Document.CalculateImageForExportSize, PercentualImageSize = 1, //ApplicationSettings.ExportImagePercentualImageSize, Quality = 0.8 //ApplicationSettings.ExportImageQuality, }; break; case 2: // png selector = new PngPropertySelector { SizeCalculator = canvas.Document.CalculateImageForExportSize, PercentualImageSize = 1, //ApplicationSettings.ExportImagePercentualImageSize }; break; default: // tiff selector = new TiffPropertySelector { SizeCalculator = canvas.Document.CalculateImageForExportSize, PercentualImageSize = 1, //ApplicationSettings.ExportImagePercentualImageSize }; break; } if (selector.ShowPropertyDialog() == DialogResult.OK) { BeginWork(); using (var fs = new FileStream(sfd.FileName, FileMode.Create)) { var imageExporterProperties = new ImageExporterProperties() { EncodingInfo = selector.EncodingInfo, RouteDrawingMode = Document.RouteDrawingMode.Extended, ColorCodingAttribute = SelectedColorCodingAttribute, SecondaryColorCodingAttribute = SelectedSecondaryColorCodingAttribute, PercentualSize = selector.PercentualImageSize, ColorRangeProperties = GetCurrentColorRangeProperties() }; var imageExporter = new ImageExporter(canvas.Document, canvas.SelectedSessions, fs) { Properties = imageExporterProperties }; imageExporter.Export(); fs.Close(); } ApplicationSettings.ExportImagePercentualImageSize = selector.PercentualImageSize; if (selector is JpegPropertySelector) ApplicationSettings.ExportImageQuality = ((JpegPropertySelector)selector).Quality; // ugly! ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportImage] = Path.GetDirectoryName(sfd.FileName); EndWork(); } } catch (Exception ex) { Util.ShowExceptionMessageBox(ex, Strings.Error_ExportImage); } } } } private void ExportGpx() { using (var sfd = new SaveFileDialog { Title = Strings.ExportGPXTitle, Filter = Strings.FileFilter_GpxFiles, FileName = ((canvas.Document.FileName != null ? Path.GetFileNameWithoutExtension(canvas.Document.FileName) : Path.GetFileNameWithoutExtension(untitledDocumentFileNameProposal))), FilterIndex = 1, AddExtension = true, OverwritePrompt = true }) { if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ExportFile)) { sfd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportFile]; } if (sfd.ShowDialog() == DialogResult.OK) { try { BeginWork(); using (var stream = new FileStream(sfd.FileName, FileMode.Create)) { var gpxExporter = new GpxExporter(canvas.CurrentSession, stream); gpxExporter.Export(); stream.Close(); } ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportImage] = Path.GetDirectoryName(sfd.FileName); EndWork(); } catch (Exception ex) { EndWork(); Util.ShowExceptionMessageBox(ex, Strings.Error_ExportRoute); } } } } private void ExportKmz() { using (var kmlPropertySelector = new KmlPropertySelectorDialog(ApplicationSettings.ExportKmlProperties)) { var result = kmlPropertySelector.ShowDialog(); if (result == DialogResult.OK) { var sfd = new SaveFileDialog { Title = Strings.ExportKMZTitle, Filter = Strings.FileFilter_KmzFiles, FileName = ((canvas.Document.FileName != null ? Path.GetFileNameWithoutExtension(canvas.Document.FileName) : Path.GetFileNameWithoutExtension(untitledDocumentFileNameProposal))), FilterIndex = 1, AddExtension = true, OverwritePrompt = true }; if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ExportFile)) { sfd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportFile]; } if (sfd.ShowDialog() == DialogResult.OK) { try { BeginWork(); ApplicationSettings.ExportKmlProperties = kmlPropertySelector.Properties; using (var stream = new FileStream(sfd.FileName, FileMode.Create)) { CreateKmz(canvas.Document, stream, kmlPropertySelector.Properties, SelectedColorCodingAttribute, SelectedSecondaryColorCodingAttribute, GetCurrentColorRangeProperties()); stream.Close(); } ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportFile] = Path.GetDirectoryName(sfd.FileName); EndWork(); } catch (Exception ex) { EndWork(); Util.ShowExceptionMessageBox(ex, Strings.Error_ExportRoute); } } sfd.Dispose(); } } } private void ExportMultipleDocumentsToKmz() { // 1. select which documents to export in some list. it should be possible to include documents from different folders // 2. use kml export property dialog (or rather embedded user control) // 3. use some color range property selector user control (color coding attribute, gradient, intervals, etc) //var files = Directory.GetFiles(@"c:\Orientering\GPS\Trning", "*.qrt"); //CreateKmz(files, stream, kmlPropertySelector.Properties); } private void ExportRouteData() { using (var exportRouteDialog = new ExportRouteDataDialog(ApplicationSettings.ExportRouteDataSettings)) { if (exportRouteDialog.ShowDialog() == DialogResult.OK) { var sfd = new SaveFileDialog { Title = Strings.ExportRouteDataTitle, Filter = Strings.FileFilter_RouteDataFiles, FileName = ((canvas.Document.FileName != null ? Path.GetFileNameWithoutExtension(canvas.Document.FileName) : Path.GetFileNameWithoutExtension(untitledDocumentFileNameProposal))), FilterIndex = 1, AddExtension = true, OverwritePrompt = true }; if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ExportFile)) { sfd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportFile]; } if (sfd.ShowDialog() == DialogResult.OK) { try { BeginWork(); using (var stream = new FileStream(sfd.FileName, FileMode.Create)) { var exporter = new RouteDataExporter(canvas.CurrentSession, stream) { Settings = exportRouteDialog.Settings }; exporter.Export(); stream.Close(); } ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportFile] = Path.GetDirectoryName(sfd.FileName); EndWork(); } catch (Exception ex) { EndWork(); Util.ShowExceptionMessageBox(ex, Strings.Error_ExportRoute); } } sfd.Dispose(); ApplicationSettings.ExportRouteDataSettings = exportRouteDialog.Settings; } } } private ColorRangeProperties GetCurrentColorRangeProperties() { // create scale creator that starts at the start value slider and ends at the end value slider var t = colorRangeIntervalSlider.SliderControl.ScaleCreator.GetType(); var sc = (ScaleCreatorBase)Activator.CreateInstance(t, colorRangeIntervalSlider.SliderControl.ColorRange.StartValue, colorRangeIntervalSlider.SliderControl.ColorRange.EndValue, 10, false); var wa = SelectedColorCodingAttribute; return new ColorRangeProperties { NumericConverter = Util.GetNumericConverterFromWaypointAttribute(wa), ScaleCreator = sc, ScaleCaption = new WaypointAttributeString(wa).Name, ScaleUnit = new WaypointAttributeString(wa).Unit }; } private void OpenInGoogleEarth(string documentFileName, WaypointAttribute? colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, ColorRangeProperties colorRangeProperties) { var document = Document.Open(documentFileName); try { OpenInGoogleEarth(document, colorCodingAttribute, secondaryColorCodingAttribute, colorRangeProperties); } catch (Exception) { MessageBox.Show(Strings.Error_InvalidQuickRouteFile, Strings.OpenInGoogleEarth, MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void OpenInGoogleEarth(Document document, WaypointAttribute? colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, ColorRangeProperties colorRangeProperties) { if (document == null) throw new ArgumentNullException("document"); // set default values if (!colorCodingAttribute.HasValue) colorCodingAttribute = SelectedColorCodingAttribute; if (colorRangeProperties == null) colorRangeProperties = GetCurrentColorRangeProperties(); using (var kmlPropertySelector = new KmlPropertySelectorDialog(ApplicationSettings.ExportKmlProperties) { DialogTitle = Strings.OpenInGoogleEarth }) { var result = kmlPropertySelector.ShowDialog(); if (result == DialogResult.OK) { BeginWork(); try { ApplicationSettings.ExportKmlProperties = kmlPropertySelector.Properties; using (var stream = new MemoryStream()) { CreateKmz(document, stream, kmlPropertySelector.Properties, colorCodingAttribute.Value, secondaryColorCodingAttribute, colorRangeProperties); GoogleEarthUtil.OpenInGoogleEarth(stream); stream.Close(); } EndWork(); } catch (Exception ex) { EndWork(); Console.WriteLine(ex.ToString()); Util.ShowExceptionMessageBox(Strings.Error_GoogleEarthNotInstalledMessage, ex, Strings.Error_GoogleEarthNotInstalledTitle); } } } } private void OpenMultipleFilesInGoogleEarth() { var initialFileNames = new List(); if (canvas.Document != null && canvas.Document.FileName != null) { initialFileNames.Add(canvas.Document.FileName); } using (var dialog = new OpenMultipleFilesInGoogleEarthDialog(initialFileNames, ApplicationSettings.ExportKmlMultipleFileProperties)) { if (dialog.ShowDialog() == DialogResult.OK) { BeginWork(); ApplicationSettings.ExportKmlMultipleFileProperties = dialog.MultipleFileProperties; using (var stream = new MemoryStream()) { var downloadedFiles = DownloadFilesToTempDirectory(dialog.FileNames); var localFileNames = new List(); foreach (var df in downloadedFiles) { localFileNames.Add(df.LocalFileName); } var exporter = new KmlMultipleFilesExporter(localFileNames, dialog.MultipleFileProperties); if (exporter.Document == null) { MessageBox.Show(Strings.MultipleFileExporterNoValidFiles, Strings.OpenMultipleFilesInGoogleEarth, MessageBoxButtons.OK, MessageBoxIcon.Error); } else { exporter.Export(stream); var dialogResult = DialogResult.OK; if (exporter.InvalidFileNames.Count > 0) { var invalidFileNames = new List(); foreach (var ifn in exporter.InvalidFileNames) { foreach (var df in downloadedFiles) { if (df.LocalFileName == ifn) invalidFileNames.Add(df.FileName); } } dialogResult = MessageBox.Show( string.Format(Strings.MultipleFileExporterSomeInvalidFiles, string.Join("\n", invalidFileNames.ToArray())), Strings.OpenMultipleFilesInGoogleEarth, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); } if (dialogResult == DialogResult.OK) GoogleEarthUtil.OpenInGoogleEarth(stream); } // delete temp files foreach (var downloadedFile in downloadedFiles) { if (downloadedFile.IsDownloaded) File.Delete(downloadedFile.LocalFileName); } } EndWork(); } } } private List DownloadFilesToTempDirectory(IEnumerable fileNames) { var downloadedFileNames = new List(); foreach (var fileName in fileNames) { if (fileName.StartsWith("http")) { var client = new WebClient(); var downloadedFileName = Path.Combine(CommonUtil.GetTempFileName(), Path.GetExtension(fileName)); try { client.DownloadFile(fileName, downloadedFileName); downloadedFileNames.Add(new DownloadedFile() { LocalFileName = downloadedFileName, Url = fileName }); } catch (Exception ex) { // todo: better error message, and maybe some sort of download meter Util.ShowExceptionMessageBox(ex, Strings.QuickRoute); } } else { downloadedFileNames.Add(new DownloadedFile() { LocalFileName = fileName }); } } return downloadedFileNames; } private class DownloadedFile { public string LocalFileName { get; set; } public string Url { get; set; } public bool IsDownloaded { get { return Url != null; } } public string FileName { get { return IsDownloaded ? Url : LocalFileName; } } } private void CreateKmz(Document document, Stream stream, KmlProperties kmlProperties, WaypointAttribute colorCodingAttribute, WaypointAttribute? secondaryColorCodingAttribute, ColorRangeProperties colorRangeProperties) { var imageExporterProperties = new ImageExporterProperties() { ColorCodingAttribute = colorCodingAttribute, SecondaryColorCodingAttribute = secondaryColorCodingAttribute, ColorRangeProperties = colorRangeProperties }; var imageExporter = new ImageExporter(document) { Properties = imageExporterProperties }; var kmlExporter = new KmlExporter(document, imageExporter, stream) { KmlProperties = kmlProperties }; kmlExporter.ExportKmz(CommonUtil.GetTempFileName()); } private void CreateKmz(IEnumerable documentFileNames, Stream stream, KmlProperties kmlProperties) { var imageExporterProperties = new ImageExporterProperties() { ColorCodingAttribute = SelectedColorCodingAttribute, SecondaryColorCodingAttribute = SelectedSecondaryColorCodingAttribute, ColorRangeProperties = GetCurrentColorRangeProperties(), SessionSettings = new SessionSettings() }; var kmlExporter = new KmlExporter( documentFileNames, imageExporterProperties, stream) { KmlProperties = kmlProperties }; kmlExporter.ExportKmz(CommonUtil.GetTempFileName()); } private void Undo() { if (undoStack.Count > 0) { IAction action = undoStack.Pop(); redoStack.Push(action); action.Undo(); UpdateAfterUndoRedo(action); } } private void Redo() { if (redoStack.Count > 0) { IAction action = redoStack.Pop(); undoStack.Push(action); action.Execute(); UpdateAfterUndoRedo(action); } } private void ChangeStartTime() { using (var dlg = new TimeDialog { InitialTime = canvas.CurrentSession.Route.FirstWaypoint.Time }) { if (dlg.ShowDialog() == DialogResult.OK) { var timeOffset = dlg.Time - canvas.CurrentSession.Route.FirstWaypoint.Time; var action = new AddTimeOffsetToSessionAction(canvas.CurrentSession, timeOffset); action.Execute(); HandleAction(action); } } } #endregion #region Public methods public void UpdateUI() { if (UpdatingUINow) return; updatingUINowCounter++; var documentOpened = (canvas.Document != null); // window caption if (documentOpened) { Text = (canvas.Document.FileName == null ? Strings.Untitled : Path.GetFileName(canvas.Document.FileName)) + " - " + Strings.QuickRoute; } else { Text = Strings.QuickRoute; } // menu menuFileSave.Enabled = documentOpened; menuFileSaveAs.Enabled = documentOpened; menuFileImportSessions.Enabled = documentOpened; menuFileExport.Enabled = documentOpened; menuEdit.Visible = documentOpened; menuEditUndo.Enabled = (undoStack.Count > 0); menuEditRedo.Enabled = (redoStack.Count > 0); menuEditSeparator1.Enabled = documentOpened; menuEditChangeStartTime.Enabled = documentOpened; menuToolsAddLapsFromExternalDataSource.Enabled = documentOpened; menuToolsPublishMap.Enabled = documentOpened; menuToolsOpenInGoogleEarth.Enabled = documentOpened; menuViewRightPanelVisible.Enabled = documentOpened; menuViewBottomPanelVisible.Enabled = documentOpened; // toolstrip toolStripSave.Enabled = documentOpened; toolStripUndo.Enabled = (undoStack.Count > 0); toolStripRedo.Enabled = (redoStack.Count > 0); toolStripZoom.Enabled = documentOpened; toolStripZoom.Text = string.Format("{0:P0}", canvas.Zoom); toolStripToolPointer.Visible = documentOpened; toolStripToolAdjustRoute.Visible = documentOpened; toolStripToolZoomIn.Visible = documentOpened; toolStripToolZoomOut.Visible = documentOpened; toolStripToolCut.Visible = documentOpened; toolStripToolLap.Visible = documentOpened; toolStripToolPointer.Checked = (canvas.CurrentMouseTool == Canvas.MouseTool.Pointer); toolStripToolAdjustRoute.Checked = (canvas.CurrentMouseTool == Canvas.MouseTool.AdjustRoute); toolStripToolZoomIn.Checked = (canvas.CurrentMouseTool == Canvas.MouseTool.ZoomIn); toolStripToolZoomOut.Checked = (canvas.CurrentMouseTool == Canvas.MouseTool.ZoomOut); toolStripToolCut.Checked = (canvas.CurrentMouseTool == Canvas.MouseTool.Cut); toolStripToolLap.Checked = (canvas.CurrentMouseTool == Canvas.MouseTool.Lap); tstSeparator4.Visible = documentOpened; toolStripOpenInGoogleEarth.Visible = documentOpened; toolStripPublishMap.Visible = documentOpened; tstToolsSeparator.Visible = documentOpened; // view settings toolStripFullScreen.Checked = (formState != null); menuViewFullScreen.Checked = (formState != null); toolStripRightPanelVisible.Visible = documentOpened; toolStripBottomPanelVisible.Visible = documentOpened; toolStripRightPanelVisible.Checked = ApplicationSettings.RightPanelVisible; toolStripBottomPanelVisible.Checked = ApplicationSettings.BottomPanelVisible; menuViewRightPanelVisible.Checked = ApplicationSettings.RightPanelVisible; menuViewBottomPanelVisible.Checked = ApplicationSettings.BottomPanelVisible; toolStripAutoAdjustColorRangeInterval.Checked = ApplicationSettings.AutoAdjustColorRangeInterval; // route appearance toolstrip routeAppearanceToolstrip.Visible = documentOpened; if (documentOpened && canvas.CurrentSession != null) { RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; ColorRangeIntervalSlider slider = colorRangeIntervalSlider.SliderControl; ColorRangeIntervalSliderSettings sliderSettings = canvas.Document.Settings.ColorRangeIntervalSliderSettings[SelectedColorCodingAttribute]; slider.PreventRedraw = true; switch (SelectedColorCodingAttribute) { case WaypointAttribute.Pace: slider.ScaleCreator = new TimeScaleCreator(sliderSettings.MinValue, sliderSettings.MaxValue, 20, false); slider.NumericConverter = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); break; case WaypointAttribute.Speed: slider.ScaleCreator = new DoubleScaleCreator(sliderSettings.MinValue, sliderSettings.MaxValue, 20, false); slider.NumericConverter = new NumericConverter(); break; case WaypointAttribute.HeartRate: case WaypointAttribute.Altitude: slider.ScaleCreator = new DoubleScaleCreator(sliderSettings.MinValue, sliderSettings.MaxValue, 20, false); slider.NumericConverter = new IntConverter(); break; case WaypointAttribute.DirectionDeviationToNextLap: slider.ScaleCreator = new DoubleScaleCreator(sliderSettings.MinValue, sliderSettings.MaxValue, 20, false); slider.NumericConverter = new NumericConverter { NoOfDecimals = 0 }; break; case WaypointAttribute.MapReadingDuration: slider.ScaleCreator = new TimeScaleCreator(sliderSettings.MinValue, sliderSettings.MaxValue, 5, false); slider.NumericConverter = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); break; } slider.ColorRange = rls.ColorRange; slider.MinValue = sliderSettings.MinValue; slider.MaxValue = sliderSettings.MaxValue; slider.AlphaAdjustment = rls.AlphaAdjustment; slider.PreventRedraw = false; SelectedColorCodingAttribute = canvas.ColorCodingAttribute; SelectedSecondaryColorCodingAttribute = canvas.SecondaryColorCodingAttribute; colorRangeStartValue.Text = FormatColorRangeValue(rls.ColorRange.StartValue); colorRangeEndValue.Text = FormatColorRangeValue(rls.ColorRange.EndValue); routeLineMaskWidth.NumericUpDownControl.Value = (decimal)rls.MaskWidth; routeLineWidth.NumericUpDownControl.Value = (decimal)(canvas.CurrentMouseTool == Canvas.MouseTool.AdjustRoute ? rls.MonochromeWidth : rls.Width); routeLineMaskVisible.Checked = rls.MaskVisible; routeLineMaskColorButton.Image = CreateRouteLineMaskColorImage(canvas.CurrentMouseTool == Canvas.MouseTool.AdjustRoute ? rls.MonochromeColor : rls.MaskColor); gradientAlphaAdjustment.TrackBarControl.Value = (int)(rls.AlphaAdjustment * 10); canvas.RouteLineSettings = rls; slider.Refresh(); // smoothing interval length var tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); smoothingIntervalLength.Text = tc.ToString(canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[SelectedColorCodingAttribute].Length); // smoothing interval tooltip smoothingIntervalLength.ToolTipText = string.Format(Strings.SmoothingIntervalForX, colorCodingAttributes.Text.ToLower()); // circle time radius circleTimeRadius.Text = canvas.Document.Settings.DefaultSessionSettings.CircleTimeRadius.ToString(); // lap histogram toolstrip lapHistogramBinWidth.Text = slider.NumericConverter.ToString(canvas.Document.Settings.LapHistogramSettings[SelectedColorCodingAttribute].BinWidth); } // canvas canvas.Visible = documentOpened; // right panel rightPanel.Visible = (documentOpened && ApplicationSettings.RightPanelVisible); rightSplitter.Visible = (documentOpened && ApplicationSettings.RightPanelVisible); rightSplitter.Enabled = (documentOpened && ApplicationSettings.RightPanelVisible); sessionPanel.Visible = (documentOpened && canvas.Document.Sessions.Count > 1); rightPanelTopSplitter.Visible = (documentOpened && canvas.Document.Sessions.Count > 1); // dynamic help dynamicHelpLabel.Visible = documentOpened; UpdateDynamicHelp(); // bottom panel bottomPanel.Visible = (documentOpened && ApplicationSettings.BottomPanelVisible); bottomSplitter.Visible = (documentOpened && ApplicationSettings.BottomPanelVisible); bottomSplitter.Enabled = (documentOpened && ApplicationSettings.BottomPanelVisible); switch (canvas.CurrentMouseTool) { case Canvas.MouseTool.Lap: lineGraph.Cursor = Canvas.GetCursor(Canvas.MouseTool.Lap); break; case Canvas.MouseTool.Cut: lineGraph.Cursor = Canvas.GetCursor(Canvas.MouseTool.Cut); break; default: lineGraph.Cursor = Cursors.Default; break; } // momentaneous info momentaneousInfoPanel.Visible = documentOpened; updatingUINowCounter--; } #endregion #region Private methods private void UpdateDynamicHelp() { switch (canvas.CurrentMouseTool) { case Canvas.MouseTool.AdjustRoute: dynamicHelpLabel.Text = Strings.DynamicHelp_MouseTool_AdjustRoute; break; case Canvas.MouseTool.Cut: dynamicHelpLabel.Text = Strings.DynamicHelp_MouseTool_Cut; break; case Canvas.MouseTool.ZoomIn: dynamicHelpLabel.Text = Strings.DynamicHelp_MouseTool_ZoomIn; break; case Canvas.MouseTool.ZoomOut: dynamicHelpLabel.Text = Strings.DynamicHelp_MouseTool_ZoomOut; break; case Canvas.MouseTool.Lap: dynamicHelpLabel.Text = Strings.DynamicHelp_MouseTool_Lap; break; default: dynamicHelpLabel.Text = Strings.DynamicHelp_MouseTool_Pointer; break; } } private void AddActionToUndoStack(IAction action) { undoStack.Push(action); redoStack.Clear(); } private Bitmap CreateRouteLineMaskColorImage(Color maskColor) { Bitmap bmp = new Bitmap(routeLineMaskColorButton.Size.Width, routeLineMaskColorButton.Size.Height); Graphics g = Graphics.FromImage(bmp); Rectangle r = new Rectangle(new Point(0, 0), bmp.Size); Gradient.FillCheckerboardRectangle(g, r, 8); Brush b = new SolidBrush(maskColor); g.FillRectangle(b, r); g.DrawRectangle(Pens.Gray, new Rectangle(0, 0, bmp.Width - 1, bmp.Height - 1)); b.Dispose(); g.Dispose(); return bmp; } private void CalculateLapInfo() { Session s = canvas.CurrentSession; if (s == null) return; Route r = s.Route; ParameterizedLocation previousLapPL = ParameterizedLocation.Start; lapInfoList = new List(); for (int i = 0; i < s.Laps.Count; i++) { Lap lap = s.Laps[i]; ParameterizedLocation lapPL = r.GetParameterizedLocationFromTime(lap.Time, previousLapPL, ParameterizedLocation.Direction.Forward); if (lap.LapType != LapType.Start && i > 0) { var li = new LapInfo { LapType = lap.LapType, Index = i }; var locations = new RouteLocations(previousLapPL, lapPL); foreach (var lpType in ApplicationSettings.LapPropertyTypes) { if (lpType.Selected) { RetrieveExternalPropertyDelegate dlg = new ExternalRoutePropertyRetriever(s.Settings).RetrieveExternalProperty; var lp = Activator.CreateInstance(lpType.RoutePropertyType, s, locations, dlg) as RouteProperty; li.AddProperty(lp); } } if (s.Laps.Count > 2) { lapInfoList.Add(li); } } previousLapPL = lapPL; } // total row var totalInfo = new LapInfo() { LapType = LapType.Stop, Index = -1 }; foreach (var lpType in ApplicationSettings.LapPropertyTypes) { if (lpType.Selected) { // create route span property object var routeSpanProperty = Activator.CreateInstance(lpType.RoutePropertyType, s, new RouteLocations(ParameterizedLocation.Start), null) as RouteSpanProperty; if (routeSpanProperty != null) { // get the route from start property type for this object Type routeFromStartPropertyType = routeSpanProperty.GetRouteFromStartPropertyType(); // create an instance of that type RetrieveExternalPropertyDelegate dlg = new ExternalRoutePropertyRetriever(s.Settings).RetrieveExternalProperty; var routeFromStartProperty = Activator.CreateInstance(routeFromStartPropertyType, s, new RouteLocations(r.LastPL), dlg) as RouteFromStartProperty; if (routeFromStartProperty == null) { // no matching route from start property, add blank column totalInfo.AddProperty(new BlankRouteProperty()); } else { totalInfo.AddProperty(routeFromStartProperty); } } else { RetrieveExternalPropertyDelegate dlg = new ExternalRoutePropertyRetriever(s.Settings).RetrieveExternalProperty; var routeFromStartProperty = Activator.CreateInstance(lpType.RoutePropertyType, s, new RouteLocations(r.LastPL), dlg) as RouteFromStartProperty; if (routeFromStartProperty == null) { // no matching route from start property, add blank column totalInfo.AddProperty(new BlankRouteProperty()); } else { totalInfo.AddProperty(routeFromStartProperty); } } } } lapInfoList.Add(totalInfo); // set number of rows and columns in grid updatingUINowCounter++; laps.RowCount = 0; laps.ColumnCount = 0; laps.ColumnCount = (lapInfoList.Count == 0 ? 0 : lapInfoList[0].GetProperties().Count); laps.RowCount = lapInfoList.Count; updatingUINowCounter--; SetLapGridHeaders(); SortLapGrid(); laps.Invalidate(); updatingUINowCounter -= 100; // ugly! laps.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); updatingUINowCounter += 100; // ugly! if (laps.Rows.Count > 0) { updatingUINowCounter++; laps.Rows[laps.Rows.Count - 1].Selected = true; updatingUINowCounter--; } int width = 0; foreach (DataGridViewColumn c in laps.Columns) { width += c.Width; } updatingUINowCounter++; rightPanel.Width = width + laps.Margin.Horizontal; updatingUINowCounter--; } private void SetLapGridHeaders() { if (lapInfoList.Count > 0) { for (var i = 0; i < laps.Columns.Count; i++) { var propertyType = lapInfoList[0].GetProperties()[i].GetType(); var tooltipTemplateText = Strings.ResourceManager.GetString("RoutePropertyName_" + propertyType.Name); if (tooltipTemplateText == null) tooltipTemplateText = Strings.ResourceManager.GetString("RoutePropertyName_" + propertyType.GetType().Name.Replace("FromStart", "")); if (tooltipTemplateText != null) laps.Columns[i].HeaderText = tooltipTemplateText; } } } private void SortLapGrid() { if (lapInfoList.Count > 1) { // preserve selected lap var selectedLapNumber = -1; if (laps.SelectedRows.Count > 0) selectedLapNumber = lapInfoList[laps.SelectedRows[0].Index].Index; // don't sort last item (the total row, having index -1) lapInfoList.Sort( (lap1, lap2) => (lap1.Index == -1 ? 1 : lap2.Index == -1 ? -1 : lap1.CompareProperty(lap2, lapSortOrderColumnIndex))); if (lapSortOrder == SortOrder.Descending) lapInfoList.Reverse(0, lapInfoList.Count - 1); // re-select selected lap for (var i = 0; i < lapInfoList.Count; i++) { if (lapInfoList[i].Index == selectedLapNumber) { updatingUINowCounter++; laps.Rows[i].Selected = true; updatingUINowCounter--; return; } } } } private double? ParseColorRangeValue(string text) { return Util.GetNumericConverterFromWaypointAttribute(SelectedColorCodingAttribute).ToNumeric(text); } private string FormatColorRangeValue(double? value) { return Util.GetNumericConverterFromWaypointAttribute(SelectedColorCodingAttribute).ToString(value); } private void ShowGradientEditor() { using (var ge = new GradientEditor()) { string gradientPath = Path.Combine(CommonUtil.GetApplicationDataPath(), "Gradients"); // get all unique gradients var gradients = new List(); // from default route line settings foreach (RouteLineSettings rls in SessionSettings.CreateDefaultRouteLineSettingsCollection().Values) { if (!gradients.Contains(rls.ColorRange.Gradient)) gradients.Add(rls.ColorRange.Gradient); } // from gradients in this document foreach (RouteLineSettings rls in canvas.CurrentSession.Settings.RouteLineSettingsCollection.Values) { if (!gradients.Contains(rls.ColorRange.Gradient)) gradients.Add(rls.ColorRange.Gradient); } // from gradients saved on disk foreach (Gradient g in Util.GetGradientsInFolder(gradientPath)) { if (!gradients.Contains(g)) gradients.Add(g); } ge.Gradients = gradients; ge.CurrentGradient = colorRangeIntervalSlider.SliderControl.ColorRange.Gradient; if (ge.ShowDialog() == DialogResult.OK) { foreach (string fileName in Directory.GetFiles(gradientPath)) { File.Delete(fileName); } Util.SaveGradientsToFolder(ge.Gradients, gradientPath); if (ge.CurrentGradient != null) { BeginWork(); canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute].ColorRange.Gradient = ge.CurrentGradient; canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute].MonochromeColor = ge.CurrentGradient.GetColor(1); UpdateUI(); canvas.DrawMap(Canvas.MapDrawingFlags.Markers | Canvas.MapDrawingFlags.Route); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); EndWork(); } } } } private void UpdateZoom() { if (startingUpNow || updatingZoomNow) return; updatingZoomNow = true; string text = toolStripZoom.Text.Replace("%", ""); double zoom; if (double.TryParse(text, out zoom)) { zoom /= 100.0; } else { zoom = 1.0; } canvas.Zoom = zoom; toolStripZoom.Text = string.Format("{0:P0}", canvas.Zoom); updatingZoomNow = false; } private void ResetMomentaneousInfo() { UpdateMomentaneousInfo(null); } private void CreateLapHistogram() { if (laps.SelectedRows.Count == 0) { lapHistogram = null; return; } lapHistogram = new ColorfulHistogram(); LapInfo li = lapInfoList[laps.SelectedRows[0].Index]; DateTime startTime; DateTime endTime; if (li.Index == -1) { startTime = canvas.CurrentSession.Route.FirstWaypoint.Time; endTime = canvas.CurrentSession.Route.LastWaypoint.Time; } else { Lap lap = canvas.CurrentSession.Laps[li.Index]; startTime = canvas.CurrentSession.Laps[li.Index - 1].Time; endTime = lap.Time; } Route r = canvas.CurrentSession.Route; List list = r.GetMomentaneousValueList( SelectedColorCodingAttribute, r.GetParameterizedLocationFromTime(startTime), r.GetParameterizedLocationFromTime(endTime), new TimeSpan(0, 0, 1)); lapHistogram.HistogramData.Clear(); foreach (double? value in list) { if (value.HasValue) { lapHistogram.HistogramData.Add(value.Value); } } RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; lapHistogram.StartValue = canvas.Document.Settings.ColorRangeIntervalSliderSettings[SelectedColorCodingAttribute].MinValue; lapHistogram.EndValue = canvas.Document.Settings.ColorRangeIntervalSliderSettings[SelectedColorCodingAttribute].MaxValue; lapHistogram.BinWidth = canvas.Document.Settings.LapHistogramSettings[SelectedColorCodingAttribute].BinWidth; lapHistogram.ColorRange = rls.ColorRange; lapHistogram.XAxisCaption = new WaypointAttributeString(SelectedColorCodingAttribute).Name + " (" + new WaypointAttributeString(SelectedColorCodingAttribute).Unit + ")"; lapHistogram.IncludeOutOfRangeValues = true; lapHistogram.XAxisNumericConverter = Util.GetNumericConverterFromWaypointAttribute(SelectedColorCodingAttribute); Type t = colorRangeIntervalSlider.SliderControl.ScaleCreator.GetType(); lapHistogram.XAxisScaleCreator = (ScaleCreatorBase)Activator.CreateInstance(t, lapHistogram.StartValue, lapHistogram.EndValue, 10, false); } private void ValidateAndFormatLapHistogramBinWidthValue() { BeginWork(); double? binWidth = ParseColorRangeValue(lapHistogramBinWidth.Text); if (binWidth.HasValue) { canvas.Document.Settings.LapHistogramSettings[SelectedColorCodingAttribute].BinWidth = binWidth.Value; } lapHistogramBinWidth.Text = FormatColorRangeValue(canvas.Document.Settings.LapHistogramSettings[SelectedColorCodingAttribute].BinWidth); CreateLapHistogram(); DrawLapHistogram(); EndWork(); } private void DrawLapHistogram() { if (lapHistogram != null) { RectangleF drawingRectangle = new RectangleF( (lapHistogramPanel.Padding.Left), (lapHistogramPanel.Padding.Top), (lapHistogramPanel.Width - lapHistogramPanel.Padding.Horizontal), (lapHistogramPanel.Height - lapHistogramPanel.Padding.Vertical)); lapHistogram.Draw(lapHistogramPanel.CreateGraphics(), drawingRectangle); } } private void ExportLapHistogramImage() { using (var sfd = new SaveFileDialog { Title = Strings.ExportImageTitle, Filter = (Strings.FileFilter_JpegFiles + "|" + Strings.FileFilter_PngFiles + "|" + Strings.FileFilter_TiffFiles), FileName = ((canvas.Document.FileName != null ? Path.GetFileNameWithoutExtension(canvas.Document.FileName) : Path.GetFileNameWithoutExtension(untitledDocumentFileNameProposal)) + ", " + Strings.Histogram), FilterIndex = 1, AddExtension = true, OverwritePrompt = true }) { if (ApplicationSettings.InitialFolders.ContainsKey(ApplicationSettings.FileDialogType.ExportImage)) { sfd.InitialDirectory = ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportImage]; } if (sfd.ShowDialog() == DialogResult.OK) { BeginWork(); System.Drawing.Imaging.ImageFormat format = null; try { switch (sfd.FilterIndex) { case 1: format = System.Drawing.Imaging.ImageFormat.Jpeg; break; case 2: format = System.Drawing.Imaging.ImageFormat.Png; break; case 3: format = System.Drawing.Imaging.ImageFormat.Tiff; break; } var bmp = new Bitmap(lapHistogramPanel.Width - lapHistogramPanel.Padding.Horizontal, lapHistogramPanel.Height - lapHistogramPanel.Padding.Vertical); var g = Graphics.FromImage(bmp); lapHistogram.Draw(g, new RectangleF(0, 0, bmp.Width, bmp.Height)); bmp.Save(sfd.FileName, format); g.Dispose(); ApplicationSettings.InitialFolders[ApplicationSettings.FileDialogType.ExportImage] = Path.GetDirectoryName(sfd.FileName); } catch (Exception ex) { Util.ShowExceptionMessageBox(ex, Strings.Error_ExportImage); } EndWork(); } } } private void CreateLineGraph() { if (canvas.Document == null) return; ColorRangeIntervalSliderSettings criss = canvas.Document.Settings.ColorRangeIntervalSliderSettings[SelectedColorCodingAttribute]; lineGraph.Graph.YAxisAttribute = SelectedColorCodingAttribute; lineGraph.Graph.Session = canvas.CurrentSession; lineGraph.Graph.YAxisMinValue = criss.MinValue; lineGraph.Graph.YAxisMaxValue = criss.MaxValue; Type t = colorRangeIntervalSlider.SliderControl.ScaleCreator.GetType(); lineGraph.Graph.YAxisScaleCreator = (ScaleCreatorBase)Activator.CreateInstance(t, criss.MinValue, criss.MaxValue, 10, false); lineGraph.Graph.YAxisNumericConverter = Util.GetNumericConverterFromWaypointAttribute(SelectedColorCodingAttribute); lineGraph.Graph.XAxisAttribute = DomainAttribute.TimeOfDay; var li = lapInfoList[laps.SelectedRows[0].Index]; if (li.Index == -1) { lineGraph.Graph.StartPL = canvas.CurrentSession.Route.GetParameterizedLocationFromTime(canvas.CurrentSession.Route.FirstWaypoint.Time); lineGraph.Graph.EndPL = canvas.CurrentSession.Route.GetParameterizedLocationFromTime(canvas.CurrentSession.Route.LastWaypoint.Time); } else { Lap lap = canvas.CurrentSession.Laps[li.Index]; lineGraph.Graph.StartPL = canvas.CurrentSession.Route.GetParameterizedLocationFromTime(canvas.CurrentSession.Laps[li.Index - 1].Time); lineGraph.Graph.EndPL = canvas.CurrentSession.Route.GetParameterizedLocationFromTime(lap.Time); } switch (lineGraph.Graph.YAxisAttribute) { case WaypointAttribute.Pace: lineGraph.Graph.YAxisCaption = Strings.Pace + " (" + Strings.Unit_Pace + ")"; break; case WaypointAttribute.Speed: lineGraph.Graph.YAxisCaption = Strings.Speed + " (" + Strings.Unit_Speed + ")"; break; case WaypointAttribute.HeartRate: lineGraph.Graph.YAxisCaption = Strings.HeartRate + " (" + Strings.Unit_HeartRate + ")"; break; case WaypointAttribute.Altitude: lineGraph.Graph.YAxisCaption = Strings.Altitude + " (" + Strings.Unit_Altitude + ")"; break; case WaypointAttribute.DirectionDeviationToNextLap: lineGraph.Graph.YAxisCaption = Strings.Direction + " (" + Strings.Unit_Direction + ")"; break; case WaypointAttribute.MapReadingDuration: lineGraph.Graph.YAxisCaption = Strings.MapReadingDuration; break; } switch (lineGraph.Graph.XAxisAttribute) { case DomainAttribute.TimeOfDay: lineGraph.Graph.XAxisCaption = Strings.Time; break; case DomainAttribute.ElapsedTime: lineGraph.Graph.XAxisCaption = Strings.ElapsedTime; break; case DomainAttribute.Distance: lineGraph.Graph.XAxisCaption = Strings.Distance + " (" + Strings.Unit_Distance + ")"; break; } lineGraph.Graph.Calculate(); lineGraph.Create(); } private void DrawLineGraph() { lineGraph.Draw(); } private void ValidateAndFormatSmoothingIntervalLengthValue() { BeginWork(); TimeConverter tc = new TimeConverter(TimeConverter.TimeConverterType.ElapsedTime); double? intervalLength = tc.ToNumeric(smoothingIntervalLength.Text); if (intervalLength.HasValue) { canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[SelectedColorCodingAttribute] = new Interval(-intervalLength.Value / 2, intervalLength.Value / 2); // make sure speed and pace are always the same if (SelectedColorCodingAttribute == WaypointAttribute.Speed) canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[WaypointAttribute.Pace] = new Interval(canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[SelectedColorCodingAttribute]); if (SelectedColorCodingAttribute == WaypointAttribute.Pace) canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[WaypointAttribute.Speed] = new Interval(canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[SelectedColorCodingAttribute]); foreach (Session s in canvas.Document.Sessions) { s.Route.SmoothingIntervals = canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals; } canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); CalculateLapInfo(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); } smoothingIntervalLength.Text = tc.ToString(canvas.Document.Settings.DefaultSessionSettings.SmoothingIntervals[SelectedColorCodingAttribute].Length); EndWork(); } private void ValidateAndFormatCircleTimeRadiusValue() { BeginWork(); double value; if(double.TryParse(circleTimeRadius.Text, out value)) { canvas.Document.Settings.DefaultSessionSettings.CircleTimeRadius = value; CalculateLapInfo(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); } circleTimeRadius.Text = canvas.Document.Settings.DefaultSessionSettings.CircleTimeRadius.ToString(); EndWork(); } private void ResetActionStacks() { undoStack.Clear(); redoStack.Clear(); } private void UpdateRecentDocumentsListInMenu() { List fileNames = ApplicationSettings.RecentDocumentFileNames; // remove old filenames for (int i = menuFile.DropDown.Items.Count - 1; i >= 0; i--) { ToolStripMenuItem tsmi = menuFile.DropDown.Items[i] as ToolStripMenuItem; if (tsmi != null) { string tagString = tsmi.Tag as string; if (tagString != null && tagString.StartsWith("RecentFile_")) { tsmi.Click -= RecentDocumentClicked; menuFile.DropDown.Items.RemoveAt(i); } } } // insert filenames into the menu menuFileRecentDocumentsSeparator.Visible = (fileNames.Count > 0); if (fileNames.Count > 0) { int startPosition = menuFile.DropDown.Items.IndexOf(menuFileRecentDocumentsSeparator); int count = 0; foreach (string fn in fileNames) { count++; string numberString = (count == 10 ? "1&0" : "&" + count); ToolStripMenuItem tsmi = new ToolStripMenuItem(numberString + " " + Util.PathShortener(fn, 50).Replace("&", "&&")); tsmi.Click += RecentDocumentClicked; tsmi.Tag = "RecentFile_" + fn; menuFile.DropDown.Items.Insert(startPosition + count, tsmi); } } } private void RecentDocumentClicked(object sender, EventArgs e) { var tsmi = sender as ToolStripMenuItem; if (tsmi == null) return; var tagString = tsmi.Tag as string; if (tagString == null) return; var fileName = tagString.Substring(11); OpenDocumentWithFileName(fileName, true); } private void UpdateAfterUndoRedo(IAction action) { updatingUINowCounter++; UpdateAfterAction(action); canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); updatingUINowCounter--; UpdateUI(); } private void UpdateAfterAction(IAction action) { var isLapAction = action is AddLapAction || action is EditLapAction || action is DeleteLapAction || action is CutRouteAction || action is TrimRouteAndAddLapsAction || action is AddTimeOffsetToSessionAction; var isRouteAction = action is CutRouteAction || action is TrimRouteAndAddLapsAction || action is AddTimeOffsetToSessionAction; if (isLapAction) { // initializes session in order to recalculate waypoint attributes canvas.CurrentSession.Initialize(isRouteAction); updatingUINowCounter++; CalculateLapInfo(); updatingUINowCounter--; AlphaAdjustSelectedLap(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); } if (action is CutRouteAction) { //if (ApplicationSettings.AutoAdjustColorRangeInterval) PerformColorRangeIntervalAutoAdjustment(); } } private void HandleMouseHover(ParameterizedLocation pl, bool showMarker) { if (showMarker && pl != null) { UpdateMomentaneousInfo(pl); } else { ResetMomentaneousInfo(); } } private void CalculateMomentaneousInfoLabelRectangles() { momentaneousInfoLabelRectangles = new Dictionary(); if (canvas.Document == null) return; // calculate size and locations of labels Route r = canvas.CurrentSession.Route; var noOfRows = 0; var xPos = momentaneousInfoPanel.Padding.Left; var rowHeight = 0; foreach (var selectableRoutePropertyType in ApplicationSettings.MomentaneousInfoPropertyTypes) { if (selectableRoutePropertyType.Selected) { RetrieveExternalPropertyDelegate dlg = new ExternalRoutePropertyRetriever(canvas.CurrentSession.Settings).RetrieveExternalProperty; var property = Activator.CreateInstance(selectableRoutePropertyType.RoutePropertyType, canvas.CurrentSession, new RouteLocations(r.FirstPL), dlg) as RouteProperty; if (property != null && property.ContainsValue) { var templateString = Strings.ResourceManager.GetString("RoutePropertyNameAndValue_" + property.GetType().Name) ?? property.GetType().Name + ": {0}"; var maxWidthString = string.Format(templateString, property.MaxWidthString); var label = new Rectangle() { Size = TextRenderer.MeasureText(maxWidthString, momentaneousInfoPanel.Font) }; if (rowHeight == 0) rowHeight = label.Size.Height + momentaneousInfoLabelPadding.Vertical; if (xPos + label.Size.Width + momentaneousInfoLabelPadding.Horizontal + momentaneousInfoPanel.Padding.Right > momentaneousInfoPanel.Width) { // new row needed noOfRows++; xPos = momentaneousInfoPanel.Padding.Left; } label.Location = new Point(xPos + momentaneousInfoLabelPadding.Left, noOfRows * rowHeight + momentaneousInfoLabelPadding.Top + momentaneousInfoPanel.Padding.Top); xPos += label.Size.Width + momentaneousInfoLabelPadding.Horizontal; momentaneousInfoLabelRectangles.Add(selectableRoutePropertyType.RoutePropertyType, label); } } } momentaneousInfoPanel.Visible = true; momentaneousInfoPanel.Height = Math.Max((noOfRows + 1) * (rowHeight == 0 ? 20 : rowHeight) + momentaneousInfoPanel.Padding.Vertical, 1); UpdateMomentaneousInfo(null); } private void UpdateMomentaneousInfo(ParameterizedLocation pl) { // TODO: backbuffering? // TODO: toolstrip back color? At least some sort of top line that separates it from above var g = momentaneousInfoPanelBackBufferGraphics; g.Clear(momentaneousInfoPanel.BackColor); g.TextRenderingHint = TextRenderingHint.AntiAlias; var lightPen = new Pen(SystemColors.ControlLight, 1F); var darkPen = new Pen(SystemColors.ControlDark, 1F); g.DrawLine(darkPen, 0, 0, momentaneousInfoPanelBackBuffer.Width - 1, 0); if (pl != null) { Route r = canvas.CurrentSession.Route; var lapStartPL = r.GetLapStartParameterizedLocation(pl); foreach (var selectableRoutePropertyType in ApplicationSettings.MomentaneousInfoPropertyTypes) { if (selectableRoutePropertyType.Selected) { RetrieveExternalPropertyDelegate dlg = new ExternalRoutePropertyRetriever(canvas.CurrentSession.Settings).RetrieveExternalProperty; var property = Activator.CreateInstance(selectableRoutePropertyType.RoutePropertyType, canvas.CurrentSession, new RouteLocations(lapStartPL, pl), dlg) as RouteProperty; if (property != null ) { var templateString = Strings.ResourceManager.GetString("RoutePropertyNameAndValue_" + property.GetType().Name) ?? property.GetType().Name + ": {0}"; var text = property.Value != null ? string.Format(templateString, property) : string.Format(templateString, "-"); if (momentaneousInfoLabelRectangles.ContainsKey(selectableRoutePropertyType.RoutePropertyType)) // this should not be needed, but people seem to have problem with "The given key was not present in the dictionary. (mscorlib)" { var rect = momentaneousInfoLabelRectangles[selectableRoutePropertyType.RoutePropertyType]; g.DrawString(text, momentaneousInfoPanel.Font, Brushes.Black, rect.Location); // draw separator g.DrawLine(lightPen, rect.Right + momentaneousInfoLabelPadding.Right, rect.Top, rect.Right + momentaneousInfoLabelPadding.Right, rect.Bottom); g.DrawLine(darkPen, rect.Right + momentaneousInfoLabelPadding.Right + 1, rect.Top, rect.Right + momentaneousInfoLabelPadding.Right + 1, rect.Bottom); } } } } } lightPen.Dispose(); darkPen.Dispose(); CopyMomentaneousInfoBackBufferToScreen(); } private void CopyMomentaneousInfoBackBufferToScreen() { // copy back buffer to screen momentaneousInfoPanel.CreateGraphics().DrawImage(momentaneousInfoPanelBackBuffer, 0, 0); } private void PerformFullRedraw() { if (!openingDocumentNow) { UpdateUI(); canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); } } private void AlphaAdjustSelectedLap() { Lap lap = null; if (laps.SelectedRows.Count > 0) { if (laps.SelectedRows[0].Index < laps.Rows.Count - 1) lap = canvas.CurrentSession.Laps[lapInfoList[laps.SelectedRows[0].Index].Index]; RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; canvas.AlphaAdjustLap( canvas.CurrentSession, lap, GraphicsUtil.CombineAlphaAdjustments(rls.AlphaAdjustment, 0.5), GraphicsUtil.CombineAlphaAdjustments(rls.AlphaAdjustment, -0.5), rls.AlphaAdjustment); if (lap != null) { Lap lastLap = canvas.CurrentSession.Laps[lapInfoList[laps.SelectedRows[0].Index].Index - 1]; canvas.EnsureLegIsVisible( canvas.CurrentSession.AdjustedRoute.GetBoundingRectangle( canvas.CurrentSession.Route.GetParameterizedLocationFromTime(lastLap.Time), canvas.CurrentSession.Route.GetParameterizedLocationFromTime(lap.Time) ), true ); } } } private void PerformColorRangeIntervalAutoAdjustment() { Route r = canvas.CurrentSession.Route; var samplingInterval = new TimeSpan(0, 0, 1); List values = r.GetOrderedValues(SelectedColorCodingAttribute, GetAutoAdjustColorRangeIntervalPercentages(SelectedColorCodingAttribute), samplingInterval); if (values[0].HasValue && values[1].HasValue) { double span = values[1].Value - values[0].Value; values[0] -= 0.1 * span; values[1] += 0.1 * span; if (SelectedColorCodingAttribute == WaypointAttribute.Pace) values[1] = Math.Min(30 * 60, values[1].Value); if (SelectedColorCodingAttribute == WaypointAttribute.DirectionDeviationToNextLap) values[0] = 0; if (SelectedColorCodingAttribute == WaypointAttribute.MapReadingDuration) values[0] = 0; BeginWork(); UpdateColorRangeInterval(SelectedColorCodingAttribute, values[0].Value, values[1].Value, true); PerformFullRedraw(); EndWork(); } } private void BeginWork() { workLevel++; if (workLevel == 1) { previousCursor = Cursor; Cursor = Cursors.WaitCursor; } } private void EndWork() { workLevel--; if (workLevel == 0) { Cursor = previousCursor; } } private void AddLapsFromExternalDataSource() { var routeStartTime = canvas.CurrentSession.Route.FirstWaypoint.Time; using (var form = new AddLapsFromExternalDataSource(routeStartTime.Date, routeStartTime.Date, 0)) { form.ShowDialog(); if (form.DialogResult == DialogResult.OK) { var action = new TrimRouteAndAddLapsAction( form.Runner.StartTime.HasValue ? new DateTime?(form.Runner.StartTime.Value.ToUniversalTime()) : null, form.Runner.FinishTime.HasValue ? new DateTime?(form.Runner.FinishTime.Value.ToUniversalTime()) : null, new List(), canvas.CurrentSession); // add laps for each punch if (canvas.CurrentSession.Route.FirstWaypoint != null && canvas.CurrentSession.Route.LastWaypoint != null) { foreach (DateTime dt in form.Runner.Splits) { var utc = dt.ToUniversalTime(); // do not add lap if there is already a lap for that time var found = false; foreach (var existingLap in canvas.CurrentSession.Laps) { if(existingLap.Time == utc) { found = true; break; } } if(!found) action.Laps.Add(new Lap(utc, LapType.Lap)); } } action.Execute(); canvas.CurrentSession.CreateAdjustedRoute(); HandleAction(action); canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); ApplicationSettings.ExternaLapDataSourceIndex = form.SelectedDataSourceIndex; } } } private string GetLapsInfoAsText() { var sb = new StringBuilder(); foreach (DataGridViewRow row in laps.Rows) { foreach (DataGridViewCell cell in row.Cells) { sb.Append(cell.FormattedValue.ToString()).Append("\t"); } sb.Append("\n"); } return sb.ToString(); } private void PublishMap() { using (var pmForm = new PublishMapForm(canvas.Document, SelectedColorCodingAttribute, SelectedSecondaryColorCodingAttribute, GetCurrentColorRangeProperties())) { pmForm.ShowDialog(); } } private void ToggleFullScreen(bool visible) { if (UpdatingUINow) return; if (visible) { formState = new MainFormState(); formState.EnterFullScreenMode(this); } else { formState.ExitFullScreenMode(this); formState = null; } UpdateUI(); } private void ToggleRightPanel(bool visible) { if (UpdatingUINow) return; ApplicationSettings.RightPanelVisible = visible; UpdateUI(); } private void ToggleBottomPanel(bool visible) { if (UpdatingUINow) return; ApplicationSettings.BottomPanelVisible = visible; UpdateUI(); } private void UpdateColorRangeInterval(WaypointAttribute attribute, double minValue, double maxValue, bool setSlidersToMinAndMax) { // prevent too high paces if (attribute == WaypointAttribute.Pace && minValue > 30 * 60) minValue = 30 * 60; if (attribute == WaypointAttribute.Pace && maxValue > 30 * 60) maxValue = 30 * 60; ColorRangeIntervalSliderSettings sliderSettings = canvas.Document.Settings.ColorRangeIntervalSliderSettings[attribute]; RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[attribute]; updatingUINowCounter++; sliderSettings.MinValue = minValue; sliderSettings.MaxValue = maxValue; if (setSlidersToMinAndMax) { rls.ColorRange.StartValue = sliderSettings.MinValue; rls.ColorRange.EndValue = sliderSettings.MaxValue; } else { if (rls.ColorRange.StartValue < sliderSettings.MinValue) rls.ColorRange.StartValue = sliderSettings.MinValue; if (rls.ColorRange.StartValue > sliderSettings.MaxValue) rls.ColorRange.StartValue = sliderSettings.MaxValue; if (rls.ColorRange.EndValue < sliderSettings.MinValue) rls.ColorRange.EndValue = sliderSettings.MinValue; if (rls.ColorRange.EndValue > sliderSettings.MaxValue) rls.ColorRange.EndValue = sliderSettings.MaxValue; } updatingUINowCounter--; } private void HandleAction(IAction action) { AddActionToUndoStack(action); documentChanged = true; UpdateAfterAction(action); UpdateUI(); } private void OpenInGoogleEarthFromCommandLine(string fileName) { var wa = WaypointAttribute.Pace; var sc = new TimeScaleCreator(210, 1200, 10, false); var crp = new ColorRangeProperties { NumericConverter = Util.GetNumericConverterFromWaypointAttribute(wa), ScaleCreator = sc, ScaleCaption = new WaypointAttributeString(wa).Name, ScaleUnit = new WaypointAttributeString(wa).Unit }; OpenInGoogleEarth(fileName, wa, null, crp); Util.SaveSettings(ApplicationSettings); var process = Process.GetCurrentProcess(); process.Kill(); } private void HandleDragDrop(DragEventArgs e) { var manager = new DragDropManager(); var allowedFileExtensions = FileFormatManager.GetQuickRouteFileExtensions(); var fileNames = manager.GetDroppedFileNames(e, allowedFileExtensions); if (fileNames.Count > 0) { OpenDocumentWithFileName(fileNames[0], true); } else { MessageBox.Show(Strings.Error_InvalidQuickRouteFile, Strings.QuickRoute, MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endregion #region Private properties private WaypointAttribute SelectedColorCodingAttribute { get { return ((WaypointAttributeString)colorCodingAttributes.SelectedItem).WaypointAttribute.Value; } set { colorCodingAttributes.SelectedItem = new WaypointAttributeString(value); } } private WaypointAttribute? SelectedSecondaryColorCodingAttribute { get { return secondaryColorCodingAttributes.SelectedItem == null ? null : ((WaypointAttributeString)secondaryColorCodingAttributes.SelectedItem).WaypointAttribute; } set { secondaryColorCodingAttributes.SelectedItem = new WaypointAttributeString(value); } } #endregion #region Event handlers private void Main_Load(object sender, EventArgs e) { WindowState = FormWindowState.Maximized; if (Environment.GetCommandLineArgs().Length == 2) { var success = OpenDocumentWithFileName(Environment.GetCommandLineArgs()[1], false); if (!success) { NewDocument(Environment.GetCommandLineArgs()[1]); } } } protected override void WndProc(ref Message message) { if (message.Msg == 0x219 && (int)message.WParam == 0x07) { ReadGarminUSBData(); } base.WndProc(ref message); } private void canvas_DocumentChanged(object sender, EventArgs e) { UpdateUI(); documentChanged = true; } private void canvas_RouteMouseHover(object sender, Canvas.RouteMouseHoverEventArgs e) { HandleMouseHover(e.ParameterizedLocation, e.IsClose && e.ParameterizedLocation != null); if (e.IsClose) { double xValue = 0; switch (lineGraph.Graph.XAxisAttribute) { case DomainAttribute.TimeOfDay: xValue = (double)canvas.CurrentSession.Route.GetTimeFromParameterizedLocation(e.ParameterizedLocation).ToLocalTime().Ticks / TimeSpan.TicksPerSecond; break; case DomainAttribute.ElapsedTime: xValue = (double)(canvas.CurrentSession.Route.GetTimeFromParameterizedLocation(e.ParameterizedLocation).Ticks - canvas.CurrentSession.Route.FirstWaypoint.Time.Ticks) / TimeSpan.TicksPerSecond; break; case DomainAttribute.Distance: xValue = canvas.CurrentSession.Route.GetAttributeFromParameterizedLocation(WaypointAttribute.Distance, e.ParameterizedLocation).Value; break; } lineGraph.HoverXValue = xValue; } else { lineGraph.HoverXValue = null; } } private void canvas_BeforeZoomChanged(object sender, EventArgs e) { BeginWork(); UpdateUI(); } private void canvas_AfterZoomChanged(object sender, EventArgs e) { UpdateUI(); toolStripZoom.SelectAll(); EndWork(); } private void canvas_MouseLeave(object sender, EventArgs e) { ResetMomentaneousInfo(); } private void canvas_CurrentSessionChanged(object sender, System.EventArgs e) { if (!openingDocumentNow) { UpdateUI(); CalculateLapInfo(); AlphaAdjustSelectedLap(); CalculateMomentaneousInfoLabelRectangles(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); } } private void Main_FormClosing(object sender, FormClosingEventArgs e) { if (documentChanged) { e.Cancel = (QuerySaveDocument() == DialogResult.Cancel); } if (!e.Cancel) { Util.SaveSettings(ApplicationSettings); } } private void Main_KeyDown(object sender, KeyEventArgs e) { } private void laps_SelectionChanged(object sender, EventArgs e) { if (UpdatingUINow) return; BeginWork(); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); AlphaAdjustSelectedLap(); EndWork(); } private void laps_CellMouseEnter(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) { if (e.RowIndex == -1) laps.Columns[e.ColumnIndex].HeaderCell.Style.BackColor = SystemColors.ControlLightLight; } private void laps_CellMouseLeave(object sender, System.Windows.Forms.DataGridViewCellEventArgs e) { if (e.RowIndex == -1) laps.Columns[e.ColumnIndex].HeaderCell.Style.BackColor = SystemColors.Control; } private void canvas_ActionPerformed(object sender, Canvas.ActionEventArgs e) { HandleAction(e.Action); } private void menuHelpAbout_Click(object sender, EventArgs e) { using (var ab = new AboutBox()) { ab.ShowDialog(); } } private void laps_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) { if (UpdatingUINow) return; if (e.RowIndex == lapInfoList.Count - 1 && e.ColumnIndex == 0) { // the "Total" caption e.Value = Strings.Total; } else if (lapInfoList[e.RowIndex][e.ColumnIndex].GetType() == typeof(BlankRouteProperty)) { e.Value = "-"; } else { e.Value = lapInfoList[e.RowIndex][e.ColumnIndex]; } } private void laps_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; var obj = laps.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; var tooltipTemplateText = Strings.ResourceManager.GetString("RoutePropertyNameAndValue_" + obj.GetType().Name); if (tooltipTemplateText == null) tooltipTemplateText = Strings.ResourceManager.GetString("RoutePropertyNameAndValue_" + obj.GetType().Name.Replace("FromStart", "")); if (tooltipTemplateText != null) e.ToolTipText = string.Format(tooltipTemplateText, obj); } private void laps_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.RowIndex == laps.Rows.Count - 1) e.CellStyle.Font = new Font(e.CellStyle.Font, FontStyle.Bold); } private void lapHistogramPanel_Paint(object sender, PaintEventArgs e) { DrawLapHistogram(); } private void lapHistogramBinWidth_Leave(object sender, EventArgs e) { ValidateAndFormatLapHistogramBinWidthValue(); } private void laps_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) { lapSortOrder = (e.ColumnIndex == lapSortOrderColumnIndex && lapSortOrder == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending); lapSortOrderColumnIndex = e.ColumnIndex; SortLapGrid(); laps.Invalidate(); } private void Main_Resize(object sender, EventArgs e) { CalculateMomentaneousInfoLabelRectangles(); // ugly trick to place dynamic help label correctly when minimizing/maximizing the form - .NET seems to be buggy dynamicHelpLabel.Height = dynamicHelpLabel.Height + 1; dynamicHelpLabel.Height = dynamicHelpLabel.Height - 1; } private void lapHistogramPanel_Resize(object sender, EventArgs e) { DrawLapHistogram(); } private void lineGraph_GraphMouseHover(object sender, Canvas.RouteMouseHoverEventArgs e) { // draw/erase marker on canvas canvas.DrawActiveHandle(e.ParameterizedLocation); HandleMouseHover(e.ParameterizedLocation, e.IsClose && e.ParameterizedLocation != null); } private void lineGraph_GraphMouseDown(object sender, Canvas.RouteMouseHoverEventArgs e) { if (e.ParameterizedLocation != null) { switch (canvas.CurrentMouseTool) { case Canvas.MouseTool.Lap: bool showLapTimeForm = ((ModifierKeys & Keys.Shift) == Keys.Shift); canvas.AddLap(e.ParameterizedLocation, showLapTimeForm); break; case Canvas.MouseTool.Cut: canvas.Cut(e.ParameterizedLocation); break; } } } private void lineGraph_MouseLeave(object sender, EventArgs e) { lineGraph.HoverXValue = null; ResetMomentaneousInfo(); } private void laps_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { var menu = new ContextMenu(); menu.MenuItems.Add(new MenuItem(Strings.SelectLapInfoColumns, laps_ContextMenuSelectLapInfoColumns_ItemClick)); menu.MenuItems.Add(new MenuItem(Strings.CopyToClipboard, laps_ContextMenuCopyToClipboard_ItemClick)); menu.MenuItems.Add(new MenuItem(Strings.Print, laps_ContextMenuPrint_ItemClick)); var rowIndex = laps.HitTest(e.X, e.Y).RowIndex; if(rowIndex > -1 && rowIndex < laps.Rows.Count -1) { lapIndexToDelete = lapInfoList[rowIndex].Index; menu.MenuItems.Add(new MenuItem(string.Format(Strings.DeleteLapX, lapInfoList[rowIndex].Index), laps_ContextMenuDelete_ItemClick)); } menu.Show(laps, e.Location); } } private void laps_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.Delete && laps.SelectedRows.Count == 1) { var rowIndex = laps.SelectedRows[0].Index; if (rowIndex > -1 && rowIndex < laps.Rows.Count - 1) canvas.DeleteLap(canvas.CurrentSession.Laps[lapInfoList[rowIndex].Index]); } } private void laps_ContextMenuSelectLapInfoColumns_ItemClick(object sender, EventArgs e) { // need to handle LapNumber separately as it should not be visible var routePropertyTypes = new SelectableRoutePropertyTypeCollection(); routePropertyTypes.AddRange(ApplicationSettings.LapPropertyTypes); routePropertyTypes.RemoveAt(0); using (var form = new SelectRoutePropertyTypesForm(routePropertyTypes)) { form.Text = Strings.SelectLapInfoColumns; if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // need to handle LapNumber separately as it always should be included ApplicationSettings.LapPropertyTypes = new SelectableRoutePropertyTypeCollection() { new SelectableRoutePropertyType(typeof(LapNumber), true) }; ApplicationSettings.LapPropertyTypes.AddRange(form.RoutePropertyTypes); CalculateLapInfo(); } } } private void laps_ContextMenuCopyToClipboard_ItemClick(object sender, EventArgs e) { string text = GetLapsInfoAsText(); Clipboard.SetText(text); } private void laps_ContextMenuPrint_ItemClick(object sender, EventArgs e) { var printer = new LapGridViewPrinter(laps); printer.Print(canvas.Document.FileName); } private void laps_ContextMenuDelete_ItemClick(object sender, EventArgs e) { canvas.DeleteLap(canvas.CurrentSession.Laps[lapIndexToDelete]); } private void sessions_SelectedIndexChanged(object sender, EventArgs e) { if (UpdatingUINow) return; canvas.CurrentSession = canvas.Document.Sessions[sessions.SelectedIndex]; canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); } private void sessions_ItemCheck(object sender, ItemCheckEventArgs e) { if (UpdatingUINow) return; if (e.NewValue == CheckState.Unchecked) { canvas.SelectedSessions.Remove(canvas.Document.Sessions[e.Index]); } else { canvas.SelectedSessions.Add(canvas.Document.Sessions[e.Index]); } canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); } private void bottomPanel_Paint(object sender, PaintEventArgs e) { Pen p = new Pen(Color.FromArgb(128, Color.Black)); if (canvas.Document != null) e.Graphics.DrawLine(p, e.ClipRectangle.Left, 0, e.ClipRectangle.Right, 0); p.Dispose(); } private void canvas_DragEnter(object sender, DragEventArgs e) { e.Effect = (e.AllowedEffect & DragDropEffects.Move) != DragDropEffects.Move ? e.AllowedEffect : DragDropEffects.Move; } private void canvas_DragDrop(object sender, DragEventArgs e) { HandleDragDrop(e); } private void toolStripContainer1_ContentPanel_DragEnter(object sender, DragEventArgs e) { e.Effect = (e.AllowedEffect & DragDropEffects.Move) != DragDropEffects.Move ? e.AllowedEffect : DragDropEffects.Move; } private void toolStripContainer1_ContentPanel_DragDrop(object sender, DragEventArgs e) { HandleDragDrop(e); } private void momentaneousInfoPanel_Paint(object sender, PaintEventArgs e) { CopyMomentaneousInfoBackBufferToScreen(); } private void momentaneousInfoPanel_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { var menu = new ContextMenu(); menu.MenuItems.Add(new MenuItem(Strings.SelectMomentaneousInfoProperties, momentaneousInfoPanel_ContextMenuSelectProperties_ItemClick)); menu.Show(momentaneousInfoPanel, e.Location); } } private void momentaneousInfoPanel_Resize(object sender, EventArgs e) { CreateMomentaneousInfoPanelBackBuffer(); } private void CreateMomentaneousInfoPanelBackBuffer() { momentaneousInfoPanelBackBuffer = new Bitmap(Math.Max(1, momentaneousInfoPanel.Width), Math.Max(1,momentaneousInfoPanel.Height), System.Drawing.Imaging.PixelFormat.Format32bppPArgb); momentaneousInfoPanelBackBufferGraphics = Graphics.FromImage(momentaneousInfoPanelBackBuffer); momentaneousInfoPanelBackBufferGraphics.SmoothingMode = SmoothingMode.AntiAlias; } private void momentaneousInfoPanel_ContextMenuSelectProperties_ItemClick(object sender, EventArgs e) { using (var form = new SelectRoutePropertyTypesForm(ApplicationSettings.MomentaneousInfoPropertyTypes)) { form.Text = Strings.SelectMomentaneousInfoProperties; if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { ApplicationSettings.MomentaneousInfoPropertyTypes = form.RoutePropertyTypes; CalculateMomentaneousInfoLabelRectangles(); } } } #endregion #region Menustrip event handlers private void menuFileNew_Click(object sender, EventArgs e) { NewDocument(null); } private void menuFileOpen_Click(object sender, EventArgs e) { OpenDocumentShowDialog(); } private void menuFileSave_Click(object sender, EventArgs e) { SaveDocument(); } private void menuFileSaveAs_Click(object sender, EventArgs e) { SaveDocumentShowDialog(); } private void menuFileExportImage_Click(object sender, EventArgs e) { ExportImage(); } private void menuFileExportGPX_Click(object sender, EventArgs e) { ExportGpx(); } private void menuFileExportKMZ_Click(object sender, EventArgs e) { ExportKmz(); } private void menuFileExportRouteData_Click(object sender, EventArgs e) { ExportRouteData(); } private void menuFileExit_Click(object sender, EventArgs e) { Close(); } private void menuEditUndo_Click(object sender, EventArgs e) { Undo(); } private void menuEditRedo_Click(object sender, EventArgs e) { Redo(); } private void menuEditChangeStartTime_Click(object sender, EventArgs e) { ChangeStartTime(); } private void menuViewFullScreen_CheckedChanged(object sender, EventArgs e) { ToggleFullScreen(menuViewFullScreen.Checked); } private void menuViewRightPanelVisible_CheckedChanged(object sender, EventArgs e) { ToggleRightPanel(menuViewRightPanelVisible.Checked); } private void menuViewBottomPanelVisible_CheckedChanged(object sender, EventArgs e) { ToggleBottomPanel(menuViewBottomPanelVisible.Checked); } private void menuToolsAddLapsFromExternalDataSource_Click(object sender, EventArgs e) { AddLapsFromExternalDataSource(); } private void menuToolsPublishMap_Click(object sender, EventArgs e) { PublishMap(); } private void menuToolsOpenInGoogleEarth_Click(object sender, EventArgs e) { OpenInGoogleEarth(canvas.Document, null, null, null); } private void menuToolsOpenMultipleFilesInGoogleEarth_Click(object sender, EventArgs e) { OpenMultipleFilesInGoogleEarth(); } private void menuHelpHelp_Click(object sender, EventArgs e) { Util.ShowHelp(); } private void menuSettingsLanguage_Click(object sender, EventArgs e) { Util.SelectUICulture(true); } private void menuFileImportSessions_Click(object sender, EventArgs e) { using (var isf = new AddSessionsForm(canvas.Document)) { if (isf.ShowDialog() == DialogResult.OK) { canvas.Document.Sessions = isf.Sessions; canvas.SelectedSessions = canvas.Document.Sessions; UpdateUI(); updatingUINowCounter++; PopulateSessionList(); updatingUINowCounter--; canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); } } } #endregion #region Toolstrip event handlers private void toolStripNew_Click(object sender, EventArgs e) { NewDocument(null); } private void toolStripOpen_Click(object sender, EventArgs e) { OpenDocumentShowDialog(); } private void toolStripSave_Click(object sender, EventArgs e) { SaveDocument(); } private void toolStripUndo_Click(object sender, EventArgs e) { Undo(); } private void toolStripRedo_Click(object sender, EventArgs e) { Redo(); } private void toolStripToolPointer_Click(object sender, EventArgs e) { canvas.CurrentMouseTool = Canvas.MouseTool.Pointer; UpdateUI(); } private void toolStripToolAdjustRoute_Click(object sender, EventArgs e) { canvas.CurrentMouseTool = Canvas.MouseTool.AdjustRoute; UpdateUI(); } private void toolStripToolZoomIn_Click(object sender, EventArgs e) { canvas.CurrentMouseTool = Canvas.MouseTool.ZoomIn; UpdateUI(); } private void toolStripToolZoomOut_Click(object sender, EventArgs e) { canvas.CurrentMouseTool = Canvas.MouseTool.ZoomOut; UpdateUI(); } private void toolStripToolCut_Click(object sender, EventArgs e) { canvas.CurrentMouseTool = Canvas.MouseTool.Cut; UpdateUI(); } private void toolStripToolLap_Click(object sender, EventArgs e) { canvas.CurrentMouseTool = Canvas.MouseTool.Lap; UpdateUI(); } private void toolStripHelp_Click(object sender, EventArgs e) { Util.ShowHelp(); } private void toolStripZoom_SelectedIndexChanged(object sender, EventArgs e) { UpdateZoom(); } private void toolStripZoom_Leave(object sender, EventArgs e) { UpdateZoom(); } private void toolStripZoom_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == 13) { UpdateZoom(); e.Handled = true; toolStripZoom.SelectAll(); } } private void toolStripOpenInGoogleEarth_Click(object sender, EventArgs e) { OpenInGoogleEarth(canvas.Document, null, null, null); } private void toolStripPublishMap_Click(object sender, EventArgs e) { PublishMap(); } private void toolStripFullScreen_CheckedChanged(object sender, EventArgs e) { if (!UpdatingUINow) ToggleFullScreen(toolStripFullScreen.Checked); } private void toolStripRightPanelVisible_CheckedChanged(object sender, EventArgs e) { if (!UpdatingUINow) ToggleRightPanel(toolStripRightPanelVisible.Checked); } private void toolStripBottomPanelVisible_CheckedChanged(object sender, EventArgs e) { if (!UpdatingUINow) ToggleBottomPanel(toolStripBottomPanelVisible.Checked); } private void colorRangeIntervalSlider_ColorRangeClicked(object sender, MouseEventArgs e) { ShowGradientEditor(); } private void routeLineMaskVisible_CheckedChanged(object sender, EventArgs e) { RouteLineSettings routeLineSettings = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; routeLineSettings.MaskVisible = routeLineMaskVisible.Checked; if (!UpdatingUINow) canvas.DrawMap(Canvas.MapDrawingFlags.Markers | Canvas.MapDrawingFlags.Route); } private void gradientAlphaAdjustment_ValueChanged(object sender, EventArgs e) { if (!UpdatingUINow) { RouteLineSettings routeLineSettings = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; routeLineSettings.AlphaAdjustment = (double)gradientAlphaAdjustment.TrackBarControl.Value / 10; colorRangeIntervalSlider.SliderControl.AlphaAdjustment = routeLineSettings.AlphaAdjustment; colorRangeIntervalSlider.SliderControl.Refresh(); } } private void gradientAlphaAdjustment_MouseUp(object sender, MouseEventArgs e) { if (UpdatingUINow) return; RouteLineSettings routeLineSettings = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; Lap lap = null; if (laps.SelectedRows[0].Index < laps.Rows.Count - 1) lap = canvas.CurrentSession.Laps[lapInfoList[laps.SelectedRows[0].Index].Index]; canvas.AlphaAdjustLap( canvas.CurrentSession, lap, GraphicsUtil.CombineAlphaAdjustments(routeLineSettings.AlphaAdjustment, 0.5), GraphicsUtil.CombineAlphaAdjustments(routeLineSettings.AlphaAdjustment, -0.5), routeLineSettings.AlphaAdjustment); canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); } private void gradientAlphaAdjustment_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) gradientAlphaAdjustment.TrackBarControl.Value = 0; } private void routeLineMaskColorButton_Click(object sender, EventArgs e) { using (var cc = new ColorChooser()) { RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; cc.Color = canvas.CurrentMouseTool == Canvas.MouseTool.AdjustRoute ? rls.MonochromeColor : rls.MaskColor; if (cc.ShowDialog() == DialogResult.OK) { if (canvas.CurrentMouseTool == Canvas.MouseTool.AdjustRoute) { rls.MonochromeColor = cc.Color; } else { rls.MaskColor = cc.Color; } UpdateUI(); canvas.DrawMap(Canvas.MapDrawingFlags.Markers | Canvas.MapDrawingFlags.Route); } } } private void colorRangeIntervalButton_Click(object sender, EventArgs e) { ColorRangeIntervalSliderSettings sliderSettings = canvas.Document.Settings.ColorRangeIntervalSliderSettings[SelectedColorCodingAttribute]; using (var crie = new ColorRangeIntervalEditor(Util.GetNumericConverterFromWaypointAttribute(SelectedColorCodingAttribute), sliderSettings.MinValue, sliderSettings.MaxValue)) { if (crie.ShowDialog() == DialogResult.OK) { BeginWork(); UpdateColorRangeInterval(SelectedColorCodingAttribute, crie.IntervalStart, crie.IntervalEnd, false); PerformFullRedraw(); EndWork(); } } } private void colorRangeIntervalSlider_ColorRangeEndValueChanged(object sender, EventArgs e) { if (UpdatingUINow) return; BeginWork(); colorRangeIntervalSlider_ColorRangeEndValueChanging(sender, e); canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); EndWork(); } private void colorRangeIntervalSlider_ColorRangeStartValueChanged(object sender, EventArgs e) { if (UpdatingUINow) return; BeginWork(); colorRangeIntervalSlider_ColorRangeStartValueChanging(sender, e); canvas.DrawMap(Canvas.MapDrawingFlags.Route | Canvas.MapDrawingFlags.Markers); CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); EndWork(); } private void colorRangeIntervalSlider_ColorRangeEndValueChanging(object sender, EventArgs e) { if (!UpdatingUINow) { updatingUINowCounter++; double value = colorRangeIntervalSlider.SliderControl.ColorRange.EndValue; colorRangeEndValue.Text = FormatColorRangeValue(value); canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute].ColorRange.EndValue = value; colorRangeEndValue.SelectAll(); updatingUINowCounter--; } } private void colorRangeIntervalSlider_ColorRangeStartValueChanging(object sender, EventArgs e) { if (!UpdatingUINow) { updatingUINowCounter++; double value = colorRangeIntervalSlider.SliderControl.ColorRange.StartValue; colorRangeStartValue.Text = FormatColorRangeValue(value); canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute].ColorRange.StartValue = value; colorRangeStartValue.SelectAll(); updatingUINowCounter--; } } private void colorRangeStartValue_Leave(object sender, EventArgs e) { double? startValue = ParseColorRangeValue(colorRangeStartValue.Text); RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; if (startValue.HasValue) { if (startValue.Value < colorRangeIntervalSlider.SliderControl.MinValue) { colorRangeIntervalSlider.SliderControl.MinValue = startValue.Value; UpdateColorRangeInterval(SelectedColorCodingAttribute, colorRangeIntervalSlider.SliderControl.MinValue, colorRangeIntervalSlider.SliderControl.MaxValue, false); UpdateUI(); } rls.ColorRange.StartValue = Math.Max(Math.Min(startValue.Value, colorRangeIntervalSlider.SliderControl.MaxValue), colorRangeIntervalSlider.SliderControl.MinValue); } colorRangeStartValue.Text = FormatColorRangeValue(rls.ColorRange.StartValue); colorRangeIntervalSlider.SliderControl.ColorRange.StartValue = rls.ColorRange.StartValue; } private void colorRangeStartValue_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { colorRangeStartValue_Leave(sender, e); colorRangeStartValue.SelectAll(); e.SuppressKeyPress = true; } } private void colorRangeEndValue_Leave(object sender, EventArgs e) { double? endValue = ParseColorRangeValue(colorRangeEndValue.Text); RouteLineSettings rls = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; if (endValue.HasValue) { if (endValue.Value > colorRangeIntervalSlider.SliderControl.MaxValue) { colorRangeIntervalSlider.SliderControl.MaxValue = endValue.Value; UpdateColorRangeInterval(SelectedColorCodingAttribute, colorRangeIntervalSlider.SliderControl.MinValue, colorRangeIntervalSlider.SliderControl.MaxValue, false); UpdateUI(); } rls.ColorRange.EndValue = Math.Max(Math.Min(endValue.Value, colorRangeIntervalSlider.SliderControl.MaxValue), colorRangeIntervalSlider.SliderControl.MinValue); } colorRangeEndValue.Text = FormatColorRangeValue(rls.ColorRange.EndValue); colorRangeIntervalSlider.SliderControl.ColorRange.EndValue = rls.ColorRange.EndValue; } private void colorRangeEndValue_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { colorRangeEndValue_Leave(sender, e); colorRangeEndValue.SelectAll(); e.SuppressKeyPress = true; } } private void colorCodingAttributes_SelectedIndexChanged(object sender, EventArgs e) { BeginWork(); canvas.PreventRedraw = true; canvas.ColorCodingAttribute = SelectedColorCodingAttribute; canvas.SecondaryColorCodingAttribute = SelectedSecondaryColorCodingAttribute; canvas.PreventRedraw = false; if (!UpdatingUINow) { UpdateUI(); } CreateLapHistogram(); DrawLapHistogram(); CreateLineGraph(); DrawLineGraph(); canvas.DrawMap(Canvas.MapDrawingFlags.Markers | Canvas.MapDrawingFlags.Route); EndWork(); } private void secondaryColorCodingAttributes_SelectedIndexChanged(object sender, EventArgs e) { colorCodingAttributes_SelectedIndexChanged(sender, e); } private void routeLineMaskWidth_ValueChanged(object sender, EventArgs e) { if (!UpdatingUINow) { RouteLineSettings routeLineSettings = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; routeLineSettings.MaskWidth = (double)routeLineMaskWidth.NumericUpDownControl.Value; canvas.DrawMap(Canvas.MapDrawingFlags.Markers | Canvas.MapDrawingFlags.Route); } } private void routeLineWidth_ValueChanged(object sender, EventArgs e) { if (!UpdatingUINow) { RouteLineSettings routeLineSettings = canvas.CurrentSession.Settings.RouteLineSettingsCollection[SelectedColorCodingAttribute]; if (canvas.CurrentMouseTool == Canvas.MouseTool.AdjustRoute) { routeLineSettings.MonochromeWidth = (double)routeLineWidth.NumericUpDownControl.Value; } else { routeLineSettings.Width = (double)routeLineWidth.NumericUpDownControl.Value; } canvas.DrawMap(Canvas.MapDrawingFlags.Markers | Canvas.MapDrawingFlags.Route); } } private void routeLineWidth_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.SuppressKeyPress = true; } } private void routeLineMaskWidth_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { e.SuppressKeyPress = true; } } private void toolStripDonate_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start(Strings.DonationUrl); } private void toolStripApplicationSettings_Click(object sender, EventArgs e) { using (var settingsEditor = new ApplicationSettingsEditor()) { settingsEditor.ApplicationSettings = ApplicationSettings; if (settingsEditor.ShowDialog() == DialogResult.OK) { } } } private void smoothingIntervalLength_Leave(object sender, EventArgs e) { ValidateAndFormatSmoothingIntervalLengthValue(); } private void smoothingIntervalLength_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { ValidateAndFormatSmoothingIntervalLengthValue(); smoothingIntervalLength.SelectAll(); e.SuppressKeyPress = true; } } private void circleTimeRadius_Leave(object sender, EventArgs e) { ValidateAndFormatCircleTimeRadiusValue(); } private void circleTimeRadius_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { ValidateAndFormatCircleTimeRadiusValue(); circleTimeRadius.SelectAll(); e.SuppressKeyPress = true; } } private void exportLapHistogramImage_Click(object sender, EventArgs e) { ExportLapHistogramImage(); } private void lapHistogramBinWidth_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { ValidateAndFormatLapHistogramBinWidthValue(); lapHistogramBinWidth.SelectAll(); e.SuppressKeyPress = true; } } private void toolStripAutoAdjustColorRangeInterval_CheckedChanged(object sender, EventArgs e) { if (UpdatingUINow) return; ApplicationSettings.AutoAdjustColorRangeInterval = toolStripAutoAdjustColorRangeInterval.Checked; if (ApplicationSettings.AutoAdjustColorRangeInterval) PerformColorRangeIntervalAutoAdjustment(); } private void toolStrip_DragOver(object sender, DragEventArgs e) { e.Effect = toolStripOpenInGoogleEarth.Bounds.Contains(e.X, e.Y) ? DragDropEffects.Move : DragDropEffects.None; } #endregion #region Private enums #endregion #region Handling of unexpected exceptions public void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { var ex = e.ExceptionObject as Exception; if (ex != null) { LogUtil.LogError(ex.Message + " " + ex.StackTrace); ShowUnhandledExceptionMessageBox(ex); } Environment.Exit(0); } public void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { LogUtil.LogError(e.Exception.Message + " " + e.Exception.StackTrace); ShowUnhandledExceptionMessageBox(e.Exception); Environment.Exit(0); } private void ShowUnhandledExceptionMessageBox(Exception ex) { var topLevelException = new ApplicationException(Strings.UnexpectedExceptionMessage, ex); Util.ShowExceptionMessageBox(topLevelException, Strings.QuickRoute); } #endregion } }quickroute-linux-upstream-2.5/QuickRoute.UI/Main.da.resx000066400000000000000000003316661446222606700233570ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Mellemtider iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC Eksporter søjlediagram Linjebredde Farvekodning af... Startværdi for farveskalaen Rutelinjens farvekodning Slutværdi for farveskalaen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAKVJREFUOE+tkmEOwiAMhXuSeQjvoH/ckVy6Ky16Hp0Hob4SIEDGGOKPF1jWfu1rIRGh HoVkZpYW+aIJYEAzN4ihJ7RqcwZ6Qws0QVf8R7FNwAkJYwYwLQDtIAZ88J0A7pUOPGBG4iO28HIWFHDZ sfDzEInoDImetZXmsXYLLlkvYbolUB7b9Yhs8bDPA9W3YvstOE8cnxX/Sex/LPhN1FZYnEEP4AuyYY/2 1EDQNAAAAABJRU5ErkJggg== Angiv interval for farveskalaen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC1SURBVDhPrZNRDsFAEEDnJNxB78AhSDgJewEuwQGcgy9O wR/fJOvNpstUJV3GJi+dtDNvZ7atyGtFE3eFrVy9EbqqzHPNfUo08JC8rg5yZ64z+GL8f6eGEKIH0eJe lDiAMcxhAzs4wR3iFY6whRXMYCRp4yTok1TBxAj2teBWIsgdZMGaIhWcoSVYsvv0rQMrWFCkgsYIFwoO ZgQVDM0IrkPkrVb1l6jX0tWosf9BqeCXms/uBwn3Fq/+feK5AAAAAElFTkSuQmCC Automatisk justering af farveskalaens interval Rutelinjens gennemsigtighed iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA Cv8BNGKaggAAAL1JREFUOE+NU9sNwzAIZI7OU+Uvs3SNTpm/zOHmEOdiAo4jIUfgO15naa1J/ODL7P2R 9j0Q+sf14goBwSDwJGmmmD2CPQmSo4TtqWyC4gmCzUh2a6f3WGUmCeJsfzeSEyeIVsB9fvajYNgq2C9A gbSqX/hBPqxRp+j3KvK6XGdGEsFDC08kGbgksECvpAJPCRzJMJ+oF11jJSLqgivO7t3eQTJUVMAVq9hu W5g9JgrrOim2QfZpBROnyt5X8APmCAFYpeIP4QAAAABJRU5ErkJggg== Rutelinjens bredde 40, 23 Rutelinjens bredde iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFISURBVDhPY2AgDJiASlYCsR9hpZgquIFCG4H4PxcXw+eE JQy6pBgiCFS8BaSZT4Lhf9FOhv8ddxmeVB1jkCbGEHGgor0gzQJSDP/LDgI134PgtnsMJwuPMXDiM0QK KHkMpFlUieE/0Ea4ZpghqUsZ1uEyQAEocR6kWUqL4X/tGUzNcbMY/rNyMPwHqmlHN0QZKHAVpFnOiOF/ 3TlMzVGTGP4zs4I1g/B8ZAPUgJx7IAklc4b/TVcwNYd2MfxnYoZrnoOsWRPIeQXSrGbP8L/5GqZmvwa4 RpDNM9GdPgukWdeT4X/rTUzNHmUompOxBR6bYSDDybbbmJqdslE0h+OMupabDNKgRAKLJhBtFYei2Ztg 4gEaYFZ/heEbyCWmYSia7QlqhilovcUQZeAH1/wTKG5AtGYkhV1A9gcgBsUOWQCUfYnKMCDTAVQJvdxe fXZYAAAAAElFTkSuQmCC Vis rutelinjens kanter 40, 23 Bredden af rutelinjens kanter iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC Rutelinjens farve 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 Farvekodning af sekundær rutelinje Farvekodning af sekundær rutelinje iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA Cv8BNGKaggAAAiVJREFUOE9j+P//PwMlmMHB4T8xOAqorgKbWmI0swA13gXiL0DMBTPEzvE/gy0QE2OA i6Xz/+9Axe+Bmi1ABoA0+1m9ZAi2eIjVAGmgooP2Dv8NrZ3+M5i5/D9Qqr16UrDFg5NWzv/THIEGAMUY mtSmMZRor2FgACpEwUDbak1c/v93cPgXGmN6RqBXsenPSwaGL2c5lf/7Wj9rM3D7z2ADNPgoty5Dge5m BgYXux9w7ODwg7FYe+3+VeKR/3fz2+5/zcBwDIhv3GNktrjILjf/JJf6lSUSoQxbBV0ZXjAwMKQbHGRg uMQmBscX2cRUnzMwfN3Pa7Znlmze/2qNhX/TDQ9pFepsZLBx/Gl5nFv7/wcGhoRnQM1AdSb1arNSGB4D OSD8CIjfMDBMnCVbdAjoRz0T1///LZz/77ECOhfoLQZzl/+8RTrrnjxhZP7zlIFhPdCAT1Plyl4zPABq BGFgeIo9ZmT6nmB8JhekARiQy4DYHTnuTV3/b+1Wat/5iJlnYoHupm9Ai6phBnAB/dqyU8D+DzDkFUAB iy3R2Dv+n+ti/3NWkMVDXqAln4FqlBiA/pkGdPrL05yqf4Itbp8DGsCIJ3XGAw0/DEwTfUA1R0HqGFKM jlQW6G297WP9+hzQvzkEkrY+UB5k8ycgBiVvBgagJi6gc24CUxcw7v8rEjBACCj/F4jfATEH2ACoBlBg FQAxPufD1DYC1eXBLKIoK4OKAQAF/s1iEFX7sAAAAABJRU5ErkJggg== Udjævningsinterval længde Udjævningsinterval længde iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA Cv8BNGKaggAAAUxJREFUOE+Nkk8rhFEUxm/IQpYz2Vi8srRhYTYW5iNYSMqCZkMppclOzELJQqGUjQ1Z KGlSFrOb8gWUPRbK1jd4/Z63c3Vc72hu/bp/n+ece+4N7yGEhBrzFtzBLRzDIlT8uTzPg/BiHTiCDrTh APbg2tYe6FeiSWowZtEkXoJRF22A8Qx0IYdd7XmDYRYO4RHmSq6kLKvwYgYf9Jk3mLUUl3uIM9ZfTbxD r9qceQMV7D5JO9ZG4jcTr1qAdQX0BirSaUn0SdY+Tdxw+1OMz72BCtcsMRhn7Qk2/F4UeoMLDlzBYI8a BFobusZ0HMd/sKk7gZ4y/VTFnFYHfk3BM3yJaKBCyWC/T4M1xJnwP1H3lMkWjKRGSQYSFy39yttmckO/ ABPGUGIQ9X8MdN95uDQjZVQ8178G6bOUzTE4UcZG69cV+jSoWxax/6nBN2BcWA8xzRYiAAAAAElFTkSu QmCC Cirkelradius for kontroltagningstider Cirkelradius for kontroltagningstider iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVDhPrdPZasJAFAZgX8q+Q32N9o2kXkjphQsigoJC ixa1VAWXiohG7IakbmjcNcYl5i8TCQSdGXPhgcPczHwz5xzGZrtWRN+bOM1wqo5gvAJfrIBy4w/cu8hh VjyG3nDjuOcjkbTABB58cSRy9SMiiPSXhF6rTMDpedEPG0ktJfD8wQT26gEEMSAq4I3mqYCmaZCVHQZj WQfst3f0Ep7CGSqw3amYzBWI/TkfcAdTZ4B60LCQt+hJK3yJEz7g8ifOAGWzhzRdo9WdofYt8QFSnzlI 42bLDdqDBZqtMUpC3zpgbtxPe4rq5xDZSsc6YG6c8DtCodZDsihaA4x5s1bmGI0Zkw2X8lofWHf+AdjM 9sNc+xBlAAAAAElFTkSuQmCC Ny (Ctrl+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPlZNdSNNRGMb/F110ZZEVhVBgeeHNICiiuggp olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdPKMgr7kApFItTUkWZqVhSVYmao5Nev/xyoQ4k88Nyc 8z6/93nP4QjCfy6lwc4ltZVso4P/tMyXRcmMHqZ0EeY6jZQVInzuf0e1Tb9Ina3P/tkpLD6XkNg8BJe5 u93C+HDVrP4M2ZkcMOOw5tLZ9nxJyJE4HSExBoKkBQhVpTrGhso9zNPfiph0JlB+U01ZcRbmwnRMeWlc 08opUCV6QissGsZ+WOY6z4hmuuXglC6pRYBbJSp+fzXNxnaZ66o1s3rkyKHWruJuWRYOcwZ2kxKr8TI3 DCkU6+QYNUnuNGWmLEY+5uOK3degoKZcx3SfEvozPfVB3OtNhi4ZvI2nrTIc23U9gtmYwa8eNXzScq8i l6bHWnfRwhHeREJzGFONgYw/CeB9qQSZNNR9FyUGBT87lfQ3plJj1zLTq4COGDegLVo0HmeqKZjx+gOM PNzDYPU2lLF+4jhyN6BIl8pgexK3bRpaXopJuhJEwGloiWDmVSgTLw4xWreXoZrtfK/wp/nKak4E+s6/ hDFHTkd9GndsOdCTBq1i3NdHmWgIYvRpAMO1OxlwSPhi2YpT641CuoWzsSfnAfnZiVRZ1Tjvx9GsF+bU pF1BvWolD9JXUZmyDnOiD1cvbCZiYXfXCPrMi+gVZ8hOiiL53DHORwdzKnw/hw/uYt9uCTskfvj7+rBp 41rWr/Fig7fX8j/Tsn/fcgx/ARfG3ml6M3rzAAAAAElFTkSuQmCC Åbn (Ctrl+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIsSURBVDhPrZPdS5NxFMf3L3TfTdBFtzU1hmuxGjzlHMqq YVgRvT2RL+XSZZqoWJlGLV8gW+HSScvpJJxU+AamSI2hTCVLM1e0xKGm2EQw+PY7v+j5tTIvoh+cy8/n POec76NS/Y/37GkUVL72ZbR5l/DYvYDGhgjuO2ZQW/MJ9tsh3CifQmnJBAoLXiMvdxQXzgeh9Cawtweo qV7FRm9ldQ3GtF4cTnvCSxF4Wxe5oLLiy195giMLK9htfg61WoblkEcI3I/muaC05PO6gp/w+/Ai4kw+ FFyexgFzkxA462e54JLt3R+CX+GRyQi2SV5Yc8aRmuIUgrq7YS7IzhqNEfwODwbD2Kx3Q5YDMJkcQlBd 9ZEL5DMBRbAe3OP/gE2JDThy9AWSkmqF4GblNLq7wE4JHD/5CpZjA3zbtDCamT6bOv+A+3DQ0glJsgvB 1bJJdPjAMgA0ub6xu39F+fU5vlRaGM2cmRFU4OTUdhgMFUJwpXAcnmbgoXONBScKY3pOTJlP2JB+roh3 Tk5h8H4P9PoyIbDljTEYqLoT5Z1JwEKCOK2EobezGJuag5x7DXuNbRzW7nFBpysSAoql4x6UzyYBwWfz b+FNaB6hmSVcLLYjXu9icCPidz2ANjFfCDIzhtncy3zmrQYPtuyQ0NLRD1/XILr7/Bh4OYR9JgvUunok MHi7pg4ajVUIKNOnT/XzeFLCKCR0ZzoVbZsWRjNTVyqCdyZkxwr+9a/+Dk60OMVjMFpXAAAAAElFTkSu QmCC Gem (Ctrl+S) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHXSURBVDhPY2CgJZi05VvMxI1fd8zc/fHRsgNfjqzY/2XK siNfpYiys3fD1x31G6786V739Xnjio+P6xd/uTN358fHy3Z9/YTVkO5Vr/4vOfnFAGR619ovy/rn3/+d 0vPqjUv8id9aqdv/6Ces/25fdvfjzK1f36za/+UmiitWHvvH2bjk5f95+79erV/+taF+05U/cfX1/1wL jv+3y9j0yyR21XH7/K0PteLr/4R1vPy5+MDn+xjeKJ75/H/WrM//C+d8+R/Z9e6Flf2Wv2bRi3+YRK/M Byn2rd+hYhi84IVr+fX39Uu/7MEwIKnv2X/vpjf/o3s//y+b8+a/htek1UZRKxzhCkNDmeXjD/12Lbvz un7ll0MYBgQ1P/1vVnz/v2fTK7BLEnse/a9d+NYSptDYOI3Vzn7/X7e6Z9+aVnzegmGAU8Xj/w5F1/5b ZR7/bxK/7b9h1Nr/Gj5T/8MUmiSuUbLNrP9n37L/b/60R6UEoxIUsMiK1L0nu2uVXfmTBgzc+lX/2Qga gK7AImXfxRCg5rC6s7kkaU7s+6Bkn3c+xh+o2a3yyjcGhv+MJBngUfnE2af+6S/7rP0/jSNXeJGkGaQ4 oudzpHPJ1UaDxJWiJGumiwYAXqjyIzS1ngMAAAAASUVORK5CYII= Fortryd (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHJSURBVDhPY2CgFlh25KvUiv1fpiw78OXIzN0fH/Ws/5JS uPIfJ1HmgzQv2/X109ydHx/XL/5yp3HFx8etq77cKZn/5XPlwi+pBA1Ztf/LzZlbv75xL3/wXj9h/Xet lG1/7HP3f02Z/O5F4ZwvLwrmfg4DGbLk5BcDh6Jr/zEMXHzg8/2wjpc/5aPn/3bJW3/TOHrNMdPYNV/k 4+f/tp+8/2/65PfPsuZ+jpy3/+tV68zj/1ceQ/Na/dIve1zLr79X9ei55Vu/QwVkg0n0yny1yKVfJX1m //Jvef8c6JL/WbM+/zeJ34rpgvqVXw45Fd97peLZd5ghNJQZ5kSjqBWOGl6TVpfNefM/uvfzf++mN//1 QhdjGtC04vMW+6IXX1W8J9w0Nk5jhRkweetn3Slbv4Jt9mx69d+s+P5/DZ+pmAbkT3tUat+6/6+kz5pf 4q7F3DADQAFmBfSzSfy2/3ohS8CaVd26sHhh1X+2tPr6f1plV/6oe092Rw5ljADDFadhdWdzQ4CGWKTs u0gw3rEr+M/oXXntpX3L/r/2eedjEvs+KJFskIrHYj6vypunAlo/ffWofOJMsgEwDd6Nr0Ijej5Hkm0A XTUCAJVf6G0nSs/cAAAAAElFTkSuQmCC Gentag (Ctrl+Y) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPrdPBCgAgCANQ//+nDYMCLaXNvHl5IJsifjTs 8GpAC1GbDjKBDrIBFnEAgxwAilwBBEmBV6Q6YcVb9sTFyEQaOwD3IraQAuIDwch3wMD0wQZXPN8hfWsG XgAAAABJRU5ErkJggg== Pil iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB7SURBVDhPpZNRDoAwCEO5/6WnI2JGVyoqiT+yPLrSmZmN 8/tVE1BBoieHjFkE4v+jlFJ2aIU6vBjiV68moewSkgBiUh+gPGFebAqEcejN7gHS1HaiRxVczSoHae1p jZ29Y2zR3VZ4Vgim8BOAqlLpe3p9r1UwoHql9/kDyX4i7Df5W1AAAAAASUVORK5CYII= Tilpas ruten iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhPrZLRDkARDEP3/z/t3knI2kyHkHhAnU3VzKz9 c2e4bkzQp5tEbHFw0X4mOonnXcf6CU8gKzjsq/bOAdTeHUBAtAfwFjS2/gW+PNbB2HUOssshNGVO4BuT ymVK2WmVixTGLV4BmHwMeQ5wYOm+iz6qgD7QoohWnwAAAABJRU5ErkJggg== Tilføj mellemtid iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB1SURBVDhPlVIJDsAgCOP/n3bTDdJxDEpijNpWbBURWe+4 J6qMt3aRIh/OWRAiKX4q8ovrRLrzY2AFGpE1Ag+myEEEzN1JUaXRshE/XiR+jDvwN487yYjmCXz59El+ M2sX94KIJ3QC6pOlgoqV6y0GPajyDpgL9XC8RCNefroAAAAASUVORK5CYII= Beskær ruten iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP3ZJJDgAgCAP5/6fdIgaRittJEy+kDFhLNJ6Q SvIaErtUmvQRsCloaAQgCOn0PFUWa80EwLVXt2g6ZV4zkgVoi3cANQk9zfdh18RMvP7GAnGCxKa6yURR Poq3nvYhhCJIaTHd2laAhgAAAABJRU5ErkJggg== Zoom ind iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhPY2DABP+BQsgYixLsQmBN6ADJMLwGYWjEYRBO QygygKBmmAKodzBcATcALfDgAUk/Awj5BZcXQH4ipBfmHdrEAsxUQgmJoCtQDMKSAslK3uh+HoaGMAAA ykBJxduNsuQAAAAASUVORK5CYII= Zoom ud iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANoSURBVDhPbZNtTJNXGIafGLKBQDbROozElTFjFItj2WDD ARvJUjQKBmFDka+xMtwPE8dgOj8K2QKlk6/yIWCAiFo2JBv2VbHFAAVpqXPvO9qVFktpRYFIN1RQ0Lnl 3ivMH0Se5Mo5OTnnynNO7kO0RIk/VwbmyjWSghptUSFPdlF7VnSGMmipvYvWtuxWBu7Jaf9ZWt3/uIkZ wuWeEXToHOjU26FSDf6dLdcw7yY0vrWk6PWo2m0x6SVT+cU/4kRVKxpa+tDL/Qkt68L5q6Po0N/G7TuT qFD+Oh28+3TcIsmroaeCtqfKZ0ZGbHjy+BHmZh/CarWisVmDxgt21KtGkVdrxk9qJ6anH6BUeX1O+HF9 6P8S6TJhmOzalS4OuoEpjE48wvOa+suF4upW5JaxOFZrQ1YhB7VuHPfvTSHtMMNSpNSN3EWK8LD4GmR8 b0RKHoeDpRYo1eO4N/103jP78AGKFC1IP67DFzIr0vJYmGwudPZZIAivExP5y+VvJ3UiNvsGUvP/QGah BZICK47WOMBaZ+Yl/z6dRUn1ecQcuIpdh8xIPs6i/JwRy4NLq4j8ipmAnWrE5vyOxKMWpH5ng6TQjoyC Bc5ecWHuyTPNP6hvakNkSgvCMlkIY9SgALmGaG25hja3IfSz35BwZAh7pcNIzh/mRfZ5Pjliw1cKJwzm hbcx9PdhR3oVaGMlaN0P3US+lQ3kz8Btqx5ByUbs+HoInx4bRhIv2pfHw4/x395EbO5N5FTeQhc7A4fD ibKKBry8qaj5mSCZPBTwCi7BSyG/YKX4BkT7LHybFnz4Jc9+fi4ZhCjJiFXi6/CI6EFgog6J3/SA3qzK Ilohe8XvnbK7vVotTjWpELf/DITRbfCN1mPdLhPeiDfDP84Ev50cBGID3MP5g6KLoDUN98m3XLCQhfVn JUznMMbGJ+GaHIfJOICTpzuQdohBRAqDzXGXINx2Eb4ftSJAfAYbtjeBVtceXJTG5aKK8u5+J4zWMZy7 5AA3eBcTExO45bSD5QbQpdVDdVmHumYDXgs5Uffif/CJWrtMkDm4J6eXv1s3PCOuYUuSAdEHOD4jRkRm cVgd1Q5yk4ySz3shLwoECV60IlxMXh9IyVPSRu4yE3kr7pD3yTHykJnJM5Mh74gC8nk/nlaJ1zwX/AcB GR/WpKQjZwAAAABJRU5ErkJggg== Åbn i Google Earth (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKESURBVDhPhdPtT1JRHAdwX/YP9LqtLFvW1oPNJiotnxWK oWmholOzzOaUqzh1i02lfIistKRcPmTWnMaDiijgEzDwAhcueEHMLK2lL1ovnH/At1tbm724dl6d7ez7 2e93zu9EROxbxYqRzCSxrCKvSN6ULZV3pIgb+lJzFRrhzRZrpkTJFNzuGsyv7H26P/PPPqZo5kdUWi+i EgjECpRQKUfR3WPC/RcujAwbwZCzqFP0b3MCF0rNX6LSXyIyoRZxwmY4NWPwOhnoqT3Y7Wtg3Euoau0L cALREuPaH4AnA0/UCppcwiYdwLRvDy7/DrYoF2oUA8ucQJZsMXxG2I/jbAtXrj9E2GqEx7AAp2sdXpJB 0EWhXjFk4QT6J+eDss5hZEofQVysgl2jB6nX4rM9BLvOgsUJByruPdNwAl9/7lJGGw1R6RNck3Yh7Kfw yRHE6vtphHUUrDYKBWWdw5zA6uaOzx/6hvzKHohKOrDgnsZHK40tRosNksSycw55UuVz7juoMYXLmgyI EzUjWdwCo1kHctQJ81AItHMbpN+HO4S6nRM4X2L2HUl6xT4jgcTsdpg8NjicU1iZdSBEMdBO+VBep67n BM5KZ6hTggEc4xFIk3Qg5POAdGvh9prYdtbxZpxGVaO6nBsoNLDAIE7w63C1UAXGRYNanWUrMYMOWPBB xw6SvPvGARUYqGjhICLja3E5pw2WJQ82PAvwB+eht5kgb1PvVhAPLnIC56ST3tPCAXYSCaRI2tjxncPY u3FUNz7+LhDfUmZliY9yhn8f8EonAiczXrMVELiU0QD2V67wU/Or49NzDh8Y/HsoId4mxghUU7EZ1TPJ wru5fH7Rof8FfwEbeIEBF9VbngAAAABJRU5ErkJggg== Offentliggør kort iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIfSURBVDhPzZPdS1NxHMb9p7qYN3ZTUV140VVeJhgYYm2D LSgNixQSNSq0dJqaziw1M3sBNXPTTTdFJa1Y2tybmtOGK8fafufT+U5Yp8ugiw6cmwPPy/d5nlNQ8F88 vaM+el7M8Whklu7nXrqGPXQ+m6Zj0E37gAvH03e09k/y4PEE9/vGaXGOkTcuYA2F0hQZpUhnFamM4kda kUwpEgcae981dvY1thIasW8a4V2NIydLD0lEWcC1HQvY73iprPdQcctL2U0vJVUzFNvcnLjkouiCC9N5 N8esfoI7BgKxLcrWRg8LX8AbgMlVeLWkMTin6HEpWsez3H6ZoXboJ0ftEda2DQRys9g2N8ww+xndJkT3 IBjnD3CdDja3JSi0hglsGggkMLlZCKY+wGtdecin6HUr2kR5NMONJylsD/cpvxvHZAnzMcbvDCRtCUwI 3ixrbOjKa9vwaRNWIrC0Af61w9PO1UdzBKv693yIUpWkLQTDfoVzWuGYyNI4kuZ6/wH2ziSVLbuUNcQo qVnHZA7xPmQgkJ6lKiHo08GiLApG5akVGFuEM5dXcwTLuqu8AxmJ9Gxt8tD+NkvdQJJqZxKLI0H5vXjO tigL+PTFeQotIRaDBgJZmIzkarOPakeAa91fsTm2qWjeorRpk7N1MYprohy/EqFIr/BUVTRXd96BzNO4 MBmJ9CxVSdpyjtwstkVZwPPrBgJZo7D97fvPfuJfzsJSIcPgSG8AAAAASUVORK5CYII= Fuld skærm (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== Hvis panel til højre (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== Vis panel i bunden (Ctrl+Shift+B) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIYSURBVDhPtVNPaxNBFO9HyEfYj1AUPHjK0eOiDeSYQg89 qAQPEgRxKQjBYBuRosHSXatiI6nupXaN1q5oa4tIF2s1tmGzLVHTZpuObpX+0fx8M1NYSyM5+eCxb4b5 /XlvZzo6/kdMLwS4U1xH+m4FfcNLGCyUMf7qM9pqvXO3kZ9qQC+uwavv4tvWHliwS/UOruZLSOsOiq9X WxNx8AN7E/6PJmwH0EYBNS2T17bD4G42cWlwBuMvyodJuPLGzyYMG4imAMMC2DZEeAxI3uR7DBUiOZd5 dpBg+v0WHs83hDIH88M8zFkgkZVfThZNMaoZdOsDcvk3Icm9p3V8Yb+E1WhS2s6aQCfVSi9DMksWKFSN IZF2sOQG6L4wFhJk7q+KgamaBHX2ylQoEwTm6naJQVFtKHEbNT/Asdj1kODybZemvSfsSyAdTjByIpVN m9YEjKgmfU3U6t9xRB0ICXIPK1jxd6h3CVTinsjsqCSIqA6lJFBTNkrlKrrOGCHBxMxXWI4vBsSBkTgH ONSSR3OhNQefMEUalocxaxFXbk0e/BOZkQUs+79JdR9AIF4LB/tgzXDwad3HqdP64XswOVdFX24OboPu AqmomiP65slrvrdc3UCMrA8XZlvfxomXFZzvn4Lx5CPmF1ewRtOu1QPRM7fdRcr6v8B/P5Shwlv0XHyE 4/EbOHryGmJnR5AZet7+MbV9bS0O/AGd2vKsTr+IQwAAAABJRU5ErkJggg== Hjælp iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC 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 Støt fremtidig udvikling af QuickRoute iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 206, 22 &Ny... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= 206, 22 &Åbn... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 206, 22 &Gem 206, 22 Gem &som... 175, 22 &Billede... 175, 22 175, 22 175, 22 &Rute data... 206, 22 &Eksporter 206, 22 &Importer ruter... 203, 6 203, 6 206, 22 &Afslut 31, 20 &Fil iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAexJREFUOE9j+P//PwMlGK/myVu+xUze/HXHvN1fHy0/+PXIyoNfp6w69FUK2UKcBvRt +LoDiP90r/v6vHHFl8f1S77cmbvz62OgAZ+QDYEb0L3q1f9lJ74agEwHalrWv/Hb79RJ7964FJz4bZ26 /Y95wpbv7hV3P87c/vUN0ICbMFeADQAKcDYuefl/3oGvV+tXfG2YsOnbn7ie5/9cC47/t8vY/cs0ds1x l/ytDy3jl/8J63j3c+mBr/dRDABximc+/5816/P/wjlf/kf2fHxhlbzlr0Xihh+msSvzQfIBtdtVDCMW v3Atv/2+YemXPRgGJPU9++/d9OZ/dO/n/2Vz3vzX8J602iRmhSNMoYJDHbNd1qHfrmV3Xjes/HIIw4Cg 5qf/zYrv//dsegV2SWLPo/91i99aIhnAapd56K9X3bNvzSu/bMEwwKni8X+Homv/rTKP/zeJ3/bfMGrt fw2fqUB1kHRiFrdeyTbz4L+Altd/C6Y/LsUwAD0xgQIWWUzda5K7a9ntP2mT3//r3fCVjaAB6AZapOy7 GNLx4V9Y3flcohISTFFc33slh/wLMf4tH/75VV75phUwm5EkAzyqHzv7t3z65VFy8adx1CovdJcRzEhR vZ8jnUuuNZrGrBPFlukIGkAop1JsAABuDMymYL0yPwAAAABJRU5ErkJggg== 160, 22 F&ortryd iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAd1JREFUOE9j+P//PwMlGK551aGvUisPfp2y/ODXI/N2f33Us/5LSuXCL5yEDAcbANIM xJ/m7vz6uH7JlzuNK748bl315U7Foi+fKxd9ScVnCMyAmzO3f33jXvngvXnClu9WKdv+OOQe/5oy+fOL wjlfXhTO/RIGMmTZia8GDkXXgEyEt8EGLD3w9X5Yx7ufZtHzf7vkrb9pGrvmGBB/MYvf/Dt58ue/6TM/ P8ue+yVy3oGvV60zj/8HuhbuNbABDUu/7HEtv/Ne3avnVkDtdhWQmGnsynzj6OVfdQJm/wrt/Pgc6JL/ WbM+/zeJ34rpgoaVXw65lt97pebZd1jBoY4Z5kSTmBWOGt6TVpfNefM/uvfzf++mN//1QhdjGtC88ssW 7/oXXzW8J98EGsAKM2DK1q+6QAy22bPp1X+z4vv/NXymYhpQMP1xaWDrm79GkWt+AQ3ghhkACjAroJ9N 4rf91wtZAtas6taFaUDvhq9saZPf/3Mtu/1H3WuSO3IoIwcYtuiEJ6SwuvO5IR0f/lmk7LtIKPFgRCNI QCtgNqN/9bWX/i0f/jrkX4iJ63uvRIxBKPkAaAifT+XNUwGtn796VD92JtkAmAbvhlehUb2fI8k2gBiN MDUUZWWQIQCu1sRwfRrh4gAAAABJRU5ErkJggg== 160, 22 &Gentag 157, 6 160, 22 Ændre &start tid... 59, 20 R&ediger iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAi9JREFUOE+lk0tPU1EUhfunHJQJTtSoAwaOZCgJJhiC0ibURMGgkSYSwKgBhYKIUEQB EfGRACIttDwDRKqmFkuhLZWHLVWa2p77eXdN6nVoGNzJTda31t5rHxNgOsx3KLEYmxKJhKlnZI7ul7M8 Hp6h64WXR0MeOp9P0THgpr3fhePZe1r7JnjwZJz7vWO0OEcRXQ4gYg2F0hQZpUhnFamM4mdakUwp4gca ez80tvc1tuIake8aG7saR06W6HodIM4irutYxHbHS0W9h/JbXkpveimunqaoys2JSy4KL7gwn3dzzDpP cNsAkNjibG30sPgVvH6Y8MHrZY2BWUW3S9E6luX2qwx1g784atskEDMAZGaJXdkwzcwX9JgQ3oPgDv+I 7bq4si1OgXUDf9QAkIXJzAKY/AhvdOfBOUWPW9EmziMZbjxNUfVwn7K7O5gtG3yK8HcHsm1ZmADermis 686BGHyOwuomLK/DfODPaOfqwzmAT/+fX6JUJdsWwNC8wjmlcIxnaRxOc73vAFtnkoqWXUobIhTXrmGu DPEhZABIz1KVAHp1sTiLg9F5chVGl+DMZV8OsKKnyieQI5GerU0e2t9lsfcnqXEmsTjilN3bycUWZxGf vrhAgSXEUtAAkAuTI7naPEeNw8+1rm9UOWKUN29R0hTlrD1CUW2Y41c2KdQrPFUdztWdTyDnabwwORLp WaqSbcs4MrPEFmcRL6wZAHLTQvvfL/8WDvOURfsblYYTxd5DjEEAAAAASUVORK5CYII= 225, 22 Fuld sk&ærm iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 225, 22 Vis &højre panel iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 225, 22 Vis b&und panel 34, 20 &Vis iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAA2ZJREFUOE9tk21Mk1cYhp8YozIgi6sgbrjwsWkmgsoSVBTULUvRKRjoNrSCICnifpg4 LTo/IRqgaBlgCxQVtQgoko1RRAsGKEhr0b3vaFdaLKUVBSJ1qKDgZ+69g/iDyJNcOSdPzrny5OQ+RFPU BtHlgNTselFGkUaSxbFPok7hJ5UHTXV2Ui84pixAKL7+e3pB+0ulqgt1LT1o0NrRqLOhtqnztTi7QfV1 zIWlU4p8vz2zPjJRNpQuvYxT8iqUVLahlX0MDePE1Zu9aNA9wIOHgyi+cmc4OEYZPUnCW6EIEiTljPT0 WPHq5QuMjT6HxWLB+Yp6nP/ThnM1vUhTmHBF7cDw8DMUlreP+X13dvm4hLdSPs1vddatG00stB1D6B14 gfc19K8T0oIqpOYyOKKwIiWThVrbj6dPhpDwax0zc0n+dPpoaV5YqKAISScMiE9jsec3M8rV/Xgy/Gbc M/r8GST5lUg8qsXOLAsS0hgYrU40tpnhsVrBJ/I9mR0sbETU3rvYnv4PkjPNEGVYcLjIDsYyMi5592YU OQVXEbn7JjYfMCHuKIO8MgPcgnPlRN5Slf8mNaLEfyP2sBnbj1shyrQhKWOCSzecGHv1v+YtzimrsSa+ EqHJDHwi1SD/k/Wc4HQ9La7G8h1/4YdDXdh6rBtx6d2cyDbOj4es+CXfAb1p4m30t9uwMVEO+koG8pE2 E30qLyFfFaav0iEozoCN+7rw05FuCDnRtjQObhUcvIeo1HsQy+6jiRmB3e5A7ukSzFwkqSCaJ4sjl3y4 LcvBjJA/wOPfReA2MzemGWt/5tjF7UWdCBQaMIffDpfwFgTEahG7vwW0QJ5C5Cn92HtF3qNWjQZnlDWI 3lUKn4hqeEXo8PlmI/wEJvhGG+G9iYUHX49ZYdzFwFrQ/JKnxDvlMRGoL0tFqsZu9PUPwjnYD6OhA4UX G5BwQIXweBUWR1+Dz/paeK2rgj+/FAs3KEGeij2T0ugaJMtrvu2AwdKHsmt2sJ2PMDAwgPsOGxi2A00a HWrqtCiu0MMrRFr84X/grf1s2tydnVvEraAvmuEafgtLhHpE7Ga5jBiwJoWF5zfXQbNEvTR7VciHgrmR bvRJGJ/cw46Ra3I1uUiM5F74kKOPXLJMXE9F7uEZNDtUQJ7fz3sv+A+84CDTIQAbtgAAAABJRU5ErkJg gg== 368, 22 Åbn i Google &Earth... 368, 22 Åbn flere QuickRoute filer i &Google Earth... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAptJREFUOE910+tPknEUB3Be9g/0uq0sW7et0uUktWleAyRAMVRy6kzHMgXvTm0GS0my pibl8pJWcxqXhqCAosDAB3i4CYiZpWvaWuuF8w/4Rm213HpenBe/s53Pztk5PxoA2p8o75zKy+CKa/hl Te08YbM8k9s6ksO/r2IJpFamQBYqre4fLxENP/235m/xr2RCheV7fPYw4lMkuMKQQSGbxsCgEZ3PXHg9 aUCIWECrdHSPEkisMH+Oz3mOuJQGJDO74VTNwOsMQUsewG7fQMi9gnrpSJASuFBs2PgN0MWgs6XwEyvY 9geh9x3AFfiKHdKF+q6JVUqAKVmOnmeO4mRshPSCh4haDfDMWeB0bcJLhBB2kWjumjBTAqO6pbD40STy hH3glClgV2lBaNX4ZI/ArjFj+b0DNXcHVJTA7o990mDzg13xBPnCfkQDJD46wlh/q0dUQ8JqIyGs7Juk BDa2v/kCkS8oFg2CXS6Hxa3HB6sfOyE1tggCq85FFAllQ5QAo94crWyfQzK7G9c5D2AwaUBMO2GaiMDv 3AMR8KFaouylXmO5yXcs40VsjRKkcnth9NjgcOqwtuBAhAxBrfPhTpOymRK4KJwnzzDGcIIuQbZAjojP A8KthttrjI2ziVezftxrU1ZRA6X6GDCOU2mNYJUqEHL5Qa4vxDoxwR80451mBbUtQ0WUwCWhnjzLHEfc 1QZc4/XAvOLBlseCQHgJWpsRHXLlvqhBlkgJXBbOec8xx2KXKEGmoCd2vouYeTMLccfjXSa3SsZgFR6v bWw79H8OPegVuuDp3JexDiRIym0F/3bLWlp2SV16Vv5RNodH4/KKaLWN7dTALfFUagJToUvKrZvPYIkK s3I5R1hsDu1GfgHtJo//X+An6VOqVy8U1mMAAAAASUVORK5CYII= 368, 22 Offen&tliggør kort... 368, 22 Tilføj mellemtider fra en ekstern &datakilde... 70, 20 Værkt&øjer 114, 22 &Sprog... 81, 20 &Indstillinger iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 115, 22 &Hjælp... 112, 6 115, 22 &Om... 51, 20 &Hjælp AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIABKjOQBZCx0Aa35v8HtOb/B7Hm/wiu 5v8Iq+b/Cajm/wmk5v8Koeb/Cp7m/wua5v8LmOb/DJTm/wyQ5v8Njeb/DYrm/w6G5v8Og+b/Dn/m/w58 5v8PeOb/D3Hf+AYuXKAAAACAAAAAgAAAAFsAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAABjAAAAgAEYG4gEj6bIBcTm/wXB 5v8Fvub/Brvm/wa45v8Hteb/B7Lm/wiv5v8Ipt/4CJHG4AZumcAGbJnAB2qZwAdnmcAIdbHQCovX8AyR 5v8Mjub/DYrm/w2H5v8OhOb/DoDm/w585v8Oeeb/DWXG4AMaM5AAAACAAAAAcwAAABYAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAFC SZgEwdfwBMzm/wXJ5v8Fxub/BcTm/wXB5v8Fvub/Brzm/wa55v8GlLzYARUbiAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAIjM5ALmeb/C5bm/wyS5v8Mj+b/DYvm/w2I5v8Oheb/DoHm/w595v8Odt/4BzhtqAAA AIAAAAB7AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABYAAAB7AAAAgAF2fbADz9/4A9Tm/wPR5v8Ez+b/BM3m/wXE3/gDhZnAAl1tqAXC5v8Fv+b/A2d9sAAA AIAAAABhAAAAQgAAAEEAAABBAAAAgAAAAIAIjMbgCqHm/wqd5v8Lmeb/C5fm/wyT5v8Mi9/4DYzm/w2I 5v8Oheb/DoLm/w5+5v8IQ32wAAAAgAAAAHsAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAA8AAABrAAAAgAF5fbAC3Ob/Atrm/wLY5v8D1+b/A9Tm/wKrvNgAGBuIAAAAgAJR XKAFyOb/Bcbm/wJOXKAAAACAAAAAIQAAAAAAAAAPAAAAYwAAAIAFaoy4CKrm/wmo5v8JpOb/CqHm/wqe 5v8HXoy4AzBJmAuFz+gMkOb/DY3m/w2J5v8Ohub/DoPm/whFfbAAAACAAAAAYwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAAgABbXKAB4eb/AeDm/wHe5v8C3eb/Atrm/wKm sdAAAACAAAAAgAAAAIACU1ygBM7m/wTL5v8Deoy4AAAAgAAAAFoAAABKAAAAcwAAAIACOkmYB6/f+Aey 5v8Ir+b/CKvm/wmp5v8IlM/oAAAAgAAAAIABEhuIConP6AuV5v8Mkeb/DI7m/w2K5v8Ng9/4BCpJmAAA AIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAAzM5AA39/4AOTm/wHj 5v8B4eb/AeHm/wG2vNgAAACAAAAAgAAAADoAAAB5AAAAgAPM3/gE0Ob/BMHX8AAYG4gAAACAAAAAgAAA AIACXG2oBbjf+Aa85v8Gueb/B7Xm/wez5v8Iqt/4AzdJmAAAAIAAAABTAAAAgAIkM5AKl9/4C5jm/wuW 5v8Mkub/DI/m/wx9z+gAAACAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAA AIAAxsHgAObj/wDm5f8A5ub/AOXm/wDU1/AAGxuIAAAAgAAAADoAAAAAAAAAWgAAAIABkJnAA9bm/wPU 5v8Dyt/4A5+x0AOUpsgEtc/oBcfm/wXF5v8Fwub/Bb/m/wa95v8Gs9/4AjpJmAAAAIAAAABjAAAAAAAA AFsAAACABVl9sAqh5v8Kneb/C5nm/wuX5v8Mk+b/CF+ZwAAAAIAAAABaAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAAfXewAObd/wDm3/8A5uH/AObi/wDm5P8AfX2wAAAAgAAAAFMAAAAAAAAAAAAA ACIAAACAAAAAgAKosdAC2Ob/A9bm/wPU5v8D0ub/BM/m/wTN5v8Ey+b/Bcjm/wXG5v8Er8/oAj1JmAAA AIAAAABjAAAADwAAAAAAAAASAAAAewAAAIAIndfwCaTm/wqh5v8Knub/C5rm/wuS3/gBERuIAAAAgAAA ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHsAAACAANfI8ADm2P8A5tr/AObc/wDm3/8A19LwAAAAgAAA AHsAAAASAAAAAAAAAAAAAAAAAAAAMgAAAIAAAACAAZOZwALT3/gC2Ob/A9fm/wPV5v8D0ub/BNDm/wTA 1/ADh5nAAAAAgAAAAIAAAABjAAAADwAAAAAAAAAAAAAAAAAAAFIAAACABF99sAir5v8Jqeb/CaXm/wqh 5v8Kn+b/B2eZwAAAAIAAAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAACAAH1wsADm0P8A5tP/AObV/wDm 2P8A5tr/AIyGuAAAAIAAAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAgAAAAIAAGhuIAVhcoAGS mcABkZnAAXZ9sAFESZgAAACAAAAAgAAAAIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAA AIAHrd/4CK/m/wis5v8Iqub/Cabm/wmd3/gAAACAAAAAewAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAgADX uvAA5sr/AObN/wDmz/8A5tL/AObV/wAzMJAAAACAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACIAAABaAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAcQAAAFIAAAAiAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAFoAAACABY6x0Ae25v8Hs+b/B7Dm/wit5v8Iqub/BVt9sAAAAIAAAAA6AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAqAAAAgABJPJgA5sH/AObE/wDmxv8A5sn/AObM/wDPuugAAACAAAAAaQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAiAAAAQQAAAEEAAAAwAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAgAJbbagGveb/Brrm/wa35v8Hs+b/B7Hm/weO vNgAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAIAApoPIAOa6/wDmvf8A5sD/AObD/wDmxv8AppHIAAAAgAAA AEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIABFxuIBcPm/wXA 5v8Fveb/Brvm/wa45v8HtOb/AAAAgAAAAIAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACAAM+d6ADms/8A5rX/AOa5/wDm vf8A5r//AIx2uAAAAIAAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB5AAAAgAXD3/gFxub/BcTm/wXB5v8Fvub/Brzm/wJKXKAAAACAAAAAIgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAACAABsTiADm qP8A5qr/AOau/wDmsv8A5rX/AOa4/wBcS6AAAACAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAIADssbgBMzm/wXK5v8Fx+b/BcXm/wXC5v8Df5nAAAAAgAAA AEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAhAAAAgABcPqAA5qD/AOaj/wDmp/8A5qr/AOat/wDmsf8AMyiQAAAAgAAAABEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAACAA7bG4APR5v8Ez+b/BM3m/wTK 5v8Fx+b/BJix0AAAAIAAAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAIAAilq4AOSY/wDlm/8A5p//AOai/wDmpv8A5qr/AAAAgAAA AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAGQ mcAD1+b/A9Tm/wPS5v8Ez+b/BM7m/wOuxuAAAACAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAJZdwADij/8A45P/AOSX/wDl mv8A5Z7/AOah/wAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQQAAAIABk5nAAtvm/wLZ5v8D1+b/A9Xm/wPT5v8Ds8bgAAAAgAAAAGEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACV V8AA4Ib/AOGK/wDhjv8A4pL/AOOW/wDkmf8AAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAZaZwAHf5v8C3eb/Atvm/wLZ5v8C2Ob/A8jX8AAA AIAAAABxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQQAAAIAAk1HAAN1+/wDfgv8A4IX/AOGJ/wDhjv8A4pH/AAAAgAAAAIAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACXmcAB4ub/AeHm/wHg 5v8B3ub/Atzm/wLT3/gAAACAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAJFMwADbdf8A3Hn/AN19/wDegf8A34X/AOGI/wAA AIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAA AIAApqbIAOXm/wDk5v8B4ub/AeHm/wHg5v8Bv8bgAAAAgAAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACPRsAA2G3/ANlx/wDa dP8A3Hj/AN18/wDegP8AAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAGEAAACAAMbC4ADm5P8A5uX/AOXm/wDk5v8B4+b/AcHG4AAAAIAAAABhAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAA AIAAjUHAANZk/wDXaf8A2Gz/ANlw/wDac/8A23f/AAAAgAAAAIAAAAACAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAgADGv+AA5uD/AObh/wDm4/8A5uX/AObm/wC6 vNgAAACAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACIAAACAAFQjoADTXP8A1GD/ANVj/wDXZ/8A2Gv/ANhv/wBXLqAAAACAAAAAIQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAA5tn/AObb/wDm 3f8A5uD/AObh/wDm4/8AmZjAAAAAgAAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAgAAYCYgA0FT/ANFX/wDSW/8A1F//ANVi/wDW Z/8AZjKoAAAAgAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAA AIAAMy+QAObU/wDm1v8A5tj/AOba/wDm3f8A5t//AG1rqAAAAIAAAAApAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACAALlE6ADP T/8Az1P/ANFX/wDSWv8A017/AJpGyAAAAIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAADIAAACAAH1vsADmzv8A5tD/AObT/wDm1v8A5tj/AOba/wAbGogAAACAAAAACgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABKAAAAgAB7KbgAzEf/AM1L/wDPTv8Az1L/ANBW/wC9UOgAAACAAAAAaQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAAgACxl9AA5sf/AObL/wDmzv8A5tD/AObS/wDP v+gAAACAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAIAALQ2QAMk//wDKQ/8AzEb/AM1K/wDOTv8Az1H/AC4TkAAA AIAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAA37j4AObB/wDm xP8A5sf/AObK/wDmzf8AjH64AAAAgAAAAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAgACiLdgAxzv/AMk+/wDK Qv8Ay0X/AM1J/wCVOMgAAACAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgAA AIAAfWKwAOa3/wDmuv8A5r3/AObA/wDmxP8A38D4ABsYiAAAAIAAAAAaAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAA AIAAXReoAMYz/wDGNv8Axzr/AMg9/wDKQf8AxUP4ABgIiAAAAIAAAAAiAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAACgAAAHMAAACAAMaU4ADmsP8A5rP/AOa2/wDmuv8A5r3/ALGT0AAAAIAAAABaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAoAAABzAAAAgAC2KfAAxC//AMUz/wDGNf8Axzn/AMg8/wCGK8AAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAAACAAG1MqADmpP8A5qj/AOar/wDmr/8A5rL/AN+v+AAb FogAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAIAAWxKoAMEo/wDDK/8AxC7/AMUy/wDG Nf8Axzj/AEATmAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAACAABsSiADVjvAA5Zz/AOag/wDm o/8A5qf/AOaq/wCZdMAAAACAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABzAAAAgACc G9gAwCT/AMEn/wDCKv8Awy3/AMUx/wCyL+gAFwaIAAAAgAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAACAAAAAgACt bNAA4pD/AOOU/wDkmP8A5Zv/AOaf/wDPkegAAACAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAOgAAAIAAFgOIAbgd+AC/IP8AwCP/AMEn/wDCKf8Awy3/AKAn2AAAAIAAAACAAAAASgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADIAAAB7AAAAgACHTrgA34X/AOCI/wDhjP8A4o//AOOT/wDdkvgAMyKQAAAAgAAAAEoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAAgAA8B5gBtxn4Ab0d/wC+IP8AvyP/AMEm/wDC Kf8AliLQAAAAgAAAAIAAAABaAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAgAAAEoAAACAAAAAgAB3P7AA23j/AN18/wDef/8A34T/AOCH/wDhi/8AWjmgAAAAgAAA AFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAGMAAACAADsGmAG2 FvgBvRn/Ab0c/wC+IP8AvyL/AMAl/wCtJOgAFwWIAAAAgAAAAHsAAABSAAAAGgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAQgAAAGsAAACAAAAAgAClUNAA2Gv/ANlv/wDac/8A23f/ANx7/wDe fv8AekewAAAAgAAAAGsAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAPAAAAYwAAAIAAOwWYAbUT+AG8F/8BvRn/Ab0c/wC+H/8AvyH/ALoj+ABpFrAAAACAAAAAgAAA AIAAAABxAAAAYQAAAEIAAABBAAAAQQAAAFkAAABpAAAAgAAAAIAAAACAAFQjoAC9UugA1GD/ANVj/wDX Z/8A2Gr/ANhv/wDac/8Ad0CwAAAAgAAAAHsAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAApA5ABoA7gAbsT/wG8Fv8BvRj/Ab0b/wG+ Hv8AvyD/ALMh8AB1GLgAKwmQAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAYCIgAcCewALFB4ADP T/8A0FP/ANFX/wDSWv8A1F//ANVi/wDPY/gAViqgAAAAgAAAAHsAAAAWAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 quickroute-linux-upstream-2.5/QuickRoute.UI/Main.de.resx000066400000000000000000003112541446222606700233520ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Zwischenzeiten iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4 /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9 cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC Balkendiagramm exportieren Balkenbreite 132, 28 Strecke farbcodieren nach... Startwert des Farbbereichs Farbcodierung der Streckenlinie Endwert des Farbbereichs iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAK5JREFUOE+lUdsNgzAMpIvQIbJD+YGRqNyVqjIP0EEI5yiOQkQeEKRTgmKffXcPrXVT 9TEBg4j0FUifaRaCFtceIGACVn7agAX4Am+gwzuGnRI80TAEBNsVAt7AJ/jj/0AwZjYQgg8af76E2Upg gldCwm0TEaMCOE8l5sTOsNYkYJv54txNEJg6qXUx5iZHCV2eBdPPauslWD3knxn9h1rnQYmBUQmSRKmR /rDqDXaG92MkHWJbbAAAAABJRU5ErkJggg== Farbbereichintervall setzen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAALVJREFUOE+tk1EO wUAQQOck3EHvwCFIOAl7AS7BAZyDL07BH98k682my1QlXcYmL520M29ntq3Ia0UTd4WtXL0RuqrMc819 SjTwkLyuDnJnrjP4Yvx/p4YQogfR4l6UOIAxzGEDOzjBHeIVjrCFFcxgJGnjJOiTVMHECPa14FYiyB1k wZoiFZyhJViy+/StAytYUKSCxggXCg5mBBUMzQiuQ+StVvWXqNfS1aix/0Gp4Jeaz+4HCfcWr/594rkA AAAASUVORK5CYII= Farbbereichintervall automatisch anpassen Transparenz der Streckenlinie Breite der Streckenlinie iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUtJREFUOE9jZiAM mIBKVgDxLyC+SVg5qgpuIHcjEP/n4mL4nLCEQZcUAwSBireANPNJMPwv2snwv+Muw5OqYwzSxBgiDlS0 F6RZQIrhf9lBoOZ7ENx2j+Fk4TEGTnyGSAElj4E0iyox/AfaCNcMMyR1KcM6XAYoACXOgzRLaTH8rz2D qTluFsN/Vg6G/0A17eiGKAMFroI0yxkx/K87h6k5ahLDf2ZWsGYQno9sgBqQcw8koWTO8L/pCqbm0C6G /0zMcM1zkDVrAjmvQJrV7Bn+N1/D1OzXANcIsnkmutNngTTrejL8b72JqdmjDEVzMrbAYzMMZDjZdhtT s1M2iuZwnFHXcpNBGpRIYNEEoq3iUDR7E0w8QAPM6q8wfAO5xDQMRbM9Qc0wBa23GKIM/OCafwLFDYjW jKSwC8j+AMSg2CELgLIvURkGZDoAQru/Y4pi8sgAAAAASUVORK5CYII= Ränder der Streckenlinie zeigen Randbreite der Streckenlinie iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4 /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9 cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC Randfarbe der Streckenlinie 734, 28 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= Neu (Strg+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0 BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5 F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp 59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W AAAAAElFTkSuQmCC Öffnen (Strg+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= Speichern (Strg+S) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAddJREFUOE9jYKAl mLTlW8zEjV93zNz98dGyA1+OrNj/ZcqyI1+liLKzd8PXHfUbrvzpXvf1eeOKj4/rF3+5M3fnx8fLdn39 hNWQ7lWv/i85+cUAZHrX2i/L+uff/53S8+qNS/yJ31qp2//oJ6z/bl929+PMrV/frNr/5SaKK1Ye+8fZ uOTl/3n7v16tX/61oX7TlT9x9fX/XAuO/7fL2PTLJHbVcfv8rQ+14uv/hHW8/Ln4wOf7GN4onvn8f9as z/8L53z5H9n17oWV/Za/ZtGLf5hEr8wHKfat36FiGLzghWv59ff1S7/swTAgqe/Zf++mN/+jez//L5vz 5r+G16TVRlErHOEKQ0OZ5eMP/XYtu/O6fuWXQxgGBDU//W9WfP+/Z9MrsEsSex79r1341hKm0Ng4jdXO fv9ft7pn35pWfN6CYYBTxeP/DkXX/ltlHv9vEr/tv2HU2v8aPlP/wxSaJK5Rss2s/2ffsv9v/rRHpQSj EhSwyIrUvSe7a5Vd+ZMGDNz6Vf/ZCBqArsAiZd/FEKDmsLqzuSRpTuz7oGSfdz7GH6jZrfLKNwaG/4wk GeBR+cTZp/7pL/us/T+NI1d4kaQZpDii53Okc8nVRoPElaIka6aLBgBeqPIjNLWeAwAAAABJRU5ErkJg gg== Rückgängig (Strg+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAclJREFUOE9jYKAW WHbkq9SK/V+mLDvw5cjM3R8f9az/klK48h8nUeaDNC/b9fXT3J0fH9cv/nKnccXHx62rvtwpmf/lc+XC L6kEDVm1/8vNmVu/vnEvf/BeP2H9d62UbX/sc/d/TZn87kXhnC8vCuZ+DgMZsuTkFwOHomv/MQxcfODz /bCOlz/lo+f/dslbf9M4es0x09g1X+Tj5/+2n7z/b/rk98+y5n6OnLf/61XrzOP/Vx5D81r90i97XMuv v1f16LnlW79DBWSDSfTKfLXIpV8lfWb/8m95/xzokv9Zsz7/N4nfiumC+pVfDjkV33ul4tl3mCE0lBnm RKOoFY4aXpNWl8158z+69/N/76Y3//VCF2Ma0LTi8xb7ohdfVbwn3DQ2TmOFGTB562fdKVu/gm32bHr1 36z4/n8Nn6mYBuRPe1Rq37r/r6TPml/irsXcMANAAWYF9LNJ/Lb/eiFLwJpV3bqweGHVf7a0+vp/WmVX /qh7T3ZHDmWMAMMVp2F1Z3NDgIZYpOy7SDDesSv4z+hdee2lfcv+v/Z552MS+z4okWyQisdiPq/Km6cC Wj999ah84kyyATAN3o2vQiN6PkeSbQBdNQIAlV/obSdKz9wAAAAASUVORK5CYII= Wiederholen (Strg+Y) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFZJREFUOE+t08EK ACAIA1D//6cNgwItpc28eXkgmyJ+NOzwakALUZsOMoEOsgEWcQCDHACKXAEESYFXpDphxVv2xMXIRBo7 APcitpAC4gPByHfAwPTBBlc83yF9awZeAAAAAElFTkSuQmCC Mauszeiger iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+lk1EO gDAIQ7n/pacjYkZXKiqJP7I8utKZmY3z+1UTUEGiJ4eMWQTi/6OUUnZohTq8GOJXryah7BKSAGJSH6A8 YV5sCoRx6M3uAdLUdqJHFVzNKgdp7WmNnb1jbNHdVnhWCKbwE4CqUul7en2vVTCgeqX3+QPJfiLsN/lb UAAAAABJRU5ErkJggg== Strecke anpassen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHRJREFUOE+tktEO QBEMQ/f/P+3eScjaTIeQeECdTdXMrP1zZ7huTNCnm0RscXDRfiY6ieddx/oJTyArOOyr9s4B1N4dQEC0 B/AWNLb+Bb481sHYdQ6yyyE0ZU7gG5PKZUrZaZWLFMYtXgGYfAx5DnBg6b6LPqqAPtCiiFafAAAAAElF TkSuQmCC Zwischenzeit hinzufügen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+VUwkO wCAIw/8/2ikbBDlGNSFGbSsUHUQ0V+wxvhmdhEdzDyOECBwcXlyIpHhU5BfXiXTnXHoFgshingdfkYOI MVfbhrSJy3GB8l4vEj/gDPzNcCYZUT3pSvJPOUvX7oWn7wmdgPikxlrF6mO1GOtB1bKAeQAs87pIvaRg qAAAAABJRU5ErkJggg== Strecke abschneiden iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGhJREFUOE/dUssO ABAM4/8/mkxM9jbhZIlLTXVda9HVBFSNHhOCh00WYPOEPOqhQ+SSsH78lYKRCld2VsXqI/Pi3MwXT8U7 AmSyPIC7tA+nJsJqrtc4SDZBSgVqERkJpJvJplv1fUhSOn+NLuJnPPHjAAAAAElFTkSuQmCC Vergrößern iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGFJREFUOE9jZMAE /9GEGLGowSoE0vgfHYDEoBivORgacRiE0xCKDCCoGaYAl1fgBiD5F+ZvlHChvQGE/IIvNgjpJRiVFBsA il9CCYmgK2CJBCUGkFIOsjixqRtD3TA0hAEAAXNGypSlAlQAAAAASUVORK5CYII= Verkleinern iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA29JREFUOE9tk3tM 01cUx4+GTBDYlFHFSFwZumViZZgNNjZgI1mKRsEgbCjymivi/jBxDufmo5AtUDt5lYeCASJqUSQb9ueD guEpLXX6+0lraaGUVhSI1IGAgs4t3/2EucTISb45N/ec+8m9N98zj+YI8TdKP/93PIMXvb5g5Ty+/mB8 ymbsHdPUl2/Tz9X//57/FqXf1vQrv0lLOp9UMT243NaPRo0NTVorVKruv/bKG5gPYyvfnxPyVnjp+siU 3NHMnLM4WlyLipoOtHMP0Mo6cP7qABq1d3H33ggKlX9MBGw5Gf0SZFHQibUbkuST/f0WPH3yGNNTj2A2 m1FZ3YDKC1aUqwaQUWrEObUdExPjyFNenxZ+UR70H0Q6Xxgsu1bfzEHTNYqB4cd4EaN/OpBTUot9+SwO lVqQls1BrRnCw7FRJP/IsBQmdSJnkSIkOOY4dvyiR2IGhz15JijVQxibeDbDmXo0jiOKGqQc1mCnzIzk DBYGiwNNHSYIQsrERD5y+br4JkTtvYGkzNtIzTZBkmXGweM2sObJGcg/z6aQW3IekbuvYvN+IxIOsyg4 o8fCgLxiIu8cxneTGlHptxB30ISkny2QZFuxI2tWp+sdmH76HPM3yqvqEJZYg+BUFsJINchX3kC0vKCB 1tQh6OubiD3Qg23SPiRk9vEg64y+PGDBdwo7dMbZv9F1dmBjSjHovSLQil9biLyKKsiHgdMnWqxN0GPj 9z346lAf4nnQ9gxefI75qRdR+3qRXnQHzewkbDY78gsrsGD1kerngARyUcAtIBevBf6ON8U3INpu4q9p wmff8trFryXdEMXr4Sm+DpfQNvjFaRD3QxtoZXEa0WLZG94f5N9vb23FiSoVonedgjCiDl4RWqzYbMDb MUb4RBvgvYmDQKyDcwh/UHQRtKziIXkVCGa9sOq0hGnqw+DQCBwjQzDou3DsZCOS9zMITWSwJvoShOsv wuvzWviKT+HdDVWgJaV7XnLjQlFhQUunHXrzIM5csoHrvo/h4WHcsVvBcl1obtVCdVmDsmodlgYeLXt1 HjzCl88XpHZvTW/n39YC19Br8I/XIWI3x3tEj7A0DkvCr4CcJAPk8VHgqwBBrBstDhGT26dScpXUkbPM QO6Ke+R+bJBcZEZyTWXIPTSLPD6OIU/xsheAfwGlxB/RJA0wNgAAAABJRU5ErkJggg== In Google Earth öffnen (Strg+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApBJREFUOE+FkltI k3EYxjVHSSCR2bVQlpEFHQzDqYuyPG01lmXMnKImWWHq54EMGpgrD60itVaRh8xCNLepc7rN48bmt+3b yW3OzNIkvYguzC6Lp8+g8KLP/lcv/5fnx/O+7+Pvt+ZliduTFyap0JAgVvAP+G359j1gqz9r47ZNAayQ n/4bgoODNlvBClxub8y/vlb3t47MHPgSnvAE4bEEorgSSCUdqG/Q4NZjM9rb1HCTgygVNy3+U7z6eThH +zE88SnCYksQzauEqbsTNpMbSmoFBsM03JYxFFQ9dzECIoTq6d8AdjHY/Co4yDHMOVzot6/A7FzCPGVG kbh5ghGQUjzq289rwi56hOPn7sI3roZVNQKTeQY20g2PmUK5uFXHCGjqHfYU17UhWXQPgiwpDN1KkEo5 Phi8MCh0GO0xIv/ao25GwKevy5Ra7wA/5yHOiB7A56Tw3ujB1Jt++BQUxvUULubWtTECpuaW7E7vAtKv NoCfXYsRSz/ejTsw75ZjliQxYRpCmkjSyLyDIo0v96YK0fxKxAtuQ61VgOwwQdvqhcO0CNJpx2VCVsMI OJSttYeeeEafkUDc2RporHoYTX2YHDTCS7kh77Mjr1RWzgg4IBqg9nKbsZNNIEFYC6/dCtIih8WmoceZ wcsuBwoqZHnMgAwVDWjBbk4pTmdI4TY7QE0N0k60cLh0eKugg1RWf2EdByoqgteCsJgSHEuthm7Milnr CJyeYSj1GpRVy5bziTtHGAEHRb22fbxmOokETgqr6fgOofN1Fwor7n/mCi5JUlIEOxjFqw12To9rT9IL 2gGBo0k3kJZZNsk5lV4Yk5i6fV3hn6aQeBUXyZX2RSUVDsTzrpzncDID/yf8BQsufjAW7nzIAAAAAElF TkSuQmCC Karte veröffentlichen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAh9JREFUOE/Nk91L U3Ecxv2nupg3dlNRXXjRVV4mGBhibYMtKA2LFBI1KrR0mprOLDUzewE1c9NNN0UlrVja3Jua04Yrx9p+ 59P5Tliny6CLDpybA8/L93meU1DwXzy9oz56XszxaGSW7udeuoY9dD6bpmPQTfuAC8fTd7T2T/Lg8QT3 +8ZpcY6RNy5gDYXSFBmlSGcVqYziR1qRTCkSBxp73zV29jW2EhqxbxrhXY0jJ0sPSURZwLUdC9jveKms 91Bxy0vZTS8lVTMU29ycuOSi6IIL03k3x6x+gjsGArEtytZGDwtfwBuAyVV4taQxOKfocSlax7Pcfpmh dugnR+0R1rYNBHKz2DY3zDD7Gd0mRPcgGOcPcJ0ONrclKLSGCWwaCCQwuVkIpj7Aa115yKfodSvaRHk0 w40nKWwP9ym/G8dkCfMxxu8MJG0JTAjeLGts6Mpr2/BpE1YisLQB/rXD087VR3MEq/r3fIhSlaQtBMN+ hXNa4ZjI0jiS5nr/AfbOJJUtu5Q1xCipWcdkDvE+ZCCQnqUqIejTwaIsCkblqRUYW4Qzl1dzBMu6q7wD GYn0bG3y0P42S91AkmpnEosjQfm9eM62KAv49MV5Ci0hFoMGAlmYjORqs49qR4Br3V+xObapaN6itGmT s3UximuiHL8SoUiv8FRVNFd33oHM07gwGYn0LFVJ2nKO3Cy2RVnA8+sGAlmjsP3t+89+4l/OwlIhw+BI bwAAAABJRU5ErkJggg== Vollbild (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAW9JREFUOE+lk01LAlEUhu3v9B8Cl9HCXxD9iRbVJqJFq6KwRZRQ0cciNDIIKqH8yCjT ESrNMtMcHUXHZhydcRzn401HCaTFFeaFc+Au3ue853LvmG1SgM2SegArZclspu82ipYR/hThSwq4TtTB 1FXwbUAzYMputyOTyfyr/vrdJiUvUW8biBXaoBgVoXTTBEqdPoEIqEbcqD4cg/bMo5WPoS4Dqj4YPwqg HNrDz6sPqe0ZvKxOQZe4fvaBiAmErwiY2x0UrtYhFhPQFenPzLd08gq6qoBL3oClzocmayILtqmRAfTF ypCxd1AlHtmTOdD+XTIg7ZwA+3jYhxgGpNI7lEYVpYALNcpLBjx7FsFFj9D4jsPQOogtjKPsd5kpehDi Ja7NTkPK3qPoc0IReTAfUQi1shlIrubIgNOtZaQ3HcifLSEXOECAASJ3QfBx72gPqRLeR0fkINfyYJ/c CPp9yDMVvG04wKX85ARWPtQv4a3juFJuVLsAAAAASUVORK5CYII= Rechten Bereich anzeigen (Strg+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAY9JREFUOE/Nk8lKw1AUhvXtXLpy46LVpeDCVxDFhQhFUQQF64DghIKiKBXnWWzs4ABJ bZq26RDUmra2JvqZttqoK7EbD/z3cM+95+P8F259XUOGupqiBKhFNTWXp7cW7XwBj7ubka4OPOOdhGbb uBtrInUyg/mcRZcF0ueLJI9n0H0raCEBX8KsTF5ajHzGamhF2x7iKbjK/cU8OeWSt1eT9MUKyno/8b0J EpsDpIJbSDocSVkbkL87Jb7WR2J3jHxS4jPezBeewl407zJ+VyPh0WYi/gN2FfBcPdoAYXOWs8A1qnaP uucmue/m1ShWQWYhh3Y6hy4eE3kw2A8VuIo924CAFGNHkJBjKvJyD9HV3grAsvAzxHSRQzFL1sAGSJPt pA6mMHKP5fv5iIC6NWx5HoRi5hujYDH1l0qp+oj+DTcR6RZZvCHgmca76EJY6udk3oXvJkRQVAjLCrFo lOiHVDVuAxzOFhwOR0VOpyVrX1JLq13/PP+SqxOIoshf9L8A5oeFUv6NyparFmr5UO/4ruHjx5E9cgAA AABJRU5ErkJggg== Unteren Bereich anzeigen (Strg+Shift+B) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC Hilfe 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 4/hxgw1+B66VXo7uyisJAAAAAElFTkSuQmCC Zukünftige Entwicklung von QuickRoute unterstützen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 241, 22 &Neu... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0 BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5 F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp 59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W AAAAAElFTkSuQmCC 241, 22 Ö&ffnen... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 241, 22 &Speichern 241, 22 Speichern &unter... 206, 22 Bi&ld... 206, 22 206, 22 206, 22 Strecken&daten... 241, 22 &Exportieren 241, 22 Strecken &importieren... 238, 6 238, 6 241, 22 &Beenden 44, 20 &Datei iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAfRJREFUOE9j/P//PwNFAGQALjx5y7eYyZu/7pi3++uj5Qe/Hll58OuUVYe+SiGrx6m5 b8PXHUD8p3vd1+eNK748rl/y5c7cnV8fAw34hGwI3IDuVa/+Lzvx1QBkOlDTsv6N336nTnr3xqXgxG/r 1O1/zBO2fHevuPtx5vavb4AG3IS5AmwAUICzccnL//MOfL1av+Jrw4RN3/7E9Tz/51pw/L9dxu5fprFr jrvkb31oGb/8T1jHu59LD3y9j2IAiFM88/n/rFmf/xfO+fI/sufjC6vkLX8tEjf8MI1dmQ+SD6jdrmIY sfiFa/nt9w1Lv+zBMCCp79l/76Y3/6N7P/8vm/Pmv4b3pNUmMSscYQoVHOqY7bIO/XYtu/O6YeWXQxgG BDU//W9WfP+/Z9MrsEsSex79r1v81hLJAFa7zEN/veqefWte+WULhgFOFY//OxRd+2+Vefy/Sfy2/4ZR a/9r+EwFqoNEs1nceiXbzIP/Alpe/y2Y/rgUwwD0tAAKWGQxda9J7q5lt/+kTX7/r3fDVzaCBqAbaJGy 72JIx4d/YXXnc4lKSDBFcX3vlRzyL8T4t3z451d55ZtWwGxGkgzwqH7s7N/y6ZdHycWfxlGrvNBdhjMp wxRG9X6OdC651mgas04UW54haAC+zAbOyYQUEJIHAEKin9SFT4mZAAAAAElFTkSuQmCC &Rückgängig iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAeBJREFUOE9j/P//PwNFAGQACK869FVq5cGvU5Yf/Hpk3u6vj3rWf0mpXPiFEyaPi4Zr Bhrwae7Or4/rl3y507jiy+PWVV/uVCz68rly0ZdUfIbADLg5c/vXN+6VD96bJ2z5bpWy7Y9D7vGvKZM/ vyic8+VF4dwvYSBDlp34auBQdA3IhLga7H0QsfTA1/thHe9+mkXP/+2St/6maeyaY0D8xSx+8+/kyZ// ps/8/Cx77pfIeQe+XrXOPP4f6Fq418AGNCz9sse1/M57da+eWwG121VAYqaxK/ONo5d/1QmY/Su08+Nz oEv+Z836/N8kfiumCxpWfjnkWn7vlZpn32EFhzpmmPNMYlY4anhPWl02583/6N7P/72b3vzXC12MaUDz yi9bvOtffNXwnnwTaAArzIApW7/qAjHYZs+mV//Niu//1/CZimlAwfTHpYGtb/4aRa75BTSAG2YAKMCs gH42id/2Xy9kCVizqlsXpgG9G76ypU1+/8+17PYfda9J7sihjBxg2KITHh1hdedzQzo+/LNI2XeRUOLB iEaQgFbAbEb/6msv/Vs+/HXIvxAT1/deiRiD4C6AGsLnU3nzVEDr568e1Y+dSTYApsG74VVoVO/nSLIN IEYjSlImRQO6WgCDbJeeDo3KmQAAAABJRU5ErkJggg== &Wiederholen &Startzeit ändern... 71, 20 &Bearbeiten iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAjBJREFUOE+lk8tPE3EUhesf5QI2uFGjLli4kqUkmGAIWppQEwWDRppIAKMGFAoC8hAF RMRHAoi00AKFAJGqwWIpfVB52FKlqe1vPufWpI5LwySzmeR859x77hwBTId6BHCY1xSPx009o/N0v5zj 8cgsXS/cdA676Hg+Tfugk7YBB/Zn72npn+Thkwke9I3T3DuG6LLpRayhUJoirRSpjCKZVvxMKRJJRexA Y++Hxva+xlZMI/xdY3NX4+ipYl2vA8RZxLXti1jvuimvc1F2203JLTdFVTMUVjo5edlBwUUHeRecHLd4 8G8bABJbnC0NLha/gnsNJr3welljcE7R7VC0jGe48ypN7dAvjlmD+KIGgMwssc31M8x+QY8JoT3w7/CP 2KaLza0x8i2brEUMAFmYzCyAqY/wRncemlf0OBWt4jya5ubTJJWP9im9t0NexSafwvzdgWxbFiaAtysa G7qzLwqfI7AahOUN8Pj+jHa+LpQFePXvuSVKVbJtAQx7FL3TCvtEhoaRFDf6D7B2JChv3qWkPkxRzTp5 5gAfAgaA9CxVCaBPF4uzOBidp1ZhbAnOXvFmASt6qlwCORLp2dLoou1dBttAgureBBX2GKX3d7KxxVnE Zy4tkF8RYMlvAMiFyZFca5qn2r7G9a5vVNqjlDVtUdwY4ZwtTGFNiBNXgxToFZ6uCmXrziWQ8zRemByJ 9CxVybZlHJlZYouziBfWDQC5aaH975v7Fw7zJ4r2N2oc5uQponIhAAAAAElFTkSuQmCC 278, 22 &Vollbild iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAW9JREFUOE+lk01LAlEUhu3v9B8Cl9HCXxD9iRbVJqJFq6KwRZRQ0cciNDIIKqH8yCjT ESrNMtMcHUXHZhydcRzn401HCaTFFeaFc+Au3ue853LvmG1SgM2SegArZclspu82ipYR/hThSwq4TtTB 1FXwbUAzYMputyOTyfyr/vrdJiUvUW8biBXaoBgVoXTTBEqdPoEIqEbcqD4cg/bMo5WPoS4Dqj4YPwqg HNrDz6sPqe0ZvKxOQZe4fvaBiAmErwiY2x0UrtYhFhPQFenPzLd08gq6qoBL3oClzocmayILtqmRAfTF ypCxd1AlHtmTOdD+XTIg7ZwA+3jYhxgGpNI7lEYVpYALNcpLBjx7FsFFj9D4jsPQOogtjKPsd5kpehDi Ja7NTkPK3qPoc0IReTAfUQi1shlIrubIgNOtZaQ3HcifLSEXOECAASJ3QfBx72gPqRLeR0fkINfyYJ/c CPp9yDMVvG04wKX85ARWPtQv4a3juFJuVLsAAAAASUVORK5CYII= 278, 22 &Rechten Bereich anzeigen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAY9JREFUOE/Nk8lKw1AUhvXtXLpy46LVpeDCVxDFhQhFUQQF64DghIKiKBXnWWzs4ABJ bZq26RDUmra2JvqZttqoK7EbD/z3cM+95+P8F259XUOGupqiBKhFNTWXp7cW7XwBj7ubka4OPOOdhGbb uBtrInUyg/mcRZcF0ueLJI9n0H0raCEBX8KsTF5ajHzGamhF2x7iKbjK/cU8OeWSt1eT9MUKyno/8b0J EpsDpIJbSDocSVkbkL87Jb7WR2J3jHxS4jPezBeewl407zJ+VyPh0WYi/gN2FfBcPdoAYXOWs8A1qnaP uucmue/m1ShWQWYhh3Y6hy4eE3kw2A8VuIo924CAFGNHkJBjKvJyD9HV3grAsvAzxHSRQzFL1sAGSJPt pA6mMHKP5fv5iIC6NWx5HoRi5hujYDH1l0qp+oj+DTcR6RZZvCHgmca76EJY6udk3oXvJkRQVAjLCrFo lOiHVDVuAxzOFhwOR0VOpyVrX1JLq13/PP+SqxOIoshf9L8A5oeFUv6NyparFmr5UO/4ruHjx5E9cgAA AABJRU5ErkJggg== 278, 22 &Unteren Bereich anzeigen 54, 20 &Ansicht iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAA25JREFUOE9tk3tMk1cYh98RM2TAvFQQJ1u4uWVy0bEEHQreYoo3MNBtzArCSBH3h4nT OucVsoWLWuTSgoWBWxmiSDZGES0YrtJa5r5vtCstlNKKApEqCijg3PLbN4gmRt7kyTl5zzlPTk5+5w2a pbaKLvkHLFsYOv9tRz8Hbv3B6JRV3/NQrSrZpZtt/8tecEy5v1B87Ze0go4phbIbda19aFBb0aixoLap 62/x6QblxzE/rpxV4r2peEtkonQkTXIJZ2VVKK1sRxv7AC2MHVdu9KNBcxd37w2j6PLvY8ExiuhXJLzV 8iBBUvZ4X58Zz6aeYnLiCUwmEy5U1OPCbxaU1PQjVW7AZZUNY2OjKLzYMemz+YdV0xLeJzIHn7WZN683 sVB3jqB/6Cle1MhDOyQFVTicw+CE3IyUDBYq9SAePxpBwrd1jOOKvDn01srcsFDBeSR9r0N8KosD54y4 qBrEo7Hn056JJ6PIyqtE4kk19maakJDKQG+2o7HdCLe1cj6R95nTwcJGRB28jT1pfyE5wwhRugnHz1vB mManJf8+n0B2wRVE7r+BnUcMiDvJILdcB5fgHBmRp0Tpu0OFKPGfiD1uxJ7vzBBlWJCUPsPP1+2YfPa/ 5h+UKKqxLr4SockMvCJVIN8z9Zwgv54CqrHqyz/w6bFu7DrVi7i0Xk5kmeazY2Z8nWeD1jDzNtpb7die KAN9KAV5SZqJ3pGVkrcSc9ZoEBSnw/ZD3fj8RC+EnGh3Kgc3Co72IOpwD8TSO2hixmG12pCTXwrH5VkV REukceSUB5ePsvFmyK/g8W8jcLeRu6YR67/i2MfNRV0IFOqwiN8Bp/BW+MeqEftNK+h9WQqRu2Se5+rc +20tLShW1CB6Xxm8IqrhEaHBezv18BEY4B2th+cOFm58LeaGcQcDa0Hvlj4m3lm3mUAtKxMpG3sxMDgM +/Ag9LpOFP7UgIQjSoTHKxEQfRVeW2rhsaEKvvwyfLBVAXKXH3gljc5B0tzmWzboTAMov2oF23UfQ0ND uGOzgGE70dSiQU2dGkUVWniESIpe/w+89UsdFu/t+kLcBvJrhnP4TawQahGxn+UyosO6FBbuG6+B5or6 acGakNcFiyNdaGEYn1zDTpFzcjU5ZenJtfAexwA5ZRq4npJcw9NpQaiA3LcteSH4Dz4cIMVGVt6MAAAA AElFTkSuQmCC 415, 22 In Google &Earth öffnen... 415, 22 &Mehrere QuickRoute-Dateien in Google Earth öffnen... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAgAA CwIBm8luNgAAAqpJREFUOE910mtIk2EUB/CZUhJ0M/sslGV0g0pJXGpoabNtrnlNc4UTMyRv07xhgjlS cxWotYq8ZBai6RZz0206dWPz3fbu1jZnZimhEdGHIX2sfzNQEnofeD48D/x/nMM5fgBo64df35e05LKE BO8ICPr122+X9+eWPf4B2/Zu9Q8IBs0vaPfO7Wb4B3p72wuKN0JrwPoN52u+hyU+QVi0AGeYQoiE/Whr V+LOYyP6ehVwEmOobuxc+TezEV77jOCrP4ddfIrQ6HJEsRpgGBqAxeCElFyFTjcHp2kKpY3PHZTAiWzF 3F+AXgY6pxE2YgqLNgfk1lUY7V+xRBpRWt8zQwmwBJOe46xOHPS1EJd2D55pBcwjGhiM87AQTriMJCrr e9SUQKdswlV2vxdJvFZwr4ugG5KCkA7jk84NnUSNyXd63LzVNkQJLP/wkgqtDRz+IyTzHsJjJ/FR78Ls Gzk8EhLTWhK8vNZeSmBu8ZvV7v6C7MJ2cHJboDHJ8WHahiXnMBYIAjOGcWTyhB2UALNU7cmrHUEUpwHn uXehUElA9Bug6nHDZlgBYbeiQCBuph5jrsoaEv/MN0YBYlKaoTRroTfI8H5MDzfpxLDMihu3xZWUwEne KHmE2YUDdAESs1rgtppBmIZhsih97czj5aANxTXifGogR+4DunEotgLsHBGcRhvI2TFfJSrYHGq8lUyh qKojkxI4xZOTR1ndCD1bjnOpTVBPmbFg1sDumoBUq0Rdi9hbWC6MoARO80Ysx1hdvk0U4EJWk299xzHw ehBldQ+WWSn5QiY7fX9RRc2m9d/0oPNljsOMF74KBIhkVCPjWtX72MSrJXEJyfs43FRaSmomraiilhq4 UvYqJpwlkkUySkbj2YXpCQxuIJvDpV1KTqNdTs34L/AHFHCYgyBIqUoAAAAASUVORK5CYII= 415, 22 Karte &veröffentlichen... 415, 22 Zwischenzeiten von &WinSplits hinzufügen... 50, 20 &Extras 124, 22 &Sprache 82, 20 Ein&stellungen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 120, 22 &Hilfe... 117, 6 120, 22 Ü&ber... &Hilfe AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 quickroute-linux-upstream-2.5/QuickRoute.UI/Main.fi.Designer.cs000066400000000000000000000000001446222606700245230ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Main.fi.resx000066400000000000000000003257411446222606700233660ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 786, 354 0, 354 5, 370 233, 370 0, 370 0, 373 0, 473 1024, 498 233, 123 233, 88 Väliajat 0, 207 0, 210 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= Vie pylväsdiagrammi Pylvään leveys iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= Uusi (Ctrl+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= Avaa (Ctrl+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= Tallenna (Ctrl+S) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAddJREFUOE9jYKAl mLTlW8zEjV93zNz98dGyA1+OrNj/ZcqyI1+liLKzd8PXHfUbrvzpXvf1eeOKj4/rF3+5M3fnx8fLdn39 hNWQ7lWv/i85+cUAZHrX2i/L+uff/53S8+qNS/yJ31qp2//oJ6z/bl929+PMrV/frNr/5SaKK1Ye+8fZ uOTl/3n7v16tX/61oX7TlT9x9fX/XAuO/7fL2PTLJHbVcfv8rQ+14uv/hHW8/Ln4wOf7GN4onvn8f9as z/8L53z5H9n17oWV/Za/ZtGLf5hEr8wHKfat36FiGLzghWv59ff1S7/swTAgqe/Zf++mN/+jez//L5vz 5r+G16TVRlErHOEKQ0OZ5eMP/XYtu/O6fuWXQxgGBDU//W9WfP+/Z9MrsEsSex79r1341hKm0Ng4jdXO fv9ft7pn35pWfN6CYYBTxeP/DkXX/ltlHv9vEr/tv2HU2v8aPlP/wxSaJK5Rss2s/2ffsv9v/rRHpQSj EhSwyIrUvSe7a5Vd+ZMGDNz6Vf/ZCBqArsAiZd/FEKDmsLqzuSRpTuz7oGSfdz7GH6jZrfLKNwaG/4wk GeBR+cTZp/7pL/us/T+NI1d4kaQZpDii53Okc8nVRoPElaIka6aLBgBeqPIjNLWeAwAAAABJRU5ErkJg gg== Kumoa (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAclJREFUOE9jYKAW WHbkq9SK/V+mLDvw5cjM3R8f9az/klK48h8nUeaDNC/b9fXT3J0fH9cv/nKnccXHx62rvtwpmf/lc+XC L6kEDVm1/8vNmVu/vnEvf/BeP2H9d62UbX/sc/d/TZn87kXhnC8vCuZ+DgMZsuTkFwOHomv/MQxcfODz /bCOlz/lo+f/dslbf9M4es0x09g1X+Tj5/+2n7z/b/rk98+y5n6OnLf/61XrzOP/Vx5D81r90i97XMuv v1f16LnlW79DBWSDSfTKfLXIpV8lfWb/8m95/xzokv9Zsz7/N4nfiumC+pVfDjkV33ul4tl3mCE0lBnm RKOoFY4aXpNWl8158z+69/N/76Y3//VCF2Ma0LTi8xb7ohdfVbwn3DQ2TmOFGTB562fdKVu/gm32bHr1 36z4/n8Nn6mYBuRPe1Rq37r/r6TPml/irsXcMANAAWYF9LNJ/Lb/eiFLwJpV3bqweGHVf7a0+vp/WmVX /qh7T3ZHDmWMAMMVp2F1Z3NDgIZYpOy7SDDesSv4z+hdee2lfcv+v/Z552MS+z4okWyQisdiPq/Km6cC Wj999ah84kyyATAN3o2vQiN6PkeSbQBdNQIAlV/obSdKz9wAAAAASUVORK5CYII= Tee uudelleen (Ctrl+Y) 50% 75% 100% 125% 150% 200% iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFZJREFUOE+t08EK ACAIA1D//6cNgwItpc28eXkgmyJ+NOzwakALUZsOMoEOsgEWcQCDHACKXAEESYFXpDphxVv2xMXIRBo7 APcitpAC4gPByHfAwPTBBlc83yF9awZeAAAAAElFTkSuQmCC Osoitin iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+lk1EO gDAIQ7n/pacjYkZXKiqJP7I8utKZmY3z+1UTUEGiJ4eMWQTi/6OUUnZohTq8GOJXryah7BKSAGJSH6A8 YV5sCoRx6M3uAdLUdqJHFVzNKgdp7WmNnb1jbNHdVnhWCKbwE4CqUul7en2vVTCgeqX3+QPJfiLsN/lb UAAAAABJRU5ErkJggg== Muokkaa reittiä iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHRJREFUOE+tktEO QBEMQ/f/P+3eScjaTIeQeECdTdXMrP1zZ7huTNCnm0RscXDRfiY6ieddx/oJTyArOOyr9s4B1N4dQEC0 B/AWNLb+Bb481sHYdQ6yyyE0ZU7gG5PKZUrZaZWLFMYtXgGYfAx5DnBg6b6LPqqAPtCiiFafAAAAAElF TkSuQmCC Lisää väliaika iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHVJREFUOE+VUgkO wCAI4/+fdtMN0nEMSmKM2lZsFRFZ77gnqoy3dpEiH85ZECIpfiryi+tEuvNjYAUakTUCD6bIQQTM3UlR pdGyET9eJH6MO/A3jzvJiOYJfPn0SX4zaxf3gogndALqk6WCipXrLQY9qPIOmAv1cLxEI15+ugAAAABJ RU5ErkJggg== Leikkaa reitti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGVJREFUOE/dkkkO ACAIA/n/p90iBpGK20kTL6QMWEs0npBK8hoSu1Sa9BGwKWhoBCAI6fQ8VRZrzQTAtVe3aDplXjOSBWiL dwA1CT3N92HXxEy8/sYCcYLEprrJRFE+iree9iGEIkhpMd3aVoCGAAAAAElFTkSuQmCC Zoomaa sisään iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAF1JREFUOE9jYMAE /4FCyBiLEuxCYE3oAMkwvAZhaMRhEE5DKDKAoGaYAqh3MFwBNwAt8OABST8DCPkFlxdAfiKkF+Yd2sQC zFRCCYmgK1AMwpICyUre6H4ehoYwAADKQEnF242y5AAAAABJRU5ErkJggg== Zoomaa ulos iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA2hJREFUOE9tk21M k1cYhp8YsoFANtE6jMSVMWMUi2PZYMMBG8lSNAoGYUORr7Ey3A8Tx2A6PwrZAqWTr/IhYICIWjYkG/ZV scUABWmpc+872pUWS2lFgUg3VFDQueXeK8wfRJ7kyjk5OefKc07uQ7REiT9XBubKNZKCGm1RIU92UXtW dIYyaKm9i9a27FYG7slp/1la3f+4iRnC5Z4RdOgc6NTboVIN/p0t1zDvJjS+taTo9ajabTHpJVP5xT/i RFUrGlr60Mv9CS3rwvmro+jQ38btO5OoUP46Hbz7dNwiyauhp4K2p8pnRkZsePL4EeZmH8JqtaKxWYPG C3bUq0aRV2vGT2onpqcfoFR5fU74cX3o/xLpMmGY7NqVLg66gSmMTjzC85r6y4Xi6lbklrE4VmtDViEH tW4c9+9NIe0ww1Kk1I3cRYrwsPgaZHxvREoeh4OlFijV47g3/XTeM/vwAYoULUg/rsMXMivS8liYbC50 9lkgCK8TE/nL5W8ndSI2+wZS8/9AZqEFkgIrjtY4wFpn5iX/Pp1FSfV5xBy4il2HzEg+zqL8nBHLg0ur iPyKmYCdasTm/I7EoxakfmeDpNCOjIIFzl5xYe7JM80/qG9qQ2RKC8IyWQhj1KAAuYZobbmGNrch9LPf kHBkCHulw0jOH+ZF9nk+OWLDVwonDOaFtzH092FHehVoYyVo3Q/dRL6VDeTPwG2rHkHJRuz4egifHhtG Ei/al8fDj/Hf3kRs7k3kVN5CFzsDh8OJsooGvLypqPmZIJk8FPAKLsFLIb9gpfgGRPssfJsWfPglz35+ LhmEKMmIVeLr8IjoQWCiDonf9IDerMoiWiF7xe+dsru9Wi1ONakQt/8MhNFt8I3WY90uE96IN8M/zgS/ nRwEYgPcw/mDoougNQ33ybdcsJCF9WclTOcwxsYn4Zoch8k4gJOnO5B2iEFECoPNcZcg3HYRvh+1IkB8 Bhu2N4FW1x5clMbloory7n4njNYxnLvkADd4FxMTE7jltIPlBtCl1UN1WYe6ZgNeCzlR9+J/8Ilau0yQ Obgnp5e/Wzc8I65hS5IB0Qc4PiNGRGZxWB3VDnKTjJLPeyEvCgQJXrQiXExeH0jJU9JG7jITeSvukPfJ MfKQmckzkyHviALyeT+eVonXPBf8BwEZH9akpCNnAAAAAElFTkSuQmCC Avaa Google Earthissa (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAoRJREFUOE+F0+1P UlEcB3Bf9g/0uq0sW9bWg80mKi2fFYqhaaGiU7PM5pSrOHWLTaV8iKy0pFw+ZNacxoOKKOATMPACFy54 QcwsraUvWi+cf8C3W1ubvbh2Xp3t7PvZ73fO70RE7FvFipHMJLGsIq9I3pQtlXekiBv6UnMVGuHNFmum RMkU3O4azK/sfbo/888+pmjmR1RaL6ISCMQKlFApR9HdY8L9Fy6MDBvBkLOoU/RvcwIXSs1fotJfIjKh FnHCZjg1Y/A6GeipPdjta2DcS6hq7QtwAtES49ofgCcDT9QKmlzCJh3AtG8PLv8OtigXahQDy5xAlmwx fEbYj+NsC1euP0TYaoTHsACnax1ekkHQRaFeMWThBPon54OyzmFkSh9BXKyCXaMHqdfisz0Eu86CxQkH Ku4903ACX3/uUkYbDVHpE1yTdiHsp/DJEcTq+2mEdRSsNgoFZZ3DnMDq5o7PH/qG/MoeiEo6sOCexkcr jS1Giw2SxLJzDnlS5XPuO6gxhcuaDIgTNSNZ3AKjWQdy1AnzUAi0cxuk34c7hLqdEzhfYvYdSXrFPiOB xOx2mDw2OJxTWJl1IEQx0E75UF6nrucEzkpnqFOCARzjEUiTdCDk84B0a+H2mth21vFmnEZVo7qcGyg0 sMAgTvDrcLVQBcZFg1qdZSsxgw5Y8EHHDpK8+8YBFRioaOEgIuNrcTmnDZYlDzY8C/AH56G3mSBvU+9W EA8ucgLnpJPe08IBdhIJpEja2PGdw9i7cVQ3Pv4uEN9SZmWJj3KGfx/wSicCJzNesxUQuJTRAPZXrvBT 86vj03MOHxj8eygh3ibGCFRTsRnVM8nCu7l8ftGh/wV/ARt4gQEX1VueAAAAAElFTkSuQmCC Julkaise kartta iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAh9JREFUOE/Nk91L U3Ecxv2nupg3dlNRXXjRVV4mGBhibYMtKA2LFBI1KrR0mprOLDUzewE1c9NNN0UlrVja3Jua04Yrx9p+ 59P5Tliny6CLDpybA8/L93meU1DwXzy9oz56XszxaGSW7udeuoY9dD6bpmPQTfuAC8fTd7T2T/Lg8QT3 +8ZpcY6RNy5gDYXSFBmlSGcVqYziR1qRTCkSBxp73zV29jW2EhqxbxrhXY0jJ0sPSURZwLUdC9jveKms 91Bxy0vZTS8lVTMU29ycuOSi6IIL03k3x6x+gjsGArEtytZGDwtfwBuAyVV4taQxOKfocSlax7Pcfpmh dugnR+0R1rYNBHKz2DY3zDD7Gd0mRPcgGOcPcJ0ONrclKLSGCWwaCCQwuVkIpj7Aa115yKfodSvaRHk0 w40nKWwP9ym/G8dkCfMxxu8MJG0JTAjeLGts6Mpr2/BpE1YisLQB/rXD087VR3MEq/r3fIhSlaQtBMN+ hXNa4ZjI0jiS5nr/AfbOJJUtu5Q1xCipWcdkDvE+ZCCQnqUqIejTwaIsCkblqRUYW4Qzl1dzBMu6q7wD GYn0bG3y0P42S91AkmpnEosjQfm9eM62KAv49MV5Ci0hFoMGAlmYjORqs49qR4Br3V+xObapaN6itGmT s3UximuiHL8SoUiv8FRVNFd33oHM07gwGYn0LFVJ2nKO3Cy2RVnA8+sGAlmjsP3t+89+4l/OwlIhw+BI bwAAAABJRU5ErkJggg== Koko ruutu (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== Näytä oikea paneeli (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== Näytä alapaneeli (Ctrl+Shift+B) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 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 AAAASUVORK5CYII= Tue QuickRouten jatkokehitystä Värikoodaa reittiviiva... Värialueen aloitusarvo Reittiviivan värikoodaus Värialueen lopetusarvo iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAKVJREFUOE+tkmEOwiAMhXuSeQjvoH/ckVy6Ky16Hp0Hob4SIEDGGOKPF1jWfu1rIRGh HoVkZpYW+aIJYEAzN4ihJ7RqcwZ6Qws0QVf8R7FNwAkJYwYwLQDtIAZ88J0A7pUOPGBG4iO28HIWFHDZ sfDzEInoDImetZXmsXYLLlkvYbolUB7b9Yhs8bDPA9W3YvstOE8cnxX/Sex/LPhN1FZYnEEP4AuyYY/2 1EDQNAAAAABJRU5ErkJggg== 23, 20 Aseta värialue iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAALVJREFUOE+tk1EO wUAQQOck3EHvwCFIOAl7AS7BAZyDL07BH98k682my1QlXcYmL520M29ntq3Ia0UTd4WtXL0RuqrMc819 SjTwkLyuDnJnrjP4Yvx/p4YQogfR4l6UOIAxzGEDOzjBHeIVjrCFFcxgJGnjJOiTVMHECPa14FYiyB1k wZoiFZyhJViy+/StAytYUKSCxggXCg5mBBUMzQiuQ+StVvWXqNfS1aix/0Gp4Jeaz+4HCfcWr/594rkA AAAASUVORK5CYII= 23, 20 Aseta värialue automaattisesti Reittiviivan läpinäkyvyys iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBQAA CwUByY3ISQAAAL1JREFUOE+NU9sNwzAIZI7OU+Uvs3SNTpm/zOHmEOdiAo4jIUfgO15naa1J/ODL7P2R 9j0Q+sf14goBwSDwJGmmmD2CPQmSo4TtqWyC4gmCzUh2a6f3WGUmCeJsfzeSEyeIVsB9fvajYNgq2C9A gbSqX/hBPqxRp+j3KvK6XGdGEsFDC08kGbgksECvpAJPCRzJMJ+oF11jJSLqgivO7t3eQTJUVMAVq9hu W5g9JgrrOim2QfZpBROnyt5X8APmCAFYpeIP4QAAAABJRU5ErkJggg== 16, 16 40, 21 Reittiviivan leveys iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUhJREFUOE9jYCAM mIBKVgKxH2GlmCq4gUIbgfg/FxfD54QlDLqkGCIIVLwFpJlPguF/0U6G/x13GZ5UHWOQJsYQcaCivSDN AlIM/8sOAjXfg+C2ewwnC48xcOIzRAooeQykWVSJ4T/QRrhmmCGpSxnW4TJAAShxHqRZSovhf+0ZTM1x sxj+s3Iw/AeqaUc3RBkocBWkWc6I4X/dOUzNUZMY/jOzgjWD8HxkA9SAnHsgCSVzhv9NVzA1h3Yx/Gdi hmueg6xZE8h5BdKsZs/wv/kapma/BrhGkM0z0Z0+C6RZ15Phf+tNTM0eZSiak7EFHpthIMPJttuYmp2y UTSH44y6lpsM0qBEAosmEG0Vh6LZm2DiARpgVn+F4RvIJaZhKJrtCWqGKWi9xRBl4AfX/BMobkC0ZiSF XUD2ByAGxQ5ZAJR9icowINMBVAm93F59dlgAAAAASUVORK5CYII= 23, 20 Näytä reittiviivan reunat 40, 21 Reittiviivan reunojen leveys iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= 23, 20 Reittiviivan reunojen väri iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBQAA CwUByY3ISQAAAiVJREFUOE9j+P//PwMlmMHB4T8xOAqorgKbWmI0swA13gXiL0DMBTPEzvE/gy0QE2OA i6Xz/+9Axe+Bmi1ABoA0+1m9ZAi2eIjVAGmgooP2Dv8NrZ3+M5i5/D9Qqr16UrDFg5NWzv/THIEGAMUY mtSmMZRor2FgACpEwUDbak1c/v93cPgXGmN6RqBXsenPSwaGL2c5lf/7Wj9rM3D7z2ADNPgoty5Dge5m BgYXux9w7ODwg7FYe+3+VeKR/3fz2+5/zcBwDIhv3GNktrjILjf/JJf6lSUSoQxbBV0ZXjAwMKQbHGRg uMQmBscX2cRUnzMwfN3Pa7Znlmze/2qNhX/TDQ9pFepsZLBx/Gl5nFv7/wcGhoRnQM1AdSb1arNSGB4D OSD8CIjfMDBMnCVbdAjoRz0T1///LZz/77ECOhfoLQZzl/+8RTrrnjxhZP7zlIFhPdCAT1Plyl4zPABq BGFgeIo9ZmT6nmB8JhekARiQy4DYHTnuTV3/b+1Wat/5iJlnYoHupm9Ai6phBnAB/dqyU8D+DzDkFUAB iy3R2Dv+n+ti/3NWkMVDXqAln4FqlBiA/pkGdPrL05yqf4Itbp8DGsCIJ3XGAw0/DEwTfUA1R0HqGFKM jlQW6G297WP9+hzQvzkEkrY+UB5k8ycgBiVvBgagJi6gc24CUxcw7v8rEjBACCj/F4jfATEH2ACoBlBg FQAxPufD1DYC1eXBLKIoK4OKAQAF/s1iEFX7sAAAAABJRU5ErkJggg== 16, 16 32, 21 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBQAA CwUByY3ISQAAAUxJREFUOE+Nkk8rhFEUxm/IQpYz2Vi8srRhYTYW5iNYSMqCZkMppclOzELJQqGUjQ1Z KGlSFrOb8gWUPRbK1jd4/Z63c3Vc72hu/bp/n+ece+4N7yGEhBrzFtzBLRzDIlT8uTzPg/BiHTiCDrTh APbg2tYe6FeiSWowZtEkXoJRF22A8Qx0IYdd7XmDYRYO4RHmSq6kLKvwYgYf9Jk3mLUUl3uIM9ZfTbxD r9qceQMV7D5JO9ZG4jcTr1qAdQX0BirSaUn0SdY+Tdxw+1OMz72BCtcsMRhn7Qk2/F4UeoMLDlzBYI8a BFobusZ0HMd/sKk7gZ4y/VTFnFYHfk3BM3yJaKBCyWC/T4M1xJnwP1H3lMkWjKRGSQYSFy39yttmckO/ ABPGUGIQ9X8MdN95uDQjZVQ8178G6bOUzTE4UcZG69cV+jSoWxax/6nBN2BcWA8xzRYiAAAAAElFTkSu QmCC 16, 16 32, 21 60, 20 &Tiedosto iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 228, 22 &Uusi iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= 228, 22 &Avaa iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 228, 22 &Tallenna 228, 22 Tallenna &nimellä 228, 22 &Vie 171, 22 &Kuva 171, 22 171, 22 KM&Z... 171, 22 &Reittidata 228, 22 &Lataa reittejä 225, 6 225, 6 228, 22 Ulo&s 61, 20 &Muokkaa iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAexJREFUOE9j+P//PwMlGK/myVu+xUze/HXHvN1fHy0/+PXIyoNfp6w69FUK2UKcBvRt +LoDiP90r/v6vHHFl8f1S77cmbvz62OgAZ+QDYEb0L3q1f9lJ74agEwHalrWv/Hb79RJ7964FJz4bZ26 /Y95wpbv7hV3P87c/vUN0ICbMFeADQAKcDYuefl/3oGvV+tXfG2YsOnbn7ie5/9cC47/t8vY/cs0ds1x l/ytDy3jl/8J63j3c+mBr/dRDABximc+/5816/P/wjlf/kf2fHxhlbzlr0Xihh+msSvzQfIBtdtVDCMW v3Atv/2+YemXPRgGJPU9++/d9OZ/dO/n/2Vz3vzX8J602iRmhSNMoYJDHbNd1qHfrmV3Xjes/HIIw4Cg 5qf/zYrv//dsegV2SWLPo/91i99aIhnAapd56K9X3bNvzSu/bMEwwKni8X+Homv/rTKP/zeJ3/bfMGrt fw2fqUB1kHRiFrdeyTbz4L+Altd/C6Y/LsUwAD0xgQIWWUzda5K7a9ntP2mT3//r3fCVjaAB6AZapOy7 GNLx4V9Y3flcohISTFFc33slh/wLMf4tH/75VV75phUwm5EkAzyqHzv7t3z65VFy8adx1CovdJcRzEhR vZ8jnUuuNZrGrBPFlukIGkAop1JsAABuDMymYL0yPwAAAABJRU5ErkJggg== 170, 22 Kum&oa iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAd1JREFUOE9j+P//PwMlGK551aGvUisPfp2y/ODXI/N2f33Us/5LSuXCL5yEDAcbANIM xJ/m7vz6uH7JlzuNK748bl315U7Foi+fKxd9ScVnCMyAmzO3f33jXvngvXnClu9WKdv+OOQe/5oy+fOL wjlfXhTO/RIGMmTZia8GDkXXgEyEt8EGLD3w9X5Yx7ufZtHzf7vkrb9pGrvmGBB/MYvf/Dt58ue/6TM/ P8ue+yVy3oGvV60zj/8HuhbuNbABDUu/7HEtv/Ne3avnVkDtdhWQmGnsynzj6OVfdQJm/wrt/Pgc6JL/ WbM+/zeJ34rpgoaVXw65lt97pebZd1jBoY4Z5kSTmBWOGt6TVpfNefM/uvfzf++mN//1QhdjGtC88ssW 7/oXXzW8J98EGsAKM2DK1q+6QAy22bPp1X+z4vv/NXymYhpQMP1xaWDrm79GkWt+AQ3ghhkACjAroJ9N 4rf91wtZAtas6taFaUDvhq9saZPf/3Mtu/1H3WuSO3IoIwcYtuiEJ6SwuvO5IR0f/lmk7LtIKPFgRCNI QCtgNqN/9bWX/i0f/jrkX4iJ63uvRIxBKPkAaAifT+XNUwGtn796VD92JtkAmAbvhlehUb2fI8k2gBiN MDUUZWWQIQCu1sRwfRrh4gAAAABJRU5ErkJggg== 170, 22 Uu&delleen 167, 6 170, 22 Muuta &lähtöaikaa 48, 20 &Näytä iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAi9JREFUOE+lk0tPU1EUhfunHJQJTtSoAwaOZCgJJhiC0ibURMGgkSYSwKgBhYKIUEQB EfGRACIttDwDRKqmFkuhLZWHLVWa2p77eXdN6nVoGNzJTda31t5rHxNgOsx3KLEYmxKJhKlnZI7ul7M8 Hp6h64WXR0MeOp9P0THgpr3fhePZe1r7JnjwZJz7vWO0OEcRXQ4gYg2F0hQZpUhnFamM4mdakUwp4gca ez80tvc1tuIake8aG7saR06W6HodIM4irutYxHbHS0W9h/JbXkpveimunqaoys2JSy4KL7gwn3dzzDpP cNsAkNjibG30sPgVvH6Y8MHrZY2BWUW3S9E6luX2qwx1g784atskEDMAZGaJXdkwzcwX9JgQ3oPgDv+I 7bq4si1OgXUDf9QAkIXJzAKY/AhvdOfBOUWPW9EmziMZbjxNUfVwn7K7O5gtG3yK8HcHsm1ZmADermis 686BGHyOwuomLK/DfODPaOfqwzmAT/+fX6JUJdsWwNC8wjmlcIxnaRxOc73vAFtnkoqWXUobIhTXrmGu DPEhZABIz1KVAHp1sTiLg9F5chVGl+DMZV8OsKKnyieQI5GerU0e2t9lsfcnqXEmsTjilN3bycUWZxGf vrhAgSXEUtAAkAuTI7naPEeNw8+1rm9UOWKUN29R0hTlrD1CUW2Y41c2KdQrPFUdztWdTyDnabwwORLp WaqSbcs4MrPEFmcRL6wZAHLTQvvfL/8WDvOURfsblYYTxd5DjEEAAAAASUVORK5CYII= 248, 22 Koko &ruutu iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 248, 22 Näytä &oikea paneeli iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 248, 22 Näytä &alapaneeli 60, 20 T&yökalut iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAA2ZJREFUOE9tk21Mk1cYhp8YozIgi6sgbrjwsWkmgsoSVBTULUvRKRjoNrSCICnifpg4 LTo/IRqgaBlgCxQVtQgoko1RRAsGKEhr0b3vaFdaLKUVBSJ1qKDgZ+69g/iDyJNcOSdPzrny5OQ+RFPU BtHlgNTselFGkUaSxbFPok7hJ5UHTXV2Ui84pixAKL7+e3pB+0ulqgt1LT1o0NrRqLOhtqnztTi7QfV1 zIWlU4p8vz2zPjJRNpQuvYxT8iqUVLahlX0MDePE1Zu9aNA9wIOHgyi+cmc4OEYZPUnCW6EIEiTljPT0 WPHq5QuMjT6HxWLB+Yp6nP/ThnM1vUhTmHBF7cDw8DMUlreP+X13dvm4hLdSPs1vddatG00stB1D6B14 gfc19K8T0oIqpOYyOKKwIiWThVrbj6dPhpDwax0zc0n+dPpoaV5YqKAISScMiE9jsec3M8rV/Xgy/Gbc M/r8GST5lUg8qsXOLAsS0hgYrU40tpnhsVrBJ/I9mR0sbETU3rvYnv4PkjPNEGVYcLjIDsYyMi5592YU OQVXEbn7JjYfMCHuKIO8MgPcgnPlRN5Slf8mNaLEfyP2sBnbj1shyrQhKWOCSzecGHv1v+YtzimrsSa+ EqHJDHwi1SD/k/Wc4HQ9La7G8h1/4YdDXdh6rBtx6d2cyDbOj4es+CXfAb1p4m30t9uwMVEO+koG8pE2 E30qLyFfFaav0iEozoCN+7rw05FuCDnRtjQObhUcvIeo1HsQy+6jiRmB3e5A7ukSzFwkqSCaJ4sjl3y4 LcvBjJA/wOPfReA2MzemGWt/5tjF7UWdCBQaMIffDpfwFgTEahG7vwW0QJ5C5Cn92HtF3qNWjQZnlDWI 3lUKn4hqeEXo8PlmI/wEJvhGG+G9iYUHX49ZYdzFwFrQ/JKnxDvlMRGoL0tFqsZu9PUPwjnYD6OhA4UX G5BwQIXweBUWR1+Dz/paeK2rgj+/FAs3KEGeij2T0ugaJMtrvu2AwdKHsmt2sJ2PMDAwgPsOGxi2A00a HWrqtCiu0MMrRFr84X/grf1s2tydnVvEraAvmuEafgtLhHpE7Ga5jBiwJoWF5zfXQbNEvTR7VciHgrmR bvRJGJ/cw46Ra3I1uUiM5F74kKOPXLJMXE9F7uEZNDtUQJ7fz3sv+A+84CDTIQAbtgAAAABJRU5ErkJg gg== 328, 22 Avaa &Google Earthissa... 328, 22 Avaa useampi reitti Google &Earthissa iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+gAA CvoBGdj/dAAAAptJREFUOE910+tPknEUB3Be9g/0uq0sW7et0uUktWleAyRAMVRy6kzHMgXvTm0GS0my pibl8pJWcxqXhqCAosDAB3i4CYiZpWvaWuuF8w/4Rm213HpenBe/s53Pztk5PxoA2p8o75zKy+CKa/hl Te08YbM8k9s6ksO/r2IJpFamQBYqre4fLxENP/235m/xr2RCheV7fPYw4lMkuMKQQSGbxsCgEZ3PXHg9 aUCIWECrdHSPEkisMH+Oz3mOuJQGJDO74VTNwOsMQUsewG7fQMi9gnrpSJASuFBs2PgN0MWgs6XwEyvY 9geh9x3AFfiKHdKF+q6JVUqAKVmOnmeO4mRshPSCh4haDfDMWeB0bcJLhBB2kWjumjBTAqO6pbD40STy hH3glClgV2lBaNX4ZI/ArjFj+b0DNXcHVJTA7o990mDzg13xBPnCfkQDJD46wlh/q0dUQ8JqIyGs7Juk BDa2v/kCkS8oFg2CXS6Hxa3HB6sfOyE1tggCq85FFAllQ5QAo94crWyfQzK7G9c5D2AwaUBMO2GaiMDv 3AMR8KFaouylXmO5yXcs40VsjRKkcnth9NjgcOqwtuBAhAxBrfPhTpOymRK4KJwnzzDGcIIuQbZAjojP A8KthttrjI2ziVezftxrU1ZRA6X6GDCOU2mNYJUqEHL5Qa4vxDoxwR80451mBbUtQ0WUwCWhnjzLHEfc 1QZc4/XAvOLBlseCQHgJWpsRHXLlvqhBlkgJXBbOec8xx2KXKEGmoCd2vouYeTMLccfjXSa3SsZgFR6v bWw79H8OPegVuuDp3JexDiRIym0F/3bLWlp2SV16Vv5RNodH4/KKaLWN7dTALfFUagJToUvKrZvPYIkK s3I5R1hsDu1GfgHtJo//X+An6VOqVy8U1mMAAAAASUVORK5CYII= 328, 22 &Julkaise kartta 328, 22 Lisää väliajat &WinSplits:istä 67, 20 &Asetukset 103, 22 &Kieli iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 114, 22 &Help.. 111, 6 114, 22 A&bout AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 Reittiviivan leveys Rastiympyrän säde otto- ja jättöaikoja varten Rastiympyrän säde otto- ja jättöaikoja varten quickroute-linux-upstream-2.5/QuickRoute.UI/Main.fr.resx000066400000000000000000000323731446222606700233730ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Temps intermédiaires Exporter histogramme Largeur des barres Nouveau (Ctrl+N) Ouvrir (Ctrl+O) Enregistrer (Ctrl+S) Annuler (Ctrl+Z) Répéter (Ctrl+Y) Ajuster la trace Ajouter temps intermédiaires Couper la trace Zoom + Zoom - Ouvrir dans GoogleEarth (Ctrl+E) Publier la carte Plein écran (F11) Afficher le panneau droit (Ctrl+Shift+R) Afficher le panneau inférieur (Ctrl+Shift+B) Aide Supporter le développement de QuickRoute Dégrader la trace par... Valeur initiale de l'échelle de couleur Couleur de la trace Valeur finale de l'échelle de couleur Déterminer l'intervalle de l'échelle de couleur Auto-ajuster l'intervalle de l'échelle de couleur Transparence de la trace Largeur de la trace Afficher les bords de la trace Largeur des bords de la trace Couleur des bords de la trace &Nouveau... &Ouvrir... &Enregistrer Enregistrer &sous... &Image... &GPX... &KMZ... &Données de la trace... &Exporter I&mporter Traces... Qui&tter &Fichier &Annuler &Rétablir Changer l'heure de &départ &Edition &Plein écran Afficher le panneau d&roit Afficher le panneau de &dessous &Vue Ouvrir dans Google &Earth... Ouvrir pl&usieurs fichiers QuickRoute dans Google Earth... &Publier la carte... Ajouter les temps intermédiaires depuis &WinSplits &Outils &Langue... &Options &Aide... &A propos... &Aide Largeur de la trace Diamètre du cercle pour les temps d'approches/sortie Diamètre du cercle pour les temps d'approches/sortie quickroute-linux-upstream-2.5/QuickRoute.UI/Main.it.Designer.cs000066400000000000000000000000001446222606700245410ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Main.it.resx000066400000000000000000003262551446222606700234050ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Tempi intermedi iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC Esporta grafico Larghezza della barra Codice colore del percorso da... Avvio dei valori della colorazione dell'intervallo Codifica del percorso con colore Fine dei valori della gamma colori iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAKVJREFUOE+tkmEOwiAMhXuSeQjvoH/ckVy6Ky16Hp0Hob4SIEDGGOKPF1jWfu1rIRGh HoVkZpYW+aIJYEAzN4ihJ7RqcwZ6Qws0QVf8R7FNwAkJYwYwLQDtIAZ88J0A7pUOPGBG4iO28HIWFHDZ sfDzEInoDImetZXmsXYLLlkvYbolUB7b9Yhs8bDPA9W3YvstOE8cnxX/Sex/LPhN1FZYnEEP4AuyYY/2 1EDQNAAAAABJRU5ErkJggg== 23, 20 Imposta l'intervallo della gamma dei colori iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC1SURBVDhPrZNRDsFAEEDnJNxB78AhSDgJewEuwQGcgy9O wR/fJOvNpstUJV3GJi+dtDNvZ7atyGtFE3eFrVy9EbqqzHPNfUo08JC8rg5yZ64z+GL8f6eGEKIH0eJe lDiAMcxhAzs4wR3iFY6whRXMYCRp4yTok1TBxAj2teBWIsgdZMGaIhWcoSVYsvv0rQMrWFCkgsYIFwoO ZgQVDM0IrkPkrVb1l6jX0tWosf9BqeCXms/uBwn3Fq/+feK5AAAAAElFTkSuQmCC 23, 20 Imposta automaticamente l'intervallo dei colori del percorso Trasparenza della linea del percorso iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA CwAB5DetvwAAAL1JREFUOE+NU9sNwzAIZI7OU+Uvs3SNTpm/zOHmEOdiAo4jIUfgO15naa1J/ODL7P2R 9j0Q+sf14goBwSDwJGmmmD2CPQmSo4TtqWyC4gmCzUh2a6f3WGUmCeJsfzeSEyeIVsB9fvajYNgq2C9A gbSqX/hBPqxRp+j3KvK6XGdGEsFDC08kGbgksECvpAJPCRzJMJ+oF11jJSLqgivO7t3eQTJUVMAVq9hu W5g9JgrrOim2QfZpBROnyt5X8APmCAFYpeIP4QAAAABJRU5ErkJggg== 16, 16 Larghezza linea 40, 23 Larghezza linea iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFISURBVDhPY2AgDJiASlYCsR9hpZgquIFCG4H4PxcXw+eE JQy6pBgiCFS8BaSZT4Lhf9FOhv8ddxmeVB1jkCbGEHGgor0gzQJSDP/LDgI134PgtnsMJwuPMXDiM0QK KHkMpFlUieE/0Ea4ZpghqUsZ1uEyQAEocR6kWUqL4X/tGUzNcbMY/rNyMPwHqmlHN0QZKHAVpFnOiOF/ 3TlMzVGTGP4zs4I1g/B8ZAPUgJx7IAklc4b/TVcwNYd2MfxnYoZrnoOsWRPIeQXSrGbP8L/5GqZmvwa4 RpDNM9GdPgukWdeT4X/rTUzNHmUompOxBR6bYSDDybbbmJqdslE0h+OMupabDNKgRAKLJhBtFYei2Ztg 4gEaYFZ/heEbyCWmYSia7QlqhilovcUQZeAH1/wTKG5AtGYkhV1A9gcgBsUOWQCUfYnKMCDTAVQJvdxe fXZYAAAAAElFTkSuQmCC 23, 20 Mostra i bordi della linea 40, 23 Larghezza del bordo della linea iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC 23, 20 Colore del bordo della linea iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA CwAB5DetvwAAAiVJREFUOE9j+P//PwMlmMHB4T8xOAqorgKbWmI0swA13gXiL0DMBTPEzvE/gy0QE2OA i6Xz/+9Axe+Bmi1ABoA0+1m9ZAi2eIjVAGmgooP2Dv8NrZ3+M5i5/D9Qqr16UrDFg5NWzv/THIEGAMUY mtSmMZRor2FgACpEwUDbak1c/v93cPgXGmN6RqBXsenPSwaGL2c5lf/7Wj9rM3D7z2ADNPgoty5Dge5m BgYXux9w7ODwg7FYe+3+VeKR/3fz2+5/zcBwDIhv3GNktrjILjf/JJf6lSUSoQxbBV0ZXjAwMKQbHGRg uMQmBscX2cRUnzMwfN3Pa7Znlmze/2qNhX/TDQ9pFepsZLBx/Gl5nFv7/wcGhoRnQM1AdSb1arNSGB4D OSD8CIjfMDBMnCVbdAjoRz0T1///LZz/77ECOhfoLQZzl/+8RTrrnjxhZP7zlIFhPdCAT1Plyl4zPABq BGFgeIo9ZmT6nmB8JhekARiQy4DYHTnuTV3/b+1Wat/5iJlnYoHupm9Ai6phBnAB/dqyU8D+DzDkFUAB iy3R2Dv+n+ti/3NWkMVDXqAln4FqlBiA/pkGdPrL05yqf4Itbp8DGsCIJ3XGAw0/DEwTfUA1R0HqGFKM jlQW6G297WP9+hzQvzkEkrY+UB5k8ycgBiVvBgagJi6gc24CUxcw7v8rEjBACCj/F4jfATEH2ACoBlBg FQAxPufD1DYC1eXBLKIoK4OKAQAF/s1iEFX7sAAAAABJRU5ErkJggg== 16, 16 32, 23 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALAAAA CwAB5DetvwAAAUxJREFUOE+Nkk8rhFEUxm/IQpYz2Vi8srRhYTYW5iNYSMqCZkMppclOzELJQqGUjQ1Z KGlSFrOb8gWUPRbK1jd4/Z63c3Vc72hu/bp/n+ece+4N7yGEhBrzFtzBLRzDIlT8uTzPg/BiHTiCDrTh APbg2tYe6FeiSWowZtEkXoJRF22A8Qx0IYdd7XmDYRYO4RHmSq6kLKvwYgYf9Jk3mLUUl3uIM9ZfTbxD r9qceQMV7D5JO9ZG4jcTr1qAdQX0BirSaUn0SdY+Tdxw+1OMz72BCtcsMRhn7Qk2/F4UeoMLDlzBYI8a BFobusZ0HMd/sKk7gZ4y/VTFnFYHfk3BM3yJaKBCyWC/T4M1xJnwP1H3lMkWjKRGSQYSFy39yttmckO/ ABPGUGIQ9X8MdN95uDQjZVQ8178G6bOUzTE4UcZG69cV+jSoWxax/6nBN2BcWA8xzRYiAAAAAElFTkSu QmCC 16, 16 Angolo d'ingresso e uscita dal punto 32, 23 Angolo d'ingresso e uscita dal punto iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVDhPrdPZasJAFAZgX8q+Q32N9o2kXkjphQsigoJC ixa1VAWXiohG7IakbmjcNcYl5i8TCQSdGXPhgcPczHwz5xzGZrtWRN+bOM1wqo5gvAJfrIBy4w/cu8hh VjyG3nDjuOcjkbTABB58cSRy9SMiiPSXhF6rTMDpedEPG0ktJfD8wQT26gEEMSAq4I3mqYCmaZCVHQZj WQfst3f0Ep7CGSqw3amYzBWI/TkfcAdTZ4B60LCQt+hJK3yJEz7g8ifOAGWzhzRdo9WdofYt8QFSnzlI 42bLDdqDBZqtMUpC3zpgbtxPe4rq5xDZSsc6YG6c8DtCodZDsihaA4x5s1bmGI0Zkw2X8lofWHf+AdjM 9sNc+xBlAAAAAElFTkSuQmCC 23, 22 Nuovo (Ctrl+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPlZNdSNNRGMb/F110ZZEVhVBgeeHNICiiuggp olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdPKMgr7kApFItTUkWZqVhSVYmao5Nev/xyoQ4k88Nyc 8z6/93nP4QjCfy6lwc4ltZVso4P/tMyXRcmMHqZ0EeY6jZQVInzuf0e1Tb9Ina3P/tkpLD6XkNg8BJe5 u93C+HDVrP4M2ZkcMOOw5tLZ9nxJyJE4HSExBoKkBQhVpTrGhso9zNPfiph0JlB+U01ZcRbmwnRMeWlc 08opUCV6QissGsZ+WOY6z4hmuuXglC6pRYBbJSp+fzXNxnaZ66o1s3rkyKHWruJuWRYOcwZ2kxKr8TI3 DCkU6+QYNUnuNGWmLEY+5uOK3degoKZcx3SfEvozPfVB3OtNhi4ZvI2nrTIc23U9gtmYwa8eNXzScq8i l6bHWnfRwhHeREJzGFONgYw/CeB9qQSZNNR9FyUGBT87lfQ3plJj1zLTq4COGDegLVo0HmeqKZjx+gOM PNzDYPU2lLF+4jhyN6BIl8pgexK3bRpaXopJuhJEwGloiWDmVSgTLw4xWreXoZrtfK/wp/nKak4E+s6/ hDFHTkd9GndsOdCTBq1i3NdHmWgIYvRpAMO1OxlwSPhi2YpT641CuoWzsSfnAfnZiVRZ1Tjvx9GsF+bU pF1BvWolD9JXUZmyDnOiD1cvbCZiYXfXCPrMi+gVZ8hOiiL53DHORwdzKnw/hw/uYt9uCTskfvj7+rBp 41rWr/Fig7fX8j/Tsn/fcgx/ARfG3ml6M3rzAAAAAElFTkSuQmCC 23, 22 Apri (Ctrl+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIsSURBVDhPrZPdS5NxFMf3L3TfTdBFtzU1hmuxGjzlHMqq YVgRvT2RL+XSZZqoWJlGLV8gW+HSScvpJJxU+AamSI2hTCVLM1e0xKGm2EQw+PY7v+j5tTIvoh+cy8/n POec76NS/Y/37GkUVL72ZbR5l/DYvYDGhgjuO2ZQW/MJ9tsh3CifQmnJBAoLXiMvdxQXzgeh9Cawtweo qV7FRm9ldQ3GtF4cTnvCSxF4Wxe5oLLiy195giMLK9htfg61WoblkEcI3I/muaC05PO6gp/w+/Ai4kw+ FFyexgFzkxA462e54JLt3R+CX+GRyQi2SV5Yc8aRmuIUgrq7YS7IzhqNEfwODwbD2Kx3Q5YDMJkcQlBd 9ZEL5DMBRbAe3OP/gE2JDThy9AWSkmqF4GblNLq7wE4JHD/5CpZjA3zbtDCamT6bOv+A+3DQ0glJsgvB 1bJJdPjAMgA0ub6xu39F+fU5vlRaGM2cmRFU4OTUdhgMFUJwpXAcnmbgoXONBScKY3pOTJlP2JB+roh3 Tk5h8H4P9PoyIbDljTEYqLoT5Z1JwEKCOK2EobezGJuag5x7DXuNbRzW7nFBpysSAoql4x6UzyYBwWfz b+FNaB6hmSVcLLYjXu9icCPidz2ANjFfCDIzhtncy3zmrQYPtuyQ0NLRD1/XILr7/Bh4OYR9JgvUunok MHi7pg4ajVUIKNOnT/XzeFLCKCR0ZzoVbZsWRjNTVyqCdyZkxwr+9a/+Dk60OMVjMFpXAAAAAElFTkSu QmCC 23, 22 Salva (Ctrl+S) 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHXSURBVDhPY2CgJZi05VvMxI1fd8zc/fHRsgNfjqzY/2XK siNfpYiys3fD1x31G6786V739Xnjio+P6xd/uTN358fHy3Z9/YTVkO5Vr/4vOfnFAGR619ovy/rn3/+d 0vPqjUv8id9aqdv/6Ces/25fdvfjzK1f36za/+UmiitWHvvH2bjk5f95+79erV/+taF+05U/cfX1/1wL jv+3y9j0yyR21XH7/K0PteLr/4R1vPy5+MDn+xjeKJ75/H/WrM//C+d8+R/Z9e6Flf2Wv2bRi3+YRK/M Byn2rd+hYhi84IVr+fX39Uu/7MEwIKnv2X/vpjf/o3s//y+b8+a/htek1UZRKxzhCkNDmeXjD/12Lbvz un7ll0MYBgQ1P/1vVnz/v2fTK7BLEnse/a9d+NYSptDYOI3Vzn7/X7e6Z9+aVnzegmGAU8Xj/w5F1/5b ZR7/bxK/7b9h1Nr/Gj5T/8MUmiSuUbLNrP9n37L/b/60R6UEoxIUsMiK1L0nu2uVXfmTBgzc+lX/2Qga gK7AImXfxRCg5rC6s7kkaU7s+6Bkn3c+xh+o2a3yyjcGhv+MJBngUfnE2af+6S/7rP0/jSNXeJGkGaQ4 oudzpHPJ1UaDxJWiJGumiwYAXqjyIzS1ngMAAAAASUVORK5CYII= 23, 22 Passo indietro (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHJSURBVDhPY2CgFlh25KvUiv1fpiw78OXIzN0fH/Ws/5JS uPIfJ1HmgzQv2/X109ydHx/XL/5yp3HFx8etq77cKZn/5XPlwi+pBA1Ztf/LzZlbv75xL3/wXj9h/Xet lG1/7HP3f02Z/O5F4ZwvLwrmfg4DGbLk5BcDh6Jr/zEMXHzg8/2wjpc/5aPn/3bJW3/TOHrNMdPYNV/k 4+f/tp+8/2/65PfPsuZ+jpy3/+tV68zj/1ceQ/Na/dIve1zLr79X9ei55Vu/QwVkg0n0yny1yKVfJX1m //Jvef8c6JL/WbM+/zeJ34rpgvqVXw45Fd97peLZd5ghNJQZ5kSjqBWOGl6TVpfNefM/uvfzf++mN//1 QhdjGtC04vMW+6IXX1W8J9w0Nk5jhRkweetn3Slbv4Jt9mx69d+s+P5/DZ+pmAbkT3tUat+6/6+kz5pf 4q7F3DADQAFmBfSzSfy2/3ohS8CaVd26sHhh1X+2tPr6f1plV/6oe092Rw5ljADDFadhdWdzQ4CGWKTs u0gw3rEr+M/oXXntpX3L/r/2eedjEvs+KJFskIrHYj6vypunAlo/ffWofOJMsgEwDd6Nr0Ijej5Hkm0A XTUCAJVf6G0nSs/cAAAAAElFTkSuQmCC 23, 22 Passo avanti (Ctrl+Y) 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPrdPBCgAgCANQ//+nDYMCLaXNvHl5IJsifjTs 8GpAC1GbDjKBDrIBFnEAgxwAilwBBEmBV6Q6YcVb9sTFyEQaOwD3IraQAuIDwch3wMD0wQZXPN8hfWsG XgAAAABJRU5ErkJggg== 23, 22 Puntatore iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB7SURBVDhPpZNRDoAwCEO5/6WnI2JGVyoqiT+yPLrSmZmN 8/tVE1BBoieHjFkE4v+jlFJ2aIU6vBjiV68moewSkgBiUh+gPGFebAqEcejN7gHS1HaiRxVczSoHae1p jZ29Y2zR3VZ4Vgim8BOAqlLpe3p9r1UwoHql9/kDyX4i7Df5W1AAAAAASUVORK5CYII= 23, 22 Modifica il percorso iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhPrZLRDkARDEP3/z/t3knI2kyHkHhAnU3VzKz9 c2e4bkzQp5tEbHFw0X4mOonnXcf6CU8gKzjsq/bOAdTeHUBAtAfwFjS2/gW+PNbB2HUOssshNGVO4BuT ymVK2WmVixTGLV4BmHwMeQ5wYOm+iz6qgD7QoohWnwAAAABJRU5ErkJggg== 23, 22 Aggiungi tempo intermedio iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB1SURBVDhPlVIJDsAgCOP/n3bTDdJxDEpijNpWbBURWe+4 J6qMt3aRIh/OWRAiKX4q8ovrRLrzY2AFGpE1Ag+myEEEzN1JUaXRshE/XiR+jDvwN487yYjmCXz59El+ M2sX94KIJ3QC6pOlgoqV6y0GPajyDpgL9XC8RCNefroAAAAASUVORK5CYII= 23, 22 Estrai il percorso iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP3ZJJDgAgCAP5/6fdIgaRittJEy+kDFhLNJ6Q SvIaErtUmvQRsCloaAQgCOn0PFUWa80EwLVXt2g6ZV4zkgVoi3cANQk9zfdh18RMvP7GAnGCxKa6yURR Poq3nvYhhCJIaTHd2laAhgAAAABJRU5ErkJggg== 23, 22 Aumenta lo Zoom iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhPY2DABP+BQsgYixLsQmBN6ADJMLwGYWjEYRBO QygygKBmmAKodzBcATcALfDgAUk/Awj5BZcXQH4ipBfmHdrEAsxUQgmJoCtQDMKSAslK3uh+HoaGMAAA ykBJxduNsuQAAAAASUVORK5CYII= 23, 22 Diminuisci lo Zoom iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANoSURBVDhPbZNtTJNXGIafGLKBQDbROozElTFjFItj2WDD ARvJUjQKBmFDka+xMtwPE8dgOj8K2QKlk6/yIWCAiFo2JBv2VbHFAAVpqXPvO9qVFktpRYFIN1RQ0Lnl 3ivMH0Se5Mo5OTnnynNO7kO0RIk/VwbmyjWSghptUSFPdlF7VnSGMmipvYvWtuxWBu7Jaf9ZWt3/uIkZ wuWeEXToHOjU26FSDf6dLdcw7yY0vrWk6PWo2m0x6SVT+cU/4kRVKxpa+tDL/Qkt68L5q6Po0N/G7TuT qFD+Oh28+3TcIsmroaeCtqfKZ0ZGbHjy+BHmZh/CarWisVmDxgt21KtGkVdrxk9qJ6anH6BUeX1O+HF9 6P8S6TJhmOzalS4OuoEpjE48wvOa+suF4upW5JaxOFZrQ1YhB7VuHPfvTSHtMMNSpNSN3EWK8LD4GmR8 b0RKHoeDpRYo1eO4N/103jP78AGKFC1IP67DFzIr0vJYmGwudPZZIAivExP5y+VvJ3UiNvsGUvP/QGah BZICK47WOMBaZ+Yl/z6dRUn1ecQcuIpdh8xIPs6i/JwRy4NLq4j8ipmAnWrE5vyOxKMWpH5ng6TQjoyC Bc5ecWHuyTPNP6hvakNkSgvCMlkIY9SgALmGaG25hja3IfSz35BwZAh7pcNIzh/mRfZ5Pjliw1cKJwzm hbcx9PdhR3oVaGMlaN0P3US+lQ3kz8Btqx5ByUbs+HoInx4bRhIv2pfHw4/x395EbO5N5FTeQhc7A4fD ibKKBry8qaj5mSCZPBTwCi7BSyG/YKX4BkT7LHybFnz4Jc9+fi4ZhCjJiFXi6/CI6EFgog6J3/SA3qzK Ilohe8XvnbK7vVotTjWpELf/DITRbfCN1mPdLhPeiDfDP84Ev50cBGID3MP5g6KLoDUN98m3XLCQhfVn JUznMMbGJ+GaHIfJOICTpzuQdohBRAqDzXGXINx2Eb4ftSJAfAYbtjeBVtceXJTG5aKK8u5+J4zWMZy7 5AA3eBcTExO45bSD5QbQpdVDdVmHumYDXgs5Uffif/CJWrtMkDm4J6eXv1s3PCOuYUuSAdEHOD4jRkRm cVgd1Q5yk4ySz3shLwoECV60IlxMXh9IyVPSRu4yE3kr7pD3yTHykJnJM5Mh74gC8nk/nlaJ1zwX/AcB GR/WpKQjZwAAAABJRU5ErkJggg== 23, 22 Apri in Google Heart (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKESURBVDhPhdPtT1JRHAdwX/YP9LqtLFvW1oPNJiotnxWK oWmholOzzOaUqzh1i02lfIistKRcPmTWnMaDiijgEzDwAhcueEHMLK2lL1ovnH/At1tbm724dl6d7ez7 2e93zu9EROxbxYqRzCSxrCKvSN6ULZV3pIgb+lJzFRrhzRZrpkTJFNzuGsyv7H26P/PPPqZo5kdUWi+i EgjECpRQKUfR3WPC/RcujAwbwZCzqFP0b3MCF0rNX6LSXyIyoRZxwmY4NWPwOhnoqT3Y7Wtg3Euoau0L cALREuPaH4AnA0/UCppcwiYdwLRvDy7/DrYoF2oUA8ucQJZsMXxG2I/jbAtXrj9E2GqEx7AAp2sdXpJB 0EWhXjFk4QT6J+eDss5hZEofQVysgl2jB6nX4rM9BLvOgsUJByruPdNwAl9/7lJGGw1R6RNck3Yh7Kfw yRHE6vtphHUUrDYKBWWdw5zA6uaOzx/6hvzKHohKOrDgnsZHK40tRosNksSycw55UuVz7juoMYXLmgyI EzUjWdwCo1kHctQJ81AItHMbpN+HO4S6nRM4X2L2HUl6xT4jgcTsdpg8NjicU1iZdSBEMdBO+VBep67n BM5KZ6hTggEc4xFIk3Qg5POAdGvh9prYdtbxZpxGVaO6nBsoNLDAIE7w63C1UAXGRYNanWUrMYMOWPBB xw6SvPvGARUYqGjhICLja3E5pw2WJQ82PAvwB+eht5kgb1PvVhAPLnIC56ST3tPCAXYSCaRI2tjxncPY u3FUNz7+LhDfUmZliY9yhn8f8EonAiczXrMVELiU0QD2V67wU/Or49NzDh8Y/HsoId4mxghUU7EZ1TPJ wru5fH7Rof8FfwEbeIEBF9VbngAAAABJRU5ErkJggg== 23, 22 Pubblica mappa iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIfSURBVDhPzZPdS1NxHMb9p7qYN3ZTUV140VVeJhgYYm2D LSgNixQSNSq0dJqaziw1M3sBNXPTTTdFJa1Y2tybmtOGK8fafufT+U5Yp8ugiw6cmwPPy/d5nlNQ8F88 vaM+el7M8Whklu7nXrqGPXQ+m6Zj0E37gAvH03e09k/y4PEE9/vGaXGOkTcuYA2F0hQZpUhnFamM4kda kUwpEgcae981dvY1thIasW8a4V2NIydLD0lEWcC1HQvY73iprPdQcctL2U0vJVUzFNvcnLjkouiCC9N5 N8esfoI7BgKxLcrWRg8LX8AbgMlVeLWkMTin6HEpWsez3H6ZoXboJ0ftEda2DQRys9g2N8ww+xndJkT3 IBjnD3CdDja3JSi0hglsGggkMLlZCKY+wGtdecin6HUr2kR5NMONJylsD/cpvxvHZAnzMcbvDCRtCUwI 3ixrbOjKa9vwaRNWIrC0Af61w9PO1UdzBKv693yIUpWkLQTDfoVzWuGYyNI4kuZ6/wH2ziSVLbuUNcQo qVnHZA7xPmQgkJ6lKiHo08GiLApG5akVGFuEM5dXcwTLuqu8AxmJ9Gxt8tD+NkvdQJJqZxKLI0H5vXjO tigL+PTFeQotIRaDBgJZmIzkarOPakeAa91fsTm2qWjeorRpk7N1MYprohy/EqFIr/BUVTRXd96BzNO4 MBmJ9CxVSdpyjtwstkVZwPPrBgJZo7D97fvPfuJfzsJSIcPgSG8AAAAASUVORK5CYII= 23, 22 Schermo intero (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 23, 22 Visualizza il pannello di destra (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 23, 22 Visualizza il pannello dei bottoni (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIYSURBVDhPtVNPaxNBFO9HyEfYj1AUPHjK0eOiDeSYQg89 qAQPEgRxKQjBYBuRosHSXatiI6nupXaN1q5oa4tIF2s1tmGzLVHTZpuObpX+0fx8M1NYSyM5+eCxb4b5 /XlvZzo6/kdMLwS4U1xH+m4FfcNLGCyUMf7qM9pqvXO3kZ9qQC+uwavv4tvWHliwS/UOruZLSOsOiq9X WxNx8AN7E/6PJmwH0EYBNS2T17bD4G42cWlwBuMvyodJuPLGzyYMG4imAMMC2DZEeAxI3uR7DBUiOZd5 dpBg+v0WHs83hDIH88M8zFkgkZVfThZNMaoZdOsDcvk3Icm9p3V8Yb+E1WhS2s6aQCfVSi9DMksWKFSN IZF2sOQG6L4wFhJk7q+KgamaBHX2ylQoEwTm6naJQVFtKHEbNT/Asdj1kODybZemvSfsSyAdTjByIpVN m9YEjKgmfU3U6t9xRB0ICXIPK1jxd6h3CVTinsjsqCSIqA6lJFBTNkrlKrrOGCHBxMxXWI4vBsSBkTgH ONSSR3OhNQefMEUalocxaxFXbk0e/BOZkQUs+79JdR9AIF4LB/tgzXDwad3HqdP64XswOVdFX24OboPu AqmomiP65slrvrdc3UCMrA8XZlvfxomXFZzvn4Lx5CPmF1ewRtOu1QPRM7fdRcr6v8B/P5Shwlv0XHyE 4/EbOHryGmJnR5AZet7+MbV9bS0O/AGd2vKsTr+IQwAAAABJRU5ErkJggg== 23, 22 Aiuto iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC 23, 22 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 Sostieni lo sviluppo dei nuovi aggiornamenti di QuickRoute 3, 0 591, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 239, 22 &Nuovo... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= 239, 22 &Apri... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 239, 22 &Salva 239, 22 Salva &con nome... 260, 22 &Immagine... 260, 22 260, 22 260, 22 &Informazioni del percorso... 239, 22 &Esporta 239, 22 I&mporta percorsi... 236, 6 236, 6 239, 22 E&sci iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAexJREFUOE9j+P//PwMlGK/myVu+xUze/HXHvN1fHy0/+PXIyoNfp6w69FUK2UKcBvRt +LoDiP90r/v6vHHFl8f1S77cmbvz62OgAZ+QDYEb0L3q1f9lJ74agEwHalrWv/Hb79RJ7964FJz4bZ26 /Y95wpbv7hV3P87c/vUN0ICbMFeADQAKcDYuefl/3oGvV+tXfG2YsOnbn7ie5/9cC47/t8vY/cs0ds1x l/ytDy3jl/8J63j3c+mBr/dRDABximc+/5816/P/wjlf/kf2fHxhlbzlr0Xihh+msSvzQfIBtdtVDCMW v3Atv/2+YemXPRgGJPU9++/d9OZ/dO/n/2Vz3vzX8J602iRmhSNMoYJDHbNd1qHfrmV3Xjes/HIIw4Cg 5qf/zYrv//dsegV2SWLPo/91i99aIhnAapd56K9X3bNvzSu/bMEwwKni8X+Homv/rTKP/zeJ3/bfMGrt fw2fqUB1kHRiFrdeyTbz4L+Altd/C6Y/LsUwAD0xgQIWWUzda5K7a9ntP2mT3//r3fCVjaAB6AZapOy7 GNLx4V9Y3flcohISTFFc33slh/wLMf4tH/75VV75phUwm5EkAzyqHzv7t3z65VFy8adx1CovdJcRzEhR vZ8jnUuuNZrGrBPFlukIGkAop1JsAABuDMymYL0yPwAAAABJRU5ErkJggg== 210, 22 &Passo indietro iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAd1JREFUOE9j+P//PwMlGK551aGvUisPfp2y/ODXI/N2f33Us/5LSuXCL5yEDAcbANIM xJ/m7vz6uH7JlzuNK748bl315U7Foi+fKxd9ScVnCMyAmzO3f33jXvngvXnClu9WKdv+OOQe/5oy+fOL wjlfXhTO/RIGMmTZia8GDkXXgEyEt8EGLD3w9X5Yx7ufZtHzf7vkrb9pGrvmGBB/MYvf/Dt58ue/6TM/ P8ue+yVy3oGvV60zj/8HuhbuNbABDUu/7HEtv/Ne3avnVkDtdhWQmGnsynzj6OVfdQJm/wrt/Pgc6JL/ WbM+/zeJ34rpgoaVXw65lt97pebZd1jBoY4Z5kSTmBWOGt6TVpfNefM/uvfzf++mN//1QhdjGtC88ssW 7/oXXzW8J98EGsAKM2DK1q+6QAy22bPp1X+z4vv/NXymYhpQMP1xaWDrm79GkWt+AQ3ghhkACjAroJ9N 4rf91wtZAtas6taFaUDvhq9saZPf/3Mtu/1H3WuSO3IoIwcYtuiEJ6SwuvO5IR0f/lmk7LtIKPFgRCNI QCtgNqN/9bWX/i0f/jrkX4iJ63uvRIxBKPkAaAifT+XNUwGtn796VD92JtkAmAbvhlehUb2fI8k2gBiN MDUUZWWQIQCu1sRwfRrh4gAAAABJRU5ErkJggg== 210, 22 &Passo avanti 207, 6 210, 22 Cambia il &tempo iniziale... 66, 20 &Modifica iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAi9JREFUOE+lk0tPU1EUhfunHJQJTtSoAwaOZCgJJhiC0ibURMGgkSYSwKgBhYKIUEQB EfGRACIttDwDRKqmFkuhLZWHLVWa2p77eXdN6nVoGNzJTda31t5rHxNgOsx3KLEYmxKJhKlnZI7ul7M8 Hp6h64WXR0MeOp9P0THgpr3fhePZe1r7JnjwZJz7vWO0OEcRXQ4gYg2F0hQZpUhnFamM4mdakUwp4gca ez80tvc1tuIake8aG7saR06W6HodIM4irutYxHbHS0W9h/JbXkpveimunqaoys2JSy4KL7gwn3dzzDpP cNsAkNjibG30sPgVvH6Y8MHrZY2BWUW3S9E6luX2qwx1g784atskEDMAZGaJXdkwzcwX9JgQ3oPgDv+I 7bq4si1OgXUDf9QAkIXJzAKY/AhvdOfBOUWPW9EmziMZbjxNUfVwn7K7O5gtG3yK8HcHsm1ZmADermis 686BGHyOwuomLK/DfODPaOfqwzmAT/+fX6JUJdsWwNC8wjmlcIxnaRxOc73vAFtnkoqWXUobIhTXrmGu DPEhZABIz1KVAHp1sTiLg9F5chVGl+DMZV8OsKKnyieQI5GerU0e2t9lsfcnqXEmsTjilN3bycUWZxGf vrhAgSXEUtAAkAuTI7naPEeNw8+1rm9UOWKUN29R0hTlrD1CUW2Y41c2KdQrPFUdztWdTyDnabwwORLp WaqSbcs4MrPEFmcRL6wZAHLTQvvfL/8WDvOURfsblYYTxd5DjEEAAAAASUVORK5CYII= 316, 22 &Schermo intero iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 316, 22 Viusalizza &pannello di destra iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 316, 22 Visualizza il pannello dei &bottoni 69, 20 &Visualizza iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAA2ZJREFUOE9tk21Mk1cYhp8YozIgi6sgbrjwsWkmgsoSVBTULUvRKRjoNrSCICnifpg4 LTo/IRqgaBlgCxQVtQgoko1RRAsGKEhr0b3vaFdaLKUVBSJ1qKDgZ+69g/iDyJNcOSdPzrny5OQ+RFPU BtHlgNTselFGkUaSxbFPok7hJ5UHTXV2Ui84pixAKL7+e3pB+0ulqgt1LT1o0NrRqLOhtqnztTi7QfV1 zIWlU4p8vz2zPjJRNpQuvYxT8iqUVLahlX0MDePE1Zu9aNA9wIOHgyi+cmc4OEYZPUnCW6EIEiTljPT0 WPHq5QuMjT6HxWLB+Yp6nP/ThnM1vUhTmHBF7cDw8DMUlreP+X13dvm4hLdSPs1vddatG00stB1D6B14 gfc19K8T0oIqpOYyOKKwIiWThVrbj6dPhpDwax0zc0n+dPpoaV5YqKAISScMiE9jsec3M8rV/Xgy/Gbc M/r8GST5lUg8qsXOLAsS0hgYrU40tpnhsVrBJ/I9mR0sbETU3rvYnv4PkjPNEGVYcLjIDsYyMi5592YU OQVXEbn7JjYfMCHuKIO8MgPcgnPlRN5Slf8mNaLEfyP2sBnbj1shyrQhKWOCSzecGHv1v+YtzimrsSa+ EqHJDHwi1SD/k/Wc4HQ9La7G8h1/4YdDXdh6rBtx6d2cyDbOj4es+CXfAb1p4m30t9uwMVEO+koG8pE2 E30qLyFfFaav0iEozoCN+7rw05FuCDnRtjQObhUcvIeo1HsQy+6jiRmB3e5A7ukSzFwkqSCaJ4sjl3y4 LcvBjJA/wOPfReA2MzemGWt/5tjF7UWdCBQaMIffDpfwFgTEahG7vwW0QJ5C5Cn92HtF3qNWjQZnlDWI 3lUKn4hqeEXo8PlmI/wEJvhGG+G9iYUHX49ZYdzFwFrQ/JKnxDvlMRGoL0tFqsZu9PUPwjnYD6OhA4UX G5BwQIXweBUWR1+Dz/paeK2rgj+/FAs3KEGeij2T0ugaJMtrvu2AwdKHsmt2sJ2PMDAwgPsOGxi2A00a HWrqtCiu0MMrRFr84X/grf1s2tydnVvEraAvmuEafgtLhHpE7Ga5jBiwJoWF5zfXQbNEvTR7VciHgrmR bvRJGJ/cw46Ra3I1uUiM5F74kKOPXLJMXE9F7uEZNDtUQJ7fz3sv+A+84CDTIQAbtgAAAABJRU5ErkJg gg== 389, 22 Apri in Google &Earth... 389, 22 Apri &molti file di QuickRoute in Google Earth... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+QAA CvkBtGHeGQAAAptJREFUOE910+tPknEUB3Be9g/0uq0sW7et0uUktWleAyRAMVRy6kzHMgXvTm0GS0my pibl8pJWcxqXhqCAosDAB3i4CYiZpWvaWuuF8w/4Rm213HpenBe/s53Pztk5PxoA2p8o75zKy+CKa/hl Te08YbM8k9s6ksO/r2IJpFamQBYqre4fLxENP/235m/xr2RCheV7fPYw4lMkuMKQQSGbxsCgEZ3PXHg9 aUCIWECrdHSPEkisMH+Oz3mOuJQGJDO74VTNwOsMQUsewG7fQMi9gnrpSJASuFBs2PgN0MWgs6XwEyvY 9geh9x3AFfiKHdKF+q6JVUqAKVmOnmeO4mRshPSCh4haDfDMWeB0bcJLhBB2kWjumjBTAqO6pbD40STy hH3glClgV2lBaNX4ZI/ArjFj+b0DNXcHVJTA7o990mDzg13xBPnCfkQDJD46wlh/q0dUQ8JqIyGs7Juk BDa2v/kCkS8oFg2CXS6Hxa3HB6sfOyE1tggCq85FFAllQ5QAo94crWyfQzK7G9c5D2AwaUBMO2GaiMDv 3AMR8KFaouylXmO5yXcs40VsjRKkcnth9NjgcOqwtuBAhAxBrfPhTpOymRK4KJwnzzDGcIIuQbZAjojP A8KthttrjI2ziVezftxrU1ZRA6X6GDCOU2mNYJUqEHL5Qa4vxDoxwR80451mBbUtQ0WUwCWhnjzLHEfc 1QZc4/XAvOLBlseCQHgJWpsRHXLlvqhBlkgJXBbOec8xx2KXKEGmoCd2vouYeTMLccfjXSa3SsZgFR6v bWw79H8OPegVuuDp3JexDiRIym0F/3bLWlp2SV16Vv5RNodH4/KKaLWN7dTALfFUagJToUvKrZvPYIkK s3I5R1hsDu1GfgHtJo//X+An6VOqVy8U1mMAAAAASUVORK5CYII= 389, 22 &Pubblica la mappa... 389, 22 Aggiungi tempi parziali da &WinSplits... 71, 20 &Strumenti 143, 22 &Linguaggio... 87, 20 &Impostazioni iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 205, 22 &Aiuto... 202, 6 205, 22 &Riguardo a QuickRoute... 48, 20 &Aiuto AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIABKjOQBZCx0Aa35v8HtOb/B7Hm/wiu 5v8Iq+b/Cajm/wmk5v8Koeb/Cp7m/wua5v8LmOb/DJTm/wyQ5v8Njeb/DYrm/w6G5v8Og+b/Dn/m/w58 5v8PeOb/D3Hf+AYuXKAAAACAAAAAgAAAAFsAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAABjAAAAgAEYG4gEj6bIBcTm/wXB 5v8Fvub/Brvm/wa45v8Hteb/B7Lm/wiv5v8Ipt/4CJHG4AZumcAGbJnAB2qZwAdnmcAIdbHQCovX8AyR 5v8Mjub/DYrm/w2H5v8OhOb/DoDm/w585v8Oeeb/DWXG4AMaM5AAAACAAAAAcwAAABYAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAFC SZgEwdfwBMzm/wXJ5v8Fxub/BcTm/wXB5v8Fvub/Brzm/wa55v8GlLzYARUbiAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAIjM5ALmeb/C5bm/wyS5v8Mj+b/DYvm/w2I5v8Oheb/DoHm/w595v8Odt/4BzhtqAAA AIAAAAB7AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABYAAAB7AAAAgAF2fbADz9/4A9Tm/wPR5v8Ez+b/BM3m/wXE3/gDhZnAAl1tqAXC5v8Fv+b/A2d9sAAA AIAAAABhAAAAQgAAAEEAAABBAAAAgAAAAIAIjMbgCqHm/wqd5v8Lmeb/C5fm/wyT5v8Mi9/4DYzm/w2I 5v8Oheb/DoLm/w5+5v8IQ32wAAAAgAAAAHsAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAA8AAABrAAAAgAF5fbAC3Ob/Atrm/wLY5v8D1+b/A9Tm/wKrvNgAGBuIAAAAgAJR XKAFyOb/Bcbm/wJOXKAAAACAAAAAIQAAAAAAAAAPAAAAYwAAAIAFaoy4CKrm/wmo5v8JpOb/CqHm/wqe 5v8HXoy4AzBJmAuFz+gMkOb/DY3m/w2J5v8Ohub/DoPm/whFfbAAAACAAAAAYwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAAgABbXKAB4eb/AeDm/wHe5v8C3eb/Atrm/wKm sdAAAACAAAAAgAAAAIACU1ygBM7m/wTL5v8Deoy4AAAAgAAAAFoAAABKAAAAcwAAAIACOkmYB6/f+Aey 5v8Ir+b/CKvm/wmp5v8IlM/oAAAAgAAAAIABEhuIConP6AuV5v8Mkeb/DI7m/w2K5v8Ng9/4BCpJmAAA AIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAAzM5AA39/4AOTm/wHj 5v8B4eb/AeHm/wG2vNgAAACAAAAAgAAAADoAAAB5AAAAgAPM3/gE0Ob/BMHX8AAYG4gAAACAAAAAgAAA AIACXG2oBbjf+Aa85v8Gueb/B7Xm/wez5v8Iqt/4AzdJmAAAAIAAAABTAAAAgAIkM5AKl9/4C5jm/wuW 5v8Mkub/DI/m/wx9z+gAAACAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAA AIAAxsHgAObj/wDm5f8A5ub/AOXm/wDU1/AAGxuIAAAAgAAAADoAAAAAAAAAWgAAAIABkJnAA9bm/wPU 5v8Dyt/4A5+x0AOUpsgEtc/oBcfm/wXF5v8Fwub/Bb/m/wa95v8Gs9/4AjpJmAAAAIAAAABjAAAAAAAA AFsAAACABVl9sAqh5v8Kneb/C5nm/wuX5v8Mk+b/CF+ZwAAAAIAAAABaAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAAfXewAObd/wDm3/8A5uH/AObi/wDm5P8AfX2wAAAAgAAAAFMAAAAAAAAAAAAA ACIAAACAAAAAgAKosdAC2Ob/A9bm/wPU5v8D0ub/BM/m/wTN5v8Ey+b/Bcjm/wXG5v8Er8/oAj1JmAAA AIAAAABjAAAADwAAAAAAAAASAAAAewAAAIAIndfwCaTm/wqh5v8Knub/C5rm/wuS3/gBERuIAAAAgAAA ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHsAAACAANfI8ADm2P8A5tr/AObc/wDm3/8A19LwAAAAgAAA AHsAAAASAAAAAAAAAAAAAAAAAAAAMgAAAIAAAACAAZOZwALT3/gC2Ob/A9fm/wPV5v8D0ub/BNDm/wTA 1/ADh5nAAAAAgAAAAIAAAABjAAAADwAAAAAAAAAAAAAAAAAAAFIAAACABF99sAir5v8Jqeb/CaXm/wqh 5v8Kn+b/B2eZwAAAAIAAAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAACAAH1wsADm0P8A5tP/AObV/wDm 2P8A5tr/AIyGuAAAAIAAAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAgAAAAIAAGhuIAVhcoAGS mcABkZnAAXZ9sAFESZgAAACAAAAAgAAAAIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAA AIAHrd/4CK/m/wis5v8Iqub/Cabm/wmd3/gAAACAAAAAewAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAgADX uvAA5sr/AObN/wDmz/8A5tL/AObV/wAzMJAAAACAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACIAAABaAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAcQAAAFIAAAAiAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAFoAAACABY6x0Ae25v8Hs+b/B7Dm/wit5v8Iqub/BVt9sAAAAIAAAAA6AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAqAAAAgABJPJgA5sH/AObE/wDmxv8A5sn/AObM/wDPuugAAACAAAAAaQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAiAAAAQQAAAEEAAAAwAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAgAJbbagGveb/Brrm/wa35v8Hs+b/B7Hm/weO vNgAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAIAApoPIAOa6/wDmvf8A5sD/AObD/wDmxv8AppHIAAAAgAAA AEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIABFxuIBcPm/wXA 5v8Fveb/Brvm/wa45v8HtOb/AAAAgAAAAIAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACAAM+d6ADms/8A5rX/AOa5/wDm vf8A5r//AIx2uAAAAIAAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB5AAAAgAXD3/gFxub/BcTm/wXB5v8Fvub/Brzm/wJKXKAAAACAAAAAIgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAACAABsTiADm qP8A5qr/AOau/wDmsv8A5rX/AOa4/wBcS6AAAACAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAIADssbgBMzm/wXK5v8Fx+b/BcXm/wXC5v8Df5nAAAAAgAAA AEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAhAAAAgABcPqAA5qD/AOaj/wDmp/8A5qr/AOat/wDmsf8AMyiQAAAAgAAAABEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAACAA7bG4APR5v8Ez+b/BM3m/wTK 5v8Fx+b/BJix0AAAAIAAAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAIAAilq4AOSY/wDlm/8A5p//AOai/wDmpv8A5qr/AAAAgAAA AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAGQ mcAD1+b/A9Tm/wPS5v8Ez+b/BM7m/wOuxuAAAACAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAJZdwADij/8A45P/AOSX/wDl mv8A5Z7/AOah/wAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQQAAAIABk5nAAtvm/wLZ5v8D1+b/A9Xm/wPT5v8Ds8bgAAAAgAAAAGEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACV V8AA4Ib/AOGK/wDhjv8A4pL/AOOW/wDkmf8AAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAZaZwAHf5v8C3eb/Atvm/wLZ5v8C2Ob/A8jX8AAA AIAAAABxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQQAAAIAAk1HAAN1+/wDfgv8A4IX/AOGJ/wDhjv8A4pH/AAAAgAAAAIAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACXmcAB4ub/AeHm/wHg 5v8B3ub/Atzm/wLT3/gAAACAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAJFMwADbdf8A3Hn/AN19/wDegf8A34X/AOGI/wAA AIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAA AIAApqbIAOXm/wDk5v8B4ub/AeHm/wHg5v8Bv8bgAAAAgAAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACPRsAA2G3/ANlx/wDa dP8A3Hj/AN18/wDegP8AAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAGEAAACAAMbC4ADm5P8A5uX/AOXm/wDk5v8B4+b/AcHG4AAAAIAAAABhAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAA AIAAjUHAANZk/wDXaf8A2Gz/ANlw/wDac/8A23f/AAAAgAAAAIAAAAACAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAgADGv+AA5uD/AObh/wDm4/8A5uX/AObm/wC6 vNgAAACAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACIAAACAAFQjoADTXP8A1GD/ANVj/wDXZ/8A2Gv/ANhv/wBXLqAAAACAAAAAIQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAA5tn/AObb/wDm 3f8A5uD/AObh/wDm4/8AmZjAAAAAgAAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAgAAYCYgA0FT/ANFX/wDSW/8A1F//ANVi/wDW Z/8AZjKoAAAAgAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAA AIAAMy+QAObU/wDm1v8A5tj/AOba/wDm3f8A5t//AG1rqAAAAIAAAAApAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACAALlE6ADP T/8Az1P/ANFX/wDSWv8A017/AJpGyAAAAIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAADIAAACAAH1vsADmzv8A5tD/AObT/wDm1v8A5tj/AOba/wAbGogAAACAAAAACgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABKAAAAgAB7KbgAzEf/AM1L/wDPTv8Az1L/ANBW/wC9UOgAAACAAAAAaQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAAgACxl9AA5sf/AObL/wDmzv8A5tD/AObS/wDP v+gAAACAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAIAALQ2QAMk//wDKQ/8AzEb/AM1K/wDOTv8Az1H/AC4TkAAA AIAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAA37j4AObB/wDm xP8A5sf/AObK/wDmzf8AjH64AAAAgAAAAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAgACiLdgAxzv/AMk+/wDK Qv8Ay0X/AM1J/wCVOMgAAACAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgAA AIAAfWKwAOa3/wDmuv8A5r3/AObA/wDmxP8A38D4ABsYiAAAAIAAAAAaAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAA AIAAXReoAMYz/wDGNv8Axzr/AMg9/wDKQf8AxUP4ABgIiAAAAIAAAAAiAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAACgAAAHMAAACAAMaU4ADmsP8A5rP/AOa2/wDmuv8A5r3/ALGT0AAAAIAAAABaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAoAAABzAAAAgAC2KfAAxC//AMUz/wDGNf8Axzn/AMg8/wCGK8AAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAAACAAG1MqADmpP8A5qj/AOar/wDmr/8A5rL/AN+v+AAb FogAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAIAAWxKoAMEo/wDDK/8AxC7/AMUy/wDG Nf8Axzj/AEATmAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAACAABsSiADVjvAA5Zz/AOag/wDm o/8A5qf/AOaq/wCZdMAAAACAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABzAAAAgACc G9gAwCT/AMEn/wDCKv8Awy3/AMUx/wCyL+gAFwaIAAAAgAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAACAAAAAgACt bNAA4pD/AOOU/wDkmP8A5Zv/AOaf/wDPkegAAACAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAOgAAAIAAFgOIAbgd+AC/IP8AwCP/AMEn/wDCKf8Awy3/AKAn2AAAAIAAAACAAAAASgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADIAAAB7AAAAgACHTrgA34X/AOCI/wDhjP8A4o//AOOT/wDdkvgAMyKQAAAAgAAAAEoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAAgAA8B5gBtxn4Ab0d/wC+IP8AvyP/AMEm/wDC Kf8AliLQAAAAgAAAAIAAAABaAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAgAAAEoAAACAAAAAgAB3P7AA23j/AN18/wDef/8A34T/AOCH/wDhi/8AWjmgAAAAgAAA AFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAGMAAACAADsGmAG2 FvgBvRn/Ab0c/wC+IP8AvyL/AMAl/wCtJOgAFwWIAAAAgAAAAHsAAABSAAAAGgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAQgAAAGsAAACAAAAAgAClUNAA2Gv/ANlv/wDac/8A23f/ANx7/wDe fv8AekewAAAAgAAAAGsAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAPAAAAYwAAAIAAOwWYAbUT+AG8F/8BvRn/Ab0c/wC+H/8AvyH/ALoj+ABpFrAAAACAAAAAgAAA AIAAAABxAAAAYQAAAEIAAABBAAAAQQAAAFkAAABpAAAAgAAAAIAAAACAAFQjoAC9UugA1GD/ANVj/wDX Z/8A2Gr/ANhv/wDac/8Ad0CwAAAAgAAAAHsAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAApA5ABoA7gAbsT/wG8Fv8BvRj/Ab0b/wG+ Hv8AvyD/ALMh8AB1GLgAKwmQAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAYCIgAcCewALFB4ADP T/8A0FP/ANFX/wDSWv8A1F//ANVi/wDPY/gAViqgAAAAgAAAAHsAAAAWAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 quickroute-linux-upstream-2.5/QuickRoute.UI/Main.lt.Designer.cs000066400000000000000000000000001446222606700245440ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Main.lt.resx000066400000000000000000003267161446222606700234120ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 786, 354 0, 354 5, 370 233, 370 0, 370 0, 373 0, 473 1024, 498 233, 123 233, 88 Tarpiniai laikai 0, 207 0, 210 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4 /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9 cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC Perkelti histogramą Žymių juostos plotis iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= Naujas iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0 BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5 F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp 59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W AAAAAElFTkSuQmCC Atidaryti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= Išsaugoti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAddJREFUOE9jYKAl mLTlW8zEjV93zNz98dGyA1+OrNj/ZcqyI1+liLKzd8PXHfUbrvzpXvf1eeOKj4/rF3+5M3fnx8fLdn39 hNWQ7lWv/i85+cUAZHrX2i/L+uff/53S8+qNS/yJ31qp2//oJ6z/bl929+PMrV/frNr/5SaKK1Ye+8fZ uOTl/3n7v16tX/61oX7TlT9x9fX/XAuO/7fL2PTLJHbVcfv8rQ+14uv/hHW8/Ln4wOf7GN4onvn8f9as z/8L53z5H9n17oWV/Za/ZtGLf5hEr8wHKfat36FiGLzghWv59ff1S7/swTAgqe/Zf++mN/+jez//L5vz 5r+G16TVRlErHOEKQ0OZ5eMP/XYtu/O6fuWXQxgGBDU//W9WfP+/Z9MrsEsSex79r1341hKm0Ng4jdXO fv9ft7pn35pWfN6CYYBTxeP/DkXX/ltlHv9vEr/tv2HU2v8aPlP/wxSaJK5Rss2s/2ffsv9v/rRHpQSj EhSwyIrUvSe7a5Vd+ZMGDNz6Vf/ZCBqArsAiZd/FEKDmsLqzuSRpTuz7oGSfdz7GH6jZrfLKNwaG/4wk GeBR+cTZp/7pL/us/T+NI1d4kaQZpDii53Okc8nVRoPElaIka6aLBgBeqPIjNLWeAwAAAABJRU5ErkJg gg== Anuliuoti (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAclJREFUOE9jYKAW WHbkq9SK/V+mLDvw5cjM3R8f9az/klK48h8nUeaDNC/b9fXT3J0fH9cv/nKnccXHx62rvtwpmf/lc+XC L6kEDVm1/8vNmVu/vnEvf/BeP2H9d62UbX/sc/d/TZn87kXhnC8vCuZ+DgMZsuTkFwOHomv/MQxcfODz /bCOlz/lo+f/dslbf9M4es0x09g1X+Tj5/+2n7z/b/rk98+y5n6OnLf/61XrzOP/Vx5D81r90i97XMuv v1f16LnlW79DBWSDSfTKfLXIpV8lfWb/8m95/xzokv9Zsz7/N4nfiumC+pVfDjkV33ul4tl3mCE0lBnm RKOoFY4aXpNWl8158z+69/N/76Y3//VCF2Ma0LTi8xb7ohdfVbwn3DQ2TmOFGTB562fdKVu/gm32bHr1 36z4/n8Nn6mYBuRPe1Rq37r/r6TPml/irsXcMANAAWYF9LNJ/Lb/eiFLwJpV3bqweGHVf7a0+vp/WmVX /qh7T3ZHDmWMAMMVp2F1Z3NDgIZYpOy7SDDesSv4z+hdee2lfcv+v/Z552MS+z4okWyQisdiPq/Km6cC Wj999ah84kyyATAN3o2vQiN6PkeSbQBdNQIAlV/obSdKz9wAAAAASUVORK5CYII= Perdaryti (Ctrl+Y) Padidinti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFZJREFUOE+t08EK ACAIA1D//6cNgwItpc28eXkgmyJ+NOzwakALUZsOMoEOsgEWcQCDHACKXAEESYFXpDphxVv2xMXIRBo7 APcitpAC4gPByHfAwPTBBlc83yF9awZeAAAAAElFTkSuQmCC Rodyklė iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+lk1EO gDAIQ7n/pacjYkZXKiqJP7I8utKZmY3z+1UTUEGiJ4eMWQTi/6OUUnZohTq8GOJXryah7BKSAGJSH6A8 YV5sCoRx6M3uAdLUdqJHFVzNKgdp7WmNnb1jbNHdVnhWCKbwE4CqUul7en2vVTCgeqX3+QPJfiLsN/lb UAAAAABJRU5ErkJggg== Atitaikyti prabėgimus iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHRJREFUOE+tktEO QBEMQ/f/P+3eScjaTIeQeECdTdXMrP1zZ7huTNCnm0RscXDRfiY6ieddx/oJTyArOOyr9s4B1N4dQEC0 B/AWNLb+Bb481sHYdQ6yyyE0ZU7gG5PKZUrZaZWLFMYtXgGYfAx5DnBg6b6LPqqAPtCiiFafAAAAAElF TkSuQmCC Pridėti tarpinius laikus iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+VUwkO wCAIw/8/2ikbBDlGNSFGbSsUHUQ0V+wxvhmdhEdzDyOECBwcXlyIpHhU5BfXiXTnXHoFgshingdfkYOI MVfbhrSJy3GB8l4vEj/gDPzNcCYZUT3pSvJPOUvX7oWn7wmdgPikxlrF6mO1GOtB1bKAeQAs87pIvaRg qAAAAABJRU5ErkJggg== Iškirpti prabėgimus iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGhJREFUOE/dUssO ABAM4/8/mkxM9jbhZIlLTXVda9HVBFSNHhOCh00WYPOEPOqhQ+SSsH78lYKRCld2VsXqI/Pi3MwXT8U7 AmSyPIC7tA+nJsJqrtc4SDZBSgVqERkJpJvJplv1fUhSOn+NLuJnPPHjAAAAAElFTkSuQmCC Padidinti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGFJREFUOE9jZMAE /9GEGLGowSoE0vgfHYDEoBivORgacRiE0xCKDCCoGaYAl1fgBiD5F+ZvlHChvQGE/IIvNgjpJRiVFBsA il9CCYmgK2CJBCUGkFIOsjixqRtD3TA0hAEAAXNGypSlAlQAAAAASUVORK5CYII= Sumažinti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA29JREFUOE9tk3tM 01cUx4+GTBDYlFHFSFwZumViZZgNNjZgI1mKRsEgbCjymivi/jBxDufmo5AtUDt5lYeCASJqUSQb9ueD guEpLXX6+0lraaGUVhSI1IGAgs4t3/2EucTISb45N/ec+8m9N98zj+YI8TdKP/93PIMXvb5g5Ty+/mB8 ymbsHdPUl2/Tz9X//57/FqXf1vQrv0lLOp9UMT243NaPRo0NTVorVKruv/bKG5gPYyvfnxPyVnjp+siU 3NHMnLM4WlyLipoOtHMP0Mo6cP7qABq1d3H33ggKlX9MBGw5Gf0SZFHQibUbkuST/f0WPH3yGNNTj2A2 m1FZ3YDKC1aUqwaQUWrEObUdExPjyFNenxZ+UR70H0Q6Xxgsu1bfzEHTNYqB4cd4EaN/OpBTUot9+SwO lVqQls1BrRnCw7FRJP/IsBQmdSJnkSIkOOY4dvyiR2IGhz15JijVQxibeDbDmXo0jiOKGqQc1mCnzIzk DBYGiwNNHSYIQsrERD5y+br4JkTtvYGkzNtIzTZBkmXGweM2sObJGcg/z6aQW3IekbuvYvN+IxIOsyg4 o8fCgLxiIu8cxneTGlHptxB30ISkny2QZFuxI2tWp+sdmH76HPM3yqvqEJZYg+BUFsJINchX3kC0vKCB 1tQh6OubiD3Qg23SPiRk9vEg64y+PGDBdwo7dMbZv9F1dmBjSjHovSLQil9biLyKKsiHgdMnWqxN0GPj 9z346lAf4nnQ9gxefI75qRdR+3qRXnQHzewkbDY78gsrsGD1kerngARyUcAtIBevBf6ON8U3INpu4q9p wmff8trFryXdEMXr4Sm+DpfQNvjFaRD3QxtoZXEa0WLZG94f5N9vb23FiSoVonedgjCiDl4RWqzYbMDb MUb4RBvgvYmDQKyDcwh/UHQRtKziIXkVCGa9sOq0hGnqw+DQCBwjQzDou3DsZCOS9zMITWSwJvoShOsv wuvzWviKT+HdDVWgJaV7XnLjQlFhQUunHXrzIM5csoHrvo/h4WHcsVvBcl1obtVCdVmDsmodlgYeLXt1 HjzCl88XpHZvTW/n39YC19Br8I/XIWI3x3tEj7A0DkvCr4CcJAPk8VHgqwBBrBstDhGT26dScpXUkbPM QO6Ke+R+bJBcZEZyTWXIPTSLPD6OIU/xsheAfwGlxB/RJA0wNgAAAABJRU5ErkJggg== Atidaryti Google Earth programoje (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAApBJREFUOE+FkltI k3EYxjVHSSCR2bVQlpEFHQzDqYuyPG01lmXMnKImWWHq54EMGpgrD60itVaRh8xCNLepc7rN48bmt+3b yW3OzNIkvYguzC6Lp8+g8KLP/lcv/5fnx/O+7+Pvt+ZliduTFyap0JAgVvAP+G359j1gqz9r47ZNAayQ n/4bgoODNlvBClxub8y/vlb3t47MHPgSnvAE4bEEorgSSCUdqG/Q4NZjM9rb1HCTgygVNy3+U7z6eThH +zE88SnCYksQzauEqbsTNpMbSmoFBsM03JYxFFQ9dzECIoTq6d8AdjHY/Co4yDHMOVzot6/A7FzCPGVG kbh5ghGQUjzq289rwi56hOPn7sI3roZVNQKTeQY20g2PmUK5uFXHCGjqHfYU17UhWXQPgiwpDN1KkEo5 Phi8MCh0GO0xIv/ao25GwKevy5Ra7wA/5yHOiB7A56Tw3ujB1Jt++BQUxvUULubWtTECpuaW7E7vAtKv NoCfXYsRSz/ejTsw75ZjliQxYRpCmkjSyLyDIo0v96YK0fxKxAtuQ61VgOwwQdvqhcO0CNJpx2VCVsMI OJSttYeeeEafkUDc2RporHoYTX2YHDTCS7kh77Mjr1RWzgg4IBqg9nKbsZNNIEFYC6/dCtIih8WmoceZ wcsuBwoqZHnMgAwVDWjBbk4pTmdI4TY7QE0N0k60cLh0eKugg1RWf2EdByoqgteCsJgSHEuthm7Milnr CJyeYSj1GpRVy5bziTtHGAEHRb22fbxmOokETgqr6fgOofN1Fwor7n/mCi5JUlIEOxjFqw12To9rT9IL 2gGBo0k3kJZZNsk5lV4Yk5i6fV3hn6aQeBUXyZX2RSUVDsTzrpzncDID/yf8BQsufjAW7nzIAAAAAElF TkSuQmCC Publikuoti žemėlapį iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAh9JREFUOE/Nk91L U3Ecxv2nupg3dlNRXXjRVV4mGBhibYMtKA2LFBI1KrR0mprOLDUzewE1c9NNN0UlrVja3Jua04Yrx9p+ 59P5Tliny6CLDpybA8/L93meU1DwXzy9oz56XszxaGSW7udeuoY9dD6bpmPQTfuAC8fTd7T2T/Lg8QT3 +8ZpcY6RNy5gDYXSFBmlSGcVqYziR1qRTCkSBxp73zV29jW2EhqxbxrhXY0jJ0sPSURZwLUdC9jveKms 91Bxy0vZTS8lVTMU29ycuOSi6IIL03k3x6x+gjsGArEtytZGDwtfwBuAyVV4taQxOKfocSlax7Pcfpmh dugnR+0R1rYNBHKz2DY3zDD7Gd0mRPcgGOcPcJ0ONrclKLSGCWwaCCQwuVkIpj7Aa115yKfodSvaRHk0 w40nKWwP9ym/G8dkCfMxxu8MJG0JTAjeLGts6Mpr2/BpE1YisLQB/rXD087VR3MEq/r3fIhSlaQtBMN+ hXNa4ZjI0jiS5nr/AfbOJJUtu5Q1xCipWcdkDvE+ZCCQnqUqIejTwaIsCkblqRUYW4Qzl1dzBMu6q7wD GYn0bG3y0P42S91AkmpnEosjQfm9eM62KAv49MV5Ci0hFoMGAlmYjORqs49qR4Br3V+xObapaN6itGmT s3UximuiHL8SoUiv8FRVNFd33oHM07gwGYn0LFVJ2nKO3Cy2RVnA8+sGAlmjsP3t+89+4l/OwlIhw+BI bwAAAABJRU5ErkJggg== Visas ekranas (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAW9JREFUOE+lk01LAlEUhu3v9B8Cl9HCXxD9iRbVJqJFq6KwRZRQ0cciNDIIKqH8yCjT ESrNMtMcHUXHZhydcRzn401HCaTFFeaFc+Au3ue853LvmG1SgM2SegArZclspu82ipYR/hThSwq4TtTB 1FXwbUAzYMputyOTyfyr/vrdJiUvUW8biBXaoBgVoXTTBEqdPoEIqEbcqD4cg/bMo5WPoS4Dqj4YPwqg HNrDz6sPqe0ZvKxOQZe4fvaBiAmErwiY2x0UrtYhFhPQFenPzLd08gq6qoBL3oClzocmayILtqmRAfTF ypCxd1AlHtmTOdD+XTIg7ZwA+3jYhxgGpNI7lEYVpYALNcpLBjx7FsFFj9D4jsPQOogtjKPsd5kpehDi Ja7NTkPK3qPoc0IReTAfUQi1shlIrubIgNOtZaQ3HcifLSEXOECAASJ3QfBx72gPqRLeR0fkINfyYJ/c CPp9yDMVvG04wKX85ARWPtQv4a3juFJuVLsAAAAASUVORK5CYII= Rodyti šoninę sekciją (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAY9JREFUOE/Nk8lKw1AUhvXtXLpy46LVpeDCVxDFhQhFUQQF64DghIKiKBXnWWzs4ABJ bZq26RDUmra2JvqZttqoK7EbD/z3cM+95+P8F259XUOGupqiBKhFNTWXp7cW7XwBj7ubka4OPOOdhGbb uBtrInUyg/mcRZcF0ueLJI9n0H0raCEBX8KsTF5ajHzGamhF2x7iKbjK/cU8OeWSt1eT9MUKyno/8b0J EpsDpIJbSDocSVkbkL87Jb7WR2J3jHxS4jPezBeewl407zJ+VyPh0WYi/gN2FfBcPdoAYXOWs8A1qnaP uucmue/m1ShWQWYhh3Y6hy4eE3kw2A8VuIo924CAFGNHkJBjKvJyD9HV3grAsvAzxHSRQzFL1sAGSJPt pA6mMHKP5fv5iIC6NWx5HoRi5hujYDH1l0qp+oj+DTcR6RZZvCHgmca76EJY6udk3oXvJkRQVAjLCrFo lOiHVDVuAxzOFhwOR0VOpyVrX1JLq13/PP+SqxOIoshf9L8A5oeFUv6NyparFmr5UO/4ruHjx5E9cgAA AABJRU5ErkJggg== Rodyti apatinę sekciją (Ctrl+Shift+B) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC Pagalba 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 4/hxgw1+B66VXo7uyisJAAAAAElFTkSuQmCC Paremti tolesnį QuickRoute tobulinimą Nustatyti prabėgimų spalvą pagal... Pradinė spalvų juostos spalva Prabėgimų linijos spalvų juosta Galutinė spalvų juostos spalva iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAK5JREFUOE+lUdsNgzAMpIvQIbJD+YGRqNyVqjIP0EEI5yiOQkQeEKRTgmKffXcPrXVT 9TEBg4j0FUifaRaCFtceIGACVn7agAX4Am+gwzuGnRI80TAEBNsVAt7AJ/jj/0AwZjYQgg8af76E2Upg gldCwm0TEaMCOE8l5sTOsNYkYJv54txNEJg6qXUx5iZHCV2eBdPPauslWD3knxn9h1rnQYmBUQmSRKmR /rDqDXaG92MkHWJbbAAAAABJRU5ErkJggg== 23, 20 Nustatyti spalvų juostos intevalą iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAALVJREFUOE+tk1EO wUAQQOck3EHvwCFIOAl7AS7BAZyDL07BH98k682my1QlXcYmL520M29ntq3Ia0UTd4WtXL0RuqrMc819 SjTwkLyuDnJnrjP4Yvx/p4YQogfR4l6UOIAxzGEDOzjBHeIVjrCFFcxgJGnjJOiTVMHECPa14FYiyB1k wZoiFZyhJViy+/StAytYUKSCxggXCg5mBBUMzQiuQ+StVvWXqNfS1aix/0Gp4Jeaz+4HCfcWr/594rkA AAAASUVORK5CYII= 23, 20 Automatiškai nustatyti spalvų juostos intervalą Prabėgimo linijos permatomumas iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCwAA CwsBbQSEtwAAAL1JREFUOE+NU9sNwzAIZI7OU+Uvs3SNTpm/zOHmEOdiAo4jIUfgO15naa1J/ODL7P2R 9j0Q+sf14goBwSDwJGmmmD2CPQmSo4TtqWyC4gmCzUh2a6f3WGUmCeJsfzeSEyeIVsB9fvajYNgq2C9A gbSqX/hBPqxRp+j3KvK6XGdGEsFDC08kGbgksECvpAJPCRzJMJ+oF11jJSLqgivO7t3eQTJUVMAVq9hu W5g9JgrrOim2QfZpBROnyt5X8APmCAFYpeIP4QAAAABJRU5ErkJggg== 16, 16 Prabėgimo linijos plotis 40, 21 Prabėgimo linijos plotis iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUtJREFUOE9jZiAM mIBKVgDxLyC+SVg5qgpuIHcjEP/n4mL4nLCEQZcUAwSBireANPNJMPwv2snwv+Muw5OqYwzSxBgiDlS0 F6RZQIrhf9lBoOZ7ENx2j+Fk4TEGTnyGSAElj4E0iyox/AfaCNcMMyR1KcM6XAYoACXOgzRLaTH8rz2D qTluFsN/Vg6G/0A17eiGKAMFroI0yxkx/K87h6k5ahLDf2ZWsGYQno9sgBqQcw8koWTO8L/pCqbm0C6G /0zMcM1zkDVrAjmvQJrV7Bn+N1/D1OzXANcIsnkmutNngTTrejL8b72JqdmjDEVzMrbAYzMMZDjZdhtT s1M2iuZwnFHXcpNBGpRIYNEEoq3iUDR7E0w8QAPM6q8wfAO5xDQMRbM9Qc0wBa23GKIM/OCafwLFDYjW jKSwC8j+AMSg2CELgLIvURkGZDoAQru/Y4pi8sgAAAAASUVORK5CYII= 23, 20 Rodyti prabėgimo linijos kraštus 40, 21 Prabėgimo linijos krašto plotis iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4 /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9 cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j 3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC 23, 20 Prabėgimo linijos krašto spalva iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCwAA CwsBbQSEtwAAAiRJREFUOE9j/P//PwNFwMHhPwMROAqopgKbOmI0swA13gXiL0DMBTPEzvE/gy0QE2OA i6Xz/+9Axe+Bmi1ABoA0+1m9ZAi2eIjVAGmgooP2Dv8NrZ3+M5i5/D9Qqr16UrDFg5NWzv/THIEGAMUY mtSmMZRor2FgACpEwUDbak1c/v93cPgXGmN6RqBXsenPSwaGL2c5lf/7Wj9rM3D7z2ADNPgoty5Dge5m BgYXux9w7ODwg7FYe+3+VeKR/3fz2+5/zcBwDIhv3GNktrjILjf/JJf6lSUSoQxbBV0ZXgCjLt3gIAPD JTYxOL7IJqb6nIHh635esz2zZPP+V2ss/JtueEirUGcjg43jT8vj3Nr/PzAwJDwDagaqM6lXm5XC8BjI AeFHQPyGgWHiLNmiQ0A/6pm4/v9v4fx/jxXQuUBvMZi7/Oct0ln35Akj85+nDAzrgQZ8mipX9prhAVAj CAPDU+wxI9P3BOMzuSANwIBcBsTuyHFv6vp/a7dS+85HzDwTC3Q3fQNaVA0zgAvo15adAvZ/gCGvAApY bInG3vH/XBf7n7OCLB7yAi35DFSjxAD0zzSg01+e5lT9E2xx+xzQAEY8KTMeaPhhYJroA6o5ClLHkGJ0 pLJAb+ttH+vX54D+zSGQrPWB8iCbPwExKHkzMAA1cQGdcxOYuoBx/1+RgAFCQPm/QPwOiDnABkA1gAKr AIjxOR+mthGoLg9mEQMoO1OCAdqFoJDvYogQAAAAAElFTkSuQmCC 16, 16 32, 21 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCwAA CwsBbQSEtwAAAVVJREFUOE+Nkq9LBEEUx88fGOSiYhFcMZ5BgxaDl00mEQweFgVBELGJXhDEpoJgsSgG QeQQDLYFg1Wwq+HAYvAfkPXzPd8cz7k9uYUPb/bNvM+8ndmu90LLM01mDsbhG+rwBCl8htUjWfY7lMAY IB7CA9RgH3bh0nJ3xKWwPkMgQvEQE9e2cIFYdOJuxpOQQgY7mvOCPhIHcA8zrtB3N0j+xQR1YuIFU7bz YpvihPyrFW8Tb+DEC6okbqO2w+4qfrPiZdtgVRt6gQ7pOGf3MXIfVrzi5kuMT71Ap76VIxgm9whrfi4U esEZCy6gp80ZFHhqkBoTYRyucV3fBLpKf/LNMeky6M8Rz/AlgkAHJcFeh4IKxYnwP5K+U5IN6I9FUQcq bjxeoHY3TXJFnIdRozcShPoWgSSzcG4iddS4rn8F8bXkvSM4UsdG9c8ndCgoWxchNs/gB28iStMal0HI AAAAAElFTkSuQmCC 16, 16 32, 21 46, 20 &Failas iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 231, 22 &Naujas... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0 BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5 F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp 59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W AAAAAElFTkSuQmCC 231, 22 &Atidaryti... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 231, 22 &Išsaugoti 231, 22 Išsaugoti &kaip... 231, 22 &Perkelti 238, 22 &Vaizdas... 238, 22 238, 22 238, 22 Prabėgimų &duomenys... 231, 22 Į&dėti prabėgimus... 228, 6 228, 6 231, 22 Išei&ti 68, 20 &Redaguoti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAfRJREFUOE9j/P//PwNFAGQALjx5y7eYyZu/7pi3++uj5Qe/Hll58OuUVYe+SiGrx6m5 b8PXHUD8p3vd1+eNK748rl/y5c7cnV8fAw34hGwI3IDuVa/+Lzvx1QBkOlDTsv6N336nTnr3xqXgxG/r 1O1/zBO2fHevuPtx5vavb4AG3IS5AmwAUICzccnL//MOfL1av+Jrw4RN3/7E9Tz/51pw/L9dxu5fprFr jrvkb31oGb/8T1jHu59LD3y9j2IAiFM88/n/rFmf/xfO+fI/sufjC6vkLX8tEjf8MI1dmQ+SD6jdrmIY sfiFa/nt9w1Lv+zBMCCp79l/76Y3/6N7P/8vm/Pmv4b3pNUmMSscYQoVHOqY7bIO/XYtu/O6YeWXQxgG BDU//W9WfP+/Z9MrsEsSex79r1v81hLJAFa7zEN/veqefWte+WULhgFOFY//OxRd+2+Vefy/Sfy2/4ZR a/9r+EwFqoNEs1nceiXbzIP/Alpe/y2Y/rgUwwD0tAAKWGQxda9J7q5lt/+kTX7/r3fDVzaCBqAbaJGy 72JIx4d/YXXnc4lKSDBFcX3vlRzyL8T4t3z451d55ZtWwGxGkgzwqH7s7N/y6ZdHycWfxlGrvNBdhjMp wxRG9X6OdC651mgas04UW54haAC+zAbOyYQUEJIHAEKin9SFT4mZAAAAAElFTkSuQmCC 189, 22 &Anuliuoti iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAeBJREFUOE9j/P//PwNFAGQACK869FVq5cGvU5Yf/Hpk3u6vj3rWf0mpXPiFEyaPi4Zr Bhrwae7Or4/rl3y507jiy+PWVV/uVCz68rly0ZdUfIbADLg5c/vXN+6VD96bJ2z5bpWy7Y9D7vGvKZM/ vyic8+VF4dwvYSBDlp34auBQdA3IhLga7H0QsfTA1/thHe9+mkXP/+2St/6maeyaY0D8xSx+8+/kyZ// ps/8/Cx77pfIeQe+XrXOPP4f6Fq418AGNCz9sse1/M57da+eWwG121VAYqaxK/ONo5d/1QmY/Su08+Nz oEv+Z836/N8kfiumCxpWfjnkWn7vlZpn32EFhzpmmPNMYlY4anhPWl02583/6N7P/72b3vzXC12MaUDz yi9bvOtffNXwnnwTaAArzIApW7/qAjHYZs+mV//Niu//1/CZimlAwfTHpYGtb/4aRa75BTSAG2YAKMCs gH42id/2Xy9kCVizqlsXpgG9G76ypU1+/8+17PYfda9J7sihjBxg2KITHh1hdedzQzo+/LNI2XeRUOLB iEaQgFbAbEb/6msv/Vs+/HXIvxAT1/deiRiD4C6AGsLnU3nzVEDr568e1Y+dSTYApsG74VVoVO/nSLIN IEYjSlImRQO6WgCDbJeeDo3KmQAAAABJRU5ErkJggg== 189, 22 &Perdaryti 186, 6 189, 22 Pakeisti &starto laiką... 63, 20 R&odymas iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAjBJREFUOE+lk8tPE3EUhesf5QI2uFGjLli4kqUkmGAIWppQEwWDRppIAKMGFAoC8hAF RMRHAoi00AKFAJGqwWIpfVB52FKlqe1vPufWpI5LwySzmeR859x77hwBTId6BHCY1xSPx009o/N0v5zj 8cgsXS/cdA676Hg+Tfugk7YBB/Zn72npn+Thkwke9I3T3DuG6LLpRayhUJoirRSpjCKZVvxMKRJJRexA Y++Hxva+xlZMI/xdY3NX4+ipYl2vA8RZxLXti1jvuimvc1F2203JLTdFVTMUVjo5edlBwUUHeRecHLd4 8G8bABJbnC0NLha/gnsNJr3welljcE7R7VC0jGe48ypN7dAvjlmD+KIGgMwssc31M8x+QY8JoT3w7/CP 2KaLza0x8i2brEUMAFmYzCyAqY/wRncemlf0OBWt4jya5ubTJJWP9im9t0NexSafwvzdgWxbFiaAtysa G7qzLwqfI7AahOUN8Pj+jHa+LpQFePXvuSVKVbJtAQx7FL3TCvtEhoaRFDf6D7B2JChv3qWkPkxRzTp5 5gAfAgaA9CxVCaBPF4uzOBidp1ZhbAnOXvFmASt6qlwCORLp2dLoou1dBttAgureBBX2GKX3d7KxxVnE Zy4tkF8RYMlvAMiFyZFca5qn2r7G9a5vVNqjlDVtUdwY4ZwtTGFNiBNXgxToFZ6uCmXrziWQ8zRemByJ 9CxVybZlHJlZYouziBfWDQC5aaH975v7Fw7zJ4r2N2oc5uQponIhAAAAAElFTkSuQmCC 258, 22 Visas &ekranas iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAW9JREFUOE+lk01LAlEUhu3v9B8Cl9HCXxD9iRbVJqJFq6KwRZRQ0cciNDIIKqH8yCjT ESrNMtMcHUXHZhydcRzn401HCaTFFeaFc+Au3ue853LvmG1SgM2SegArZclspu82ipYR/hThSwq4TtTB 1FXwbUAzYMputyOTyfyr/vrdJiUvUW8biBXaoBgVoXTTBEqdPoEIqEbcqD4cg/bMo5WPoS4Dqj4YPwqg HNrDz6sPqe0ZvKxOQZe4fvaBiAmErwiY2x0UrtYhFhPQFenPzLd08gq6qoBL3oClzocmayILtqmRAfTF ypCxd1AlHtmTOdD+XTIg7ZwA+3jYhxgGpNI7lEYVpYALNcpLBjx7FsFFj9D4jsPQOogtjKPsd5kpehDi Ja7NTkPK3qPoc0IReTAfUQi1shlIrubIgNOtZaQ3HcifLSEXOECAASJ3QfBx72gPqRLeR0fkINfyYJ/c CPp9yDMVvG04wKX85ARWPtQv4a3juFJuVLsAAAAASUVORK5CYII= 258, 22 Rodyti &dešinę sekciją iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAY9JREFUOE/Nk8lKw1AUhvXtXLpy46LVpeDCVxDFhQhFUQQF64DghIKiKBXnWWzs4ABJ bZq26RDUmra2JvqZttqoK7EbD/z3cM+95+P8F259XUOGupqiBKhFNTWXp7cW7XwBj7ubka4OPOOdhGbb uBtrInUyg/mcRZcF0ueLJI9n0H0raCEBX8KsTF5ajHzGamhF2x7iKbjK/cU8OeWSt1eT9MUKyno/8b0J EpsDpIJbSDocSVkbkL87Jb7WR2J3jHxS4jPezBeewl407zJ+VyPh0WYi/gN2FfBcPdoAYXOWs8A1qnaP uucmue/m1ShWQWYhh3Y6hy4eE3kw2A8VuIo924CAFGNHkJBjKvJyD9HV3grAsvAzxHSRQzFL1sAGSJPt pA6mMHKP5fv5iIC6NWx5HoRi5hujYDH1l0qp+oj+DTcR6RZZvCHgmca76EJY6udk3oXvJkRQVAjLCrFo lOiHVDVuAxzOFhwOR0VOpyVrX1JLq13/PP+SqxOIoshf9L8A5oeFUv6NyparFmr5UO/4ruHjx5E9cgAA AABJRU5ErkJggg== 258, 22 Rodyti &apatinę sekciją 54, 20 Įr&ankiai iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAA25JREFUOE9tk3tMk1cYh98RM2TAvFQQJ1u4uWVy0bEEHQreYoo3MNBtzArCSBH3h4nT OucVsoWLWuTSgoWBWxmiSDZGES0YrtJa5r5vtCstlNKKApEqCijg3PLbN4gmRt7kyTl5zzlPTk5+5w2a pbaKLvkHLFsYOv9tRz8Hbv3B6JRV3/NQrSrZpZtt/8tecEy5v1B87Ze0go4phbIbda19aFBb0aixoLap 62/x6QblxzE/rpxV4r2peEtkonQkTXIJZ2VVKK1sRxv7AC2MHVdu9KNBcxd37w2j6PLvY8ExiuhXJLzV 8iBBUvZ4X58Zz6aeYnLiCUwmEy5U1OPCbxaU1PQjVW7AZZUNY2OjKLzYMemz+YdV0xLeJzIHn7WZN683 sVB3jqB/6Cle1MhDOyQFVTicw+CE3IyUDBYq9SAePxpBwrd1jOOKvDn01srcsFDBeSR9r0N8KosD54y4 qBrEo7Hn056JJ6PIyqtE4kk19maakJDKQG+2o7HdCLe1cj6R95nTwcJGRB28jT1pfyE5wwhRugnHz1vB mManJf8+n0B2wRVE7r+BnUcMiDvJILdcB5fgHBmRp0Tpu0OFKPGfiD1uxJ7vzBBlWJCUPsPP1+2YfPa/ 5h+UKKqxLr4SockMvCJVIN8z9Zwgv54CqrHqyz/w6bFu7DrVi7i0Xk5kmeazY2Z8nWeD1jDzNtpb7die KAN9KAV5SZqJ3pGVkrcSc9ZoEBSnw/ZD3fj8RC+EnGh3Kgc3Co72IOpwD8TSO2hixmG12pCTXwrH5VkV REukceSUB5ePsvFmyK/g8W8jcLeRu6YR67/i2MfNRV0IFOqwiN8Bp/BW+MeqEftNK+h9WQqRu2Se5+rc +20tLShW1CB6Xxm8IqrhEaHBezv18BEY4B2th+cOFm58LeaGcQcDa0Hvlj4m3lm3mUAtKxMpG3sxMDgM +/Ag9LpOFP7UgIQjSoTHKxEQfRVeW2rhsaEKvvwyfLBVAXKXH3gljc5B0tzmWzboTAMov2oF23UfQ0ND uGOzgGE70dSiQU2dGkUVWniESIpe/w+89UsdFu/t+kLcBvJrhnP4TawQahGxn+UyosO6FBbuG6+B5or6 acGakNcFiyNdaGEYn1zDTpFzcjU5ZenJtfAexwA5ZRq4npJcw9NpQaiA3LcteSH4Dz4cIMVGVt6MAAAA AElFTkSuQmCC 438, 22 Atidaryti Google &Earth programoje... 438, 22 Atidaryti &kelis QuickRoute failus Google Earth programoje... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK+wAA CvsBy58dkAAAAqpJREFUOE910mtIk2EUB/CZUhJ0M/sslGV0g0pJXGpoabNtrnlNc4UTMyRv07xhgjlS cxWotYq8ZBai6RZz0206dWPz3fbu1jZnZimhEdGHIX2sfzNQEnofeD48D/x/nMM5fgBo64df35e05LKE BO8ICPr122+X9+eWPf4B2/Zu9Q8IBs0vaPfO7Wb4B3p72wuKN0JrwPoN52u+hyU+QVi0AGeYQoiE/Whr V+LOYyP6ehVwEmOobuxc+TezEV77jOCrP4ddfIrQ6HJEsRpgGBqAxeCElFyFTjcHp2kKpY3PHZTAiWzF 3F+AXgY6pxE2YgqLNgfk1lUY7V+xRBpRWt8zQwmwBJOe46xOHPS1EJd2D55pBcwjGhiM87AQTriMJCrr e9SUQKdswlV2vxdJvFZwr4ugG5KCkA7jk84NnUSNyXd63LzVNkQJLP/wkgqtDRz+IyTzHsJjJ/FR78Ls Gzk8EhLTWhK8vNZeSmBu8ZvV7v6C7MJ2cHJboDHJ8WHahiXnMBYIAjOGcWTyhB2UALNU7cmrHUEUpwHn uXehUElA9Bug6nHDZlgBYbeiQCBuph5jrsoaEv/MN0YBYlKaoTRroTfI8H5MDzfpxLDMihu3xZWUwEne KHmE2YUDdAESs1rgtppBmIZhsih97czj5aANxTXifGogR+4DunEotgLsHBGcRhvI2TFfJSrYHGq8lUyh qKojkxI4xZOTR1ndCD1bjnOpTVBPmbFg1sDumoBUq0Rdi9hbWC6MoARO80Ysx1hdvk0U4EJWk299xzHw ehBldQ+WWSn5QiY7fX9RRc2m9d/0oPNljsOMF74KBIhkVCPjWtX72MSrJXEJyfs43FRaSmomraiilhq4 UvYqJpwlkkUySkbj2YXpCQxuIJvDpV1KTqNdTs34L/AHFHCYgyBIqUoAAAAASUVORK5CYII= 438, 22 &Publikuoti žemėlapį... 438, 22 Pridėti tarpinius laikus iš &WinSplits programos... 73, 20 &Nustatymai 123, 22 &Kalba... 57, 20 &Pagalba iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 135, 22 &Pagalba... 132, 6 135, 22 &Apie... AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 Švelninimo intervalo ilgis Švelninimo intervalo ilgis Kontrolinio punkto apskritimo spindulys Kontrolinio punkto apskritimo spindulys quickroute-linux-upstream-2.5/QuickRoute.UI/Main.no.resx000066400000000000000000000344501446222606700233760ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Mellomtider Eksporter stolpediagram Linjebredde Angi fargekoder for ruten... Startverdi for fargeskalaen Rutestrekens fargekode Sluttverdi for fargeskalaen Angi intervall for fargeskalaen Automatisk justering av fargeskalaens intervallverdier Rutestrekens gjennomsiktighet 0 Rutestrekens bredde Vis linje langs kanten av rutestreken 0 Rutestrekens kanlinjebredde Rutestrekens kantlinjefarge Ny (Ctrl+N) Åpne (Ctrl+O) Lagre (Ctrl+S) Angre (Ctrl+Z) Gjør om (Ctrl+Y) 50 % 75 % 100 % 125 % 150 % 200 % Zoom Peker Juster rute Legg til mellomtid Beskjær rute Zoom inn Zoom ut Åpne i Google Earth (Ctrl+E) Publiser kart Fullskjermsvisning (F11) Vis høyre sidepanel (Ctrl+Shift+R) Vis bunnpanel (Ctrl+Shift+B) Hjelp Støtt videre utvikling av QuickRoute &Ny... &Åpne... &Lagre Lagre s&om &Bilde (kart)... &GPX... &KMZ... &Rute-data... &Eksporter &Importer ruter... Avslu&tt &Fil &Angre &Gjør om Endre &starttid... &Endre &Fullskjermsvisning Vis &høyre sidepanel Vis &bunnpanel &Vis Åpne i Google &Earth... Åpne flere &QuickRoute-filer i Google Earth... &Publiser kart... Legg til mellomtider fra &WinSplints... &Verktøy &Språk... &Innstillinger &Hjelp &Om... &Hjelp QuickRoute toolStripContainer1 menuStrip1 Rutestrekens bredde Radius på sirkel for tid inn og ut av poster Radius på sirkel for tid inn og ut av poster quickroute-linux-upstream-2.5/QuickRoute.UI/Main.resx000066400000000000000000005570711446222606700227740ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.BottomToolStripPanel System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1 4 Fill 0, 0 786, 329 0 False canvas QuickRoute.Controls.Canvas, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null toolStripContainer1.ContentPanel 0 Bottom 0, 329 2, 2, 2, 2 786, 16 2 dynamicHelpLabel QuickRoute.Controls.ScrollableLabel, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null toolStripContainer1.ContentPanel 1 Right NoControl 786, 0 5, 345 1 rightSplitter System.Windows.Forms.Splitter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.ContentPanel 2 16 Fill 0, 35 8, 8, 8, 8 233, 63 2 laps System.Windows.Forms.DataGridView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapGridPanel 0 Top NoControl 0, 0 8, 8, 8, 8 233, 35 1 Split times lapsLabel System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapGridPanel 1 Fill 0, 84 233, 98 5 lapGridPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 rightPanel 0 Top 0, 81 233, 3 6 rightPanelTopSplitter System.Windows.Forms.Splitter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 rightPanel 1 Top, Bottom, Left, Right False 0, 3 230, 78 0 sessions System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 sessionPanel 0 Top 0, 0 4, 4, 4, 4 233, 81 1 sessionPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 rightPanel 2 Bottom NoControl 0, 182 233, 3 2 rightPanelBottomSplitter System.Windows.Forms.Splitter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 rightPanel 3 Fill 0, 25 4, 4, 4, 4 233, 135 0 lapHistogramPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapHistogramContainerPanel 0 0, 0 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC Magenta 23, 22 Export histogram False 6, 25 False 0, 22 40, 25 Bar width 0, 0 233, 25 1 lapHistogramToolstrip System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapHistogramContainerPanel 1 Bottom 0, 185 233, 160 3 lapHistogramContainerPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 rightPanel 4 Right 791, 0 233, 345 22 rightPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.ContentPanel 3 Bottom 0, 345 1024, 3 3 bottomSplitter System.Windows.Forms.Splitter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.ContentPanel 4 Fill 0, 0 1024, 100 0 lineGraph QuickRoute.Controls.LineGraphControl, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null bottomPanel 0 Bottom 0, 348 1024, 100 25 bottomPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.ContentPanel 5 Bottom Calibri, 9pt 0, 448 2, 1, 2, 0 1024, 25 26 momentaneousInfoPanel System.Windows.Forms.Panel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.ContentPanel 6 1024, 473 toolStripContainer1.ContentPanel System.Windows.Forms.ToolStripContentPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1 0 Fill toolStripContainer1.LeftToolStripPanel System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1 1 0, 24 toolStripContainer1.RightToolStripPanel System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1 2 1024, 526 1 3, 0 None 100, 28 Color code the route by... 6, 28 40, 28 Starting value of color range False Calibri, 6pt 200, 24 Route line color coding 40, 28 Ending value of color range iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAKVJREFUOE+tkmEOwiAMhXuSeQjvoH/ckVy6Ky16Hp0Hob4SIEDGGOKPF1jWfu1rIRGh HoVkZpYW+aIJYEAzN4ihJ7RqcwZ6Qws0QVf8R7FNwAkJYwYwLQDtIAZ88J0A7pUOPGBG4iO28HIWFHDZ sfDzEInoDImetZXmsXYLLlkvYbolUB7b9Yhs8bDPA9W3YvstOE8cnxX/Sex/LPhN1FZYnEEP4AuyYY/2 1EDQNAAAAABJRU5ErkJggg== 23, 25 Set the color range interval iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC1SURBVDhPrZNRDsFAEEDnJNxB78AhSDgJewEuwQGcgy9O wR/fJOvNpstUJV3GJi+dtDNvZ7atyGtFE3eFrVy9EbqqzHPNfUo08JC8rg5yZ64z+GL8f6eGEKIH0eJe lDiAMcxhAzs4wR3iFY6whRXMYCRp4yTok1TBxAj2teBWIsgdZMGaIhWcoSVYsvv0rQMrWFCkgsYIFwoO ZgQVDM0IrkPkrVb1l6jX0tWosf9BqeCXms/uBwn3Fq/+feK5AAAAAElFTkSuQmCC Magenta 23, 25 Auto adjust the color range interval False 80, 25 Route line transparency 6, 28 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA Cv8BNGKaggAAAL1JREFUOE+NU9sNwzAIZI7OU+Uvs3SNTpm/zOHmEOdiAo4jIUfgO15naa1J/ODL7P2R 9j0Q+sf14goBwSDwJGmmmD2CPQmSo4TtqWyC4gmCzUh2a6f3WGUmCeJsfzeSEyeIVsB9fvajYNgq2C9A gbSqX/hBPqxRp+j3KvK6XGdGEsFDC08kGbgksECvpAJPCRzJMJ+oF11jJSLqgivO7t3eQTJUVMAVq9hu W5g9JgrrOim2QfZpBROnyt5X8APmCAFYpeIP4QAAAABJRU5ErkJggg== 16, 25 Route line width False 40, 24 0 Route line width iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFISURBVDhPY2AgDJiASlYCsR9hpZgquIFCG4H4PxcXw+eE JQy6pBgiCFS8BaSZT4Lhf9FOhv8ddxmeVB1jkCbGEHGgor0gzQJSDP/LDgI134PgtnsMJwuPMXDiM0QK KHkMpFlUieE/0Ea4ZpghqUsZ1uEyQAEocR6kWUqL4X/tGUzNcbMY/rNyMPwHqmlHN0QZKHAVpFnOiOF/ 3TlMzVGTGP4zs4I1g/B8ZAPUgJx7IAklc4b/TVcwNYd2MfxnYoZrnoOsWRPIeQXSrGbP8L/5GqZmvwa4 RpDNM9GdPgukWdeT4X/rTUzNHmUompOxBR6bYSDDybbbmJqdslE0h+OMupabDNKgRAKLJhBtFYei2Ztg 4gEaYFZ/heEbyCWmYSia7QlqhilovcUQZeAH1/wTKG5AtGYkhV1A9gcgBsUOWQCUfYnKMCDTAVQJvdxe fXZYAAAAAElFTkSuQmCC Magenta 23, 25 Show route line edges False 40, 24 0 Route line edge width iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC Magenta 23, 25 Route line edge color 6, 28 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 16, 25 Secondary route color coding 100, 28 Secondary route color coding 6, 28 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA Cv8BNGKaggAAAiVJREFUOE9j+P//PwMlmMHB4T8xOAqorgKbWmI0swA13gXiL0DMBTPEzvE/gy0QE2OA i6Xz/+9Axe+Bmi1ABoA0+1m9ZAi2eIjVAGmgooP2Dv8NrZ3+M5i5/D9Qqr16UrDFg5NWzv/THIEGAMUY mtSmMZRor2FgACpEwUDbak1c/v93cPgXGmN6RqBXsenPSwaGL2c5lf/7Wj9rM3D7z2ADNPgoty5Dge5m BgYXux9w7ODwg7FYe+3+VeKR/3fz2+5/zcBwDIhv3GNktrjILjf/JJf6lSUSoQxbBV0ZXjAwMKQbHGRg uMQmBscX2cRUnzMwfN3Pa7Znlmze/2qNhX/TDQ9pFepsZLBx/Gl5nFv7/wcGhoRnQM1AdSb1arNSGB4D OSD8CIjfMDBMnCVbdAjoRz0T1///LZz/77ECOhfoLQZzl/+8RTrrnjxhZP7zlIFhPdCAT1Plyl4zPABq BGFgeIo9ZmT6nmB8JhekARiQy4DYHTnuTV3/b+1Wat/5iJlnYoHupm9Ai6phBnAB/dqyU8D+DzDkFUAB iy3R2Dv+n+ti/3NWkMVDXqAln4FqlBiA/pkGdPrL05yqf4Itbp8DGsCIJ3XGAw0/DEwTfUA1R0HqGFKM jlQW6G297WP9+hzQvzkEkrY+UB5k8ycgBiVvBgagJi6gc24CUxcw7v8rEjBACCj/F4jfATEH2ACoBlBg FQAxPufD1DYC1eXBLKIoK4OKAQAF/s1iEFX7sAAAAABJRU5ErkJggg== 16, 25 Smoothing interval length 32, 28 Smoothing interval length 6, 28 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA Cv8BNGKaggAAAUxJREFUOE+Nkk8rhFEUxm/IQpYz2Vi8srRhYTYW5iNYSMqCZkMppclOzELJQqGUjQ1Z KGlSFrOb8gWUPRbK1jd4/Z63c3Vc72hu/bp/n+ece+4N7yGEhBrzFtzBLRzDIlT8uTzPg/BiHTiCDrTh APbg2tYe6FeiSWowZtEkXoJRF22A8Qx0IYdd7XmDYRYO4RHmSq6kLKvwYgYf9Jk3mLUUl3uIM9ZfTbxD r9qceQMV7D5JO9ZG4jcTr1qAdQX0BirSaUn0SdY+Tdxw+1OMz72BCtcsMRhn7Qk2/F4UeoMLDlzBYI8a BFobusZ0HMd/sKk7gZ4y/VTFnFYHfk3BM3yJaKBCyWC/T4M1xJnwP1H3lMkWjKRGSQYSFy39yttmckO/ ABPGUGIQ9X8MdN95uDQjZVQ8178G6bOUzTE4UcZG69cV+jSoWxax/6nBN2BcWA8xzRYiAAAAAElFTkSu QmCC 16, 25 Circle radius for approaching and leaving times 32, 28 Circle radius for approaching and leaving times 3, 25 926, 28 1 routeAppearanceToolstrip System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.TopToolStripPanel 0 960, 0 None iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVDhPrdPZasJAFAZgX8q+Q32N9o2kXkjphQsigoJC ixa1VAWXiohG7IakbmjcNcYl5i8TCQSdGXPhgcPczHwz5xzGZrtWRN+bOM1wqo5gvAJfrIBy4w/cu8hh VjyG3nDjuOcjkbTABB58cSRy9SMiiPSXhF6rTMDpedEPG0ktJfD8wQT26gEEMSAq4I3mqYCmaZCVHQZj WQfst3f0Ep7CGSqw3amYzBWI/TkfcAdTZ4B60LCQt+hJK3yJEz7g8ifOAGWzhzRdo9WdofYt8QFSnzlI 42bLDdqDBZqtMUpC3zpgbtxPe4rq5xDZSsc6YG6c8DtCodZDsihaA4x5s1bmGI0Zkw2X8lofWHf+AdjM 9sNc+xBlAAAAAElFTkSuQmCC Magenta 23, 22 New (Ctrl+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPlZNdSNNRGMb/F110ZZEVhVBgeeHNICiiuggp olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdPKMgr7kApFItTUkWZqVhSVYmao5Nev/xyoQ4k88Nyc 8z6/93nP4QjCfy6lwc4ltZVso4P/tMyXRcmMHqZ0EeY6jZQVInzuf0e1Tb9Ina3P/tkpLD6XkNg8BJe5 u93C+HDVrP4M2ZkcMOOw5tLZ9nxJyJE4HSExBoKkBQhVpTrGhso9zNPfiph0JlB+U01ZcRbmwnRMeWlc 08opUCV6QissGsZ+WOY6z4hmuuXglC6pRYBbJSp+fzXNxnaZ66o1s3rkyKHWruJuWRYOcwZ2kxKr8TI3 DCkU6+QYNUnuNGWmLEY+5uOK3degoKZcx3SfEvozPfVB3OtNhi4ZvI2nrTIc23U9gtmYwa8eNXzScq8i l6bHWnfRwhHeREJzGFONgYw/CeB9qQSZNNR9FyUGBT87lfQ3plJj1zLTq4COGDegLVo0HmeqKZjx+gOM PNzDYPU2lLF+4jhyN6BIl8pgexK3bRpaXopJuhJEwGloiWDmVSgTLw4xWreXoZrtfK/wp/nKak4E+s6/ hDFHTkd9GndsOdCTBq1i3NdHmWgIYvRpAMO1OxlwSPhi2YpT641CuoWzsSfnAfnZiVRZ1Tjvx9GsF+bU pF1BvWolD9JXUZmyDnOiD1cvbCZiYXfXCPrMi+gVZ8hOiiL53DHORwdzKnw/hw/uYt9uCTskfvj7+rBp 41rWr/Fig7fX8j/Tsn/fcgx/ARfG3ml6M3rzAAAAAElFTkSuQmCC Magenta 23, 22 Open (Ctrl+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIsSURBVDhPrZPdS5NxFMf3L3TfTdBFtzU1hmuxGjzlHMqq YVgRvT2RL+XSZZqoWJlGLV8gW+HSScvpJJxU+AamSI2hTCVLM1e0xKGm2EQw+PY7v+j5tTIvoh+cy8/n POec76NS/Y/37GkUVL72ZbR5l/DYvYDGhgjuO2ZQW/MJ9tsh3CifQmnJBAoLXiMvdxQXzgeh9Cawtweo qV7FRm9ldQ3GtF4cTnvCSxF4Wxe5oLLiy195giMLK9htfg61WoblkEcI3I/muaC05PO6gp/w+/Ai4kw+ FFyexgFzkxA462e54JLt3R+CX+GRyQi2SV5Yc8aRmuIUgrq7YS7IzhqNEfwODwbD2Kx3Q5YDMJkcQlBd 9ZEL5DMBRbAe3OP/gE2JDThy9AWSkmqF4GblNLq7wE4JHD/5CpZjA3zbtDCamT6bOv+A+3DQ0glJsgvB 1bJJdPjAMgA0ub6xu39F+fU5vlRaGM2cmRFU4OTUdhgMFUJwpXAcnmbgoXONBScKY3pOTJlP2JB+roh3 Tk5h8H4P9PoyIbDljTEYqLoT5Z1JwEKCOK2EobezGJuag5x7DXuNbRzW7nFBpysSAoql4x6UzyYBwWfz b+FNaB6hmSVcLLYjXu9icCPidz2ANjFfCDIzhtncy3zmrQYPtuyQ0NLRD1/XILr7/Bh4OYR9JgvUunok MHi7pg4ajVUIKNOnT/XzeFLCKCR0ZzoVbZsWRjNTVyqCdyZkxwr+9a/+Dk60OMVjMFpXAAAAAElFTkSu QmCC Magenta 23, 22 Save (Ctrl+S) 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHXSURBVDhPY2CgJZi05VvMxI1fd8zc/fHRsgNfjqzY/2XK siNfpYiys3fD1x31G6786V739Xnjio+P6xd/uTN358fHy3Z9/YTVkO5Vr/4vOfnFAGR619ovy/rn3/+d 0vPqjUv8id9aqdv/6Ces/25fdvfjzK1f36za/+UmiitWHvvH2bjk5f95+79erV/+taF+05U/cfX1/1wL jv+3y9j0yyR21XH7/K0PteLr/4R1vPy5+MDn+xjeKJ75/H/WrM//C+d8+R/Z9e6Flf2Wv2bRi3+YRK/M Byn2rd+hYhi84IVr+fX39Uu/7MEwIKnv2X/vpjf/o3s//y+b8+a/htek1UZRKxzhCkNDmeXjD/12Lbvz un7ll0MYBgQ1P/1vVnz/v2fTK7BLEnse/a9d+NYSptDYOI3Vzn7/X7e6Z9+aVnzegmGAU8Xj/w5F1/5b ZR7/bxK/7b9h1Nr/Gj5T/8MUmiSuUbLNrP9n37L/b/60R6UEoxIUsMiK1L0nu2uVXfmTBgzc+lX/2Qga gK7AImXfxRCg5rC6s7kkaU7s+6Bkn3c+xh+o2a3yyjcGhv+MJBngUfnE2af+6S/7rP0/jSNXeJGkGaQ4 oudzpHPJ1UaDxJWiJGumiwYAXqjyIzS1ngMAAAAASUVORK5CYII= Magenta 23, 22 Undo (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHJSURBVDhPY2CgFlh25KvUiv1fpiw78OXIzN0fH/Ws/5JS uPIfJ1HmgzQv2/X109ydHx/XL/5yp3HFx8etq77cKZn/5XPlwi+pBA1Ztf/LzZlbv75xL3/wXj9h/Xet lG1/7HP3f02Z/O5F4ZwvLwrmfg4DGbLk5BcDh6Jr/zEMXHzg8/2wjpc/5aPn/3bJW3/TOHrNMdPYNV/k 4+f/tp+8/2/65PfPsuZ+jpy3/+tV68zj/1ceQ/Na/dIve1zLr79X9ei55Vu/QwVkg0n0yny1yKVfJX1m //Jvef8c6JL/WbM+/zeJ34rpgvqVXw45Fd97peLZd5ghNJQZ5kSjqBWOGl6TVpfNefM/uvfzf++mN//1 QhdjGtC04vMW+6IXX1W8J9w0Nk5jhRkweetn3Slbv4Jt9mx69d+s+P5/DZ+pmAbkT3tUat+6/6+kz5pf 4q7F3DADQAFmBfSzSfy2/3ohS8CaVd26sHhh1X+2tPr6f1plV/6oe092Rw5ljADDFadhdWdzQ4CGWKTs u0gw3rEr+M/oXXntpX3L/r/2eedjEvs+KJFskIrHYj6vypunAlo/ffWofOJMsgEwDd6Nr0Ijej5Hkm0A XTUCAJVf6G0nSs/cAAAAAElFTkSuQmCC Magenta 23, 22 Redo (Ctrl+Y) 6, 25 False 50 % 75 % 100 % 125 % 150 % 200 % 81, 23 Zoom 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABWSURBVDhPrdPBCgAgCANQ//+nDYMCLaXNvHl5IJsifjTs 8GpAC1GbDjKBDrIBFnEAgxwAilwBBEmBV6Q6YcVb9sTFyEQaOwD3IraQAuIDwch3wMD0wQZXPN8hfWsG XgAAAABJRU5ErkJggg== Magenta 23, 22 Pointer iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB7SURBVDhPpZNRDoAwCEO5/6WnI2JGVyoqiT+yPLrSmZmN 8/tVE1BBoieHjFkE4v+jlFJ2aIU6vBjiV68moewSkgBiUh+gPGFebAqEcejN7gHS1HaiRxVczSoHae1p jZ29Y2zR3VZ4Vgim8BOAqlLpe3p9r1UwoHql9/kDyX4i7Df5W1AAAAAASUVORK5CYII= Magenta 23, 22 Adjust route iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhPrZLRDkARDEP3/z/t3knI2kyHkHhAnU3VzKz9 c2e4bkzQp5tEbHFw0X4mOonnXcf6CU8gKzjsq/bOAdTeHUBAtAfwFjS2/gW+PNbB2HUOssshNGVO4BuT ymVK2WmVixTGLV4BmHwMeQ5wYOm+iz6qgD7QoohWnwAAAABJRU5ErkJggg== Magenta 23, 22 Add split time iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB1SURBVDhPlVIJDsAgCOP/n3bTDdJxDEpijNpWbBURWe+4 J6qMt3aRIh/OWRAiKX4q8ovrRLrzY2AFGpE1Ag+myEEEzN1JUaXRshE/XiR+jDvwN487yYjmCXz59El+ M2sX94KIJ3QC6pOlgoqV6y0GPajyDpgL9XC8RCNefroAAAAASUVORK5CYII= Magenta 23, 22 Crop route iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP3ZJJDgAgCAP5/6fdIgaRittJEy+kDFhLNJ6Q SvIaErtUmvQRsCloaAQgCOn0PFUWa80EwLVXt2g6ZV4zkgVoi3cANQk9zfdh18RMvP7GAnGCxKa6yURR Poq3nvYhhCJIaTHd2laAhgAAAABJRU5ErkJggg== Magenta 23, 22 Zoom in iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABdSURBVDhPY2DABP+BQsgYixLsQmBN6ADJMLwGYWjEYRBO QygygKBmmAKodzBcATcALfDgAUk/Awj5BZcXQH4ipBfmHdrEAsxUQgmJoCtQDMKSAslK3uh+HoaGMAAA ykBJxduNsuQAAAAASUVORK5CYII= Magenta 23, 22 Zoom out 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANoSURBVDhPbZNtTJNXGIafGLKBQDbROozElTFjFItj2WDD ARvJUjQKBmFDka+xMtwPE8dgOj8K2QKlk6/yIWCAiFo2JBv2VbHFAAVpqXPvO9qVFktpRYFIN1RQ0Lnl 3ivMH0Se5Mo5OTnnynNO7kO0RIk/VwbmyjWSghptUSFPdlF7VnSGMmipvYvWtuxWBu7Jaf9ZWt3/uIkZ wuWeEXToHOjU26FSDf6dLdcw7yY0vrWk6PWo2m0x6SVT+cU/4kRVKxpa+tDL/Qkt68L5q6Po0N/G7TuT qFD+Oh28+3TcIsmroaeCtqfKZ0ZGbHjy+BHmZh/CarWisVmDxgt21KtGkVdrxk9qJ6anH6BUeX1O+HF9 6P8S6TJhmOzalS4OuoEpjE48wvOa+suF4upW5JaxOFZrQ1YhB7VuHPfvTSHtMMNSpNSN3EWK8LD4GmR8 b0RKHoeDpRYo1eO4N/103jP78AGKFC1IP67DFzIr0vJYmGwudPZZIAivExP5y+VvJ3UiNvsGUvP/QGah BZICK47WOMBaZ+Yl/z6dRUn1ecQcuIpdh8xIPs6i/JwRy4NLq4j8ipmAnWrE5vyOxKMWpH5ng6TQjoyC Bc5ecWHuyTPNP6hvakNkSgvCMlkIY9SgALmGaG25hja3IfSz35BwZAh7pcNIzh/mRfZ5Pjliw1cKJwzm hbcx9PdhR3oVaGMlaN0P3US+lQ3kz8Btqx5ByUbs+HoInx4bRhIv2pfHw4/x395EbO5N5FTeQhc7A4fD ibKKBry8qaj5mSCZPBTwCi7BSyG/YKX4BkT7LHybFnz4Jc9+fi4ZhCjJiFXi6/CI6EFgog6J3/SA3qzK Ilohe8XvnbK7vVotTjWpELf/DITRbfCN1mPdLhPeiDfDP84Ev50cBGID3MP5g6KLoDUN98m3XLCQhfVn JUznMMbGJ+GaHIfJOICTpzuQdohBRAqDzXGXINx2Eb4ftSJAfAYbtjeBVtceXJTG5aKK8u5+J4zWMZy7 5AA3eBcTExO45bSD5QbQpdVDdVmHumYDXgs5Uffif/CJWrtMkDm4J6eXv1s3PCOuYUuSAdEHOD4jRkRm cVgd1Q5yk4ySz3shLwoECV60IlxMXh9IyVPSRu4yE3kr7pD3yTHykJnJM5Mh74gC8nk/nlaJ1zwX/AcB GR/WpKQjZwAAAABJRU5ErkJggg== Magenta 23, 22 Open in Google Earth (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKESURBVDhPhdPtT1JRHAdwX/YP9LqtLFvW1oPNJiotnxWK oWmholOzzOaUqzh1i02lfIistKRcPmTWnMaDiijgEzDwAhcueEHMLK2lL1ovnH/At1tbm724dl6d7ez7 2e93zu9EROxbxYqRzCSxrCKvSN6ULZV3pIgb+lJzFRrhzRZrpkTJFNzuGsyv7H26P/PPPqZo5kdUWi+i EgjECpRQKUfR3WPC/RcujAwbwZCzqFP0b3MCF0rNX6LSXyIyoRZxwmY4NWPwOhnoqT3Y7Wtg3Euoau0L cALREuPaH4AnA0/UCppcwiYdwLRvDy7/DrYoF2oUA8ucQJZsMXxG2I/jbAtXrj9E2GqEx7AAp2sdXpJB 0EWhXjFk4QT6J+eDss5hZEofQVysgl2jB6nX4rM9BLvOgsUJByruPdNwAl9/7lJGGw1R6RNck3Yh7Kfw yRHE6vtphHUUrDYKBWWdw5zA6uaOzx/6hvzKHohKOrDgnsZHK40tRosNksSycw55UuVz7juoMYXLmgyI EzUjWdwCo1kHctQJ81AItHMbpN+HO4S6nRM4X2L2HUl6xT4jgcTsdpg8NjicU1iZdSBEMdBO+VBep67n BM5KZ6hTggEc4xFIk3Qg5POAdGvh9prYdtbxZpxGVaO6nBsoNLDAIE7w63C1UAXGRYNanWUrMYMOWPBB xw6SvPvGARUYqGjhICLja3E5pw2WJQ82PAvwB+eht5kgb1PvVhAPLnIC56ST3tPCAXYSCaRI2tjxncPY u3FUNz7+LhDfUmZliY9yhn8f8EonAiczXrMVELiU0QD2V67wU/Or49NzDh8Y/HsoId4mxghUU7EZ1TPJ wru5fH7Rof8FfwEbeIEBF9VbngAAAABJRU5ErkJggg== Magenta 23, 22 Publish map 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIfSURBVDhPzZPdS1NxHMb9p7qYN3ZTUV140VVeJhgYYm2D LSgNixQSNSq0dJqaziw1M3sBNXPTTTdFJa1Y2tybmtOGK8fafufT+U5Yp8ugiw6cmwPPy/d5nlNQ8F88 vaM+el7M8Whklu7nXrqGPXQ+m6Zj0E37gAvH03e09k/y4PEE9/vGaXGOkTcuYA2F0hQZpUhnFamM4kda kUwpEgcae981dvY1thIasW8a4V2NIydLD0lEWcC1HQvY73iprPdQcctL2U0vJVUzFNvcnLjkouiCC9N5 N8esfoI7BgKxLcrWRg8LX8AbgMlVeLWkMTin6HEpWsez3H6ZoXboJ0ftEda2DQRys9g2N8ww+xndJkT3 IBjnD3CdDja3JSi0hglsGggkMLlZCKY+wGtdecin6HUr2kR5NMONJylsD/cpvxvHZAnzMcbvDCRtCUwI 3ixrbOjKa9vwaRNWIrC0Af61w9PO1UdzBKv693yIUpWkLQTDfoVzWuGYyNI4kuZ6/wH2ziSVLbuUNcQo qVnHZA7xPmQgkJ6lKiHo08GiLApG5akVGFuEM5dXcwTLuqu8AxmJ9Gxt8tD+NkvdQJJqZxKLI0H5vXjO tigL+PTFeQotIRaDBgJZmIzkarOPakeAa91fsTm2qWjeorRpk7N1MYprohy/EqFIr/BUVTRXd96BzNO4 MBmJ9CxVSdpyjtwstkVZwPPrBgJZo7D97fvPfuJfzsJSIcPgSG8AAAAASUVORK5CYII= Magenta 23, 22 Full screen (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 23, 22 Show right panel (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 23, 22 Show bottom panel (Ctrl+Shift+B) 6, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIYSURBVDhPtVNPaxNBFO9HyEfYj1AUPHjK0eOiDeSYQg89 qAQPEgRxKQjBYBuRosHSXatiI6nupXaN1q5oa4tIF2s1tmGzLVHTZpuObpX+0fx8M1NYSyM5+eCxb4b5 /XlvZzo6/kdMLwS4U1xH+m4FfcNLGCyUMf7qM9pqvXO3kZ9qQC+uwavv4tvWHliwS/UOruZLSOsOiq9X WxNx8AN7E/6PJmwH0EYBNS2T17bD4G42cWlwBuMvyodJuPLGzyYMG4imAMMC2DZEeAxI3uR7DBUiOZd5 dpBg+v0WHs83hDIH88M8zFkgkZVfThZNMaoZdOsDcvk3Icm9p3V8Yb+E1WhS2s6aQCfVSi9DMksWKFSN IZF2sOQG6L4wFhJk7q+KgamaBHX2ylQoEwTm6naJQVFtKHEbNT/Asdj1kODybZemvSfsSyAdTjByIpVN m9YEjKgmfU3U6t9xRB0ICXIPK1jxd6h3CVTinsjsqCSIqA6lJFBTNkrlKrrOGCHBxMxXWI4vBsSBkTgH ONSSR3OhNQefMEUalocxaxFXbk0e/BOZkQUs+79JdR9AIF4LB/tgzXDwad3HqdP64XswOVdFX24OboPu AqmomiP65slrvrdc3UCMrA8XZlvfxomXFZzvn4Lx5CPmF1ewRtOu1QPRM7fdRcr6v8B/P5Shwlv0XHyE 4/EbOHryGmJnR5AZet7+MbV9bS0O/AGd2vKsTr+IQwAAAABJRU5ErkJggg== Magenta 23, 22 Help iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC Magenta 23, 22 False 6, 25 False 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 None Magenta 63, 22 Support future development of QuickRoute 3, 0 591, 25 0 toolStrip System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1.TopToolStripPanel 1 toolStripContainer1.TopToolStripPanel System.Windows.Forms.ToolStripPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripContainer1 3 toolStripContainer1 System.Windows.Forms.ToolStripContainer, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 0 6, 6 6, 6 0, 0 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= Ctrl+N 193, 22 &New... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= Ctrl+O 193, 22 &Open... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= Ctrl+S 193, 22 &Save Ctrl+Shift+S 193, 22 Save &as... Ctrl+I 182, 22 &Image... Ctrl+G 182, 22 &GPX... Ctrl+K 182, 22 &KMZ... Ctrl+D 182, 22 &Route data... 193, 22 &Export 193, 22 I&mport routes... False 190, 6 190, 6 193, 22 E&xit 37, 20 &File iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAexJREFUOE9j+P//PwMlGK/myVu+xUze/HXHvN1fHy0/+PXIyoNfp6w69FUK2UKcBvRt +LoDiP90r/v6vHHFl8f1S77cmbvz62OgAZ+QDYEb0L3q1f9lJ74agEwHalrWv/Hb79RJ7964FJz4bZ26 /Y95wpbv7hV3P87c/vUN0ICbMFeADQAKcDYuefl/3oGvV+tXfG2YsOnbn7ie5/9cC47/t8vY/cs0ds1x l/ytDy3jl/8J63j3c+mBr/dRDABximc+/5816/P/wjlf/kf2fHxhlbzlr0Xihh+msSvzQfIBtdtVDCMW v3Atv/2+YemXPRgGJPU9++/d9OZ/dO/n/2Vz3vzX8J602iRmhSNMoYJDHbNd1qHfrmV3Xjes/HIIw4Cg 5qf/zYrv//dsegV2SWLPo/91i99aIhnAapd56K9X3bNvzSu/bMEwwKni8X+Homv/rTKP/zeJ3/bfMGrt fw2fqUB1kHRiFrdeyTbz4L+Altd/C6Y/LsUwAD0xgQIWWUzda5K7a9ntP2mT3//r3fCVjaAB6AZapOy7 GNLx4V9Y3flcohISTFFc33slh/wLMf4tH/75VV75phUwm5EkAzyqHzv7t3z65VFy8adx1CovdJcRzEhR vZ8jnUuuNZrGrBPFlukIGkAop1JsAABuDMymYL0yPwAAAABJRU5ErkJggg== Ctrl+Z 177, 22 &Undo iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAd1JREFUOE9j+P//PwMlGK551aGvUisPfp2y/ODXI/N2f33Us/5LSuXCL5yEDAcbANIM xJ/m7vz6uH7JlzuNK748bl315U7Foi+fKxd9ScVnCMyAmzO3f33jXvngvXnClu9WKdv+OOQe/5oy+fOL wjlfXhTO/RIGMmTZia8GDkXXgEyEt8EGLD3w9X5Yx7ufZtHzf7vkrb9pGrvmGBB/MYvf/Dt58ue/6TM/ P8ue+yVy3oGvV60zj/8HuhbuNbABDUu/7HEtv/Ne3avnVkDtdhWQmGnsynzj6OVfdQJm/wrt/Pgc6JL/ WbM+/zeJ34rpgoaVXw65lt97pebZd1jBoY4Z5kSTmBWOGt6TVpfNefM/uvfzf++mN//1QhdjGtC88ssW 7/oXXzW8J98EGsAKM2DK1q+6QAy22bPp1X+z4vv/NXymYhpQMP1xaWDrm79GkWt+AQ3ghhkACjAroJ9N 4rf91wtZAtas6taFaUDvhq9saZPf/3Mtu/1H3WuSO3IoIwcYtuiEJ6SwuvO5IR0f/lmk7LtIKPFgRCNI QCtgNqN/9bWX/i0f/jrkX4iJ63uvRIxBKPkAaAifT+XNUwGtn796VD92JtkAmAbvhlehUb2fI8k2gBiN MDUUZWWQIQCu1sRwfRrh4gAAAABJRU5ErkJggg== Ctrl+Y 177, 22 &Redo 174, 6 177, 22 Change &start time... 39, 20 &Edit iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAi9JREFUOE+lk0tPU1EUhfunHJQJTtSoAwaOZCgJJhiC0ibURMGgkSYSwKgBhYKIUEQB EfGRACIttDwDRKqmFkuhLZWHLVWa2p77eXdN6nVoGNzJTda31t5rHxNgOsx3KLEYmxKJhKlnZI7ul7M8 Hp6h64WXR0MeOp9P0THgpr3fhePZe1r7JnjwZJz7vWO0OEcRXQ4gYg2F0hQZpUhnFamM4mdakUwp4gca ez80tvc1tuIake8aG7saR06W6HodIM4irutYxHbHS0W9h/JbXkpveimunqaoys2JSy4KL7gwn3dzzDpP cNsAkNjibG30sPgVvH6Y8MHrZY2BWUW3S9E6luX2qwx1g784atskEDMAZGaJXdkwzcwX9JgQ3oPgDv+I 7bq4si1OgXUDf9QAkIXJzAKY/AhvdOfBOUWPW9EmziMZbjxNUfVwn7K7O5gtG3yK8HcHsm1ZmADermis 686BGHyOwuomLK/DfODPaOfqwzmAT/+fX6JUJdsWwNC8wjmlcIxnaRxOc73vAFtnkoqWXUobIhTXrmGu DPEhZABIz1KVAHp1sTiLg9F5chVGl+DMZV8OsKKnyieQI5GerU0e2t9lsfcnqXEmsTjilN3bycUWZxGf vrhAgSXEUtAAkAuTI7naPEeNw8+1rm9UOWKUN29R0hTlrD1CUW2Y41c2KdQrPFUdztWdTyDnabwwORLp WaqSbcs4MrPEFmcRL6wZAHLTQvvfL/8WDvOURfsblYYTxd5DjEEAAAAASUVORK5CYII= F11 251, 22 &Full screen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== Ctrl+Shift+R 251, 22 Show &right panel iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== Ctrl+Shift+B 251, 22 Show &bottom panel 44, 20 &View iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAA2ZJREFUOE9tk21Mk1cYhp8YozIgi6sgbrjwsWkmgsoSVBTULUvRKRjoNrSCICnifpg4 LTo/IRqgaBlgCxQVtQgoko1RRAsGKEhr0b3vaFdaLKUVBSJ1qKDgZ+69g/iDyJNcOSdPzrny5OQ+RFPU BtHlgNTselFGkUaSxbFPok7hJ5UHTXV2Ui84pixAKL7+e3pB+0ulqgt1LT1o0NrRqLOhtqnztTi7QfV1 zIWlU4p8vz2zPjJRNpQuvYxT8iqUVLahlX0MDePE1Zu9aNA9wIOHgyi+cmc4OEYZPUnCW6EIEiTljPT0 WPHq5QuMjT6HxWLB+Yp6nP/ThnM1vUhTmHBF7cDw8DMUlreP+X13dvm4hLdSPs1vddatG00stB1D6B14 gfc19K8T0oIqpOYyOKKwIiWThVrbj6dPhpDwax0zc0n+dPpoaV5YqKAISScMiE9jsec3M8rV/Xgy/Gbc M/r8GST5lUg8qsXOLAsS0hgYrU40tpnhsVrBJ/I9mR0sbETU3rvYnv4PkjPNEGVYcLjIDsYyMi5592YU OQVXEbn7JjYfMCHuKIO8MgPcgnPlRN5Slf8mNaLEfyP2sBnbj1shyrQhKWOCSzecGHv1v+YtzimrsSa+ EqHJDHwi1SD/k/Wc4HQ9La7G8h1/4YdDXdh6rBtx6d2cyDbOj4es+CXfAb1p4m30t9uwMVEO+koG8pE2 E30qLyFfFaav0iEozoCN+7rw05FuCDnRtjQObhUcvIeo1HsQy+6jiRmB3e5A7ukSzFwkqSCaJ4sjl3y4 LcvBjJA/wOPfReA2MzemGWt/5tjF7UWdCBQaMIffDpfwFgTEahG7vwW0QJ5C5Cn92HtF3qNWjQZnlDWI 3lUKn4hqeEXo8PlmI/wEJvhGG+G9iYUHX49ZYdzFwFrQ/JKnxDvlMRGoL0tFqsZu9PUPwjnYD6OhA4UX G5BwQIXweBUWR1+Dz/paeK2rgj+/FAs3KEGeij2T0ugaJMtrvu2AwdKHsmt2sJ2PMDAwgPsOGxi2A00a HWrqtCiu0MMrRFr84X/grf1s2tydnVvEraAvmuEafgtLhHpE7Ga5jBiwJoWF5zfXQbNEvTR7VciHgrmR bvRJGJ/cw46Ra3I1uUiM5F74kKOPXLJMXE9F7uEZNDtUQJ7fz3sv+A+84CDTIQAbtgAAAABJRU5ErkJg gg== Ctrl+E 404, 22 Open in Google &Earth... Ctrl+Shift+E 404, 22 Open &multiple QuickRoute files in Google Earth... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK9gAA CvYBwq9wAwAAAptJREFUOE910+tPknEUB3Be9g/0uq0sW7et0uUktWleAyRAMVRy6kzHMgXvTm0GS0my pibl8pJWcxqXhqCAosDAB3i4CYiZpWvaWuuF8w/4Rm213HpenBe/s53Pztk5PxoA2p8o75zKy+CKa/hl Te08YbM8k9s6ksO/r2IJpFamQBYqre4fLxENP/235m/xr2RCheV7fPYw4lMkuMKQQSGbxsCgEZ3PXHg9 aUCIWECrdHSPEkisMH+Oz3mOuJQGJDO74VTNwOsMQUsewG7fQMi9gnrpSJASuFBs2PgN0MWgs6XwEyvY 9geh9x3AFfiKHdKF+q6JVUqAKVmOnmeO4mRshPSCh4haDfDMWeB0bcJLhBB2kWjumjBTAqO6pbD40STy hH3glClgV2lBaNX4ZI/ArjFj+b0DNXcHVJTA7o990mDzg13xBPnCfkQDJD46wlh/q0dUQ8JqIyGs7Juk BDa2v/kCkS8oFg2CXS6Hxa3HB6sfOyE1tggCq85FFAllQ5QAo94crWyfQzK7G9c5D2AwaUBMO2GaiMDv 3AMR8KFaouylXmO5yXcs40VsjRKkcnth9NjgcOqwtuBAhAxBrfPhTpOymRK4KJwnzzDGcIIuQbZAjojP A8KthttrjI2ziVezftxrU1ZRA6X6GDCOU2mNYJUqEHL5Qa4vxDoxwR80451mBbUtQ0WUwCWhnjzLHEfc 1QZc4/XAvOLBlseCQHgJWpsRHXLlvqhBlkgJXBbOec8xx2KXKEGmoCd2vouYeTMLccfjXSa3SsZgFR6v bWw79H8OPegVuuDp3JexDiRIym0F/3bLWlp2SV16Vv5RNodH4/KKaLWN7dTALfFUagJToUvKrZvPYIkK s3I5R1hsDu1GfgHtJo//X+An6VOqVy8U1mMAAAAASUVORK5CYII= Ctrl+M 404, 22 &Publish map... 404, 22 Add split times from &external data source... 48, 20 &Tools 135, 22 &Language... 61, 20 &Settings iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 116, 22 &Help... 113, 6 116, 22 &About... 44, 20 &Help 0, 0 7, 2, 0, 2 1024, 24 0 menuStrip System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this 1 6, 25 True 52 7, 15 1024, 550 Calibri, 10pt AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 QuickRoute exportLapHistogramImage System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapHistogramToolstripSeparator1 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapHistogramBinWidthLabel System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 lapHistogramBinWidth System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripNew System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripOpen System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSave System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstSeparator1 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripUndo System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripRedo System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstSeparator2 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripZoom System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstSeparator3 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripToolPointer System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripToolAdjustRoute System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripToolLap System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripToolCut System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripToolZoomIn System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripToolZoomOut System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstSeparator4 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripOpenInGoogleEarth System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripPublishMap System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstToolsSeparator System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripFullScreen System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripRightPanelVisible System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripBottomPanelVisible System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstViewSeparator System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripHelp System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripApplicationSettings System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 tstSeparator5 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripDonate System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 colorCodingAttributes System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator1 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 colorRangeStartValue System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 colorRangeIntervalSlider QuickRoute.Controls.ToolstripColorRangeIntervalSlider, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null colorRangeEndValue System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 colorRangeIntervalButton System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripAutoAdjustColorRangeInterval System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 gradientAlphaAdjustment QuickRoute.Controls.ToolstripTrackBar, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null toolStripSeparator2 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routeLineWidthLabel System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routeLineWidth QuickRoute.Controls.ToolstripNumericUpDown, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null routeLineMaskVisible System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 routeLineMaskWidth QuickRoute.Controls.ToolstripNumericUpDown, QuickRoute.Controls, Version=2.4.0.0, Culture=neutral, PublicKeyToken=null routeLineMaskColorButton System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator9 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 secondaryColorCodingAttributeLabel System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 secondaryColorCodingAttributes System.Windows.Forms.ToolStripComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator5 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 smoothingIntervalLengthLabel System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 smoothingIntervalLength System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator4 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 circleTimeRadiusLabel System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 circleTimeRadius System.Windows.Forms.ToolStripTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator12 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator11 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFile System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileNew System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileOpen System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileSave System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileSaveAs System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileExport System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileExportImage System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileExportGPX System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileExportKMZ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileExportRouteData System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileImportSessions System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileRecentDocumentsSeparator System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileSeparator1 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuFileExit System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuEdit System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuEditUndo System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuEditRedo System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuEditSeparator1 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuEditChangeStartTime System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuView System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuViewFullScreen System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuViewRightPanelVisible System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuViewBottomPanelVisible System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuTools System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuToolsOpenInGoogleEarth System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuToolsOpenMultipleFilesInGoogleEarth System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuToolsPublishMap System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuToolsAddLapsFromExternalDataSource System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuSettings System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuSettingsLanguage System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuHelp System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuHelpHelp System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuHelpSeparator1 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 menuHelpAbout System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 toolStripSeparator3 System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Main System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Main.ru.resx000066400000000000000000003206671446222606700234200ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Перегоны iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= Экспортировать гистограмму Ширина столбца Цвет пути соответствует... Начальное значение цветового интервала Значение цвета линии пути Конечное значение цветового интервала iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAKVJREFUOE+tkmEOwiAMhXuSeQjvoH/ckVy6Ky16Hp0Hob4SIEDGGOKPF1jWfu1rIRGh HoVkZpYW+aIJYEAzN4ihJ7RqcwZ6Qws0QVf8R7FNwAkJYwYwLQDtIAZ88J0A7pUOPGBG4iO28HIWFHDZ sfDzEInoDImetZXmsXYLLlkvYbolUB7b9Yhs8bDPA9W3YvstOE8cnxX/Sex/LPhN1FZYnEEP4AuyYY/2 1EDQNAAAAABJRU5ErkJggg== 23, 20 Задать диапазон цветового интервала iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAALVJREFUOE+tk1EO wUAQQOck3EHvwCFIOAl7AS7BAZyDL07BH98k682my1QlXcYmL520M29ntq3Ia0UTd4WtXL0RuqrMc819 SjTwkLyuDnJnrjP4Yvx/p4YQogfR4l6UOIAxzGEDOzjBHeIVjrCFFcxgJGnjJOiTVMHECPa14FYiyB1k wZoiFZyhJViy+/StAytYUKSCxggXCg5mBBUMzQiuQ+StVvWXqNfS1aix/0Gp4Jeaz+4HCfcWr/594rkA AAAASUVORK5CYII= 23, 20 Автоподпор диапазона цветового интервала Прозрачность линии пути 40, 21 Ширина линии пути iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUhJREFUOE9jYCAM mIBKVgKxH2GlmCq4gUIbgfg/FxfD54QlDLqkGCIIVLwFpJlPguF/0U6G/x13GZ5UHWOQJsYQcaCivSDN AlIM/8sOAjXfg+C2ewwnC48xcOIzRAooeQykWVSJ4T/QRrhmmCGpSxnW4TJAAShxHqRZSovhf+0ZTM1x sxj+s3Iw/AeqaUc3RBkocBWkWc6I4X/dOUzNUZMY/jOzgjWD8HxkA9SAnHsgCSVzhv9NVzA1h3Yx/Gdi hmueg6xZE8h5BdKsZs/wv/kapma/BrhGkM0z0Z0+C6RZ15Phf+tNTM0eZSiak7EFHpthIMPJttuYmp2y UTSH44y6lpsM0qBEAosmEG0Vh6LZm2DiARpgVn+F4RvIJaZhKJrtCWqGKWi9xRBl4AfX/BMobkC0ZiSF XUD2ByAGxQ5ZAJR9icowINMBVAm93F59dlgAAAAASUVORK5CYII= 23, 20 Показывать границу линии пути 40, 21 Ширина границы линии пути iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= 23, 20 Цвет границы линии пути 32, 21 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= Создать (Ctrl+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= Открыть (Ctrl+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= Сохранить (Ctrl+S) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAddJREFUOE9jYKAl mLTlW8zEjV93zNz98dGyA1+OrNj/ZcqyI1+liLKzd8PXHfUbrvzpXvf1eeOKj4/rF3+5M3fnx8fLdn39 hNWQ7lWv/i85+cUAZHrX2i/L+uff/53S8+qNS/yJ31qp2//oJ6z/bl929+PMrV/frNr/5SaKK1Ye+8fZ uOTl/3n7v16tX/61oX7TlT9x9fX/XAuO/7fL2PTLJHbVcfv8rQ+14uv/hHW8/Ln4wOf7GN4onvn8f9as z/8L53z5H9n17oWV/Za/ZtGLf5hEr8wHKfat36FiGLzghWv59ff1S7/swTAgqe/Zf++mN/+jez//L5vz 5r+G16TVRlErHOEKQ0OZ5eMP/XYtu/O6fuWXQxgGBDU//W9WfP+/Z9MrsEsSex79r1341hKm0Ng4jdXO fv9ft7pn35pWfN6CYYBTxeP/DkXX/ltlHv9vEr/tv2HU2v8aPlP/wxSaJK5Rss2s/2ffsv9v/rRHpQSj EhSwyIrUvSe7a5Vd+ZMGDNz6Vf/ZCBqArsAiZd/FEKDmsLqzuSRpTuz7oGSfdz7GH6jZrfLKNwaG/4wk GeBR+cTZp/7pL/us/T+NI1d4kaQZpDii53Okc8nVRoPElaIka6aLBgBeqPIjNLWeAwAAAABJRU5ErkJg gg== Отменить (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAclJREFUOE9jYKAW WHbkq9SK/V+mLDvw5cjM3R8f9az/klK48h8nUeaDNC/b9fXT3J0fH9cv/nKnccXHx62rvtwpmf/lc+XC L6kEDVm1/8vNmVu/vnEvf/BeP2H9d62UbX/sc/d/TZn87kXhnC8vCuZ+DgMZsuTkFwOHomv/MQxcfODz /bCOlz/lo+f/dslbf9M4es0x09g1X+Tj5/+2n7z/b/rk98+y5n6OnLf/61XrzOP/Vx5D81r90i97XMuv v1f16LnlW79DBWSDSfTKfLXIpV8lfWb/8m95/xzokv9Zsz7/N4nfiumC+pVfDjkV33ul4tl3mCE0lBnm RKOoFY4aXpNWl8158z+69/N/76Y3//VCF2Ma0LTi8xb7ohdfVbwn3DQ2TmOFGTB562fdKVu/gm32bHr1 36z4/n8Nn6mYBuRPe1Rq37r/r6TPml/irsXcMANAAWYF9LNJ/Lb/eiFLwJpV3bqweGHVf7a0+vp/WmVX /qh7T3ZHDmWMAMMVp2F1Z3NDgIZYpOy7SDDesSv4z+hdee2lfcv+v/Z552MS+z4okWyQisdiPq/Km6cC Wj999ah84kyyATAN3o2vQiN6PkeSbQBdNQIAlV/obSdKz9wAAAAASUVORK5CYII= Повторить (Ctrl+Y) Масштаб iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFZJREFUOE+t08EK ACAIA1D//6cNgwItpc28eXkgmyJ+NOzwakALUZsOMoEOsgEWcQCDHACKXAEESYFXpDphxVv2xMXIRBo7 APcitpAC4gPByHfAwPTBBlc83yF9awZeAAAAAElFTkSuQmCC Указатель iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+lk1EO gDAIQ7n/pacjYkZXKiqJP7I8utKZmY3z+1UTUEGiJ4eMWQTi/6OUUnZohTq8GOJXryah7BKSAGJSH6A8 YV5sCoRx6M3uAdLUdqJHFVzNKgdp7WmNnb1jbNHdVnhWCKbwE4CqUul7en2vVTCgeqX3+QPJfiLsN/lb UAAAAABJRU5ErkJggg== Привязка iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHRJREFUOE+tktEO QBEMQ/f/P+3eScjaTIeQeECdTdXMrP1zZ7huTNCnm0RscXDRfiY6ieddx/oJTyArOOyr9s4B1N4dQEC0 B/AWNLb+Bb481sHYdQ6yyyE0ZU7gG5PKZUrZaZWLFMYtXgGYfAx5DnBg6b6LPqqAPtCiiFafAAAAAElF TkSuQmCC Добавление отсечки iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHVJREFUOE+VUgkO wCAI4/+fdtMN0nEMSmKM2lZsFRFZ77gnqoy3dpEiH85ZECIpfiryi+tEuvNjYAUakTUCD6bIQQTM3UlR pdGyET9eJH6MO/A3jzvJiOYJfPn0SX4zaxf3gogndALqk6WCipXrLQY9qPIOmAv1cLxEI15+ugAAAABJ RU5ErkJggg== 23, 22 Обрезать путь iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGVJREFUOE/dkkkO ACAIA/n/p90iBpGK20kTL6QMWEs0npBK8hoSu1Sa9BGwKWhoBCAI6fQ8VRZrzQTAtVe3aDplXjOSBWiL dwA1CT3N92HXxEy8/sYCcYLEprrJRFE+iree9iGEIkhpMd3aVoCGAAAAAElFTkSuQmCC 23, 22 Увеличить iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAF1JREFUOE9jYMAE /4FCyBiLEuxCYE3oAMkwvAZhaMRhEE5DKDKAoGaYAqh3MFwBNwAt8OABST8DCPkFlxdAfiKkF+Yd2sQC zFRCCYmgK1AMwpICyUre6H4ehoYwAADKQEnF242y5AAAAABJRU5ErkJggg== 23, 22 Уменьшить iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA2hJREFUOE9tk21M k1cYhp8YsoFANtE6jMSVMWMUi2PZYMMBG8lSNAoGYUORr7Ey3A8Tx2A6PwrZAqWTr/IhYICIWjYkG/ZV scUABWmpc+872pUWS2lFgUg3VFDQueXeK8wfRJ7kyjk5OefKc07uQ7REiT9XBubKNZKCGm1RIU92UXtW dIYyaKm9i9a27FYG7slp/1la3f+4iRnC5Z4RdOgc6NTboVIN/p0t1zDvJjS+taTo9ajabTHpJVP5xT/i RFUrGlr60Mv9CS3rwvmro+jQ38btO5OoUP46Hbz7dNwiyauhp4K2p8pnRkZsePL4EeZmH8JqtaKxWYPG C3bUq0aRV2vGT2onpqcfoFR5fU74cX3o/xLpMmGY7NqVLg66gSmMTjzC85r6y4Xi6lbklrE4VmtDViEH tW4c9+9NIe0ww1Kk1I3cRYrwsPgaZHxvREoeh4OlFijV47g3/XTeM/vwAYoULUg/rsMXMivS8liYbC50 9lkgCK8TE/nL5W8ndSI2+wZS8/9AZqEFkgIrjtY4wFpn5iX/Pp1FSfV5xBy4il2HzEg+zqL8nBHLg0ur iPyKmYCdasTm/I7EoxakfmeDpNCOjIIFzl5xYe7JM80/qG9qQ2RKC8IyWQhj1KAAuYZobbmGNrch9LPf kHBkCHulw0jOH+ZF9nk+OWLDVwonDOaFtzH092FHehVoYyVo3Q/dRL6VDeTPwG2rHkHJRuz4egifHhtG Ei/al8fDj/Hf3kRs7k3kVN5CFzsDh8OJsooGvLypqPmZIJk8FPAKLsFLIb9gpfgGRPssfJsWfPglz35+ LhmEKMmIVeLr8IjoQWCiDonf9IDerMoiWiF7xe+dsru9Wi1ONakQt/8MhNFt8I3WY90uE96IN8M/zgS/ nRwEYgPcw/mDoougNQ33ybdcsJCF9WclTOcwxsYn4Zoch8k4gJOnO5B2iEFECoPNcZcg3HYRvh+1IkB8 Bhu2N4FW1x5clMbloory7n4njNYxnLvkADd4FxMTE7jltIPlBtCl1UN1WYe6ZgNeCzlR9+J/8Ilau0yQ Obgnp5e/Wzc8I65hS5IB0Qc4PiNGRGZxWB3VDnKTjJLPeyEvCgQJXrQiXExeH0jJU9JG7jITeSvukPfJ MfKQmckzkyHviALyeT+eVonXPBf8BwEZH9akpCNnAAAAAElFTkSuQmCC 23, 22 Открыть в Google Earth (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAoRJREFUOE+F0+1P UlEcB3Bf9g/0uq0sW9bWg80mKi2fFYqhaaGiU7PM5pSrOHWLTaV8iKy0pFw+ZNacxoOKKOATMPACFy54 QcwsraUvWi+cf8C3W1ubvbh2Xp3t7PvZ73fO70RE7FvFipHMJLGsIq9I3pQtlXekiBv6UnMVGuHNFmum RMkU3O4azK/sfbo/888+pmjmR1RaL6ISCMQKlFApR9HdY8L9Fy6MDBvBkLOoU/RvcwIXSs1fotJfIjKh FnHCZjg1Y/A6GeipPdjta2DcS6hq7QtwAtES49ofgCcDT9QKmlzCJh3AtG8PLv8OtigXahQDy5xAlmwx fEbYj+NsC1euP0TYaoTHsACnax1ekkHQRaFeMWThBPon54OyzmFkSh9BXKyCXaMHqdfisz0Eu86CxQkH Ku4903ACX3/uUkYbDVHpE1yTdiHsp/DJEcTq+2mEdRSsNgoFZZ3DnMDq5o7PH/qG/MoeiEo6sOCexkcr jS1Giw2SxLJzDnlS5XPuO6gxhcuaDIgTNSNZ3AKjWQdy1AnzUAi0cxuk34c7hLqdEzhfYvYdSXrFPiOB xOx2mDw2OJxTWJl1IEQx0E75UF6nrucEzkpnqFOCARzjEUiTdCDk84B0a+H2mth21vFmnEZVo7qcGyg0 sMAgTvDrcLVQBcZFg1qdZSsxgw5Y8EHHDpK8+8YBFRioaOEgIuNrcTmnDZYlDzY8C/AH56G3mSBvU+9W EA8ucgLnpJPe08IBdhIJpEja2PGdw9i7cVQ3Pv4uEN9SZmWJj3KGfx/wSicCJzNesxUQuJTRAPZXrvBT 86vj03MOHxj8eygh3ibGCFRTsRnVM8nCu7l8ftGh/wV/ARt4gQEX1VueAAAAAElFTkSuQmCC 23, 22 Опубликовать карту iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAh9JREFUOE/Nk91L U3Ecxv2nupg3dlNRXXjRVV4mGBhibYMtKA2LFBI1KrR0mprOLDUzewE1c9NNN0UlrVja3Jua04Yrx9p+ 59P5Tliny6CLDpybA8/L93meU1DwXzy9oz56XszxaGSW7udeuoY9dD6bpmPQTfuAC8fTd7T2T/Lg8QT3 +8ZpcY6RNy5gDYXSFBmlSGcVqYziR1qRTCkSBxp73zV29jW2EhqxbxrhXY0jJ0sPSURZwLUdC9jveKms 91Bxy0vZTS8lVTMU29ycuOSi6IIL03k3x6x+gjsGArEtytZGDwtfwBuAyVV4taQxOKfocSlax7Pcfpmh dugnR+0R1rYNBHKz2DY3zDD7Gd0mRPcgGOcPcJ0ONrclKLSGCWwaCCQwuVkIpj7Aa115yKfodSvaRHk0 w40nKWwP9ym/G8dkCfMxxu8MJG0JTAjeLGts6Mpr2/BpE1YisLQB/rXD087VR3MEq/r3fIhSlaQtBMN+ hXNa4ZjI0jiS5nr/AfbOJJUtu5Q1xCipWcdkDvE+ZCCQnqUqIejTwaIsCkblqRUYW4Qzl1dzBMu6q7wD GYn0bG3y0P42S91AkmpnEosjQfm9eM62KAv49MV5Ci0hFoMGAlmYjORqs49qR4Br3V+xObapaN6itGmT s3UximuiHL8SoUiv8FRVNFd33oHM07gwGYn0LFVJ2nKO3Cy2RVnA8+sGAlmjsP3t+89+4l/OwlIhw+BI bwAAAABJRU5ErkJggg== 23, 22 На весь экран (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 23, 22 Показать правую панель (Ctrl+Shift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 23, 22 Показать нижнюю панель (Ctrl+Shift+B) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 23, 22 Помощь iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= 23, 22 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 AAAASUVORK5CYII= Пожертвования на дальнейшую разработку QuickRoute 3, 0 591, 25 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 229, 22 Созд&ать... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= 229, 22 &Открыть... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 229, 22 &Сохранить 229, 22 Со&хнить как... 201, 22 &Изображение... 201, 22 201, 22 201, 22 &Путь... 229, 22 &Экспорт... 229, 22 И&мпорт путей... 226, 6 226, 6 229, 22 В&ыход 45, 20 &Файл iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAexJREFUOE9j+P//PwMlGK/myVu+xUze/HXHvN1fHy0/+PXIyoNfp6w69FUK2UKcBvRt +LoDiP90r/v6vHHFl8f1S77cmbvz62OgAZ+QDYEb0L3q1f9lJ74agEwHalrWv/Hb79RJ7964FJz4bZ26 /Y95wpbv7hV3P87c/vUN0ICbMFeADQAKcDYuefl/3oGvV+tXfG2YsOnbn7ie5/9cC47/t8vY/cs0ds1x l/ytDy3jl/8J63j3c+mBr/dRDABximc+/5816/P/wjlf/kf2fHxhlbzlr0Xihh+msSvzQfIBtdtVDCMW v3Atv/2+YemXPRgGJPU9++/d9OZ/dO/n/2Vz3vzX8J602iRmhSNMoYJDHbNd1qHfrmV3Xjes/HIIw4Cg 5qf/zYrv//dsegV2SWLPo/91i99aIhnAapd56K9X3bNvzSu/bMEwwKni8X+Homv/rTKP/zeJ3/bfMGrt fw2fqUB1kHRiFrdeyTbz4L+Altd/C6Y/LsUwAD0xgQIWWUzda5K7a9ntP2mT3//r3fCVjaAB6AZapOy7 GNLx4V9Y3flcohISTFFc33slh/wLMf4tH/75VV75phUwm5EkAzyqHzv7t3z65VFy8adx1CovdJcRzEhR vZ8jnUuuNZrGrBPFlukIGkAop1JsAABuDMymYL0yPwAAAABJRU5ErkJggg== 216, 22 &Отменить iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAd1JREFUOE9j+P//PwMlGK551aGvUisPfp2y/ODXI/N2f33Us/5LSuXCL5yEDAcbANIM xJ/m7vz6uH7JlzuNK748bl315U7Foi+fKxd9ScVnCMyAmzO3f33jXvngvXnClu9WKdv+OOQe/5oy+fOL wjlfXhTO/RIGMmTZia8GDkXXgEyEt8EGLD3w9X5Yx7ufZtHzf7vkrb9pGrvmGBB/MYvf/Dt58ue/6TM/ P8ue+yVy3oGvV60zj/8HuhbuNbABDUu/7HEtv/Ne3avnVkDtdhWQmGnsynzj6OVfdQJm/wrt/Pgc6JL/ WbM+/zeJ34rpgoaVXw65lt97pebZd1jBoY4Z5kSTmBWOGt6TVpfNefM/uvfzf++mN//1QhdjGtC88ssW 7/oXXzW8J98EGsAKM2DK1q+6QAy22bPp1X+z4vv/NXymYhpQMP1xaWDrm79GkWt+AQ3ghhkACjAroJ9N 4rf91wtZAtas6taFaUDvhq9saZPf/3Mtu/1H3WuSO3IoIwcYtuiEJ6SwuvO5IR0f/lmk7LtIKPFgRCNI QCtgNqN/9bWX/i0f/jrkX4iJ63uvRIxBKPkAaAifT+XNUwGtn796VD92JtkAmAbvhlehUb2fI8k2gBiN MDUUZWWQIQCu1sRwfRrh4gAAAABJRU5ErkJggg== 216, 22 &Повторить 213, 6 216, 22 Изменить &время старта... 98, 20 &Редактировать iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAi9JREFUOE+lk0tPU1EUhfunHJQJTtSoAwaOZCgJJhiC0ibURMGgkSYSwKgBhYKIUEQB EfGRACIttDwDRKqmFkuhLZWHLVWa2p77eXdN6nVoGNzJTda31t5rHxNgOsx3KLEYmxKJhKlnZI7ul7M8 Hp6h64WXR0MeOp9P0THgpr3fhePZe1r7JnjwZJz7vWO0OEcRXQ4gYg2F0hQZpUhnFamM4mdakUwp4gca ez80tvc1tuIake8aG7saR06W6HodIM4irutYxHbHS0W9h/JbXkpveimunqaoys2JSy4KL7gwn3dzzDpP cNsAkNjibG30sPgVvH6Y8MHrZY2BWUW3S9E6luX2qwx1g784atskEDMAZGaJXdkwzcwX9JgQ3oPgDv+I 7bq4si1OgXUDf9QAkIXJzAKY/AhvdOfBOUWPW9EmziMZbjxNUfVwn7K7O5gtG3yK8HcHsm1ZmADermis 686BGHyOwuomLK/DfODPaOfqwzmAT/+fX6JUJdsWwNC8wjmlcIxnaRxOc73vAFtnkoqWXUobIhTXrmGu DPEhZABIz1KVAHp1sTiLg9F5chVGl+DMZV8OsKKnyieQI5GerU0e2t9lsfcnqXEmsTjilN3bycUWZxGf vrhAgSXEUtAAkAuTI7naPEeNw8+1rm9UOWKUN29R0hTlrD1CUW2Y41c2KdQrPFUdztWdTyDnabwwORLp WaqSbcs4MrPEFmcRL6wZAHLTQvvfL/8WDvOURfsblYYTxd5DjEEAAAAASUVORK5CYII= 287, 22 На &весь экран iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== 287, 22 Показать &правую панель iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== 287, 22 Показать &нижнюю панель 38, 20 &Вид iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAA2ZJREFUOE9tk21Mk1cYhp8YozIgi6sgbrjwsWkmgsoSVBTULUvRKRjoNrSCICnifpg4 LTo/IRqgaBlgCxQVtQgoko1RRAsGKEhr0b3vaFdaLKUVBSJ1qKDgZ+69g/iDyJNcOSdPzrny5OQ+RFPU BtHlgNTselFGkUaSxbFPok7hJ5UHTXV2Ui84pixAKL7+e3pB+0ulqgt1LT1o0NrRqLOhtqnztTi7QfV1 zIWlU4p8vz2zPjJRNpQuvYxT8iqUVLahlX0MDePE1Zu9aNA9wIOHgyi+cmc4OEYZPUnCW6EIEiTljPT0 WPHq5QuMjT6HxWLB+Yp6nP/ThnM1vUhTmHBF7cDw8DMUlreP+X13dvm4hLdSPs1vddatG00stB1D6B14 gfc19K8T0oIqpOYyOKKwIiWThVrbj6dPhpDwax0zc0n+dPpoaV5YqKAISScMiE9jsec3M8rV/Xgy/Gbc M/r8GST5lUg8qsXOLAsS0hgYrU40tpnhsVrBJ/I9mR0sbETU3rvYnv4PkjPNEGVYcLjIDsYyMi5592YU OQVXEbn7JjYfMCHuKIO8MgPcgnPlRN5Slf8mNaLEfyP2sBnbj1shyrQhKWOCSzecGHv1v+YtzimrsSa+ EqHJDHwi1SD/k/Wc4HQ9La7G8h1/4YdDXdh6rBtx6d2cyDbOj4es+CXfAb1p4m30t9uwMVEO+koG8pE2 E30qLyFfFaav0iEozoCN+7rw05FuCDnRtjQObhUcvIeo1HsQy+6jiRmB3e5A7ukSzFwkqSCaJ4sjl3y4 LcvBjJA/wOPfReA2MzemGWt/5tjF7UWdCBQaMIffDpfwFgTEahG7vwW0QJ5C5Cn92HtF3qNWjQZnlDWI 3lUKn4hqeEXo8PlmI/wEJvhGG+G9iYUHX49ZYdzFwFrQ/JKnxDvlMRGoL0tFqsZu9PUPwjnYD6OhA4UX G5BwQIXweBUWR1+Dz/paeK2rgj+/FAs3KEGeij2T0ugaJMtrvu2AwdKHsmt2sJ2PMDAwgPsOGxi2A00a HWrqtCiu0MMrRFr84X/grf1s2tydnVvEraAvmuEafgtLhHpE7Ga5jBiwJoWF5zfXQbNEvTR7VciHgrmR bvRJGJ/cw46Ra3I1uUiM5F74kKOPXLJMXE9F7uEZNDtUQJ7fz3sv+A+84CDTIQAbtgAAAABJRU5ErkJg gg== 443, 22 Открыть в Google &Earth... 443, 22 Открыть &несколько файлов QuickRoute в Google Earth... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA Cw0B7QfALAAAAptJREFUOE910+tPknEUB3Be9g/0uq0sW7et0uUktWleAyRAMVRy6kzHMgXvTm0GS0my pibl8pJWcxqXhqCAosDAB3i4CYiZpWvaWuuF8w/4Rm213HpenBe/s53Pztk5PxoA2p8o75zKy+CKa/hl Te08YbM8k9s6ksO/r2IJpFamQBYqre4fLxENP/235m/xr2RCheV7fPYw4lMkuMKQQSGbxsCgEZ3PXHg9 aUCIWECrdHSPEkisMH+Oz3mOuJQGJDO74VTNwOsMQUsewG7fQMi9gnrpSJASuFBs2PgN0MWgs6XwEyvY 9geh9x3AFfiKHdKF+q6JVUqAKVmOnmeO4mRshPSCh4haDfDMWeB0bcJLhBB2kWjumjBTAqO6pbD40STy hH3glClgV2lBaNX4ZI/ArjFj+b0DNXcHVJTA7o990mDzg13xBPnCfkQDJD46wlh/q0dUQ8JqIyGs7Juk BDa2v/kCkS8oFg2CXS6Hxa3HB6sfOyE1tggCq85FFAllQ5QAo94crWyfQzK7G9c5D2AwaUBMO2GaiMDv 3AMR8KFaouylXmO5yXcs40VsjRKkcnth9NjgcOqwtuBAhAxBrfPhTpOymRK4KJwnzzDGcIIuQbZAjojP A8KthttrjI2ziVezftxrU1ZRA6X6GDCOU2mNYJUqEHL5Qa4vxDoxwR80451mBbUtQ0WUwCWhnjzLHEfc 1QZc4/XAvOLBlseCQHgJWpsRHXLlvqhBlkgJXBbOec8xx2KXKEGmoCd2vouYeTMLccfjXSa3SsZgFR6v bWw79H8OPegVuuDp3JexDiRIym0F/3bLWlp2SV16Vv5RNodH4/KKaLWN7dTALfFUagJToUvKrZvPYIkK s3I5R1hsDu1GfgHtJo//X+An6VOqVy8U1mMAAAAASUVORK5CYII= 443, 22 Опубликовать &карту... 443, 22 Импорт данных из &WinSplits... 87, 20 &Инструменты 123, 22 &Язык... 73, 20 &Настройки iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 161, 22 &Справка... 158, 6 161, 22 &О программе... 59, 20 &Помощь AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 Ширина линии пути Радиус зоны выхода и ухода Радиус зоны выхода и ухода quickroute-linux-upstream-2.5/QuickRoute.UI/Main.sv.resx000066400000000000000000003203041446222606700234060ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Mellantider iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= Stapelbredd iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= Ny (Ctrl+N) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= Öppna (Ctrl+O) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= Spara (Ctrl+S) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAdpJREFUOE9jYKAl mLTlW8zEjV93zNz98dGyA1+OrNj/ZcqyI1+liLKzd8PXHfUbrvzpXvf1eeOKj4/rF3+5M3fnx8fLdn39 hNWQ7lWv/i85+cUAZHrX2i/L+uff/53S8+qNS/yJ31qp2//oJ6z/bl929+PMrV/frNr/5SaKK1Ye+8fZ uOTl/3n7v16tX/61oX7TlT9x9Tv/uRYc/2+XsemXSeyq4/b5Wx9qxdf/Cet4+XPxgc/3MbxRPPP5/6xZ n/8XzvnyP7Lr3Qsr+y1/zaIX/zCJXpkPUuxbv0PFMHjBC9fy6+/rl37Zg2FAUt+z/95Nb/5H937+Xzbn zX8Nr0mrjaJWOMIVhoYyy8cf+u1adud1/covhzAMCGp++t+s+P5/z6ZXYJck9jz6X7vwrSVMobFxGqud /f6/bnXPvjWt+LwFwwCnisf/HYqu/bfKPP7fJH7bf8Ootf81fKb+hyk0SVyjZJs5+Z99y/6/+dMelRKM SlDAIitS957srlV25U9a/cF/9av+sxE0AF2BRcq+iyH1h/6F1Z3NJUlzYt8HJfu88zH+QM1ulVe+MTD8 ZyTJAI/KJ84+9U9/2Wft/2kcucKLJM0gxRE9nyOdS642GiSuFCVZM100AAA6D/M5FmXvAgAAAABJRU5E rkJggg== Ångra (Ctrl+Z) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAcpJREFUOE9jYKAW WHbkq9SK/V+mLDvw5cjM3R8f9az/klK48h8nUeaDNC/b9fXT3J0fH9cv/nKnccXHx62rvtwpmf/lc+XC L6kEDVm1/8vNmVu/vnEvf/BeP2H9d62UbX/sc/d/TZn87kXhnC8vCuZ+DgMZsuTkFwOHomv/MQxcfODz /bCOlz/lo+f/dslbf9M4es0x09g1X+Tj5/+2n3z0b/rk98+y5n6OnLf/61XrzOP/Vx5D81r90i97XMuv v1f16LnlW79DBWSDSfTKfLXIpV8lfWb/8m95/xzokv9Zsz7/N4nfiumC+pVfDjkV33ul4tl3mCE0lBnm RKOoFY4aXpNWl8158z+69/N/76Y3//VCF2Ma0LTi8xb7ohdfVbwn3DQ2TmOFGTB562fdKVu/gm32bHr1 36z4/n8Nn6mYBuRPe1Rq37r/r6TPml/irsXcMANAAWYF9LNJ/Lb/eiFLwJpV3bqweGHVf7a0+oP/tMqu /FH3nuyOHMoYAYYrTsPqzuaG1B/6Z5Gy7yLBeMeu4D+jd+W1l/Yth/7a552PSez7oESyQSoei/m8Km+e Cmj99NWj8okzyQbANHg3vgqN6PkcSbYBdNUIAH8X6Ps3UGK+AAAAAElFTkSuQmCC Gör om (Ctrl+Y) Zooma iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFZJREFUOE+t08EK ACAIA1D//6cNgwItpc28eXkgmyJ+NOzwakALUZsOMoEOsgEWcQCDHACKXAEESYFXpDphxVv2xMXIRBo7 APcitpAC4gPByHfAwPTBBlc83yF9awZeAAAAAElFTkSuQmCC Pekare iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHtJREFUOE+lk1EO gDAIQ7n/pacjYkZXKiqJP7I8utKZmY3z+1UTUEGiJ4eMWQTi/6OUUnZohTq8GOJXryah7BKSAGJSH6A8 YV5sCoRx6M3uAdLUdqJHFVzNKgdp7WmNnb1jbNHdVnhWCKbwE4CqUul7en2vVTCgeqX3+QPJfiLsN/lb UAAAAABJRU5ErkJggg== Passa in rutten iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHRJREFUOE+tktEO QBEMQ/f/P+3eScjaTIeQeECdTdXMrP1zZ7huTNCnm0RscXDRfiY6ieddx/oJTyArOOyr9s4B1N4dQEC0 B/AWNLb+Bb481sHYdQ6yyyE0ZU7gG5PKZUrZaZWLFMYtXgGYfAx5DnBg6b6LPqqAPtCiiFafAAAAAElF TkSuQmCC Lägg till mellantid iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAHVJREFUOE+VUgkO wCAI4/+fdtMN0nEMSmKM2lZsFRFZ77gnqoy3dpEiH85ZECIpfiryi+tEuvNjYAUakTUCD6bIQQTM3UlR pdGyET9eJH6MO/A3jzvJiOYJfPn0SX4zaxf3gogndALqk6WCipXrLQY9qPIOmAv1cLxEI15+ugAAAABJ RU5ErkJggg== Klipp rutten iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAGVJREFUOE/dkkkO ACAIA/n/p90iBpGK20kTL6QMWEs0npBK8hoSu1Sa9BGwKWhoBCAI6fQ8VRZrzQTAtVe3aDplXjOSBWiL dwA1CT3N92HXxEy8/sYCcYLEprrJRFE+iree9iGEIkhpMd3aVoCGAAAAAElFTkSuQmCC Zooma in iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAF1JREFUOE9jYMAE /4FCyBiLEuxCYE3oAMkwvAZhaMRhEE5DKDKAoGaYAqh3MFwBNwAt8OABST8DCPkFlxdAfiKkF+Yd2sQC zFRCCYmgK1AMwpICyUre6H4ehoYwAADKQEnF242y5AAAAABJRU5ErkJggg== Zooma ut iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA2hJREFUOE9tk21M k1cYhp8Y4kAgm8w6jMSVsWWZWBxmg40NcCRLcUEwCBNFvsbKcD9MHIO5+VHIFihVvsqHgAEianFIHONV scUABWmpuvcd7UqLpbSiQKQbKijonLn3CvqDyJNcOScn51x5zsl9iJYo8ddK/xy5WpJfrSks4MkqbM+M TFcGLLV30drG7Ur/ndnt56RV/Y8amSFc7BlBh9aOTp0Nbe2D/2bJ1cyH8Q3vLyl6M6JmS3Ra8VRe0Rkc rWxBfXMferm/oWGdOHt5FB26W7h1exLlymvTgdtPxC6SvBZ8PCAqRT4zMmLF40cPMTf7ABaLBQ1NajT8 bkNd2yhya0z4VeXA9PR9lCivzgk/rwt+LpEuE4bIrlzq4qAdmMLoxEO8qKl/nCiqakFOKYtDNVZkFnBQ acdx7+4UUn9kWAqXupCrSBEaEleN9F8MSM7lsK/EDKVqHHenn8x7Zh/cR6GiGWmHtfhGZkFqLguj1YnO PjMEobViIl+5fFNiJ2KyriMl7y9kFJghybfgYLUdrGVmXvL0ySyKq84ieu9lbNtvQtJhFmWnDVgRWFJJ 5FPE+G1VISb7TyQcNCPlZyskBTak5y9w6pITc4+faf5DXWMrwpObEZLBQhitAvnJ1URry9S0oRXBX/2B +AND2CUdRlLeMC+yzfPlASu+UzigNy28jb6/D1FplaD3KkDrjnQTeVfUky8Dl090CEgyIOr7Iew4NIxE XrQ7l4cf4366gZicG8iuuIkudgZ2uwOl5fV4ZX1h0zNBErkp4BFYjOVBv+F18XWIdpv5Ns3Y/C3PHn4u GYQo0YBV4qtwC+uBf4IWCT/0gN6uzCRaKXvV54PSO70aDY43tiF2z0kII1vhHanDum1GvBVngm+sET5b OQjEeriG8gdF50Fr6u+Rd5lgIQvvnJIwncMYG5+Ec3IcRsMAjp3oQOp+BmHJDDbEXoBwy3l4f9YCP/FJ vPtFI2h1zb5FaVwhKi/r7nfAYBnD6Qt2cIN3MDExgZsOG1huAF0aHdoualHbpMcbQUdrX/4PXhFrlwky Bndm9/J364Z72BVsTNQjci/HZ8SA8EwOqyPaQS6SUfL6KOhlgSDeg1aGisnjUym5S1rJVWYkT8Vt8jw2 Rm4yE7lnMOQZlk9eH8fRKvGaF4L/ARnaH91+gLTtAAAAAElFTkSuQmCC Öppna i Google Earth (Ctrl+E) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAoRJREFUOE+F0+1P UlEcB3Bf9g/0uq0sW9bWg80mKi2fFYqhaaGiU7PM5pSrOHWLTaV8iKy0pFw+ZNacxoOKKOATMPACFy54 QcwsraUvWi+cf8C3W1ubvbh2Xp3t7PvZ73fO70RE7FvFipHMJLGsIq9I3pQtlXekiBv6UnMVGuHNFmum RMkU3O4azK/sfbo/888+pmjmR1RaL6ISCMQKlFApR9HdY8L9Fy6MDBvBkLOoU/RvcwIXSs1fotJfIjKh FnHCZjg1Y/A6GeipPdjta2DcS6hq7QtwAtES49ofgCcDT9QKmlzCJh3AtG8PLv8OtigXahQDy5xAlmwx fEbYj+NsC1euP0TYaoTHsACnax1ekkHQRaFeMWThBPon54OyzmFkSh9BXKyCXaMHqdfisz0Eu86CxQkH Ku4903ACX3/uUkYbDVHpE1yTdiHsp/DJEcTq+2mEdRSsNgoFZZ3DnMDq5o7PH/qG/MoeiEo6sOCexkcr jS1Giw2SxLJzDnlS5XPuO6gxhcuaDIgTNSNZ3AKjWQdy1AnzUAi0cxuk34c7hLqdEzhfYvYdSXrFPiOB xOx2mDw2OJxTWJl1IEQx0E75UF6nrucEzkpnqFOCARzjEUiTdCDk84B0a+H2mth21vFmnEZVo7qcGyg0 sMAgTvDrcLVQBcZFg1qdZSsxgw5Y8EHHDpK8+8YBFRioaOEgIuNrcTmnDZYlDzY8C/AH56G3mSBvU+9W EA8ucgLnpJPe08IBdhIJpEja2PGdw9i7cVQ3Pv4uEN9SZmWJj3KGfx/wSicCJzNesxUQuJTRAPZXrvBT 86vj03MOHxj8eygh3ibGCFRTsRnVM8nCu7l8ftGh/wV/ARt4gQEX1VueAAAAAElFTkSuQmCC Publicera karta iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAh9JREFUOE/Nk91L U3Ecxv2nupg3dlNRXXjRVV4mGBhibYMtKA2LFBI1KrR0mprOLDUzewE1c9NNN0UlrVja3Jua04Yrx9p+ 59P5Tliny6CLDpybA8/L93meU1DwXzy9oz56XszxaGSW7udeuoY9dD6bpmPQTfuAC8fTd7T2T/Lg8QT3 +8ZpcY6RNy5gDYXSFBmlSGcVqYziR1qRTCkSBxp73zV29jW2EhqxbxrhXY0jJ0sPSURZwLUdC9jveKms 91Bxy0vZTS8lVTMU29ycuOSi6IIL03k3x6x+gjsGArEtytZGDwtfwBuAyVV4taQxOKfocSlax7Pcfpmh dugnR+0R1rYNBHKz2DY3zDD7Gd0mRPcgGOcPcJ0ONrclKLSGCWwaCCQwuVkIpj7Aa115yKfodSvaRHk0 w40nKWwP9ym/G8dkCfMxxu8MJG0JTAjeLGts6Mpr2/BpE1YisLQB/rXD087VR3MEq/r3fIhSlaQtBMN+ hXNa4ZjI0jiS5nr/AfbOJJUtu5Q1xCipWcdkDvE+ZCCQnqUqIejTwaIsCkblqRUYW4Qzl1dzBMu6q7wD GYn0bG3y0P42S91AkmpnEosjQfm9eM62KAv49MV5Ci0hFoMGAlmYjORqs49qR4Br3V+xObapaN6itGmT s3UximuiHL8SoUiv8FRVNFd33oHM07gwGYn0LFVJ2nKO3Cy2RVnA8+sGAlmjsP3t+89+4l/OwlIhw+BI bwAAAABJRU5ErkJggg== Helskärmsläge (F11) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAWtJREFUOE+tk89K AlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmOUGmWmeboKM7YzKgzjuP8+cJRAmlx BTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1iGzAs2OV0OpHNZv+0bd49lNQFpLaF eLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3SwDprWk8r0zCVIRe9n4RE9Q/o2Bv tlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8LuRVdE5I5nwVA7ZEDGPQ7+4aAHsSwo 5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNTUHJ3KAXc0GQR7HsM9VrFDqRyeTLg ZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoACW8XrugtCmiInGOVD/QCCOQUOsCKj ugAAAABJRU5ErkJggg== Magenta Visa högerpanelen (Ctrl+Skift+R) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== Visa bottenpanelen (Ctrl+Skift+B) iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC Hjälp 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 AAAASUVORK5CYII= Stöd framtida uppdateringar av QuickRoute Attribut för ruttlinjens färgkodning Attribut för ruttlinjens sekundära färgkodning Färgskalans startvärde Ruttlinjens färgskala Färgskalans slutvärde iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAJ1JREFUOE+tUlsSQDAM7Em4DT8ciYkrGc7jcRC1qcZUB9Wpjx2q2c1uQmmtVQqSyNz4 PwEi0jGQ2KcDJmcYRwUQMAILj2cDZqAHWqDEPWpvBXIQak9gixFgB67AivNFoAk4EIEOxMGNMNkILFC8 REgaojIb/fZTubVmC/xBEBLxa4VM9sI8n0TcGrwfnHOfKREkRsj+XbP/HHzt7tftA4+rDj1fXasAAAAA SUVORK5CYII= Ställ in färgskalans värdeintervall iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAALVJREFUOE+tk1EO wUAQQOck3EHvwCFIOAl7AS7BAZyDL07BH98k682my1QlXcYmL520M29ntq3Ia0UTd4WtXL0RuqrMc819 SjTwkLyuDnJnrjP4Yvx/p4YQogfR4l6UOIAxzGEDOzjBHeIVjrCFFcxgJGnjJOiTVMHECPa14FYiyB1k wZoiFZyhJViy+/StAytYUKSCxggXCg5mBBUMzQiuQ+StVvWXqNfS1aix/0Gp4Jeaz+4HCfcWr/594rkA AAAASUVORK5CYII= Automatisk inställning av färgskalans värdeintervall Ruttlinjens transparens iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA CxABrSO9dQAAAL1JREFUOE+NU9sNwzAIZI7OU+Uvs3SNTpm/zOHmEOdiAo4jIUfgO15naa1J/ODL7P2R 9j0Q+sf14goBwSDwJGmmmD2CPQmSo4TtqWyC4gmCzUh2a6f3WGUmCeJsfzeSEyeIVsB9fvajYNgq2C9A gbSqX/hBPqxRp+j3KvK6XGdGEsFDC08kGbgksECvpAJPCRzJMJ+oF11jJSLqgivO7t3eQTJUVMAVq9hu W5g9JgrrOim2QfZpBROnyt5X8APmCAFYpeIP4QAAAABJRU5ErkJggg== Ruttlinjens tjocklek Ruttlinjens tjocklek iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAUhJREFUOE9jYCAM mIBKVgKxH2GlmCq4gUIbgfg/FxfD54QlDLqkGCIIVLwFpJlPguF/0U6G/x13GZ5UHWOQJsYQcaCivSDN AlIM/8sOAjXfg+C2ewwnC48xcOIzRAooeQykWVSJ4T/QRrhmmCGpSxnW4TJAAShxHqRZSovhf+0ZTM1x sxj+s3Iw/AeqaUc3RBkocBWkWc6I4X/dOUzNUZMY/jOzgjWD8HxkA9SAnHsgCSVzhv9NVzA1h3Yx/Gdi hmueg6xZE8h5BdKsZs/wv/kapma/BrhGkM0z0Z0+C6RZ15Phf+tNTM0eZSiak7EFHpthIMPJttuYmp2y UTSH44y6lpsM0qBEAosmEG0Vh6LZm2DiARpgVn+F4RvIJaZhKJrtCWqGKWi9xRBl4AfX/BMobkC0ZiSF XUD2ByAGxQ5ZAJR9icowINMBVAm93F59dlgAAAAASUVORK5CYII= Visa mask kring ruttlinjen Ruttlinjemaskens tjocklek iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAghJREFUOE+lk/tL U3EYxs8/EppdVSQwSrwikpQKhj+EaAjKaqQNhhdwKMNk4A1RFKMI0YVBROyXgZdUzEqTrZhTh9dCloiX KAdDEFEfz/PC/JogBh74cuCc83ye570cDee8NOrrehb+ObXdc7C89MHcNgVjkwf5td9w3zKB9NIxJJd8 RKJxAPEGp1gfAfb2D3Da2dndRyC4i82tHfjXt7G4EkTk3Wf/B/AuBcQ5zfwFzrE1Edv7/Liebj0bQGeK 3bN/0fpuSWIT+Mq5jGt3qhWANZ+MH4pNZ4ozKsYRV+jAhO8P2t7/0AFVCsCGHQccr5mx6Uwxo3+a/C0N v5pWqQDsdgjAiPfKx+W49Oismc/oTPGgewPWzllcSS1TAI6KgHl/UIQ9H37BMbqK6Kx6tOjx2TCeDsdP 9H5dQ8XzGVxOMSsA50xxbo1bxJOLAbzu96PyhQ838+wS/e3wCjRNk/dPW7y4lGRSAC5Jge073ugvGZd3 m30ejxo9Mr4bOe2o1+subZ8WiKHBg4jEYgXgqOgYEvNjU6sX2To44XGfAMLjDEgxfUbSkyGBXIw3KgDX c8C1Ls6smTU+sLr0tR1BbG4XojJsetctEjsmu1l2gMCjVeZuMzIP62NJfEZxdGadiDm20P1C7EOE3S5S AM6Zu81Ok84loYCjYrfpzJoZm84Uh90qVIDz/NGH0AEgNQb7UmkAAAAASUVORK5CYII= Ruttlinjemaskens färg iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA CxABrSO9dQAAAiVJREFUOE9j+P//PwMlmMHB4T8xOAqorgKbWmI0swA13gXiL0DMBTPEzvE/gy0QE2OA i6Xz/+9Axe+Bmi1ABoA0+1m9ZAi2eIjVAGmgooP2Dv8NrZ3+M5i5/D9Qqr16UrDFg5NWzv/THIEGAMUY mtSmMZRor2FgACpEwUDbak1c/v93cPgXGmN6RqBXsenPSwaGL2c5lf/7Wj9rM3D7z2ADNPgoty5Dge5m BgYXux9w7ODwg7FYe+3+VeKR/3fz2+5/zcBwDIhv3GNktrjILjf/JJf6lSUSoQxbBV0ZXjAwMKQbHGRg uMQmBscX2cRUnzMwfN3Pa7Znlmze/2qNhX/TDQ9pFepsZLBx/Gl5nFv7/wcGhoRnQM1AdSb1arNSGB4D OSD8CIjfMDBMnCVbdAjoRz0T1///LZz/77ECOhfoLQZzl/+8RTrrnjxhZP7zlIFhPdCAT1Plyl4zPABq BGFgeIo9ZmT6nmB8JhekARiQy4DYHTnuTV3/b+1Wat/5iJlnYoHupm9Ai6phBnAB/dqyU8D+DzDkFUAB iy3R2Dv+n+ti/3NWkMVDXqAln4FqlBiA/pkGdPrL05yqf4Itbp8DGsCIJ3XGAw0/DEwTfUA1R0HqGFKM jlQW6G297WP9+hzQvzkEkrY+UB5k8ycgBiVvBgagJi6gc24CUxcw7v8rEjBACCj/F4jfATEH2ACoBlBg FQAxPufD1DYC1eXBLKIoK4OKAQAF/s1iEFX7sAAAAABJRU5ErkJggg== Utjämningsintervallets längd Utjämningsintervallets längd iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEAAA CxABrSO9dQAAAUxJREFUOE+Nkk8rhFEUxm/IQpYz2Vi8srRhYTYW5iNYSMqCZkMppclOzELJQqGUjQ1Z KGlSFrOb8gWUPRbK1jd4/Z63c3Vc72hu/bp/n+ece+4N7yGEhBrzFtzBLRzDIlT8uTzPg/BiHTiCDrTh APbg2tYe6FeiSWowZtEkXoJRF22A8Qx0IYdd7XmDYRYO4RHmSq6kLKvwYgYf9Jk3mLUUl3uIM9ZfTbxD r9qceQMV7D5JO9ZG4jcTr1qAdQX0BirSaUn0SdY+Tdxw+1OMz72BCtcsMRhn7Qk2/F4UeoMLDlzBYI8a BFobusZ0HMd/sKk7gZ4y/VTFnFYHfk3BM3yJaKBCyWC/T4M1xJnwP1H3lMkWjKRGSQYSFy39yttmckO/ ABPGUGIQ9X8MdN95uDQjZVQ8178G6bOUzTE4UcZG69cV+jSoWxax/6nBN2BcWA8xzRYiAAAAAElFTkSu QmCC Radie för kontrolltagningstid och kontrollämningstid Radie för kontrolltagningstid och kontrollämningstid iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= 215, 22 &Ny... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlBJREFUOE+Vk11I 01EYxv8XXXRlkRWFUGB54c0gKKK6CCmiUBTLLEjShJofVBgLc360qenm5ubUlS5rm66p08oyCvuQCkUi 1NSRZmpWFJViZqjk16//HKhDiTzw3JzzPr/3ec/hCMJ/LqXBziW1lWyjg/+0zJdFyYwepnQR5jqNlBUi fO5/R7VNv0idrc/+2SksPpeQ2DwEl7m73cL4cNWs/gzZmRww47Dm0tn2fEnIkTgdITEGgqQFCFWlOsaG yj3M09+KmHQmUH5TTVlxFubCdEx5aVzTyilQJXpCKywaxn5Y5jrPiGa65eCULqlFgFslKn5/Nc3Gdpnr qjWzeuTIodau4m5ZFg5zBnaTEqvxMjcMKRTr5Bg1Se40ZaYsRj7m44rd16CgplzHdJ8S+jM99UHc602G Lhm8jaetMhzbdT2C2ZjBrx41fNJyryKXpsdad9HCEd5EQnMYU42BjD8J4H2pBJk01H0XJQYFPzuV9Dem UmPXMtOrgI4YN6AtWjQeZ6opmPH6A4w83MNg9TaUsX7iOHI3oEiXymB7ErdtGlpeikm6EkTAaWiJYOZV KBMvDjFat5ehmu18r/Cn+cpqTgT6zr+EMUdOR30ad2w50JMGrWLc10eZaAhi9GkAw7U7GXBI+GLZilPr jUK6hbOxJ+cB+dmJVFnVOO/H0awX5tSkXUG9aiUP0ldRmbIOc6IPVy9sJmJhd9cI+syL6BVnyE6KIvnc Mc5HB3MqfD+HD+5i324JOyR++Pv6sGnjWtav8WKDt9fyP9Oyf99yDH8BF8beaXozevMAAAAASUVORK5C YII= 215, 22 &Öppna... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= 215, 22 &Spara 215, 22 Spara so&m... 179, 22 &Bild... 179, 22 179, 22 179, 22 &Ruttdata... 215, 22 &Exportera 215, 22 I&mportera rutter... 212, 6 212, 6 215, 22 &Avsluta 43, 20 &Arkiv iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAexJREFUOE9j+P//PwMlGK/myVu+xUze/HXHvN1fHy0/+PXIyoNfp6w69FUK2UKcBvRt +LoDiP90r/v6vHHFl8f1S77cmbvz62OgAZ+QDYEb0L3q1f9lJ74agEwHalrWv/Hb79RJ7964FJz4bZ26 /Y95wpbv7hV3P87c/vUN0ICbMFeADQAKcDYuefl/3oGvV+tXfG2YsOnbn7ie5/9cC47/t8vY/cs0ds1x l/ytDy3jl/8J63j3c+mBr/dRDABximc+/5816/P/wjlf/kf2fHxhlbzlr0Xihh+msSvzQfIBtdtVDCMW v3Atv/2+YemXPRgGJPU9++/d9OZ/dO/n/2Vz3vzX8J602iRmhSNMoYJDHbNd1qHfrmV3Xjes/HIIw4Cg 5qf/zYrv//dsegV2SWLPo/91i99aIhnAapd56K9X3bNvzSu/bMEwwKni8X+Homv/rTKP/zeJ3/bfMGrt fw2fqUB1kHRiFrdeyTbz4L+Altd/C6Y/LsUwAD0xgQIWWUzda5K7a9ntP2mT3//r3fCVjaAB6AZapOy7 GNLx4V9Y3flcohISTFFc33slh/wLMf4tH/75VV75phUwm5EkAzyqHzv7t3z65VFy8adx1CovdJcRzEhR vZ8jnUuuNZrGrBPFlukIGkAop1JsAABuDMymYL0yPwAAAABJRU5ErkJggg== 164, 22 &Ångra iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAd1JREFUOE9j+P//PwMlGK551aGvUisPfp2y/ODXI/N2f33Us/5LSuXCL5yEDAcbANIM xJ/m7vz6uH7JlzuNK748bl315U7Foi+fKxd9ScVnCMyAmzO3f33jXvngvXnClu9WKdv+OOQe/5oy+fOL wjlfXhTO/RIGMmTZia8GDkXXgEyEt8EGLD3w9X5Yx7ufZtHzf7vkrb9pGrvmGBB/MYvf/Dt58ue/6TM/ P8ue+yVy3oGvV60zj/8HuhbuNbABDUu/7HEtv/Ne3avnVkDtdhWQmGnsynzj6OVfdQJm/wrt/Pgc6JL/ WbM+/zeJ34rpgoaVXw65lt97pebZd1jBoY4Z5kSTmBWOGt6TVpfNefM/uvfzf++mN//1QhdjGtC88ssW 7/oXXzW8J98EGsAKM2DK1q+6QAy22bPp1X+z4vv/NXymYhpQMP1xaWDrm79GkWt+AQ3ghhkACjAroJ9N 4rf91wtZAtas6taFaUDvhq9saZPf/3Mtu/1H3WuSO3IoIwcYtuiEJ6SwuvO5IR0f/lmk7LtIKPFgRCNI QCtgNqN/9bWX/i0f/jrkX4iJ63uvRIxBKPkAaAifT+XNUwGtn796VD92JtkAmAbvhlehUb2fI8k2gBiN MDUUZWWQIQCu1sRwfRrh4gAAAABJRU5ErkJggg== 164, 22 &Gör om 161, 6 164, 22 Ändra &starttid... 62, 20 &Redigera iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAi9JREFUOE+lk0tPU1EUhfunHJQJTtSoAwaOZCgJJhiC0ibURMGgkSYSwKgBhYKIUEQB EfGRACIttDwDRKqmFkuhLZWHLVWa2p77eXdN6nVoGNzJTda31t5rHxNgOsx3KLEYmxKJhKlnZI7ul7M8 Hp6h64WXR0MeOp9P0THgpr3fhePZe1r7JnjwZJz7vWO0OEcRXQ4gYg2F0hQZpUhnFamM4mdakUwp4gca ez80tvc1tuIake8aG7saR06W6HodIM4irutYxHbHS0W9h/JbXkpveimunqaoys2JSy4KL7gwn3dzzDpP cNsAkNjibG30sPgVvH6Y8MHrZY2BWUW3S9E6luX2qwx1g784atskEDMAZGaJXdkwzcwX9JgQ3oPgDv+I 7bq4si1OgXUDf9QAkIXJzAKY/AhvdOfBOUWPW9EmziMZbjxNUfVwn7K7O5gtG3yK8HcHsm1ZmADermis 686BGHyOwuomLK/DfODPaOfqwzmAT/+fX6JUJdsWwNC8wjmlcIxnaRxOc73vAFtnkoqWXUobIhTXrmGu DPEhZABIz1KVAHp1sTiLg9F5chVGl+DMZV8OsKKnyieQI5GerU0e2t9lsfcnqXEmsTjilN3bycUWZxGf vrhAgSXEUtAAkAuTI7naPEeNw8+1rm9UOWKUN29R0hTlrD1CUW2Y41c2KdQrPFUdztWdTyDnabwwORLp WaqSbcs4MrPEFmcRL6wZAHLTQvvfL/8WDvOURfsblYYTxd5DjEEAAAAASUVORK5CYII= &Helskärmsläge iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAWtJREFUOE+tk89KAlEUxn2e3iFwGS18guglWlSbiBatisIWUUJFfxahkUFQCTVqRpmO UGmWmeboKM7YzKgzjuP8+cJRAmlxBTtwLtzF9/u+ezjX4ZioY6QeSdw1/xcAzaiIfMgIpOq4SkpgJR1i GzAs2OV0OpHNZv+0bd49lNQFpLaFeLENmtURzjRtoNLpEYgALuoFd38ExjeHViEOSQV0s28/DKAS3sX3 SwDprWk8r0zCVIRe9n4RE9Q/o2BvtlG8XINcSsLUlF+x2DLJTzB1DULqGjx9NuBsyDz4pkEGMOfLA8Lu RVdE5I5nwVA7ZEDGPQ7+4aAHsSwo5TdoDQ7loAc12k8GPPkWIMQO0fhKwDI6iM+PoUJ57BRdCHGIqzNT UHJ3KAXc0GQR7HsM9VrFDqRyeTLgZHMJmQ0XCqeLyAf3EWSB6G0IYsI/3CJVI3voyALUWgH8oxchKoAC W8XrugtCmiInGOVD/QCCOQUOsCKjugAAAABJRU5ErkJggg== Visa &högerpanelen iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAYxJREFUOE/Nk0lLw0AYhv15Hj158dDqUfDgXxDFgwhFUQQF64JQFxQURam472JjFxdI atO0TZeg1rS1NdHH1GqjnsR68IN3Puab+Z6Zd2Dq6uqz1KSamsuH/wlAO53D6+5iuLMd71gH4elWbkYb SR95MB9z6LJA5nSe1KEH3b+EFhbwJ82K9fJgFLJWQwva5iAPoWVuz2bJK+e8PJtkzpZQVvtI7IyTXO8n HdpA0uFAytmAws0xiZVektujFFISH/FiPvEQ8aH5Fgm4GoiMNBEN7LGtgPfi3gYI69OcBC9RtVvUHTep XTfPRqkKMot5tOMZdPGQ6J3BbrjIRfzRBgSlOFuChBxXkRe7iS33VACWhe8hZkrsizlyBjZAmmgjvTeJ kb9/21+ICqgbQ5bnAShlvzCKFlN/qpSqjxhYcxOVrpHFK4LeKXzzLoSFPo5mXfivwoREhYisEI/FiL1L VRM2wOFsxuFwVOR0WrLmZTW32PWP9U+5egNRFPmN/hfAfLdQzj/Rm+WqhVo+1CuZOgM5QYnCowAAAABJ RU5ErkJggg== Visa &bottenpanelen 38, 20 &Visa iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAA2ZJREFUOE9tk21Mk1cYhp8YozIgi6sgbrjwsWkmgsoSVBTULUvRKRjoNrSCICnifpg4 LTo/IRqgaBlgCxQVtQgoko1RRAsGKEhr0b3vaFdaLKUVBSJ1qKDgZ+69g/iDyJNcOSdPzrny5OQ+RFPU BtHlgNTselFGkUaSxbFPok7hJ5UHTXV2Ui84pixAKL7+e3pB+0ulqgt1LT1o0NrRqLOhtqnztTi7QfV1 zIWlU4p8vz2zPjJRNpQuvYxT8iqUVLahlX0MDePE1Zu9aNA9wIOHgyi+cmc4OEYZPUnCW6EIEiTljPT0 WPHq5QuMjT6HxWLB+Yp6nP/ThnM1vUhTmHBF7cDw8DMUlreP+X13dvm4hLdSPs1vddatG00stB1D6B14 gfc19K8T0oIqpOYyOKKwIiWThVrbj6dPhpDwax0zc0n+dPpoaV5YqKAISScMiE9jsec3M8rV/Xgy/Gbc M/r8GST5lUg8qsXOLAsS0hgYrU40tpnhsVrBJ/I9mR0sbETU3rvYnv4PkjPNEGVYcLjIDsYyMi5592YU OQVXEbn7JjYfMCHuKIO8MgPcgnPlRN5Slf8mNaLEfyP2sBnbj1shyrQhKWOCSzecGHv1v+YtzimrsSa+ EqHJDHwi1SD/k/Wc4HQ9La7G8h1/4YdDXdh6rBtx6d2cyDbOj4es+CXfAb1p4m30t9uwMVEO+koG8pE2 E30qLyFfFaav0iEozoCN+7rw05FuCDnRtjQObhUcvIeo1HsQy+6jiRmB3e5A7ukSzFwkqSCaJ4sjl3y4 LcvBjJA/wOPfReA2MzemGWt/5tjF7UWdCBQaMIffDpfwFgTEahG7vwW0QJ5C5Cn92HtF3qNWjQZnlDWI 3lUKn4hqeEXo8PlmI/wEJvhGG+G9iYUHX49ZYdzFwFrQ/JKnxDvlMRGoL0tFqsZu9PUPwjnYD6OhA4UX G5BwQIXweBUWR1+Dz/paeK2rgj+/FAs3KEGeij2T0ugaJMtrvu2AwdKHsmt2sJ2PMDAwgPsOGxi2A00a HWrqtCiu0MMrRFr84X/grf1s2tydnVvEraAvmuEafgtLhHpE7Ga5jBiwJoWF5zfXQbNEvTR7VciHgrmR bvRJGJ/cw46Ra3I1uUiM5F74kKOPXLJMXE9F7uEZNDtUQJ7fz3sv+A+84CDTIQAbtgAAAABJRU5ErkJg gg== 372, 22 Öppna i Google &Earth... 372, 22 Öppna &flera QuickRoute-filer i Google Earth... iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEQAA CxEBf2RfkQAAAptJREFUOE910+tPknEUB3Be9g/0uq0sW7et0uUktWleAyRAMVRy6kzHMgXvTm0GS0my pibl8pJWcxqXhqCAosDAB3i4CYiZpWvaWuuF8w/4Rm213HpenBe/s53Pztk5PxoA2p8o75zKy+CKa/hl Te08YbM8k9s6ksO/r2IJpFamQBYqre4fLxENP/235m/xr2RCheV7fPYw4lMkuMKQQSGbxsCgEZ3PXHg9 aUCIWECrdHSPEkisMH+Oz3mOuJQGJDO74VTNwOsMQUsewG7fQMi9gnrpSJASuFBs2PgN0MWgs6XwEyvY 9geh9x3AFfiKHdKF+q6JVUqAKVmOnmeO4mRshPSCh4haDfDMWeB0bcJLhBB2kWjumjBTAqO6pbD40STy hH3glClgV2lBaNX4ZI/ArjFj+b0DNXcHVJTA7o990mDzg13xBPnCfkQDJD46wlh/q0dUQ8JqIyGs7Juk BDa2v/kCkS8oFg2CXS6Hxa3HB6sfOyE1tggCq85FFAllQ5QAo94crWyfQzK7G9c5D2AwaUBMO2GaiMDv 3AMR8KFaouylXmO5yXcs40VsjRKkcnth9NjgcOqwtuBAhAxBrfPhTpOymRK4KJwnzzDGcIIuQbZAjojP A8KthttrjI2ziVezftxrU1ZRA6X6GDCOU2mNYJUqEHL5Qa4vxDoxwR80451mBbUtQ0WUwCWhnjzLHEfc 1QZc4/XAvOLBlseCQHgJWpsRHXLlvqhBlkgJXBbOec8xx2KXKEGmoCd2vouYeTMLccfjXSa3SsZgFR6v bWw79H8OPegVuuDp3JexDiRIym0F/3bLWlp2SV16Vv5RNodH4/KKaLWN7dTALfFUagJToUvKrZvPYIkK s3I5R1hsDu1GfgHtJo//X+An6VOqVy8U1mMAAAAASUVORK5CYII= 372, 22 &Publicera karta... 372, 22 Lägg till mellantider från &extern datakälla... 56, 20 Verkt&yg 124, 22 &Språk... 78, 20 &Inställningar iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF TkSuQmCC 121, 22 &Hjälp... 118, 6 121, 22 &Om... 43, 20 &Hjälp AAABAAQAQEAAAAEAIAAoQgAARgAAADAwAAABACAAqCUAAG5CAAAgIAAAAQAgAKgQAAAWaAAAEBAAAAEA IABoBAAAvngAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAACkAAABBAAAAQQAAAEEAAAAwAAAAEgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAWgAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAABiAAAAQgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIADAxqIDQ1qqBIS lcASEpXAEhKVwA8PerAGBjKQAAAAgAAAAIAAAABrAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAME GogRF5bAGR/Z+Bof4P8bHeD/Gxzg/xsb4P8bG+D/Gxvg/xcXwOALC1qgAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA8AAABrAAAAgAgOR5gXJtLwGSfh/xol4f8aIuH/GiDg/xog4P8bHuD/Gxzg/xsb4P8bG+D/Gxvg/w8P erAAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABjAAAAgAoUW6AXLtv4GC7i/xkr4f8ZKeH/GSfh/xol4f8aI+H/GiHh/xog 4P8bHuD/Gxzg/xsb4P8bG+D/BgYykAAAAIAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAcTSJgWN934Fzbj/xgz4/8YMeL/GC7i/xks 4f8XJtLwDhZ7sAYIMpAGCDKQDhJ7sBUat9gbH+D/Gx3g/wkJR5gAAACAAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIATOcbgFz7l/xc8 5P8XOeT/Fzbj/xcz4/8SJq7QAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAwQaiAgKR5gAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAA AIALKX2wFkjm/xZF5v8WQub/Fz/l/xc85P8SLa/QAAAAgAAAAIAAAABSAAAAEgAAABIAAAA6AAAAYgAA AIAAAACAAAAAYwAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEgAAAHsAAACAE03X8BVP5v8VTOb/FUnm/xZF5v8VP9fwAwgbiAAAAIAAAAAyAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAJAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAACACjN9sBNZ5v8TVub/FFPm/xRP5v8VTeb/CB1coAAA AIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA ACIAAABBAAAASQAAAGEAAABhAAAAYQAAAGEAAABhAAAAYQAAAFEAAABjAAAAgA9WxuASYeb/El7m/xNa 5v8TV+b/EUjG4AAAAIAAAABrAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABoAAABKAAAAaQAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAUj SZgQa+b/EWnm/xFl5v8SYeb/El7m/wgkXKAAAACAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAMgAAAGIAAACAAAAAgAAAAIABExuIBD5coAdmmcAIbKbICn3G4Ap7xuALeMbgC3XG4Axy xuAMb8bgC2Cx0AlRmcANZsbgD3Pm/xBw5v8QbOb/EWnm/w9cz+gAAACAAAAAawAAAAIAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAqAAAAYgAAAIAAAACAAigzkAVpjLgHmc/oCafm/wmk5v8Koeb/Cp3m/wua 5v8Ll+b/DJPm/wyP5v8NjOb/DYnm/w6F5v8Ogub/Dn7m/w575v8PeOb/D3Tm/xBx5v8KQoy4AAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABTAAAAgAAAAIABKjOQBZCx0Aa35v8HtOb/B7Hm/wiu 5v8Iq+b/Cajm/wmk5v8Koeb/Cp7m/wua5v8LmOb/DJTm/wyQ5v8Njeb/DYrm/w6G5v8Og+b/Dn/m/w58 5v8PeOb/D3Hf+AYuXKAAAACAAAAAgAAAAFsAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAABjAAAAgAEYG4gEj6bIBcTm/wXB 5v8Fvub/Brvm/wa45v8Hteb/B7Lm/wiv5v8Ipt/4CJHG4AZumcAGbJnAB2qZwAdnmcAIdbHQCovX8AyR 5v8Mjub/DYrm/w2H5v8OhOb/DoDm/w585v8Oeeb/DWXG4AMaM5AAAACAAAAAcwAAABYAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAFC SZgEwdfwBMzm/wXJ5v8Fxub/BcTm/wXB5v8Fvub/Brzm/wa55v8GlLzYARUbiAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAIjM5ALmeb/C5bm/wyS5v8Mj+b/DYvm/w2I5v8Oheb/DoHm/w595v8Odt/4BzhtqAAA AIAAAAB7AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABYAAAB7AAAAgAF2fbADz9/4A9Tm/wPR5v8Ez+b/BM3m/wXE3/gDhZnAAl1tqAXC5v8Fv+b/A2d9sAAA AIAAAABhAAAAQgAAAEEAAABBAAAAgAAAAIAIjMbgCqHm/wqd5v8Lmeb/C5fm/wyT5v8Mi9/4DYzm/w2I 5v8Oheb/DoLm/w5+5v8IQ32wAAAAgAAAAHsAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAA8AAABrAAAAgAF5fbAC3Ob/Atrm/wLY5v8D1+b/A9Tm/wKrvNgAGBuIAAAAgAJR XKAFyOb/Bcbm/wJOXKAAAACAAAAAIQAAAAAAAAAPAAAAYwAAAIAFaoy4CKrm/wmo5v8JpOb/CqHm/wqe 5v8HXoy4AzBJmAuFz+gMkOb/DY3m/w2J5v8Ohub/DoPm/whFfbAAAACAAAAAYwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAAgABbXKAB4eb/AeDm/wHe5v8C3eb/Atrm/wKm sdAAAACAAAAAgAAAAIACU1ygBM7m/wTL5v8Deoy4AAAAgAAAAFoAAABKAAAAcwAAAIACOkmYB6/f+Aey 5v8Ir+b/CKvm/wmp5v8IlM/oAAAAgAAAAIABEhuIConP6AuV5v8Mkeb/DI7m/w2K5v8Ng9/4BCpJmAAA AIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAAzM5AA39/4AOTm/wHj 5v8B4eb/AeHm/wG2vNgAAACAAAAAgAAAADoAAAB5AAAAgAPM3/gE0Ob/BMHX8AAYG4gAAACAAAAAgAAA AIACXG2oBbjf+Aa85v8Gueb/B7Xm/wez5v8Iqt/4AzdJmAAAAIAAAABTAAAAgAIkM5AKl9/4C5jm/wuW 5v8Mkub/DI/m/wx9z+gAAACAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAA AIAAxsHgAObj/wDm5f8A5ub/AOXm/wDU1/AAGxuIAAAAgAAAADoAAAAAAAAAWgAAAIABkJnAA9bm/wPU 5v8Dyt/4A5+x0AOUpsgEtc/oBcfm/wXF5v8Fwub/Bb/m/wa95v8Gs9/4AjpJmAAAAIAAAABjAAAAAAAA AFsAAACABVl9sAqh5v8Kneb/C5nm/wuX5v8Mk+b/CF+ZwAAAAIAAAABaAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAAfXewAObd/wDm3/8A5uH/AObi/wDm5P8AfX2wAAAAgAAAAFMAAAAAAAAAAAAA ACIAAACAAAAAgAKosdAC2Ob/A9bm/wPU5v8D0ub/BM/m/wTN5v8Ey+b/Bcjm/wXG5v8Er8/oAj1JmAAA AIAAAABjAAAADwAAAAAAAAASAAAAewAAAIAIndfwCaTm/wqh5v8Knub/C5rm/wuS3/gBERuIAAAAgAAA ACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAHsAAACAANfI8ADm2P8A5tr/AObc/wDm3/8A19LwAAAAgAAA AHsAAAASAAAAAAAAAAAAAAAAAAAAMgAAAIAAAACAAZOZwALT3/gC2Ob/A9fm/wPV5v8D0ub/BNDm/wTA 1/ADh5nAAAAAgAAAAIAAAABjAAAADwAAAAAAAAAAAAAAAAAAAFIAAACABF99sAir5v8Jqeb/CaXm/wqh 5v8Kn+b/B2eZwAAAAIAAAABaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIAAACAAH1wsADm0P8A5tP/AObV/wDm 2P8A5tr/AIyGuAAAAIAAAABSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAgAAAAIAAGhuIAVhcoAGS mcABkZnAAXZ9sAFESZgAAACAAAAAgAAAAIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAA AIAHrd/4CK/m/wis5v8Iqub/Cabm/wmd3/gAAACAAAAAewAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxAAAAgADX uvAA5sr/AObN/wDmz/8A5tL/AObV/wAzMJAAAACAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ACIAAABaAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAcQAAAFIAAAAiAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAFoAAACABY6x0Ae25v8Hs+b/B7Dm/wit5v8Iqub/BVt9sAAAAIAAAAA6AAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAqAAAAgABJPJgA5sH/AObE/wDmxv8A5sn/AObM/wDPuugAAACAAAAAaQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAiAAAAQQAAAEEAAAAwAAAAGAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAgAJbbagGveb/Brrm/wa35v8Hs+b/B7Hm/weO vNgAAACAAAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAASgAAAIAApoPIAOa6/wDmvf8A5sD/AObD/wDmxv8AppHIAAAAgAAA AEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAIABFxuIBcPm/wXA 5v8Fveb/Brvm/wa45v8HtOb/AAAAgAAAAIAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACAAM+d6ADms/8A5rX/AOa5/wDm vf8A5r//AIx2uAAAAIAAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB5AAAAgAXD3/gFxub/BcTm/wXB5v8Fvub/Brzm/wJKXKAAAACAAAAAIgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAACAABsTiADm qP8A5qr/AOau/wDmsv8A5rX/AOa4/wBcS6AAAACAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAIADssbgBMzm/wXK5v8Fx+b/BcXm/wXC5v8Df5nAAAAAgAAA AEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAhAAAAgABcPqAA5qD/AOaj/wDmp/8A5qr/AOat/wDmsf8AMyiQAAAAgAAAABEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAACAA7bG4APR5v8Ez+b/BM3m/wTK 5v8Fx+b/BJix0AAAAIAAAABRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAIAAilq4AOSY/wDlm/8A5p//AOai/wDmpv8A5qr/AAAAgAAA AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAAgAGQ mcAD1+b/A9Tm/wPS5v8Ez+b/BM7m/wOuxuAAAACAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAJZdwADij/8A45P/AOSX/wDl mv8A5Z7/AOah/wAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQQAAAIABk5nAAtvm/wLZ5v8D1+b/A9Xm/wPT5v8Ds8bgAAAAgAAAAGEAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACV V8AA4Ib/AOGK/wDhjv8A4pL/AOOW/wDkmf8AAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAZaZwAHf5v8C3eb/Atvm/wLZ5v8C2Ob/A8jX8AAA AIAAAABxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQQAAAIAAk1HAAN1+/wDfgv8A4IX/AOGJ/wDhjv8A4pH/AAAAgAAAAIAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACXmcAB4ub/AeHm/wHg 5v8B3ub/Atzm/wLT3/gAAACAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAACAAJFMwADbdf8A3Hn/AN19/wDegf8A34X/AOGI/wAA AIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASQAA AIAApqbIAOXm/wDk5v8B4ub/AeHm/wHg5v8Bv8bgAAAAgAAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAgACPRsAA2G3/ANlx/wDa dP8A3Hj/AN18/wDegP8AAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAGEAAACAAMbC4ADm5P8A5uX/AOXm/wDk5v8B4+b/AcHG4AAAAIAAAABhAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAA AIAAjUHAANZk/wDXaf8A2Gz/ANlw/wDac/8A23f/AAAAgAAAAIAAAAACAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAgADGv+AA5uD/AObh/wDm4/8A5uX/AObm/wC6 vNgAAACAAAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACIAAACAAFQjoADTXP8A1GD/ANVj/wDXZ/8A2Gv/ANhv/wBXLqAAAACAAAAAIQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAA5tn/AObb/wDm 3f8A5uD/AObh/wDm4/8AmZjAAAAAgAAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAgAAYCYgA0FT/ANFX/wDSW/8A1F//ANVi/wDW Z/8AZjKoAAAAgAAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAA AIAAMy+QAObU/wDm1v8A5tj/AOba/wDm3f8A5t//AG1rqAAAAIAAAAApAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAAACAALlE6ADP T/8Az1P/ANFX/wDSWv8A017/AJpGyAAAAIAAAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAADIAAACAAH1vsADmzv8A5tD/AObT/wDm1v8A5tj/AOba/wAbGogAAACAAAAACgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAABKAAAAgAB7KbgAzEf/AM1L/wDPTv8Az1L/ANBW/wC9UOgAAACAAAAAaQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAAgACxl9AA5sf/AObL/wDmzv8A5tD/AObS/wDP v+gAAACAAAAAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAIAALQ2QAMk//wDKQ/8AzEb/AM1K/wDOTv8Az1H/AC4TkAAA AIAAAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAA37j4AObB/wDm xP8A5sf/AObK/wDmzf8AjH64AAAAgAAAAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAgACiLdgAxzv/AMk+/wDK Qv8Ay0X/AM1J/wCVOMgAAACAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgAA AIAAfWKwAOa3/wDmuv8A5r3/AObA/wDmxP8A38D4ABsYiAAAAIAAAAAaAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgAA AIAAXReoAMYz/wDGNv8Axzr/AMg9/wDKQf8AxUP4ABgIiAAAAIAAAAAiAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAACgAAAHMAAACAAMaU4ADmsP8A5rP/AOa2/wDmuv8A5r3/ALGT0AAAAIAAAABaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAoAAABzAAAAgAC2KfAAxC//AMUz/wDGNf8Axzn/AMg8/wCGK8AAAACAAAAAYwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAAACAAG1MqADmpP8A5qj/AOar/wDmr/8A5rL/AN+v+AAb FogAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgAAAIAAWxKoAMEo/wDDK/8AxC7/AMUy/wDG Nf8Axzj/AEATmAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAACAABsSiADVjvAA5Zz/AOag/wDm o/8A5qf/AOaq/wCZdMAAAACAAAAAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABzAAAAgACc G9gAwCT/AMEn/wDCKv8Awy3/AMUx/wCyL+gAFwaIAAAAgAAAADoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAACAAAAAgACt bNAA4pD/AOOU/wDkmP8A5Zv/AOaf/wDPkegAAACAAAAAgAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAOgAAAIAAFgOIAbgd+AC/IP8AwCP/AMEn/wDCKf8Awy3/AKAn2AAAAIAAAACAAAAASgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ADIAAAB7AAAAgACHTrgA34X/AOCI/wDhjP8A4o//AOOT/wDdkvgAMyKQAAAAgAAAAEoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABaAAAAgAA8B5gBtxn4Ab0d/wC+IP8AvyP/AMEm/wDC Kf8AliLQAAAAgAAAAIAAAABaAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAgAAAEoAAACAAAAAgAB3P7AA23j/AN18/wDef/8A34T/AOCH/wDhi/8AWjmgAAAAgAAA AFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAGMAAACAADsGmAG2 FvgBvRn/Ab0c/wC+IP8AvyL/AMAl/wCtJOgAFwWIAAAAgAAAAHsAAABSAAAAGgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAQgAAAGsAAACAAAAAgAClUNAA2Gv/ANlv/wDac/8A23f/ANx7/wDe fv8AekewAAAAgAAAAGsAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAPAAAAYwAAAIAAOwWYAbUT+AG8F/8BvRn/Ab0c/wC+H/8AvyH/ALoj+ABpFrAAAACAAAAAgAAA AIAAAABxAAAAYQAAAEIAAABBAAAAQQAAAFkAAABpAAAAgAAAAIAAAACAAFQjoAC9UugA1GD/ANVj/wDX Z/8A2Gr/ANhv/wDac/8Ad0CwAAAAgAAAAHsAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAABjAAAAgAApA5ABoA7gAbsT/wG8Fv8BvRj/Ab0b/wG+ Hv8AvyD/ALMh8AB1GLgAKwmQAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAYCIgAcCewALFB4ADP T/8A0FP/ANFX/wDSWv8A1F//ANVi/wDPY/gAViqgAAAAgAAAAHsAAAAWAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAFsAAACAAAAAgAFw CbgBtA/4AboS/wG7Ff8BvBf/Ab0a/wG9Hf8AviD/AL8j/wC0I/AApyPgAIIdwACDH8AAgyLAAKIs2ACz M+gAyDz/AMpA/wDLRP8AzEf/AM5L/wDPTv8Az1L/ANFW/wChRNAAGQuIAAAAgAAAAGsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAQgAAAIAAAACAABYBiAF7CcABrQ7wAboS/wG7Ff8BvBf/Ab0Z/wG9Hf8AviD/AL8i/wDA Jf8AwSn/AMMr/wDEL/8AxTL/AMY1/wDHOf8AyDz/AMk//wDLQ/8AzEb/AJ450AAuEZAAAACAAAAAgAAA AFoAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAWgAAAIAAAACAAAAAgABXBqgBhQvIAacP6AG7 FP8BvBf/Ab0Z/wG9HP8Avh//AL8h/wDAJP8AwSj/AMIq/wDELv8AxTH/ALkx8ACYK9AAbSGwABgHiAAA AIAAAACAAAAAYgAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAUgAA AHMAAACAAAAAgAAAAIAAAACAADsFmABLCKAASwmgAX4QwAF+EsABfxTAAFsPqABNDqAATRCgAAAAgAAA AIAAAACAAAAAgAAAAIAAAABiAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAKAAAAKgAAAEoAAABpAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAABxAAAAUgAAADIAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAIQAA ACIAAABBAAAAQQAAAEEAAAApAAAAIQAAACEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// ////////////////////8B/////////AA////////wAB///////+AAD///////wAAP///////AAAf/// ///4AAB///////AAAP//////8AAA///////gAfP//////+AD//////8AAAP/////+AAAB//////gAAAH /////4AAAAf////+AAAAAf////wAAAAA////+AAAAAB////wAAAAAD///+AABAAAP///4AAAAAAf///A AAAAAA///4AEAACAD///gAwAAIAH//8ADgABwAf//wAfAAfAA///AB+AD+AD//4AP+B/4AP//gA////g Af/+AD////AB//wAP///8AH//AA////wAf/8AH////AB//wAf///8AH//AB////wAf/8AH////AB//wA f///8AH//AB////wAf/8AD////AB//wAP///8AH//AA////gAf/+AD///+AB//4AP///4AP//gAf///A A///AB///8AD//8AD///gAf//wAP//+AB///gAf//wAP//+AA//+AA///8AB//wAH///4AB/8AA////g AB/AAD////AAAAAAf///+AAAAAD////8AAAAAf////8AAAAD/////4AAAA//////4AAAP//////4AAD/ ///////AD/////////////////////////8oAAAAMAAAAGAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAMgAAAFEAAABhAAAAWQAAADoAAAAaAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFIAAAB7AAAAgAAAAIAAAACAAAAAgAAA AIAAAACAAAAAYgAAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAawAAAIAAAACADxB6sBUW rNAXF8DgFha32BAQiLgGBjKQAAAAgAAAAIAAAABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAB7AAAAgAoQ WqAYI9LwGiLh/xog4P8bH+D/Gxzg/xsb4P8bG+D/ExOiyAMDGogAAACAAAAAKgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA AGsAAACADRt7sBgv4v8ZK+H/GSnh/xkm4f8aI+H/GiHh/xof4P8bHeD/Gxvg/xMTosgAAACAAAAASQAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAUgAAAIAJGFygFzrk/xc24/8YM+P/GDDi/xYq0vAOFnuwBgkykAoOWqATGaLIGB7R8BUX rNAAAACAAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAASAAAAewAAAIAVQdfwFkPm/xc+5f8XO+T/FTHM6AMGG4gAAACAAAAAgAAA AIAAAACAAAAAgAAAAIAAAACAAAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAAgAsufbAUT+b/FUvm/xZH5v8VQt/4BQ4zkAAA AIAAAABTAAAAEgAAACoAAABSAAAAcQAAAFIAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAEQAAACkAAABBAAAAQQAAAFEAAABhAAAASQAAAEEAAABzAAAAgBFX1/ATWeb/FFXm/xRQ 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 IuAApybgAKkq4ADGNP8Axzn/AMg9/wDKQv8AzEb/AM5L/wCyReAALhOQAAAAgAAAAHsAAAAWAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAYwAAAIAAAACAAEkEoAGNCdABsw74AboR/wG7 Ff8BvBf/Ab0b/wC+H/8AvyP/AMEn/wDCKv8AxC//AMYz/wDANvgAmi7QAFEaoAAAAIAAAACAAAAAWwAA ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAABrAAAAgAAA AIAAAACAADoDmABYB6gBfAvAAX0NwAF9D8ABfhHAAX8UwAB/FsAAWxKoAD4NmAAAAIAAAACAAAAAgAAA AGsAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAACAAAAMgAAAFoAAAB5AAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA AHkAAABaAAAAMgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAA AEEAAAApAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD/////Af8AAP// //wAfwAA////+AA/AID////wAB+G/////+AAH47/////4AAflv/////AAB8AgP///8AAPwAA///AAB// AAD//gAAH/8AAP/4AAA//wAA/+AAAB//AAD/wAAAD/8AAP+AAAAH/wAA/wAAAAP/AAD+AAAAAf8AAP4A AAAA/wAA/AAAAAD/AAD8AAAAAP8AAPgBgAYAfwAA+AHADgB/AAD4A/A/AH8AgPAD//8AP+b/8AP//wA/ 5v/wA///AD/m//AD//8APwCA8AP//wA/AADwA///AD8AAPAD//8APwAA8AP//wA/AADwA///AD8AAPAD //8APwAA+AH//gB/AAD4Af/+AH8AAPgA//wAfwCA/AD//AD/fv/8AH/4AP+F//4AP+AB/47//gAHgAH/ AID/AAAAA/8AAP+AAAAH/wAA/8AAAA//AAD/4AAAH/8AAP/4AAB//wAA//wAAP//AAD//8AP//8AAP// /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAEgAAABgAAAAWAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 Exportera histogram quickroute-linux-upstream-2.5/QuickRoute.UI/Program.cs000066400000000000000000000010641446222606700231250ustar00rootroot00000000000000using System; using System.Windows.Forms; using QuickRoute.BusinessEntities; using QuickRoute.Common; using QuickRoute.Resources; using QuickRoute.UI.Forms; namespace QuickRoute.UI { static class Program { /// /// The main entry point for the application. /// Do not enter any metods to this class! /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Main()); } } }quickroute-linux-upstream-2.5/QuickRoute.UI/Properties/000077500000000000000000000000001446222606700233225ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Properties/AssemblyInfo.cs000066400000000000000000000025161446222606700262500ustar00rootroot00000000000000// -*- coding: utf-8-dos -*- using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("QuickRoute")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Mats Troeng")] [assembly: AssemblyProduct("QuickRoute")] [assembly: AssemblyCopyright("Copyright © Mats Troeng 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("3150cc70-7148-47cc-871f-6d1f2a5d9795")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // [assembly: AssemblyVersion("2.5")] [assembly: AssemblyFileVersion("2.5")] [assembly: AssemblyInformationalVersion("2.5.0")]quickroute-linux-upstream-2.5/QuickRoute.UI/Properties/Resources.Designer.cs000066400000000000000000000054441446222606700273710ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.UI.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("QuickRoute.UI.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Properties/Resources.resx000066400000000000000000000127541446222606700262100ustar00rootroot00000000000000 text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 quickroute-linux-upstream-2.5/QuickRoute.UI/Properties/Settings.Designer.cs000066400000000000000000000032461446222606700272150ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace QuickRoute.UI.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default { get { return defaultInstance; } } [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.WebServiceUrl)] [global::System.Configuration.DefaultSettingValueAttribute("http://www.matstroeng.se/quickroute/server/index.php")] public string QuickRoute_QuickRouteServer_QuickRouteServer { get { return ((string)(this["QuickRoute_QuickRouteServer_QuickRouteServer"])); } } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Properties/Settings.settings000066400000000000000000000010051446222606700267000ustar00rootroot00000000000000 http://www.matstroeng.se/quickroute/server/index.php quickroute-linux-upstream-2.5/QuickRoute.UI/QuickRoute.UI.csproj000066400000000000000000001322511446222606700250230ustar00rootroot00000000000000 Debug AnyCPU 8.0.30703 2.0 {953F40A2-9741-4BE8-B42E-59C603700281} WinExe Properties QuickRoute.UI QuickRoute QuickRoute.UI.Program QuickRoute.ico 3.5 false v4.5 publish\ true Disk false Foreground 7 Days false false true 0 1.0.0.%2a false true true full false bin\Debug\ TRACE;DEBUG prompt 4 pdbonly true bin\Release\ TRACE prompt 4 true bin\x86\Debug\ TRACE;DEBUG full x86 prompt 4 false bin\x86\Release\ TRACE true pdbonly x86 prompt 4 log4net Form AboutBox.cs Form AddLapsFromExternalDataSource.cs Form ApplicationSettingsEditor.cs Form ColorRangeIntervalEditor.cs Form AddSessionsForm.cs Form ExceptionMessageBox.cs Form ExportRouteDataDialog.cs Form CreateNewForm.cs Form ImageManipulator.cs Form OpenMultipleFilesInGoogleEarthDialog.cs Form GradientEditor.cs Form KmlPropertySelectorDialog.cs Form RefreshDevicesProgressIndicator.cs Form SelectRoutePropertyTypesForm.cs Form TimeDialog.cs Form NewVersionDialog.cs Form PublishMapForm.cs Form SelectUICultureForm.cs Form SplashScreen.cs Form Main.cs True True Main.fi.resx True True Main.it.resx True True Main.lt.resx AboutBox.cs AddLapsFromExternalDataSource.cs AddSessionsForm.cs ColorChooser.cs ColorRangeIntervalEditor.cs CreateNewForm.cs Designer CreateNewForm.cs ExceptionMessageBox.cs ExportRouteDataDialog.cs GradientEditor.cs ImageManipulator.cs ImageManipulator.cs KmlPropertySelectorDialog.cs NewVersionDialog.cs OpenMultipleFilesInGoogleEarthDialog.cs PublishMapForm.cs RefreshDevicesProgressIndicator.cs RefreshDevicesProgressIndicator.cs SelectRoutePropertyTypesForm.cs SelectUICultureForm.cs TimeDialog.cs Main.cs Designer ResXFileCodeGenerator Resources.Designer.cs Designer True Resources.resx True SettingsSingleFileGenerator Settings.Designer.cs True Settings.settings True Form True True Reference.map AboutBox.cs Designer AboutBox.cs Designer AboutBox.cs Designer Designer AboutBox.cs AboutBox.cs Designer Designer AboutBox.cs AddLapsFromExternalDataSource.cs Designer AddLapsFromExternalDataSource.cs Designer AddLapsFromExternalDataSource.cs Designer AddLapsFromExternalDataSource.cs Designer AddLapsFromExternalDataSource.cs Designer AddLapsFromExternalDataSource.cs Designer AddSessionsForm.cs Designer AddSessionsForm.cs Designer AddSessionsForm.cs Designer AddSessionsForm.cs Designer ApplicationSettingsEditor.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer ColorChooser.cs Designer Designer ColorChooser.cs ColorRangeIntervalEditor.cs Designer ColorRangeIntervalEditor.cs Designer ColorRangeIntervalEditor.cs Designer Designer ColorRangeIntervalEditor.cs ColorRangeIntervalEditor.cs Designer ColorRangeIntervalEditor.cs Designer AddSessionsForm.cs Designer AddSessionsForm.cs Designer CreateNewForm.cs Designer CreateNewForm.cs Designer CreateNewForm.cs Designer CreateNewForm.cs Designer ExceptionMessageBox.cs Designer ExceptionMessageBox.cs Designer ExportRouteDataDialog.cs Designer ExportRouteDataDialog.cs Designer ExportRouteDataDialog.cs Designer ExportRouteDataDialog.cs Designer ExportRouteDataDialog.cs Designer ExportRouteDataDialog.cs Designer CreateNewForm.cs Designer GradientEditor.cs Designer GradientEditor.cs Designer GradientEditor.cs Designer GradientEditor.cs Designer KmlPropertySelectorDialog.cs Designer KmlPropertySelectorDialog.cs Designer KmlPropertySelectorDialog.cs Designer KmlPropertySelectorDialog.cs Designer NewVersionDialog.cs Designer NewVersionDialog.cs Designer NewVersionDialog.cs Designer NewVersionDialog.cs Designer OpenMultipleFilesInGoogleEarthDialog.cs Designer OpenMultipleFilesInGoogleEarthDialog.cs Designer OpenMultipleFilesInGoogleEarthDialog.cs Designer OpenMultipleFilesInGoogleEarthDialog.cs Designer OpenMultipleFilesInGoogleEarthDialog.cs Designer OpenMultipleFilesInGoogleEarthDialog.cs Designer Designer GradientEditor.cs Designer GradientEditor.cs ColorChooser.cs Designer KmlPropertySelectorDialog.cs Designer KmlPropertySelectorDialog.cs Designer PublishMapForm.cs Designer PublishMapForm.cs Designer PublishMapForm.cs Designer PublishMapForm.cs Designer SelectRoutePropertyTypesForm.cs Designer SelectRoutePropertyTypesForm.cs Designer SelectRoutePropertyTypesForm.cs Designer SelectRoutePropertyTypesForm.cs Designer SelectRoutePropertyTypesForm.cs Designer SelectRoutePropertyTypesForm.cs Designer SelectUICultureForm.cs Designer SelectUICultureForm.cs Designer SelectUICultureForm.cs Designer SelectUICultureForm.cs Designer TimeDialog.cs Designer TimeDialog.cs Designer TimeDialog.cs Designer TimeDialog.cs Designer TimeDialog.cs Designer TimeDialog.cs Designer NewVersionDialog.cs Designer NewVersionDialog.cs Designer PublishMapForm.cs Designer PublishMapForm.cs Designer SelectUICultureForm.cs Designer SelectUICultureForm.cs Designer SplashScreen.cs Designer Main.cs Designer Main.cs Designer Main.cs Designer Main.cs Designer Main.cs Designer Main.cs Designer {FFEC4820-9B6B-47E9-8594-B71A52081C1E} GarminUSBReader {B7D88639-3248-4309-A687-94DC11EC2946} DOMAPublisher {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61} QuickRoute.BusinessEntities {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E} QuickRoute.Common {D5755345-EE87-4B08-95D7-55DDDB331CFB} QuickRoute.Controls {2854A1FB-52F7-4197-A24E-E9977FD21563} QuickRoute.Resources {00020430-0000-0000-C000-000000000046} 2 0 0 primary False Designer Designer Reference.map MSDiscoCodeGenerator Reference.cs False .NET Framework 3.5 SP1 Client Profile false False .NET Framework 2.0 %28x86%29 true False .NET Framework 3.0 %28x86%29 false False .NET Framework 3.5 false False .NET Framework 3.5 SP1 false Dynamic Web References\QuickRouteServer\ http://www.matstroeng.se/quickroute/server/index.php%3fwsdl Settings QuickRoute_QuickRouteServer_QuickRouteServer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer ResXFileCodeGenerator Main.lt.Designer.cs Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer Designer RefreshDevicesProgressIndicator.cs Designer RefreshDevicesProgressIndicator.cs Designer RefreshDevicesProgressIndicator.cs Designer RefreshDevicesProgressIndicator.cs Designer RefreshDevicesProgressIndicator.cs Designer RefreshDevicesProgressIndicator.cs Designer Designer ResXFileCodeGenerator Main.fi.Designer.cs ImageManipulator.cs Designer ResXFileCodeGenerator Main.it.Designer.cs Designer quickroute-linux-upstream-2.5/QuickRoute.UI/QuickRoute.ico000066400000000000000000000764461446222606700237760ustar00rootroot00000000000000@@ (BF00 %nB  h hx(@ )AAA0"ZbBS jz2kc Z{kG&'%"  zbc [..+)'%#! 2BH7631.,&{22{ G{9><963& GcR )}HEB?<-R:bc{MOLIE?2 B 3}YVSOM\S "AIaaaaaaQcVa^ZWHkJi#Ikiea^$\B2b>\fl } { x u r o ` Q fspli\k*b(3i ~{xtq BkBS*3 |xq.\[cnljgu |y e3s{BI#3 }v8m{{v}]mg}aBAA ~C}{ky}Q\N\!cj ^0I E}c[[\S\zZJs:I  *IJB33:y\m7IS$3 }"{:Z:Ic[Y} _ZR}w}}S"=Ic{ "{{2cR_} gZR}pR2X\v}DIJ{ {q׺30"ZqR"Z[}:*I<Ϻi "AA02[mbJJ iϝv9yJ\" \K!aA!\>3(aQ9ZBaA]AaAWAqAQ~߂AyALuy}ށ߅IaAFmqtx|ހaaAAdilpswbƿY"T#\`cgkoW.!A  TW[_bgf2*3/mk)iDOSWZ^FJ2}o J{)GKNRVPiZϿi- ?CFJNQ.*{߸~Jb-;>BEI8ZB}b:]36:=AC" sƔZ s)/359<+cSmL߯2R[(+.258@S2ՎtZ s$'*-1/:lϑ": #')-'J2{N߅ݒ3"JZ< #&)"ZJw?x|߄Z9[c; "%${RBkPkosw{~zGkc;!#iqaBAAYiT#R`cgjosw@{c) !u+ p'AOSWZ_bcV*{[p  ###",3<@DGKNRVD kB{  "%)+/259<?CF9.ZZW !$(*.11+m!b2"Rs;KK ~~[MMb2 *JiqR2!"AAA)!!?? ?????????????(0` 2QaY:R{b*kz2S{ Z#" *k {/+)&#!IR \:630*{ 2 ZQ{AC>;12R .}OKGB3S*RqR2)AAQaIAsWYUP /["Rq3mhc_T2b#3Imda l u _ U K jrmi CRZ(3u |xs3{Bs } q?}S{bmb}  jS{v}l}f  sSk{}U\S\ck9I b2I x*S\\FIAIN\ fk"cbSC\ :\BZ*Sk cR2GIt}JBWm 3I2Rx2cb" yZqׯ϶i"AAA0Zy3'QA;I0}X{A)dmw9AemS)!W\AYs\B!!Y\Yao[=!![\aad{߅Z9!!\[aa[osy}Y4!!\ZQIEcimsh8)9A9~2X]agGAJ}{0.MQW[OZiϵ31q>FKPRy qR%<@EJb%BR}byR", 26;?:k{מߴb,149PSZ|SuZ2*"'*/0BSڊז"[g!%)'SSp߃H0S{ $c2 2k bsw|ށzHc2 = baabT#Tagkqw@{2p M` 7MQW[^u7{2:  "&*49=BFKE.{cI #'*/36.Q[Bk:X| } }~[> kB2ZyyZ2)AAAAAA)??????????????~?( @ H`X8K G,K {+(# `< m<70 Z{2pJID&H 0X$(@@84 7}^WBX @p2IGm_ [ N1\ gmg3$Dz |r3DPp}sOmb { IPPM\@DF\ cPKp|xvQm AmD314@h}K4'3 P}y< KGIt}KP b<3*PX0(\mp8jϮh)3XX^m(`{m@`@`kc@`@`]s|W@x@`NbjXP}|0H6QXWhI?IF?AHO <q׾pp/8?.Dpן@<i)04,DZߤ `!('`$DF'lHD, <PDgry\K4 ip`@:QXaKK4hz"-3;A>S K DxW{w?`,(@````P8? 88???(  $<8&$"|8D2Ƹp|"<VpNpFpiY0& x1L&op 1Lwp&HTXDTX,,ϣ1+L $<,0&1L@@$up@sy0 p4M_<(Ȳp$*?v,p8ެ< (L +4&iy"Xd]d@JXAaa("Wd$.,((8@<0Dquickroute-linux-upstream-2.5/QuickRoute.UI/Settings.cs000066400000000000000000000023561446222606700233230ustar00rootroot00000000000000namespace QuickRoute.UI.Properties { // This class allows you to handle specific events on the settings class: // The SettingChanging event is raised before a setting's value is changed. // The PropertyChanged event is raised after a setting's value is changed. // The SettingsLoaded event is raised after the setting values are loaded. // The SettingsSaving event is raised before the setting values are saved. internal sealed partial class Settings { public Settings() { // // To add event handlers for saving and changing settings, uncomment the lines below: // // this.SettingChanging += this.SettingChangingEventHandler; // // this.SettingsSaving += this.SettingsSavingEventHandler; // } private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) { // Add code to handle the SettingChangingEvent event here. } private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) { // Add code to handle the SettingsSaving event here. } } } quickroute-linux-upstream-2.5/QuickRoute.UI/Web References/000077500000000000000000000000001446222606700237455ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Web References/QuickRouteServer/000077500000000000000000000000001446222606700272275ustar00rootroot00000000000000GetCurrentVersionResponse.datasource000066400000000000000000000012431446222606700363730ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRoute.UI/Web References/QuickRouteServer QuickRoute.UI.QuickRouteServer.GetCurrentVersionResponse, Web References.QuickRouteServer.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null quickroute-linux-upstream-2.5/QuickRoute.UI/Web References/QuickRouteServer/Reference.cs000066400000000000000000000213761446222606700314650ustar00rootroot00000000000000//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.239 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ // // This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.239. // #pragma warning disable 1591 namespace QuickRoute.UI.QuickRouteServer { using System; using System.Web.Services; using System.Diagnostics; using System.Web.Services.Protocols; using System.ComponentModel; using System.Xml.Serialization; /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Web.Services.WebServiceBindingAttribute(Name="QuickRouteServerBinding", Namespace="http://www.matstroeng.se/quickroute/server")] public partial class QuickRouteServer : System.Web.Services.Protocols.SoapHttpClientProtocol { private System.Threading.SendOrPostCallback GetCurrentVersionOperationCompleted; private bool useDefaultCredentialsSetExplicitly; /// public QuickRouteServer() { this.Url = global::QuickRoute.UI.Properties.Settings.Default.QuickRoute_QuickRouteServer_QuickRouteServer; if ((this.IsLocalFileSystemWebService(this.Url) == true)) { this.UseDefaultCredentials = true; this.useDefaultCredentialsSetExplicitly = false; } else { this.useDefaultCredentialsSetExplicitly = true; } } public new string Url { get { return base.Url; } set { if ((((this.IsLocalFileSystemWebService(base.Url) == true) && (this.useDefaultCredentialsSetExplicitly == false)) && (this.IsLocalFileSystemWebService(value) == false))) { base.UseDefaultCredentials = false; } base.Url = value; } } public new bool UseDefaultCredentials { get { return base.UseDefaultCredentials; } set { base.UseDefaultCredentials = value; this.useDefaultCredentialsSetExplicitly = true; } } /// public event GetCurrentVersionCompletedEventHandler GetCurrentVersionCompleted; /// [System.Web.Services.Protocols.SoapRpcMethodAttribute("http://www.matstroeng.se/quickroute/server/index.php/GetCurrentVersion", RequestNamespace="http://www.matstroeng.se/quickroute/server", ResponseNamespace="http://www.matstroeng.se/quickroute/server")] [return: System.Xml.Serialization.SoapElementAttribute("response")] public GetCurrentVersionResponse GetCurrentVersion(GetCurrentVersionRequest request) { object[] results = this.Invoke("GetCurrentVersion", new object[] { request}); return ((GetCurrentVersionResponse)(results[0])); } /// public void GetCurrentVersionAsync(GetCurrentVersionRequest request) { this.GetCurrentVersionAsync(request, null); } /// public void GetCurrentVersionAsync(GetCurrentVersionRequest request, object userState) { if ((this.GetCurrentVersionOperationCompleted == null)) { this.GetCurrentVersionOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetCurrentVersionOperationCompleted); } this.InvokeAsync("GetCurrentVersion", new object[] { request}, this.GetCurrentVersionOperationCompleted, userState); } private void OnGetCurrentVersionOperationCompleted(object arg) { if ((this.GetCurrentVersionCompleted != null)) { System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); this.GetCurrentVersionCompleted(this, new GetCurrentVersionCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); } } /// public new void CancelAsync(object userState) { base.CancelAsync(userState); } private bool IsLocalFileSystemWebService(string url) { if (((url == null) || (url == string.Empty))) { return false; } System.Uri wsUri = new System.Uri(url); if (((wsUri.Port >= 1024) && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) { return true; } return false; } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/quickroute/server")] public partial class GetCurrentVersionRequest { private string userVersionField; private string userLanguageField; /// public string UserVersion { get { return this.userVersionField; } set { this.userVersionField = value; } } /// public string UserLanguage { get { return this.userLanguageField; } set { this.userLanguageField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.SoapTypeAttribute(Namespace="http://www.matstroeng.se/quickroute/server")] public partial class GetCurrentVersionResponse { private string currentVersionField; private string downloadUrlField; private string[] featuresField; /// public string CurrentVersion { get { return this.currentVersionField; } set { this.currentVersionField = value; } } /// public string DownloadUrl { get { return this.downloadUrlField; } set { this.downloadUrlField = value; } } /// public string[] Features { get { return this.featuresField; } set { this.featuresField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] public delegate void GetCurrentVersionCompletedEventHandler(object sender, GetCurrentVersionCompletedEventArgs e); /// [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.1")] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] public partial class GetCurrentVersionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { private object[] results; internal GetCurrentVersionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : base(exception, cancelled, userState) { this.results = results; } /// public GetCurrentVersionResponse Result { get { this.RaiseExceptionIfNecessary(); return ((GetCurrentVersionResponse)(this.results[0])); } } } } #pragma warning restore 1591quickroute-linux-upstream-2.5/QuickRoute.UI/Web References/QuickRouteServer/Reference.map000066400000000000000000000006261446222606700316300ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/QuickRoute.UI/Web References/QuickRouteServer/index.wsdl000066400000000000000000000063021446222606700312320ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/QuickRoute.UI/app.config000066400000000000000000000067211446222606700231430ustar00rootroot00000000000000
http://www.matstroeng.se/quickroute/server/index.php http://www.obasen.nu/winsplits/webservices/WebServices.asmx http://bestik.cz/vysledky/webservice.php quickroute-linux-upstream-2.5/QuickRoute.UI/todo.txt000066400000000000000000000014531446222606700226770ustar00rootroot00000000000000Use IFormattable and IFormatProvider within e g LongLat Where should event handlers be hooked in? Import georeferenced TIFF Visible momentaneous info items dialog should include up/down possibilities? javascript plugin api http://stackoverflow.com/questions/305915/winforms-how-do-i-execute-c-application-code-from-inside-webbrowser-control http://developer.garmin.com/forum/viewtopic.php?t=494&sid=8ce6b04046a90aaf8fe8ad26a674ac95 http://en.wikipedia.org/wiki/Mercator_projection http://code.google.com/intl/sv-SE/apis/maps/documentation/overlays.html#Google_Maps_Coordinates http://markmail.org/message/c5k7pnqrzk7fabeu http://mtaulty.com/communityserver/blogs/mike_taultys_blog/archive/2005/08/01/5547.aspx http://www.koushikdutta.com/2008/07/virtual-earth-and-google-maps-tiled-map.htmlquickroute-linux-upstream-2.5/QuickRoute.sln000066400000000000000000000542311446222606700213750ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B64CC9AA-878F-4690-9949-0C5784306CEE}" ProjectSection(SolutionItems) = preProject QuickRoute.UI\todo.txt = QuickRoute.UI\todo.txt EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GPSDeviceReaders", "GPSDeviceReaders", "{8D875711-C954-4A8B-A492-42DD40EA190B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GarminUSBReader", "GPSDeviceReaders\GarminUSBReader\GarminUSBReader.csproj", "{FFEC4820-9B6B-47E9-8594-B71A52081C1E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GlobalSatGH615MReader", "GPSDeviceReaders\GlobalSatGH615MReader\GlobalSatGH615MReader.csproj", "{81633CC3-9C5E-4C93-A9A6-876F6AE40883}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "JJConnectRegistratorSEReader", "GPSDeviceReaders\JJConnectRegistratorSEReader\JJConnectRegistratorSEReader.csproj", "{E91D684B-2DD8-4C50-8111-1940BFB427EE}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SerialPortDeviceReader", "GPSDeviceReaders\SerialPortDeviceReader\SerialPortDeviceReader.csproj", "{11A24507-A39E-42A2-9662-0416E8A31597}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Publishers", "Publishers", "{DECE96F3-CCEB-4FDD-A65A-5CB444EF8151}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DOMAPublisher", "Publishers\DOMAPublisher\DOMAPublisher.csproj", "{B7D88639-3248-4309-A687-94DC11EC2946}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickRoute.UI", "QuickRoute.UI\QuickRoute.UI.csproj", "{953F40A2-9741-4BE8-B42E-59C603700281}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickRoute.BusinessEntities", "QuickRoute.BusinessEntities\QuickRoute.BusinessEntities.csproj", "{A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickRoute.Controls", "QuickRoute.Controls\QuickRoute.Controls.csproj", "{D5755345-EE87-4B08-95D7-55DDDB331CFB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickRoute.PropertyControls", "QuickRoute.PropertyControls\QuickRoute.PropertyControls.csproj", "{4900715B-572B-4279-B704-29B0640612ED}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickRoute.Resources", "QuickRoute.Resources\QuickRoute.Resources.csproj", "{2854A1FB-52F7-4197-A24E-E9977FD21563}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickRoute.Common", "QuickRoute.Common\QuickRoute.Common.csproj", "{7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3rdparty", "3rdparty", "{53EAABBB-E14F-45C0-9781-77E6E2115E31}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wintellect.PowerCollections", "3rdparty\PowerCollections\Wintellect.PowerCollections.csproj", "{5821977D-AC2C-4912-BCD0-6E6B1A756167}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExifLibrary", "3rdparty\ExifLibrary\ExifLibrary.csproj", "{C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZLib", "3rdparty\SharpZipLib\ICSharpCode.SharpZLib.csproj", "{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x86 = Release|x86 ReleaseSigned|Any CPU = ReleaseSigned|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.Build.0 = Debug|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x86.ActiveCfg = Debug|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x86.Build.0 = Debug|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.Build.0 = Release|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x86.ActiveCfg = Release|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x86.Build.0 = Release|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {11A24507-A39E-42A2-9662-0416E8A31597}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {11A24507-A39E-42A2-9662-0416E8A31597}.Debug|Any CPU.Build.0 = Debug|Any CPU {11A24507-A39E-42A2-9662-0416E8A31597}.Debug|x86.ActiveCfg = Debug|x86 {11A24507-A39E-42A2-9662-0416E8A31597}.Debug|x86.Build.0 = Debug|x86 {11A24507-A39E-42A2-9662-0416E8A31597}.Release|Any CPU.ActiveCfg = Release|Any CPU {11A24507-A39E-42A2-9662-0416E8A31597}.Release|Any CPU.Build.0 = Release|Any CPU {11A24507-A39E-42A2-9662-0416E8A31597}.Release|x86.ActiveCfg = Release|x86 {11A24507-A39E-42A2-9662-0416E8A31597}.Release|x86.Build.0 = Release|x86 {11A24507-A39E-42A2-9662-0416E8A31597}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {11A24507-A39E-42A2-9662-0416E8A31597}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {2854A1FB-52F7-4197-A24E-E9977FD21563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2854A1FB-52F7-4197-A24E-E9977FD21563}.Debug|Any CPU.Build.0 = Debug|Any CPU {2854A1FB-52F7-4197-A24E-E9977FD21563}.Debug|x86.ActiveCfg = Debug|x86 {2854A1FB-52F7-4197-A24E-E9977FD21563}.Debug|x86.Build.0 = Debug|x86 {2854A1FB-52F7-4197-A24E-E9977FD21563}.Release|Any CPU.ActiveCfg = Release|Any CPU {2854A1FB-52F7-4197-A24E-E9977FD21563}.Release|Any CPU.Build.0 = Release|Any CPU {2854A1FB-52F7-4197-A24E-E9977FD21563}.Release|x86.ActiveCfg = Release|x86 {2854A1FB-52F7-4197-A24E-E9977FD21563}.Release|x86.Build.0 = Release|x86 {2854A1FB-52F7-4197-A24E-E9977FD21563}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {2854A1FB-52F7-4197-A24E-E9977FD21563}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {4900715B-572B-4279-B704-29B0640612ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4900715B-572B-4279-B704-29B0640612ED}.Debug|Any CPU.Build.0 = Debug|Any CPU {4900715B-572B-4279-B704-29B0640612ED}.Debug|x86.ActiveCfg = Debug|x86 {4900715B-572B-4279-B704-29B0640612ED}.Debug|x86.Build.0 = Debug|x86 {4900715B-572B-4279-B704-29B0640612ED}.Release|Any CPU.ActiveCfg = Release|Any CPU {4900715B-572B-4279-B704-29B0640612ED}.Release|Any CPU.Build.0 = Release|Any CPU {4900715B-572B-4279-B704-29B0640612ED}.Release|x86.ActiveCfg = Release|x86 {4900715B-572B-4279-B704-29B0640612ED}.Release|x86.Build.0 = Release|x86 {4900715B-572B-4279-B704-29B0640612ED}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {4900715B-572B-4279-B704-29B0640612ED}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Debug|Any CPU.Build.0 = Debug|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Debug|x86.ActiveCfg = Debug|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Debug|x86.Build.0 = Debug|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Release|Any CPU.ActiveCfg = Release|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Release|Any CPU.Build.0 = Release|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Release|x86.ActiveCfg = Release|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.Release|x86.Build.0 = Release|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.ReleaseSigned|Any CPU.ActiveCfg = ReleaseSigned|Any CPU {5821977D-AC2C-4912-BCD0-6E6B1A756167}.ReleaseSigned|Any CPU.Build.0 = ReleaseSigned|Any CPU {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Debug|x86.ActiveCfg = Debug|x86 {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Debug|x86.Build.0 = Debug|x86 {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Release|Any CPU.Build.0 = Release|Any CPU {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Release|x86.ActiveCfg = Release|x86 {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.Release|x86.Build.0 = Release|x86 {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {7F93415F-ACEB-4B4F-8E6B-51D0B096F38E}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Debug|Any CPU.Build.0 = Debug|Any CPU {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Debug|x86.ActiveCfg = Debug|x86 {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Debug|x86.Build.0 = Debug|x86 {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Release|Any CPU.ActiveCfg = Release|Any CPU {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Release|Any CPU.Build.0 = Release|Any CPU {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Release|x86.ActiveCfg = Release|x86 {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.Release|x86.Build.0 = Release|x86 {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {81633CC3-9C5E-4C93-A9A6-876F6AE40883}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {953F40A2-9741-4BE8-B42E-59C603700281}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {953F40A2-9741-4BE8-B42E-59C603700281}.Debug|Any CPU.Build.0 = Debug|Any CPU {953F40A2-9741-4BE8-B42E-59C603700281}.Debug|x86.ActiveCfg = Debug|x86 {953F40A2-9741-4BE8-B42E-59C603700281}.Debug|x86.Build.0 = Debug|x86 {953F40A2-9741-4BE8-B42E-59C603700281}.Release|Any CPU.ActiveCfg = Release|Any CPU {953F40A2-9741-4BE8-B42E-59C603700281}.Release|Any CPU.Build.0 = Release|Any CPU {953F40A2-9741-4BE8-B42E-59C603700281}.Release|x86.ActiveCfg = Release|x86 {953F40A2-9741-4BE8-B42E-59C603700281}.Release|x86.Build.0 = Release|x86 {953F40A2-9741-4BE8-B42E-59C603700281}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {953F40A2-9741-4BE8-B42E-59C603700281}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Debug|Any CPU.Build.0 = Debug|Any CPU {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Debug|x86.ActiveCfg = Debug|x86 {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Debug|x86.Build.0 = Debug|x86 {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Release|Any CPU.Build.0 = Release|Any CPU {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Release|x86.ActiveCfg = Release|x86 {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.Release|x86.Build.0 = Release|x86 {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {A3FE7994-D8E2-4FF0-AE45-8BAA4ECECB61}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {B7D88639-3248-4309-A687-94DC11EC2946}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B7D88639-3248-4309-A687-94DC11EC2946}.Debug|Any CPU.Build.0 = Debug|Any CPU {B7D88639-3248-4309-A687-94DC11EC2946}.Debug|x86.ActiveCfg = Debug|x86 {B7D88639-3248-4309-A687-94DC11EC2946}.Debug|x86.Build.0 = Debug|x86 {B7D88639-3248-4309-A687-94DC11EC2946}.Release|Any CPU.ActiveCfg = Release|Any CPU {B7D88639-3248-4309-A687-94DC11EC2946}.Release|Any CPU.Build.0 = Release|Any CPU {B7D88639-3248-4309-A687-94DC11EC2946}.Release|x86.ActiveCfg = Release|x86 {B7D88639-3248-4309-A687-94DC11EC2946}.Release|x86.Build.0 = Release|x86 {B7D88639-3248-4309-A687-94DC11EC2946}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {B7D88639-3248-4309-A687-94DC11EC2946}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Debug|Any CPU.Build.0 = Debug|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Debug|x86.ActiveCfg = Debug|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Debug|x86.Build.0 = Debug|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Release|Any CPU.Build.0 = Release|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Release|x86.ActiveCfg = Release|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.Release|x86.Build.0 = Release|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Debug|Any CPU.Build.0 = Debug|Any CPU {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Debug|x86.ActiveCfg = Debug|x86 {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Debug|x86.Build.0 = Debug|x86 {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Release|Any CPU.ActiveCfg = Release|Any CPU {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Release|Any CPU.Build.0 = Release|Any CPU {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Release|x86.ActiveCfg = Release|x86 {D5755345-EE87-4B08-95D7-55DDDB331CFB}.Release|x86.Build.0 = Release|x86 {D5755345-EE87-4B08-95D7-55DDDB331CFB}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {D5755345-EE87-4B08-95D7-55DDDB331CFB}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Debug|Any CPU.Build.0 = Debug|Any CPU {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Debug|x86.ActiveCfg = Debug|x86 {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Debug|x86.Build.0 = Debug|x86 {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Release|Any CPU.Build.0 = Release|Any CPU {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Release|x86.ActiveCfg = Release|x86 {E91D684B-2DD8-4C50-8111-1940BFB427EE}.Release|x86.Build.0 = Release|x86 {E91D684B-2DD8-4C50-8111-1940BFB427EE}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {E91D684B-2DD8-4C50-8111-1940BFB427EE}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {FFEC4820-9B6B-47E9-8594-B71A52081C1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FFEC4820-9B6B-47E9-8594-B71A52081C1E}.Debug|x86.ActiveCfg = Debug|x86 {FFEC4820-9B6B-47E9-8594-B71A52081C1E}.Release|Any CPU.ActiveCfg = Release|Any CPU {FFEC4820-9B6B-47E9-8594-B71A52081C1E}.Release|x86.ActiveCfg = Release|x86 {FFEC4820-9B6B-47E9-8594-B71A52081C1E}.ReleaseSigned|Any CPU.ActiveCfg = Debug|Any CPU {FFEC4820-9B6B-47E9-8594-B71A52081C1E}.ReleaseSigned|Any CPU.Build.0 = Debug|Any CPU {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Debug|Any CPU.ActiveCfg = Debug {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Debug|Any CPU.Build.0 = Debug {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Debug|x86.ActiveCfg = Debug {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Release|Any CPU.ActiveCfg = Release {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Release|Any CPU.Build.0 = Release {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Release|x86.ActiveCfg = Release {51A04DBF-5723-4E8E-8F45-DE95A89D0C14}.Release|x86.Build.0 = Release EndGlobalSection GlobalSection(NestedProjects) = preSolution {FFEC4820-9B6B-47E9-8594-B71A52081C1E} = {8D875711-C954-4A8B-A492-42DD40EA190B} {81633CC3-9C5E-4C93-A9A6-876F6AE40883} = {8D875711-C954-4A8B-A492-42DD40EA190B} {E91D684B-2DD8-4C50-8111-1940BFB427EE} = {8D875711-C954-4A8B-A492-42DD40EA190B} {11A24507-A39E-42A2-9662-0416E8A31597} = {8D875711-C954-4A8B-A492-42DD40EA190B} {B7D88639-3248-4309-A687-94DC11EC2946} = {DECE96F3-CCEB-4FDD-A65A-5CB444EF8151} {5821977D-AC2C-4912-BCD0-6E6B1A756167} = {53EAABBB-E14F-45C0-9781-77E6E2115E31} {C29BA585-E27B-4AD0-9AD1-490B5E0E2A5E} = {53EAABBB-E14F-45C0-9781-77E6E2115E31} {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} = {53EAABBB-E14F-45C0-9781-77E6E2115E31} EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = QuickRoute.UI\QuickRoute.UI.csproj Policies = $0 $0.DotNetNamingPolicy = $1 $1.DirectoryNamespaceAssociation = None $1.ResourceNamePolicy = FileFormatDefault $0.TextStylePolicy = $2 $2.FileWidth = 120 $2.TabWidth = 2 $2.IndentWidth = 2 $2.EolMarker = Windows $2.inheritsSet = VisualStudio $2.inheritsScope = text/plain $2.scope = text/x-csharp $0.CSharpFormattingPolicy = $3 $3.inheritsSet = Mono $3.inheritsScope = text/x-csharp $3.scope = text/x-csharp $0.TextStylePolicy = $4 $4.FileWidth = 120 $4.TabsToSpaces = False $4.inheritsSet = VisualStudio $4.inheritsScope = text/plain $4.scope = text/plain $0.TextStylePolicy = $5 $5.inheritsSet = null $5.scope = text/microsoft-resx $0.XmlFormattingPolicy = $6 $6.inheritsSet = null $6.scope = text/microsoft-resx $0.TextStylePolicy = $7 $7.inheritsSet = null $7.scope = application/xml $0.XmlFormattingPolicy = $8 $8.inheritsSet = Mono $8.inheritsScope = application/xml $8.scope = application/xml $0.TextStylePolicy = $9 $9.inheritsSet = null $9.scope = application/config+xml $0.XmlFormattingPolicy = $10 $10.inheritsSet = null $10.scope = application/config+xml $0.TextStylePolicy = $11 $11.inheritsSet = null $11.scope = application/xslt+xml $0.XmlFormattingPolicy = $12 $12.inheritsSet = null $12.scope = application/xslt+xml $0.StandardHeader = $13 $13.Text = $13.IncludeInNewFiles = True $0.NameConventionPolicy = $14 $14.Rules = $15 $15.NamingRule = $16 $16.Name = Namespaces $16.AffectedEntity = Namespace $16.VisibilityMask = VisibilityMask $16.NamingStyle = PascalCase $16.IncludeInstanceMembers = True $16.IncludeStaticEntities = True $15.NamingRule = $17 $17.Name = Types $17.AffectedEntity = Class, Struct, Enum, Delegate $17.VisibilityMask = VisibilityMask $17.NamingStyle = PascalCase $17.IncludeInstanceMembers = True $17.IncludeStaticEntities = True $15.NamingRule = $18 $18.Name = Interfaces $18.RequiredPrefixes = $19 $19.String = I $18.AffectedEntity = Interface $18.VisibilityMask = VisibilityMask $18.NamingStyle = PascalCase $18.IncludeInstanceMembers = True $18.IncludeStaticEntities = True $15.NamingRule = $20 $20.Name = Attributes $20.RequiredSuffixes = $21 $21.String = Attribute $20.AffectedEntity = CustomAttributes $20.VisibilityMask = VisibilityMask $20.NamingStyle = PascalCase $20.IncludeInstanceMembers = True $20.IncludeStaticEntities = True $15.NamingRule = $22 $22.Name = Event Arguments $22.RequiredSuffixes = $23 $23.String = EventArgs $22.AffectedEntity = CustomEventArgs $22.VisibilityMask = VisibilityMask $22.NamingStyle = PascalCase $22.IncludeInstanceMembers = True $22.IncludeStaticEntities = True $15.NamingRule = $24 $24.Name = Exceptions $24.RequiredSuffixes = $25 $25.String = Exception $24.AffectedEntity = CustomExceptions $24.VisibilityMask = VisibilityMask $24.NamingStyle = PascalCase $24.IncludeInstanceMembers = True $24.IncludeStaticEntities = True $15.NamingRule = $26 $26.Name = Methods $26.AffectedEntity = Methods $26.VisibilityMask = VisibilityMask $26.NamingStyle = PascalCase $26.IncludeInstanceMembers = True $26.IncludeStaticEntities = True $15.NamingRule = $27 $27.Name = Static Readonly Fields $27.AffectedEntity = ReadonlyField $27.VisibilityMask = Internal, Protected, Public $27.NamingStyle = PascalCase $27.IncludeInstanceMembers = False $27.IncludeStaticEntities = True $15.NamingRule = $28 $28.Name = Fields (Non Private) $28.AffectedEntity = Field $28.VisibilityMask = Internal, Protected, Public $28.NamingStyle = PascalCase $28.IncludeInstanceMembers = True $28.IncludeStaticEntities = True $15.NamingRule = $29 $29.Name = ReadOnly Fields (Non Private) $29.AffectedEntity = ReadonlyField $29.VisibilityMask = Internal, Protected, Public $29.NamingStyle = PascalCase $29.IncludeInstanceMembers = True $29.IncludeStaticEntities = False $15.NamingRule = $30 $30.Name = Fields (Private) $30.AllowedPrefixes = $31 $31.String = _ $31.String = m_ $30.AffectedEntity = Field, ReadonlyField $30.VisibilityMask = Private $30.NamingStyle = CamelCase $30.IncludeInstanceMembers = True $30.IncludeStaticEntities = False $15.NamingRule = $32 $32.Name = Static Fields (Private) $32.AffectedEntity = Field $32.VisibilityMask = Private $32.NamingStyle = CamelCase $32.IncludeInstanceMembers = False $32.IncludeStaticEntities = True $15.NamingRule = $33 $33.Name = ReadOnly Fields (Private) $33.AllowedPrefixes = $34 $34.String = _ $34.String = m_ $33.AffectedEntity = ReadonlyField $33.VisibilityMask = Private $33.NamingStyle = CamelCase $33.IncludeInstanceMembers = True $33.IncludeStaticEntities = False $15.NamingRule = $35 $35.Name = Constant Fields $35.AffectedEntity = ConstantField $35.VisibilityMask = VisibilityMask $35.NamingStyle = PascalCase $35.IncludeInstanceMembers = True $35.IncludeStaticEntities = True $15.NamingRule = $36 $36.Name = Properties $36.AffectedEntity = Property $36.VisibilityMask = VisibilityMask $36.NamingStyle = PascalCase $36.IncludeInstanceMembers = True $36.IncludeStaticEntities = True $15.NamingRule = $37 $37.Name = Events $37.AffectedEntity = Event $37.VisibilityMask = VisibilityMask $37.NamingStyle = PascalCase $37.IncludeInstanceMembers = True $37.IncludeStaticEntities = True $15.NamingRule = $38 $38.Name = Enum Members $38.AffectedEntity = EnumMember $38.VisibilityMask = VisibilityMask $38.NamingStyle = PascalCase $38.IncludeInstanceMembers = True $38.IncludeStaticEntities = True $15.NamingRule = $39 $39.Name = Parameters $39.AffectedEntity = Parameter $39.VisibilityMask = VisibilityMask $39.NamingStyle = CamelCase $39.IncludeInstanceMembers = True $39.IncludeStaticEntities = True $15.NamingRule = $40 $40.Name = Type Parameters $40.RequiredPrefixes = $41 $41.String = T $40.AffectedEntity = TypeParameter $40.VisibilityMask = VisibilityMask $40.NamingStyle = PascalCase $40.IncludeInstanceMembers = True $40.IncludeStaticEntities = True EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal quickroute-linux-upstream-2.5/QuickRouteMacros/000077500000000000000000000000001446222606700220175ustar00rootroot00000000000000quickroute-linux-upstream-2.5/QuickRouteMacros/QuickRouteMacros.vsmacros000066400000000000000000003020001446222606700270310ustar00rootroot00000000000000ࡱ> 3l F !"#$A&'()*+,-./0123456789:;=>?@IBCDEHGKJLMNOPQRSTUVWXYZ[\]^_`abcdefghijkmnopqrstuvwxy{|}~Root Entry=ޫVSM_Project_MetaData*VSM_Project_Data" v =ޫVSM v =ޫVSMPROJ )VSM7PROJEX PITMMANIFEST6V62CY6CNU88430HBW2BH131BL8T2BR@<N6I8S72M4532S5V3IL05PKYBJJES087S@%8-VSMPE z`VSMPDB   !"#$%&'()*+,-./0123456789: QuickRouteMacros>473L75M7NLM45B77BPI171I8BQQK7870UploadDevelopmentVersion>6I8S72M4532S5V3IL05PKYBJJES087SModule1>84BL0361U02W43MA710Y80DIB24H71K"EnvironmentEvents>6V62CY6CNU88430HBW2BH131BL8T2BRuationEvents,EnvDTE8EnvironmentEvents,500,DTEEvents,EnvDTE,DTEEvents,EnvDTE.DTEEvents EnvironmentEvents,502,DocumentEvents,EnvDTE,DocumentEvents,EnvDTE.DocumentEvents EnvironmentEvents,501,WindowEvents,EnvDTE,WindowEvents,EnvDTE.WindowEvents EnvironmentEvents,503,TaskListEvents,EnvDTE,TaskListEvents,EnvDTE.TaskListEvents EnvironmentEvents,505,FindEvents,EnvDTE,FindEvents,EnvDTE.FindEvents EnvironmentEvents,504,OutputWindowEvents,EnvDTE,OutputWindowEvents,EnvDTE.OutputWindowEvents EnvironmentEvents,510,SelectionEvents,EnvDTE,SelectionEvents,EnvDTE.SelectionEvents EnvironmentEvents,511,BuildEvents,EnvDTE,BuildEvents,EnvDTE.BuildEvents EnvironmentEvents,506,SolutionEvents,EnvDTE,SolutionEvents,EnvDTE.SolutionEvents EnvironmentEvents,512,SolutionItemsEvents,EnvDTE,ProjectItemsEvents,EnvDTE.ProjectItemsEvents EnvironmentEvents,513,MiscFilesEvents,EnvDTE,ProjectItemsEvents,EnvDTE.ProjectItemsEvents EnvironmentEvents,514,DebuggerEvents,EnvDTE,DebuggerEvents,EnvDTE.DebuggerEvents EnvironmentEvents,516,ProjectsEvents,EnvDTE,ProjectsEvents,EnvDTE.ProjectsEvents EnvironmentEvents,517,TextDocumentKeyPressEvents,EnvDTE80,TextDocumentKeyPressEvents,EnvDTE80.TextDocumentKeyPressEvents EnvironmentEvents,518,CodeModelEvents,EnvDTE80,CodeModelEvents,EnvDTE80.CodeModelEvents EnvironmentEvents,520,DebuggerProcessEvents,EnvDTE80,DebuggerProcessEvents,EnvDTE80.DebuggerProcessEvents EnvironmentEvents,521,DebuggerExpressionEvaluationEvents,EnvDTE80,DebuggerExpressionEvaluationEvents,EnvDTE80.DebuggerExpressionEvaluationEvents Microsoft C/C++ MSF 7.00 DSCLB8 18QuickRouteMacrosQuickRouteMacros.UploadDevelopmentVersion.A_SetNewVersion QuickRouteMacros.UploadDevelopmentVersion.B_Build QuickRouteMacros.UploadDevelopmentVersion.C_Upload QuickRouteMacros.UploadDevelopmentVersion.A_SetNewVersion QuickRouteMacros.UploadDevelopmentVersion.B_Build QuickRouteMacros.UploadDevelopmentVersion.C_Upload QuickRouteMacros.UploadDevelopmentVersion.A_SetNewVersion QuickRouteMacros.UploadDevelopmentVersion.B_Build QuickRouteMacros.UploadDevelopmentVersion.C_Upload ploadDevelopmentVersion.C_Upload QuickRouteMacros.QuickRouteMacros.UploadLatestBuild QuickRouteMacros.QuickRouteMacros.CreateLatestBuild QuickRouteMacros.QuickRouteMacros.SetNewVersion QuickRouteMacros.QuickRouteMacros.A_SetNewVersion QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickRouteMacros.C_UploadLatestBuild QuickRouteMacros.QuickRouteMacros.B_Build QuickRouteMacros.UploadDevelopmentVersion.A_SetNewVersion QuickRouteMacros.UploadDevelopmentVersion.B_Build QuickRouteMacros.UploadDevelopmentVersion.C_Upload QuickRouteMacros.QuickRouteMacros.UploadLatestBuild QuickRouteMacros.QuickRouteMacros.CreateLatestBuild QuickRouteMacros.QuickRouteMacros.SetNewVersion QuickRouteMacros.QuickRouteMacros.A_SetNewVersion QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickRouteMacros.C_UploadLatestBuild QuickRouteMacros.QuickRouteMacros.B_Build QuickRouteMacros.UploadDevelopmentVersion.A_SetNewVersion QuickRouteMacros.UploadDevelopmentVersion.B_Build QuickRouteMacros.UploadDevelopmentVersion.C_Upload QuickRouteMacros.QuickRouteMacros.UploadLatestBuild QuickRouteMacros.QuickRouteMacros.CreateLatestBuild QuickRouteMacros.QuickRouteMacros.SetNewVersion QuickRouteMacros.QuickRouteMacros.A_SetNewVersion QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickRouteMacros.C_UploadLatestBuild QuickRouteMacros.QuickRouteMacros.B_Build QuickRouteMacros.UploadDevelopmentVersion.A_SetNewVersion QuickRouteMacros.UploadDevelopmentVersion.B_Build QuickRouteMacros.UploadDevelopmentVersion.C_Upload QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickRouteMacros.C_UploadLatestBuild QuickRouteMacros.QuickRouteMacros.A_SetNewVersion QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickR.1^I0lI1 R  18:lB$JEK?O Zf*I`n@dLBԁrAz)u:lB$JEK?O Zf*I`n@dLBԁrBvFCb?Ƿ:lB$JEK?O Zf*I`n@dLBԁrwG|FsQGz:lB$JEK?O Zf*I`n@dLBԁrS|ݴY.[ [ ent.Dispose() End Sub Private Function GetVersion(ByVal projectFolder As String) As Version Dim tr As New StreamReader(projectFolder & "\Properties\AssemblyInfo.cs") Do Until tr.EndOfStream Ds17d14f5c-a337-4978-8281-53493378c1071.vbvsmacros://C%3A/dev/QuickRoute/trunk/QuickRouteMacros/QuickRouteMacros.vsmacros/_Startupvsmacros:\\c%3a\dev\quickroute\trunk\quickroutemacros\quickroutemacros.vsmacros\_startupvsmacros://C%3A/dev/QuickRoute/trunk/QuickRouteMacros/QuickRouteMacros.vsmacros/EnvironmentEventsvsmacros:\\c%3a\dev\quickroute\trunk\quickroutemacros\quickroutemacros.vsmacros\environmenteventsvsmacros://C%3A/dev/QuickRoute/trunk/QuickRouteMacros/QuickRouteMacros.vsmacros/UploadDevelopmentVersionvsmacros:\\c%3a\dev\quickroute\trunk\quickroutemacros\quickroutemacros.vsmacros\uploaddevelopmentversion *+?  tr.Close() End Function Private Sub SetVersion(ByVal version As Version, ByVal projectFolder As String) Dim tr As New StreamReader(projectFolde0ޫ(0vMX+*e(0X*e?(0oX*?e (0fbX* es String = tr.ReadLine() If line.Contains("AssemblyVersion") Or line.Contains("AssemblyFileVersion") Then Option Strict Off Option Explicit Off Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics Imports System.Net Imports System.IO Imports System.Text Public Module UploadDevelopmentVersion Public Sub A_SetNewVersion() Dim newVersionString As String = InputBox("Enter version", "", GetVersion("C:\dev\QuickRoute\trunk\QuickRoute.UI").ToString) SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\GPSDeviceReaders\GarminUSBReader") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\GPSDeviceReaders\PolarRS800CXReader") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\Publishers\DOMAPublisher") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.BusinessEntities") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.Common") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.Controls") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.PropertyControls") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.Resources") SetVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.UI") SetSetupVersion(New Version(newVersionString), "C:\dev\QuickRoute\trunk\QuickRoute.Setup\QuickRoute.Setup.vdproj") End Sub Public Sub B_Build() DTE.ExecuteCommand("Build.BatchBuild") End Sub Public Sub C_Upload() UploadFileUsingFTP("ftp://www.matstroeng.se/quickroute/download/QuickRoute_" + GetVersion("C:\dev\QuickRoute\trunk\QuickRoute.UI").ToString + "_Setup.msi", "C:\dev\QuickRoute\trunk\QuickRoute.Setup\Release\QuickRoute.Setup.msi", "matstroeng.se", "uzeaeciS") SetDevelopmentVersionOnWebpage(GetVersion("C:\dev\QuickRoute\trunk\QuickRoute.UI")) MsgBox("Succeeded!") End Sub Private Sub UploadFileUsingFTP(ByVal CompleteFTPPath As String, ByVal CompleteLocalPath As String, Optional ByVal UName As String = "", Optional ByVal PWD As String = "") Try Dim client As New WebClient client.Credentials = New NetworkCredential(UName, PWD) client.UploadFile(CompleteFTPPath, CompleteLocalPath) client.Dispose() Catch ex As Exception MsgBox(ex.ToString) End Try Return End Sub Private Sub SetDevelopmentVersionOnWebpage(ByVal version As Version) Dim client As New WebClient client.DownloadString("http://www.matstroeng.se/quickroute/download/set_development_version.php?version=" + version.Major.ToString() + "." + version.Minor.ToString() + "." + version.Build.ToString()) client.Dispose() End Sub Private Function GetVersion(ByVal projectFolder As String) As Version Dim tr As New StreamReader(projectFolder & "\Properties\AssemblyInfo.cs") Do Until tr.EndOfStream Dim line As String = tr.ReadLine() If line.Contains("AssemblyVersion") Then Dim versionString As String = line.Substring(line.IndexOf("""") + 1, line.LastIndexOf("""") - line.IndexOf("""") - 1) GetVersion = New Version(versionString) Exit Do End If Loop tr.Close() End Function Private Sub SetVersion(ByVal version As Version, ByVal projectFolder As String) Dim tr As New StreamReader(projectFolder & "\Properties\AssemblyInfo.cs") Dim sb As New StringBuilder() Do Until tr.EndOfStream Dim line As String = tr.ReadLine() If line.Contains("AssemblyVersion") Or line.Contains("AssemblyFileVersion") Then Dim pos1 As Integer = line.IndexOf("""") + 1 Dim pos2 As Integer = line.LastIndexOf("""") - 1 sb.Append(line.Substring(0, pos1)) sb.Append(version.ToString()) sb.Append(line.Substring(pos2 + 1)) sb.AppendLine() Else sb.AppendLine(line) End If Loop tr.Close() Dim tw As New StreamWriter(projectFolder & "\Properties\AssemblyInfo.cs") tw.Write(sb.ToString()) tw.Close() End Sub Private Sub SetSetupVersion(ByVal version As Version, ByVal projectFileName As String) Dim tr As New StreamReader(projectFileName) Dim sb As New StringBuilder() Do Until tr.EndOfStream Dim line As String = tr.ReadLine() If line.Contains("ProductVersion") Then Dim pos1 As Integer = line.IndexOf(":") + 1 Dim pos2 As Integer = line.LastIndexOf("""") - 1 sb.Append(line.Substring(0, pos1)) sb.Append(version.Major.ToString() + "." + version.Minor.ToString() + IIf(version.Build = -1, "", "." + version.Build.ToString())) sb.Append(line.Substring(pos2 + 1)) sb.AppendLine() ElseIf line.Contains("ProductCode") Then Dim pos1 As Integer = line.IndexOf(":") + 1 Dim pos2 As Integer = line.LastIndexOf("""") - 1 sb.Append(line.Substring(0, pos1)) sb.Append("{" + Guid.NewGuid().ToString().ToUpper() + "}") sb.Append(line.Substring(pos2 + 1)) sb.AppendLine() Else sb.AppendLine(line) End If Loop tr.Close() Dim tw As New StreamWriter(projectFileName) tw.Write(sb.ToString()) tw.Close() End Sub End Module ronmentEvents #Region "Automatically generated code, do not modify" 'Automatically generatedOption Strict Off Option Explicit Off Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics Public Module EnvironmentEvents #Region "Automatically generated code, do not modify" 'Automatically generated code, do not modify 'Event Sources Begin <System.ContextStaticAttribute()> Public WithEvents DTEEvents As EnvDTE.DTEEvents <System.ContextStaticAttribute()> Public WithEvents DocumentEvents As EnvDTE.DocumentEvents <System.ContextStaticAttribute()> Public WithEvents WindowEvents As EnvDTE.WindowEvents <System.ContextStaticAttribute()> Public WithEvents TaskListEvents As EnvDTE.TaskListEvents <System.ContextStaticAttribute()> Public WithEvents FindEvents As EnvDTE.FindEvents <System.ContextStaticAttribute()> Public WithEvents OutputWindowEvents As EnvDTE.OutputWindowEvents <System.ContextStaticAttribute()> Public WithEvents SelectionEvents As EnvDTE.SelectionEvents <System.ContextStaticAttribute()> Public WithEvents BuildEvents As EnvDTE.BuildEvents <System.ContextStaticAttribute()> Public WithEvents SolutionEvents As EnvDTE.SolutionEvents <System.ContextStaticAttribute()> Public WithEvents SolutionItemsEvents As EnvDTE.ProjectItemsEvents <System.ContextStaticAttribute()> Public Wit.*tEqualst$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects Equals6*| GetHashCodex $(100663298$@100663298*$QuickRouteMacros._ApplicationObjects GetHashCode2*8 GetType4$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects GetType2* ToString< $(100663298$@100663298*$QuickRouteMacros._ApplicationObjects ToString:* Create__Instance__$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects&  Create__Instance__>* Dispose__Instance__$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects"  VB$t_generic$S0.*4 .ctor0 $(100663298$@100663298*$QuickRouteMacros._ApplicationObjects<t0 K( < 0 ?* <0 H. < 0  ;' l`      _,#$ <0 G# < 0  80Ld|$<Ppos2 As Integer = line.LastIndexOf("""") - 1 .* .ctor "$#QuickRouteMacros.My.MyProject.$#QuickRouteMacros.UploadDevelopmentVersion&$#QuickRouteMacros.EnvironmentEvents$#QuickRouteMacros._Utility*$#QuickRouteMacros._ApplicationObjects$*QuickRouteMacros"$#QuickRouteMacros.My.MyProject2$@PX:xml=http://www.w3.org/XML/1998/namespace*$@PX:xmlns=http://www.w3.org/2000/xmlns/$@P:Microsoft.VisualBasic&$#Microsoft.VisualBasic.Constants&$#MicouteMacros.C_UploadLatestBuild QuickRouteMacros.QuickRouteMacros.A_SetNewVersion QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickRouteMacros.C_UploadLatestBuild QuickRouteMacros.QuickRouteMacros.A_SetNewVersion QuickRouteMacros.QuickRouteMacros.B_CreateLatestBuild QuickRouteMacros.QuickRouteMacros.C_UploadLatestBuild ros.QuickRouteMacros.UploadLatestBuild QuickRouteMacros.QuickRouteMacros.UploadLatestBuild QuickRouteMacros.QuickRouteMacros.UploadLatestBuild QuickRouteMacros.Quicrosoft.VisualBasic.Conversion&$#Microsoft.VisualBasic.DateAndTime&$#Microsoft.VisualBasic.FileSystem&$#Microsoft.VisualBasic.Financial"$#Microsoft.VisualBasic.Globals&$#Microsoft.VisualBasic.Information&$#Microsoft.VisualBasic.Interaction"$#Microsoft.VisualBasic.VBMath"$#Microsoft.VisualBasic.Strings $@PX:=$QuickRouteMacros.My*$QuickRouteMacros._ApplicationObjects< 0klm   hEvents MiscFilesEvents As EnvDTE.ProjectItemsEvents <System.ContextStaticAttribute()> Public WithEvents DebuggerEvents As EnvDTE.DebuggerEvents <System.ContextStaticAttribute()> Public WithEvents ProjectsEvents As EnvDTE.ProjectsEvents <System.ContextStaticAttribute()> Public WithEvents TextDocumentKeyPressEvents As EnvDTE80.TextDocumentKeyPressEvents <System.ContextStaticAttribute()> Public WithEvents CodeModelEvents As EnvDTE80.CodeModelEvents <System.ContextStaticAttribute()> Public WithEventsh| sb.Append("{" + Guid.NewGuid().ToString().ToUpper() + "}") sb.Append(line.Substring(pos2 + 1)) sb.AppendLine() Else sb.AppendLine(line) End If Loop :*`BzA_SetNewVersion\z$(100663298.$#QuickRouteMacros.UploadDevelopmentVersion&$#QuickRouteMacros.EnvironmentEvents$#QuickRouteMacros._Utility*$#QuickRouteMacros._ApplicationObjects$@F:System.Text$@F:System.IO$@F:System.Net$@F:System.Diagnostics$@F:EnvDTE90$@F:EnvDTE80$@F:EnvDTE$@F:System$*QuickRouteMacros"$#QuickRouteMacros.My.MyProject2$@PX:xml=http://www.w3.org/XML/1998/namespace*$@PX:xmlns=http://www.w3.org/2000/xmlns/$@P:Microsoft.VisualBasic&$#Microsoft.VisualBasic.Constants&$#Microsoft.VisualBasic.Conversion&$#Microsoft.VisualBasic.DateAndTime&$#Microsoft.VisualBasic.FileSystem&$#Microsoft.VisualBasic.Financial"$#Microsoft.VisualBasic.Globals&$#Microsoft.VisualBasic.Information&$#Microsoft.VisualBasic.Interaction"$#Microsoft.VisualBasic.VBMath"$#Microsoft.VisualBasic.Strings $@PX:=$QuickRouteMacros*$QuickRouteMacros._ApplicationObjects& "newVersionString2*CHB_BuilddH$(100663298$@100663362*$QuickRouteMacros._ApplicationObjects2*SD`C_UploadS`$(100663298$@100663362*$QuickRouteMacros._ApplicationObjects:*KEUploadFileUsingFTPK$(100663298$@100663362*$QuickRouteMacros._ApplicationObjectsx$ #client #exF*}FSetDevelopmentVersionOnWebpage}$(100663298$@100663362*$QuickRouteMacros._ApplicationObjects $client $VB$t_i4$S0 $VB$t_i4$S1 $VB$t_i4$S2" $VB$t_array$S02*X rG{GetVersion T r{$(100663298$@100663362*$QuickRouteMacros._ApplicationObjects %GetVersion %tr@P L %lineL 7" %versionString2* HSetVersion\ $(100663298$@100663362*$QuickRouteMacros._ApplicationObjects &sb &tr &tw   &line< S*  &pos1 &pos2:* I SetSetupVersion   $(100663298$@100663362*$QuickRouteMacros._ApplicationObjects 'sb 'tr 'tw 'VB$t_i4$S0  'VB$t_i4$S1  'VB$t_i4$S2"  'VB$t_struct$S0  U  'line<  'pos1 'pos2<  u  'pos1 'pos2z "3DUfw! n q f i _ a i b [ { <H0 / T`SH !4"D#Q$  \  K &()*+,&/-0.E/F1I2 ( C B     T}H456t7{8I $  {r ;<>?(@UA\B_C`Da=iEpFJ R/ 58   HIJL$M=NLO[PkQxRSTUVWKXYZ[]T R &/ ]=A3.4 $   R  t h_`acd*e9fHgXhijklmnoDpUq^r_sgthuibtv{wxy{[ 4 &/ 4<A34 5<A3K4 $   4  @,Ph8 WebServicesH *<~ 2-.7<40yz{ > :*/get_GetInstance/$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects  GetInstance  Value.*.ctor|$(100663298$@100663298*$QuickRouteMacros._ApplicationObjectsx/lKL MNO(P)Q-R5-&2!H<^_c` ' Pp~h)7K7 V7 ` n      B1t 1-1:1G!Z"c +7:sIXXIgvI P %\ %h ` g ( .** .cctor* $(100663298$@100663298*$QuickRouteMacros._ApplicationObjects6*`4get_Computer\4$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects Computer:*(Dget_Applicationd$D$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects Application2*Tget_User,T$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects User:*dget_WebServicesd$(100663298$@100663298*$QuickRouteMacros._ApplicationObjects WebServicesH *<~ 2-.7<40yz{ > <D0 9 <T0 : <d0C (8Ph Y Y i i q%AAqI y%Y%Y y Q$ Q; %<qz %9 ;  %%; a<q!h<q2* vSetSite v$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects2*@ SetTitle< $(100663298$@100663313*$QuickRouteMacros._ApplicationObjects2*SetHandleD$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects>*PushVBHostIntoLibrary$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects:*X,GetParentWindowT,$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects"  GetParentWindow6*  GetWindowTitle\ $(100663298$@100663313*$QuickRouteMacros._ApplicationObjects" GetWindowTitle2* get_Handle$ $(100663298$@100663313*$QuickRouteMacros._ApplicationObjects Handle6*StartupHelper|$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects6*$FShutdownHelper F$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects2*!<Startup(!<$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects TempObj2*]Shutdown|]$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects<v 0,-.7 < 00121 <04561$ H<8: ;=$G l,`BCD$E%F)G*HA0  < 0JK L,< 0RS T 0$WX F&YZ [\]%^0_7`BaIbTc[dfemfxghijklmnopqrstuvwxy!z,{3|>}D~6(;-9+;-7)?1<.8*;-@2<.;-;-G9<.B4OA D<!Y8#&245PS_ab}14@BC^amop!#$?BNPQlo{}~M#) R#. P#, R#. N#* V#2 S#/ O#+ R#. W#3 S#/ R#. R#. ^#: S#/ Y#5 f#B ) T]H " +X0Hl(D\|EditorBrowsableAttributeEditorBrowsableStateSystem.CodeDom.CompilerGeneratedCodeAttributeSystem.DiagnosticsDebuggerNonUserCodeAttributeDebuggerHiddenAttributeStandardModuleAttributeHideModuleNameAttributeSystem.ComponentModel.DesignHelpKeywordAttributeSystem.Runtime.CompilerServicesRuntimeH6*)StopDebugging)$(100663298.$#QuickRouteMacros.UploadDevelopmentVersion&$#QuickRouteMacros.EnvironmentEvents$#QuickRouteMacros._Utility*$#QuickRouteMacros._ApplicationObjects$*QuickRouteMacros"$#QuickRouteMacros.My.MyProject2$@PX:xml=http://www.w3.org/XML/1998/namespace*$@PX:xmlns=http://www.w3.org/2000/xmlns/$@P:Microsoft.VisualBasic&$#Microsoft.VisualBasic.Constants&$#Microsoft.VisualBasic.Conversion&$#Microsoft.VisualBasic.DateAndTime&$#Microsoft.VisualBasic.FileSystem&$#Microsoft.VisualBasic.Financial"$#Microsoft.VisualBasic.Globals&$#Microsoft.VisualBasic.Information&$#Microsoft.VisualBasic.Interaction"$#Microsoft.VisualBasic.VBMath"$#Microsoft.VisualBasic.Strings $@PX:=$QuickRouteMacros*$QuickRouteMacros._ApplicationObjects:*D7ReleaseIfComObject@7$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects6*"TReleaseObjectH"T$(100663298$@100663313*$QuickRouteMacros._ApplicationObjects  e<)0 0 T7H    -B>  lT"` '  +(LdentsDTEEnter versionKC:\dev\QuickRoute\trunk\QuickRoute.UIqC:\dev\QuickRoute\trunk\GPSDeviceReaders\GarminUSBReaderwC:\dev\QuickRoute\trunk\GPSDeviceReaders\PolarRS800CXReaderaC:\dev\QuickRoute\trunk\Publishers\DOMAPubl /P$}MEi=)i}Iiq1%}9QQ]eQmM-9Q)1eD@ @ @@@ @   $0<HT`lx ,8DP\ht(4@LXdp| $0<HT`l     0 (%Equals)06000008%GetHashCode)06000009%GetType)0600000a%<ToString)<0600000b"%Create__Instance__)0600000c"%Dispose__Instance__)0600000d%.ctor)0600000e%.ctor)06000002%A_SetNewVersion)06000042%dB_Build)d06000043% /111555999===AAAEEEIIIMMMQQQUUUYYY]]]aaaeeeiiimmm159=AEIMQUY]aeimqqq y  MyTemplate8.0.0.0  My.WebServicesC_Upload)06000044"%UploadFileUsingFTP)06000045.%SetDevelopmentVersionOnWebpage)06000046% GetVersion) 06000047%\ SetVersion)\ 06000048% SetSetupVersion) 06000049%get_GetInstance)0600000f%.ctor)06000010%.cctor)06000003%get_Computer)06000004%dget_Application)d06000005%,get_User),06000006%get_WebServices)06000007%SetSite)06000015%SetTitle)06000016%DSetHandle)D06000017"%PushVBHostIntoLibrary)06000018%GetParentWindow)06000019%\GetWindowTitle)\0600001a%$get_Handle)$0600001b%StartupHelper)0600001c%ShutdownHelper)0600001d%(Startup)(0600001e%Shutdown)0600001f%StopDebugging)06000011"%ReleaseIfComObject)06000012%HReleaseObject)H06000013c1071.vbvsmacros://C%3A/dev/QuickRoute/trunk/QuickRouteMacros/QuickRouteMacros.vsmacros/UploadDevelopmew 1' ,( T|QuickRouteMacros.My.MyComputer3F7B2E0EpHQuickRouteMacros.My.MyProjectB51C7FD3 8QuickRouteMacros.My.MyProject.MyWebServicesD52AEE95QuickRouteMacros.My.MyProject.ThreadSafeObjectProvider`1802EEBAE$|QuickRouteMacros._UtilityE5B40740 QuickRouteMacros._StartupB1A6E272$ XQuickRouteMacros.UploadDevelopmentVersion2C1B54A4-.  *4DTdt   /)7T"v  ,  F<!]zH`SK}{r  [ )17d14f5c-a337-4978-8281-53493378c1071.vbvsmacros://C%3A/dev/QuickRoute/trunk/QuickRouteMacros/QuickRouteMacros.vsmacros/UploadDevelopmentVersionvsmacros://C%3A/dev/QuickRoute/trunk/QuickRouteMacros/QuickRouteMacros.vsmacros/_Startup .1^I0lI1 R /LinkInfo/names/src/headerblock/src/files/17d14f5c-a337-4978-8281-53493378c1071.vb/src/files/vsmacros:\\c%3a\dev\quickroute\trunk\quickroutemacros\quickroutemacros.vsmacros\_startup/src/files/vsmacros:\\c%3a\dev\quickroute\trunk\quickroutemacros\quickroutemacros.vsmacros\environmentevents/src/files/vsmacros:\\c%3a\dev\quickroute\trunk\quickroutemacros\quickroutemacros.vsmacros\uploaddevelopmentversion' V " 8XXXX( @xLD,?@:;<=>   !"#$%&'()*+,-./0123465789AMZ@ !L!This program cannot be run in DOS mode. $PEL^I! @_ `@ @_O`  H.text? @ `.reloc `P@B_H//&( **( *s s s s *0~o +*0~o +*0~o +*0~o +*0( ( +*0 ( +*0( +*0 ( +*0 - (+ ++ +*0 **( *0/ { o -(+ { o  +*V( s } *:( o *v( (! , ( (" &*0" ( (%(# ($ * ,&( **}**}*B| () *Vs* } (+ *0, | ~, //o , ++ +*0 { +*0 {  +**0F( ((!("((#($((%(&(('(((()(*((+(,((-(.((/(0((1(2((3(4((5(6((7(8((9(:((;(<((=(>((?(@((A~(*0!o{rpr%po- ( ,t (! {rpr9po- ( ,t (# {rprWpo- ( ,t(% {rprqpo- ( ,t(' {rprpo- ( ,t() {rprpo- ( ,t(+ {rprpo- ( ,t(- {rprpo- ( ,t(/ {rprpo- ( ,t(1 {rpr!po- ( ,t(3 {rprIpo- ( ,t(5 {rpripo- ( ,t(7 {rprpo- ( ,t(9 {rprpo- ( ,t(; {rprpo- ( ,t(= {rprpo- ( ,t(? {rpr'po- ( ,t(A {rmpo. t*v{(}o*0 ~  +*" *0 ~  +*" *0 ~  +*" *0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 ~ +*"*0 !~ +*"*0"ruprprp(Go0 (1 s2 rp(Hs2 rQp(Hs2 rp(Hs2 r+p(Hs2 rp(Hs2 rp(Hs2 r?p(Hs2 rp(Hs2 rp(Hs2 rp(I*b~rprpo3 *0Srprp(Go0 rp(4 r,prprp(Erp(G(Frp(5 &*0K#s6 s7 o8 o9 &o: %(# o; (5 &($ +* &(,0}$s6 2rpo< (= rpo> (= rpo? (= (@ oA &o: *0r%rp(B sC +MoD rpoE ,7rpoF rpoG rpoF oH s2 + oI ,oJ *0&rp(B sC sK 8oD rpoE r poE `,U rpoF  rpoG  oH oL &o0 oL & oM oL &oN &+  oO &oI 9uoJ rp(B sP oQ oR oS *0'sC sK 8VoD r* poE 9 rH poF  rpoG  oH oL &o<   (= rp(B o>   (= (B o? rprpo? (= (B (T (U oV & oM oL &oN &8 rL poE ,w rH poF  rpoG  oH oL &rd p(W   =o oX rh p(4 oL & oM oL &oN &+  oO &oI 9oJ sP oQ oR oS *BSJB v2.0.50727l#~D#Stringsl #USD)#GUIDT)#BlobW 3C I#\u'(   I+YR /R  >[Fvh PIIIIXIII+IdII:II9 R o  o    *  B w Z   R R  U 6 z i  6  R  R RM n  R     o +R^TTR  1@ ` ~h)7K7 V7 ` n      B1t 1-1:1G!Z"c +7:sIXXIgvI P %\ %h ` g ( 5 B!Fc$!F#h( TC)M ) R,)\D) aP)\h) &at)Yk) lp)z) )) )Z) n** (** @* Q L* (+ D+ +  , ,+ -D % -O %"!ZZ!!!    # 6 # 6 # _ ! % %%,%;%% %$%,%4%<%$w,w4w<w%%!%) c#h) <q9 %A%DL" L, L%I%Q Q Y Y i i q%AAqI y%Y%Y y Q$ Q; %<qz %9 ;  %%; a<q!h<q1h;h E %kqt}%%<q(/5 <q%Y %%%qu #Y).i.`.r.@3Y@2CAC2I`#YcAc2i3Y{YAY3Y 23Y+Y23Y{Y23Y{Y 3Y 2##Y@3Y@2C{Y`2`3Ya{a+Yc{Y3Y+Y{)3Y{=+Y3Y2{\+Y3Y{7+Y23Y{O+Y!{G!+YA+YA{a{pa+Y#Y{+Y+Y{+Y{g+Y{+Y{{!+Y!{"A{A+Ya+Ya{#Y #Y@#Y`#Y#Y#Y#Y#Y#Y #Y@#Y`#Y#Y#Y#Y#Y#Y #Y@#Y`#Y#Y#Y#Y#Y#Y #Y@#Y`#Y#Y#Y#Y#Y#Y #Yz B  IOTY^BPX+dx  :9     !"#$%'&)(*+-,./103!2!4#5#7%6%9'8':);)<+=+?->-@/A/ 2M 4O 6Quu^elsls   F h IR XXX//zmscorlibMicrosoft.VisualBasicMyApplicationQuickRouteMacros.MyMyComputerMyProjectMyWebServicesThreadSafeObjectProvider`1_UtilityQuickRouteMacros_ApplicationObjects_StartupEnvironmentEventsUploadDevelopmentVersionMicrosoft.VisualBasic.ApplicationServicesApplicationBase.ctorMicrosoft.VisualBasic.DevicesComputerSystemObject.cctorget_Computerm_ComputerObjectProviderget_Applicationm_AppObjectProviderUserget_Userm_UserObjectProviderget_WebServicesm_MyWebServicesObjectProviderApplicationWebServicesEqualsoGetHashCodeTypeGetTypeToStringCreate__Instance__TinstanceDispose__Instance__get_GetInstanceMicrosoft.VisualBasic.MyServices.InternalContextValue`1m_ContextGetInstanceStopDebuggingReleaseIfComObjectReleaseObjectEnvDTE80DTE2DTEMicrosoft.VisualBasic.CompilerServicesIVbHostSystem.Windows.FormsIWin32WindowMicrosoft.VsaIVsaSitem_pSitem_strTitlem_HandleHostServicesm_VBHostSetSiteSetTitlestrSetHandleintPushVBHostIntoLibraryGetParentWindowGetWindowTitleget_HandleStartupHelperShutdownHelperStartupShutdownHandleEnvDTEDTEEvents_DTEEventsget_DTEEventsset_DTEEventsWithEventsValueDocumentEvents_DocumentEventsget_DocumentEventsset_DocumentEventsWindowEvents_WindowEventsget_WindowEventsset_WindowEventsTaskListEvents_TaskListEventsget_TaskListEventsset_TaskListEventsFindEvents_FindEventsget_FindEventsset_FindEventsOutputWindowEvents_OutputWindowEventsget_OutputWindowEventsset_OutputWindowEventsSelectionEvents_SelectionEventsget_SelectionEventsset_SelectionEventsBuildEvents_BuildEventsget_BuildEventsset_BuildEventsSolutionEvents_SolutionEventsget_SolutionEventsset_SolutionEventsProjectItemsEvents_SolutionItemsEventsget_SolutionItemsEventsset_SolutionItemsEvents_MiscFilesEventsget_MiscFilesEventsset_MiscFilesEventsDebuggerEvents_DebuggerEventsget_DebuggerEventsset_DebuggerEventsProjectsEvents_ProjectsEventsget_ProjectsEventsset_ProjectsEventsTextDocumentKeyPressEvents_TextDocumentKeyPressEventsget_TextDocumentKeyPressEventsset_TextDocumentKeyPressEventsCodeModelEvents_CodeModelEventsget_CodeModelEventsset_CodeModelEventsDebuggerProcessEvents_DebuggerProcessEventsget_DebuggerProcessEventsset_DebuggerProcessEventsDebuggerExpressionEvaluationEvents_DebuggerExpressionEvaluationEventsget_DebuggerExpressionEvaluationEventsset_DebuggerExpressionEvaluationEventsSolutionItemsEventsMiscFilesEventsA_SetNewVersionB_BuildC_UploadUploadFileUsingFTPCompleteFTPPathCompleteLocalPathUNamePWDVersionSetDevelopmentVersionOnWebpageversionGetVersionprojectFolderSetVersionSetSetupVersionprojectFileNameSystem.ComponentModelEditorBrowsableAttributeEditorBrowsableStateSystem.CodeDom.CompilerGeneratedCodeAttributeSystem.DiagnosticsDebuggerNonUserCodeAttributeDebuggerHiddenAttributeStandardModuleAttributeHideModuleNameAttributeSystem.ComponentModel.DesignHelpKeywordAttributeSystem.Runtime.CompilerServicesRuntimeHelpersGetObjectValueRuntimeTypeHandleGetTypeFromHandleActivatorCreateInstanceMyGroupCollectionAttributeget_Valueset_ValueSystem.Runtime.InteropServicesComVisibleAttributeSystem.ThreadingThreadget_CurrentThreadAbortMarshalIsComObjectReleaseComObjectExceptionProjectDataSetProjectErrorClearProjectErrorContextStaticAttributeIntPtrset_VBHostZeroGetEventSourceInstanceGetGlobalInstanceAccessedThroughPropertyAttributeInteractionInputBoxExecuteCommandStringConcatMsgBoxResultMsgBoxStyleMsgBoxSystem.NetWebClientNetworkCredentialICredentialsset_CredentialsUploadFileComponentDisposeget_MajorInt32get_Minorget_BuildDownloadStringSystem.IOStreamReaderReadLineContainsIndexOfLastIndexOfSubstringget_EndOfStreamCloseSystem.TextStringBuilderStreamWriterAppendAppendLineWriteGuidIIfOperatorsAddObjectNewGuidToUpperDebuggableAttributeDebuggingModesCompilationRelaxationsAttributeRuntimeCompatibilityAttributeVsaModuleVBAssembly#EnvironmentEventsDTEEventsDocumentEventsWindowEventsTaskListEventsFindEvents%OutputWindowEventsSelectionEventsBuildEventsSolutionEvents'SolutionItemsEventsMiscFilesEventsDebuggerEventsProjectsEvents5TextDocumentKeyPressEventsCodeModelEvents+DebuggerProcessEventsEDebuggerExpressionEvaluationEventsDTEEnter versionKC:\dev\QuickRoute\trunk\QuickRoute.UIqC:\dev\QuickRoute\trunk\GPSDeviceReaders\GarminUSBReaderwC:\dev\QuickRoute\trunk\GPSDeviceReaders\PolarRS800CXReaderaC:\dev\QuickRoute\trunk\Publishers\DOMAPublishergC:\dev\QuickRoute\trunk\QuickRoute.BusinessEntitiesSC:\dev\QuickRoute\trunk\QuickRoute.CommonWC:\dev\QuickRoute\trunk\QuickRoute.ControlsgC:\dev\QuickRoute\trunk\QuickRoute.PropertyControlsYC:\dev\QuickRoute\trunk\QuickRoute.ResourcesC:\dev\QuickRoute\trunk\QuickRoute.Setup\QuickRoute.Setup.vdproj!Build.BatchBuildoftp://www.matstroeng.se/quickroute/download/QuickRoute__Setup.msiC:\dev\QuickRoute\trunk\QuickRoute.Setup\Release\QuickRoute.Setup.msimatstroeng.seuzeaeciSSucceeded!http://www.matstroeng.se/quickroute/download/set_development_version.php?version=.7\Properties\AssemblyInfo.csAssemblyVersion"'AssemblyFileVersionProductVersion:ProductCode{}ۉ*Mquz\V4?_ :        0 ()- )   % (111555999===AAAEEEIIIMMMQQQUUUYYY]]]aaaeeeiiimmm159=AEIMQUY]aeimqqq y  MyTemplate8.0.0.0  My.WebServices My.Computer My.UserMy.Application  a4System.Web.Services.Protocols.SoapHttpClientProtocolCreate__Instance__Dispose__Instance__   !%  159=AEIMQUY]aeimCodeModelEvents FindEventsSelectionEventsTaskListEventsSolutionEventsMiscFilesEventsDebuggerProcessEvents DTEEventsSolutionItemsEvents BuildEvents'"DebuggerExpressionEvaluationEventsProjectsEventsDocumentEvents WindowEventsOutputWindowEventsDebuggerEventsTextDocumentKeyPressEvents          q      TWrapNonExceptionThrows__ __CorDllMainmscoree.dll% @P ?<VisualStudioProject> <VisualBasic Version = "9.0.21022.8" MVID = "{806AE344-D049-40A1-8751-52E71BFCC4B3}" ProjectType = "Local" ProductVersion = "9.0.21022" SchemaVersion = "2.0" > <Build> <Settings DefaultNamespace = "QuickRouteMacros" OptionCompare = "0" OptionExplicit = "1" OptionStrict = "0" ProjectName = "QuickRouteMacros" ReferencePath = "" TreatWarningsAsErrors = "false" WarningLevel = "1" RootNamespace = "QuickRouteMacros" > <Config Name = "Debug" DefineConstants = "" DefineDebug = "true" DefineTrace = "true" DebugSymbols = "true" RemoveIntegerChecks = "false" /> </Settings> <References/> <Imports> <Import Namespace = "Microsoft.VisualBasic" /> </Imports> </Build> <Files> <Include> <VSAAppGlobal VSAAppGlobalName = "DTE" ItemType = "1" VSAAppGlobalType = "EnvDTE80.DTE2" /> <File RelPath = "EnvironmentEvents" BuildAction = "Compile" ItemType = "2" VSAESItemType = "2" > <VSAEventSource VSAEventSourceName = "DTEEvents" VSAEventSourceType = "EnvDTE.DTEEvents" /> <VSAEventSource VSAEventSourceName = "DocumentEvents" VSAEventSourceType = "EnvDTE.DocumentEvents" /> <VSAEventSource VSAEventSourceName = "WindowEvents" VSAEventSourceType = "EnvDTE.WindowEvents" /> <VSAEventSource VSAEventSourceName = "TaskListEvents" VSAEventSourceType = "EnvDTE.TaskListEvents" /> <VSAEventSource VSAEventSourceName = "FindEvents" VSAEventSourceType = "EnvDTE.FindEvents" /> <VSAEventSource VSAEventSourceName = "OutputWindowEvents" VSAEventSourceType = "EnvDTE.OutputWindowEvents" /> <VSAEventSource VSAEventSourceName = "SelectionEvents" VSAEventSourceType = "EnvDTE.SelectionEvents" /> <VSAEventSource VSAEventSourceName = "BuildEvents" VSAEventSourceType = "EnvDTE.BuildEvents" /> <VSAEventSource VSAEventSourceName = "SolutionEvents" VSAEventSourceType = "EnvDTE.SolutionEvents" /> <VSAEventSource VSAEventSourceName = "SolutionItemsEvents" VSAEventSourceType = "EnvDTE.ProjectItemsEvents" /> <VSAEventSource VSAEventSourceName = "MiscFilesEvents" VSAEventSourceType = "EnvDTE.ProjectItemsEvents" /> <VSAEventSource VSAEventSourceName = "DebuggerEvents" VSAEventSourceType = "EnvDTE.DebuggerEvents" /> <VSAEventSource VSAEventSourceName = "ProjectsEvents" VSAEventSourceType = "EnvDTE.ProjectsEvents" /> <VSAEventSource VSAEventSourceName = "TextDocumentKeyPressEvents" VSAEventSourceType = "EnvDTE80.TextDocumentKeyPressEvents" /> <VSAEventSource VSAEventSourceName = "CodeModelEvents" VSAEventSourceType = "EnvDTE80.CodeModelEvents" /> <VSAEventSource VSAEventSourceName = "DebuggerProcessEvents" VSAEventSourceType = "EnvDTE80.DebuggerProcessEvents" /> <VSAEventSource VSAEventSourceName = "DebuggerExpressionEvaluationEvents" VSAEventSourceType = "EnvDTE80.DebuggerExpressionEvaluationEvents" /> </File> <File RelPath = "UploadDevelopmentVersion" BuildAction = "Compile" ItemType = "2" /> </Include> </Files> <Folders> <Include/> </Folders> </VisualBasic> </VisualStudioProject> DebuggerProcessEvents As EnvDTE80.DebuggerProcessEvents <System.ContextStaticAttribute()> Public WithEvents DebuggerExpressionEvaluationEvents As EnvDTE80.DebuggerExpressionEvaluationEvents 'Event Sources End 'End of automatically generated code #End Region End Module quickroute-linux-upstream-2.5/Tools/000077500000000000000000000000001446222606700176575ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/000077500000000000000000000000001446222606700245235ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool.sln000066400000000000000000000016771446222606700321200ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 10.00 # Visual Studio 2008 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceTranslationTool", "ResourceTranslationTool\ResourceTranslationTool.csproj", "{A4B6BD07-0A23-4140-83F4-656DD443BAC5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {A4B6BD07-0A23-4140-83F4-656DD443BAC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A4B6BD07-0A23-4140-83F4-656DD443BAC5}.Debug|Any CPU.Build.0 = Debug|Any CPU {A4B6BD07-0A23-4140-83F4-656DD443BAC5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A4B6BD07-0A23-4140-83F4-656DD443BAC5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool/000077500000000000000000000000001446222606700313675ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool/App.config000066400000000000000000000003111446222606700332710ustar00rootroot00000000000000 quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool/Classes.cs000066400000000000000000000156361446222606700333260ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Xml; using System.Xml.Linq; using System.Xml.XPath; namespace QuickRoute.Tools.ResourceTranslationTool { public class Solution { public string Path { get; private set; } public Solution(string path) { Path = path; } public IEnumerable GetLocalizedResourceFiles(string language) { return Directory.GetFiles(Path, "*.resx", SearchOption.AllDirectories) .Where(LocalizedResourceFile.IsBaseResourceFile) .Select(o => new LocalizedResourceFile(LocalizedResourceFile.GetLocalizedFileNameFromBaseFileName(o, language))); } public IEnumerable GetLanguages() { var settingsFile = System.IO.Path.Combine(Path, "QuickRoute.UI\\app.config"); var doc = new XmlDocument(); doc.Load(settingsFile); var node = doc.SelectSingleNode("/configuration/appSettings/add[@key='cultures']"); return node.Attributes["value"].Value.Split(';').Except(new[] { "en" }); } } public class Project { public string ProjectFileName { get; private set; } public Project(string fileName) { ProjectFileName = fileName; } public void AddResourceFile(string fileName) { var relativeFileName = fileName.Replace(Path.GetDirectoryName(ProjectFileName), ""); if (relativeFileName.StartsWith("\\")) relativeFileName = relativeFileName.Substring(1); var document = XDocument.Load(ProjectFileName); XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; var resourceFiles = GetResourceFiles(ProjectFileName); if (!resourceFiles.Contains(fileName)) { var resourceFileItemGroup = new XElement(ns + "ItemGroup"); var embeddedResource = new XElement(ns + "EmbeddedResource"); embeddedResource.SetAttributeValue("Include", relativeFileName); resourceFileItemGroup.Add(embeddedResource); document.Descendants(ns + "ItemGroup").Last().AddAfterSelf(resourceFileItemGroup); document.Save(ProjectFileName); } } private static List GetResourceFiles(string projectFileName) { var document = XDocument.Load(projectFileName); XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; var resourceFiles = from node in document.Descendants(ns + "ItemGroup").Descendants(ns + "EmbeddedResource") where node.Attribute("Include") != null && node.Attribute("Include").Value.EndsWith(".resx") select Path.Combine(Path.GetDirectoryName(projectFileName), node.Attribute("Include").Value); return resourceFiles.ToList(); } public static string GetProjectFile(string fileName) { var path = Path.GetDirectoryName(fileName); if(string.IsNullOrEmpty(path)) return null; var projectFiles = Directory.GetFiles(path, "*.csproj"); if (projectFiles.Length > 0) { return projectFiles[0]; } return GetProjectFile(path); } } public class LocalizedResourceFile { public LocalizedResourceFile(string fileName) { FileName = fileName; } public string FileName { get; private set; } public string Language { get { var fileNameWithoutDirectory = Path.GetFileName(FileName); var atoms = fileNameWithoutDirectory.Split('.'); if (atoms.Length < 3) return null; return atoms[atoms.Length - 2]; } } public string BaseFileName { get { return FileName.Replace("." + Language + ".", "."); } } public static bool IsLocalizedResourceFile(string path) { var fileNameWithoutDirectory = Path.GetFileName(path); var atoms = fileNameWithoutDirectory.Split('.'); if (atoms.Length < 3) return false; return atoms[atoms.Length - 1].ToLowerInvariant() == "resx"; } public static bool IsBaseResourceFile(string path) { var fileNameWithoutDirectory = Path.GetFileName(path); var atoms = fileNameWithoutDirectory.Split('.'); if (atoms.Length != 2) return false; return atoms[atoms.Length - 1].ToLowerInvariant() == "resx"; } public static string GetLocalizedFileNameFromBaseFileName(string path, string language) { if(!IsBaseResourceFile(path)) return null; return path.Replace(".resx", string.Format(".{0}.resx", language)); } private IEnumerable GetBaseResourcesWithComments() { var set = new HashSet(); if (File.Exists(BaseFileName)) { var doc = new XmlDocument(); doc.Load(BaseFileName); var nodes = doc.SelectNodes("/root/data/comment"); if (nodes != null) { foreach (XmlNode node in nodes) { set.Add(new Resource(node.ParentNode.Attributes["name"].Value.Trim(), node.ParentNode.SelectSingleNode("value").InnerText.Trim(), node.InnerText.Trim())); } } } return set; } private IEnumerable GetResources() { var set = new HashSet(); if (File.Exists(FileName)) { var doc = new XmlDocument(); doc.Load(FileName); var nodes = doc.SelectNodes("/root/data"); if (nodes != null) { foreach (XmlNode node in nodes) { set.Add(new Resource(node.Attributes["name"].Value.Trim(), node.SelectSingleNode("value").InnerText.Trim(), null)); } } } return set; } public IEnumerable GetUntranslatedResourceKeys() { var result = new HashSet(); var baseResourcesWithComments = GetBaseResourcesWithComments(); var localizedResources = GetResources(); foreach(var baseResource in baseResourcesWithComments) { if(!localizedResources.Any(o=>o.Key==baseResource.Key)) { result.Add(baseResource); } } return result; } } public class Resource { public Resource(string key, string value, string comment) { Key = key; Value = value; Comment = comment; } public string Key { get; set; } public string Value { get; set; } public string Comment { get; set; } } public static class SvnManager { public static void AddFile(string path) { var svnPath = ConfigurationManager.AppSettings["SubversionPath"]; Process.Start(svnPath, string.Format(@"add ""{0}""", path)); } } } quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool/Program.cs000066400000000000000000000073321446222606700333320ustar00rootroot00000000000000using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using Ionic.Zip; namespace QuickRoute.Tools.ResourceTranslationTool { class Program { static void Main(string[] args) { var action = args[0]; if (action == "-upload") Upload(args); if (action == "-download") Download(args); } private static void Upload(string[] args) { var solutionPath = args[1]; var outputPath = args[2]; var solution = new Solution(solutionPath); var languages = solution.GetLanguages(); foreach (var language in languages) { var sb = new StringBuilder(); sb.AppendLine("Created at " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "."); sb.AppendLine(); foreach (var file in solution.GetLocalizedResourceFiles(language)) { var fileNameWithoutSolutionPath = file.FileName.Replace(solutionPath, ""); var untranslatedResources = file.GetUntranslatedResourceKeys(); if (untranslatedResources.Count() > 0) { Console.WriteLine("Processing {0} ({1} untranslated resources)...", fileNameWithoutSolutionPath, untranslatedResources.Count()); sb.AppendLine("========================================================================="); sb.AppendLine(fileNameWithoutSolutionPath); sb.AppendLine("========================================================================="); untranslatedResources.ToList().ForEach(o => sb.AppendLine(fileNameWithoutSolutionPath + " > " + o.Key)); sb.AppendLine("========================================================================="); sb.AppendLine(""); } } File.WriteAllText(Path.Combine(outputPath, language + ".txt"), sb.ToString()); } } private static void Download(string[] args) { var solutionPath = args[1]; var serverUrl = args[2]; // get new files var client = new WebClient(); var newFiles = client.DownloadString(serverUrl + "?action=getNewUploads"); if (!string.IsNullOrEmpty(newFiles)) { foreach (var data in newFiles.Split('\n')) { var atoms = data.Split(';'); var id = atoms[0]; var language = atoms[1]; var extension = "." + language + ".resx"; var zipFileData = client.DownloadData(serverUrl + "?action=downloadZipFile&id=" + id); var zipFile = ZipFile.Read(zipFileData); if (!zipFile.Any(o => o.IsDirectory && o.FileName.StartsWith("QuickRoute."))) { Console.WriteLine("Error: Invalid file structure! QuickRoute.UI and its sibling directories must be at the root level."); } else { foreach (var file in zipFile) { // only extract files with the .[language].resx extension if (file.FileName.EndsWith(extension)) { Console.WriteLine("Extracting {0}...", file.FileName); file.Extract(solutionPath, true); // make sure to add the file to the subversion repository var fullFileName = Path.Combine(solutionPath, file.FileName.Replace("/", "\\")); SvnManager.AddFile(fullFileName); // make sure to add the file to the project file var projectFile = Project.GetProjectFile(fullFileName); var project = new Project(projectFile); project.AddResourceFile(fullFileName); } } } } } } } } quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool/Properties/000077500000000000000000000000001446222606700335235ustar00rootroot00000000000000AssemblyInfo.cs000066400000000000000000000026621446222606700363740ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool/Propertiesusing System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("ResourceTranslationTool")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ResourceTranslationTool")] [assembly: AssemblyCopyright("Copyright © 2009")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] // The following GUID is for the ID of the typelib if this project is exposed to COM [assembly: Guid("edee5a24-f706-4440-aaff-b524d7bc9afa")] // Version information for an assembly consists of the following four values: // // Major Version // Minor Version // Build Number // Revision // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] ResourceTranslationTool.csproj000066400000000000000000000056161446222606700374060ustar00rootroot00000000000000quickroute-linux-upstream-2.5/Tools/ResourceTranslationTool/ResourceTranslationTool Debug AnyCPU 9.0.30729 2.0 {A4B6BD07-0A23-4140-83F4-656DD443BAC5} Exe Properties QuickRoute.Tools.ResourceTranslationTool ResourceTranslationTool v3.5 512 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 False ..\..\..\ExternalReferences\Ionic.Zip.dll 3.5 3.5 3.5 quickroute-linux-upstream-2.5/scripts/000077500000000000000000000000001446222606700202465ustar00rootroot00000000000000quickroute-linux-upstream-2.5/scripts/README000066400000000000000000000277431446222606700211430ustar00rootroot00000000000000*** -*- mode: outline; coding: utf-8-dos -*- ** KNOWN BUGS IN LINUX VERSION * crash while loading an existing .qrt file, that was saved under windows * clicking "New" twice crashes * right panel hides image and route (in left panel), e.g. RoutePropertyName_RouteToStraightLine field is shown in full * full screen mode crashes * can't open route in google earth **TODO * fix all known issues * fix "New" dialog to not hide any buttons * fix version info in exported jpeg * fix writing EXIF info, currently just silently not written **DONE * binary packages available here: https://code.google.com/p/antpm/downloads/list * build from command line * create initial, deployable, working .deb package * fixup .deb package with proper dependencies * read FIT files spit out by antpm * git-dch -- Generate the Debian changelog from git commit messages * add a debian system menu entry/icon * exception while loading .qrt file saved by the same version under linux * crash while loading an existing .qrt file, that was saved under mono * can't export into jpeg / png / kmz, see http://www.codeproject.com/Articles/4956/The-ExifWorks-class **PACKAGING * change version in QuickRoute.UI/Properties/AssemblyInfo.cs * change version in QuickRoute.Resources/Properties/AssemblyInfo.cs * change version in QuickRoute.BusinessEntities/Properties/AssemblyInfo.cs * change version in ./sripts/make-changelog * run ./sripts/make-changelog * commit and tag * change version in ./sripts/make-tarball * run ./sripts/make-tarball * run ./scripts/deb ** home https://gitorious.org/quickroute-git * exception while loading older .qrt file from windows Could not find type 'System.Collections.Generic.ObjectEqualityComparer`1[[QuickRoute.BusinessEntities.WaypointAttribute, QuickRoute.BusinessEntities, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null]]'. ---------------------------------------------------------------------------------------------------- at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadType (System.IO.BinaryReader reader, TypeTag code, Boolean throwOnError) [0x000ad] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:918 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadTypeMetadata (System.IO.BinaryReader reader, Boolean isRuntimeObject, Boolean hasTypeInfo) [0x0007b] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:635 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectInstance (System.IO.BinaryReader reader, Boolean isRuntimeObject, Boolean hasTypeInfo, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info) [0x0000a] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:269 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObject (BinaryElement element, System.IO.BinaryReader reader, System.Int64& objectId, System.Object& value, System.Runtime.Serialization.SerializationInfo& info) [0x0008a] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:191 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (System.IO.BinaryReader reader) [0x00027] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:154 at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, System.IO.BinaryReader reader, Boolean readHeaders, System.Object& result, System.Runtime.Remoting.Messaging.Header[]& headers) [0x00041] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:110 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:165 at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:122 at QuickRoute.BusinessEntities.Document.OpenFromQrt (System.IO.Stream stream, System.String fileNameForDocument) [0x00006] in /home/tade/dev/quickroute-git/QuickRoute.BusinessEntities/Document.cs:640 * exception while clicking "New" twice An unexpected error occured. ---------------------------------------------------------------------------------------------------- at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000e6] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Reflection/MonoMethod.cs:234 at System.Reflection.MonoProperty.SetValue (System.Object obj, System.Object value, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] index, System.Globalization.CultureInfo culture) [0x00064] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Reflection/MonoProperty.cs:353 at System.Reflection.PropertyInfo.SetValue (System.Object obj, System.Object value, System.Object[] index) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Reflection/PropertyInfo.cs:93 at System.ComponentModel.ComponentResourceManager.ApplyResources (System.Object value, System.String objectName, System.Globalization.CultureInfo culture) [0x00125] in /build/buildd/mono-2.10.8.1/mcs/class/System/System.ComponentModel/ComponentResourceManager.cs:91 at System.ComponentModel.ComponentResourceManager.ApplyResources (System.Object value, System.String objectName) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/System/System.ComponentModel/ComponentResourceManager.cs:54 at QuickRoute.UI.Forms.CreateNewForm.InitializeComponent () [0x00237] in /home/tade/dev/quickroute-git/QuickRoute.UI/Forms/CreateNewForm.Designer.cs:89 at QuickRoute.UI.Forms.CreateNewForm..ctor (System.String initialRouteFileName) [0x0003a] in /home/tade/dev/quickroute-git/QuickRoute.UI/Forms/CreateNewForm.cs:44 at (wrapper remoting-invoke-with-check) QuickRoute.UI.Forms.CreateNewForm:.ctor (string) at QuickRoute.UI.Main.NewDocument (System.String routeFileName) [0x00018] in /home/tade/dev/quickroute-git/QuickRoute.UI/Main.cs:211 at QuickRoute.UI.Main.menuFileNew_Click (System.Object sender, System.EventArgs e) [0x00000] in /home/tade/dev/quickroute-git/QuickRoute.UI/Main.cs:2685 at System.Windows.Forms.ToolStripItem.OnClick (System.EventArgs e) [0x0001c] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs:1002 at System.Windows.Forms.ToolStripMenuItem.OnClick (System.EventArgs e) [0x000a5] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripMenuItem.cs:267 at System.Windows.Forms.ToolStripMenuItem.HandleClick (Int32 mouse_clicks, System.EventArgs e) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripMenuItem.cs:539 at System.Windows.Forms.ToolStripItem.FireEvent (System.EventArgs e, ToolStripItemEventType met) [0x00042] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripItem.cs:1779 at (wrapper remoting-invoke-with-check) System.Windows.Forms.ToolStripItem:FireEvent (System.EventArgs,System.Windows.Forms.ToolStripItemEventType) at System.Windows.Forms.ToolStrip.OnMouseUp (System.Windows.Forms.MouseEventArgs mea) [0x00047] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs:965 at System.Windows.Forms.ToolStripDropDown.OnMouseUp (System.Windows.Forms.MouseEventArgs mea) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripDropDown.cs:636 at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) [0x0007e] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs:5278 at System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x0017b] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs:5019 at System.Windows.Forms.ScrollableControl.WndProc (System.Windows.Forms.Message& m) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ScrollableControl.cs:813 at System.Windows.Forms.ToolStrip.WndProc (System.Windows.Forms.Message& m) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStrip.cs:1221 at System.Windows.Forms.ToolStripDropDown.WndProc (System.Windows.Forms.Message& m) [0x0001a] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ToolStripDropDown.cs:728 at System.Windows.Forms.Control+ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs:228 at System.Windows.Forms.Control+ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Control.cs:209 at System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd, Msg msg, IntPtr wParam, IntPtr lParam) [0x00085] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/NativeWindow.cs:242 at System.Windows.Forms.TableLayoutPanel.set_LayoutSettings (System.Windows.Forms.TableLayoutSettings value) [0x00047] in /build/buildd/mono-2.10.8.1/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TableLayoutPanel.cs:142 at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000d0] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Reflection/MonoMethod.cs:226 * exception while opening Google Earth Google Earth does not seem to be installed on this computer. Download it from earth.google.com. ---------------------------------------------------------------------------------------------------- at (wrapper managed-to-native) System.__ComObject:CoCreateInstance (System.Guid,intptr,uint,System.Guid,intptr&) at System.__ComObject.Initialize (System.Type t) [0x0005f] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System/__ComObject.cs:102 at (wrapper remoting-invoke-with-check) System.__ComObject:Initialize (System.Type) at Mono.Interop.ComInteropProxy.CreateProxy (System.Type t) [0x00007] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/Mono.Interop/ComInteropProxy.cs:111 at System.Runtime.Remoting.RemotingServices.CreateClientProxyForComInterop (System.Type type) [0x00000] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs:574 at System.Runtime.Remoting.Activation.ActivationServices.CreateProxyForType (System.Type type) [0x00047] in /build/buildd/mono-2.10.8.1/mcs/class/corlib/System.Runtime.Remoting.Activation/ActivationServices.cs:217 at (wrapper managed-to-native) object:__icall_wrapper_mono_object_new_specific (intptr) at QuickRoute.UI.Classes.GoogleEarthUtil.OpenInGoogleEarth (System.IO.Stream stream) [0x0004c] in /home/tade/dev/quickroute-git/QuickRoute.UI/Classes/GoogleEarthUtil.cs:26 at QuickRoute.UI.Main.OpenInGoogleEarth (QuickRoute.BusinessEntities.Document document, Nullable`1 colorCodingAttribute, Nullable`1 secondaryColorCodingAttribute, QuickRoute.BusinessEntities.Exporters.ColorRangeProperties colorRangeProperties) [0x0009a] in /home/tade/dev/quickroute-git/QuickRoute.UI/Main.cs:858 quickroute-linux-upstream-2.5/scripts/deb000077500000000000000000000010731446222606700207270ustar00rootroot00000000000000#!/bin/bash # create tag for .deb package version # git tag -a -m "debian/2.7-3" "debian/2.7-3" HEAD # generate log file from git history # git-dch --git-author --debian-branch=mono1 -v -N 2.7-3 --since=debian/2.7-2 ROOT=`mktemp -d --tmp=.` eval ROOT=$ROOT echo $ROOT echo ./scripts/make-tarball echo -e "\nTarball OK\n" mv quickroute-gps*.tar.gz $ROOT/ ( cd $ROOT; mkdir build; cd build tar -xzf ../quickroute-gps*.tar.gz echo -e "\nStarting to build...\n" debuild -eDISPLAY -us -uc && echo -e "\nBuild OK\ndeb package in '${ROOT}' \n"; ) quickroute-linux-upstream-2.5/scripts/find-assemply-versions000077500000000000000000000002371446222606700246170ustar00rootroot00000000000000#!/bin/sh grep -rn AssemblyInformationalVersion . | grep -v Binary grep -rn AssemblyVersion . | grep -v Binary grep -rn AssemblyFileVersion . | grep -v Binaryquickroute-linux-upstream-2.5/scripts/get-from-svn000077500000000000000000000004221446222606700225160ustar00rootroot00000000000000#!/bin/bash # add the below lines in .git/config if "git svn fetch" fails # [svn-remote "svn"] # url = http://quickroute-gps.googlecode.com/svn/trunk # fetch = :refs/remotes/git-svn # http://quickroute-gps.googlecode.com/svn/trunk/ git checkout master git svn fetch quickroute-linux-upstream-2.5/scripts/make-changelog000077500000000000000000000012221446222606700230330ustar00rootroot00000000000000#!/bin/sh #NUMBERS=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*'` #echo $NUMBERS A=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*' | head -1` echo $A B=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*' | head -2 | tail -1` echo $B C=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*' | tail -1` echo $C VER=$A.$B DEB_VER_MINOR=$C git-dch --git-author --debian-branch=mono1 -vaN $VER-$DEB_VER_MINOR --distribution=experimental --debian-tag=experimental/%\(version\)s quickroute-linux-upstream-2.5/scripts/make-tarball000077500000000000000000000015761446222606700225410ustar00rootroot00000000000000#!/bin/bash A=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*' | head -1` echo $A B=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*' | head -2 | tail -1` echo $B C=`grep AssemblyInformationalVersion QuickRoute.UI/Properties/AssemblyInfo.cs | grep -o '[0-9]*' | tail -1` echo $C VER=$A.$B #VER=2.4 GIT_VER=`git log | head -1 | awk '{print $2 }'` OUTNAME=quickroute-gps_${VER}.orig.tar FILES=`find . -type f -name \* -print | grep -v .git` TMP_LIST=`mktemp` #echo $FILES #echo "TMP_LIST=${TMP_LIST}" #echo ${FILES} > ${TMP_LIST} #echo ${FILES} > dist-file-list #find . -type f -name \* -print | grep -v .git > scripts/dist-file-list rm -fv ${OUTNAME}.gz ${OUTNAME}.xz #tar -czvf ${OUTNAME}.gz -T scripts/origsrc-file-list tar --xz -cf ${OUTNAME}.xz -T scripts/origsrc-file-list echo ${OUTNAME} quickroute-linux-upstream-2.5/scripts/origsrc-file-list000066400000000000000000001323411446222606700235330ustar00rootroot00000000000000./Graphics/ZoomOut.png ./Graphics/MoveMap.png ./Graphics/headerLogo1.png ./Graphics/QuickRoute icon.psd ./Graphics/FullScreen.png ./Graphics/QuickRoute_48x48.ico ./Graphics/QuickRoute logotype.psd ./Graphics/Setup banner bitmap.png ./Graphics/Cursors.psd ./Graphics/RouteLineMask.png ./Graphics/QuickRoute_document_16x16.png ./Graphics/LineWidth.png ./Graphics/headerLogo.png ./Graphics/SecondaryColorCodingAttribute2.png ./Graphics/About form background.psd ./Graphics/QuickRoute_document_48x48.ico ./Graphics/Donate.png ./Graphics/Error.png ./Graphics/AutoAdjustColorRangeInterval.png ./Graphics/QuickRoute_document_64x64.png ./Graphics/AlphaAdjustment.png ./Graphics/LineWidth3.png ./Graphics/SmoothingInterval.png ./Graphics/LineWidth.psd ./Graphics/QuickRoute_document_64x64.ico ./Graphics/QuickRoute.ico ./Graphics/RotateCounterclockwise.png ./Graphics/pointer.png ./Graphics/ColorRangeInterval2.png ./Graphics/QuickRoute_document_32x32.png ./Graphics/LineWidth2.png ./Graphics/AboutBoxLogo.png ./Graphics/BottomPanelVisible.png ./Graphics/QuickRoute_16x16.ico ./Graphics/QuickRoute_document_16x16.ico ./Graphics/QuickRoute_64x64.ico ./Graphics/QuickRoute_64x64.xpm ./Graphics/SecondaryColorCodingAttribute.png ./Graphics/Setup banner bitmap.psd ./Graphics/AdjustRoute.png ./Graphics/RightPanelVisible.png ./Graphics/CircleTimeRadius.png ./Graphics/QuickRoute_document_32x32.ico ./Graphics/Cut.png ./Graphics/Website header.psd ./Graphics/contentBackground.png ./Graphics/CircleTimeRadius.psd ./Graphics/zoomIn.png ./Graphics/PublishMap.png ./Graphics/ColorRangeInterval.png ./Graphics/QuickRouteDocument.ico ./Graphics/QuickRoute_document_48x48.png ./Graphics/toolbar icons.psd ./Graphics/Setup banner bitmap.bmp ./Graphics/QuickRoute_32x32.ico ./Graphics/QuickRoute_32x32.xpm ./Graphics/RotateClockwise.png ./Graphics/Lap.png ./Graphics/GoogleEarthIcon.png ./Graphics/QuickRoute course logotype.psd ./Tools/ResourceTranslationTool/ResourceTranslationTool/Classes.cs ./Tools/ResourceTranslationTool/ResourceTranslationTool/Program.cs ./Tools/ResourceTranslationTool/ResourceTranslationTool/App.config ./Tools/ResourceTranslationTool/ResourceTranslationTool/Properties/AssemblyInfo.cs ./Tools/ResourceTranslationTool/ResourceTranslationTool/ResourceTranslationTool.csproj ./Tools/ResourceTranslationTool/ResourceTranslationTool.sln ./QuickRoute.sln ./GPSDeviceReaders/SerialPortDeviceReader/SerialPortCommand.cs ./GPSDeviceReaders/SerialPortDeviceReader/SerialPortDeviceReader.csproj ./GPSDeviceReaders/SerialPortDeviceReader/SerialPortUtil.cs ./GPSDeviceReaders/SerialPortDeviceReader/Properties/AssemblyInfo.cs ./GPSDeviceReaders/GlobalSatGH615MReader/app.config ./GPSDeviceReaders/GlobalSatGH615MReader/IGH615M.cs ./GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MTrackSelector.Designer.cs ./GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MReader.csproj ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.it.resx ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.resx ./GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MTrackSelector.cs ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.cs ./GPSDeviceReaders/GlobalSatGH615MReader/GH615M.cs ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.fr.resx ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.sv.resx ./GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MReader.cs ./GPSDeviceReaders/GlobalSatGH615MReader/Settings.cs ./GPSDeviceReaders/GlobalSatGH615MReader/GH615MSerialPortCommand.cs ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.no.resx ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.Designer.cs ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.de.resx ./GPSDeviceReaders/GlobalSatGH615MReader/Properties/Settings.settings ./GPSDeviceReaders/GlobalSatGH615MReader/Properties/Resources.resx ./GPSDeviceReaders/GlobalSatGH615MReader/Properties/AssemblyInfo.cs ./GPSDeviceReaders/GlobalSatGH615MReader/Properties/Resources.Designer.cs ./GPSDeviceReaders/GlobalSatGH615MReader/Properties/Settings.Designer.cs ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.ru.resx ./GPSDeviceReaders/GlobalSatGH615MReader/ProgressIndicator.da.resx ./GPSDeviceReaders/GlobalSatGH615MReader/GlobalSatGH615MTrackSelector.resx ./GPSDeviceReaders/PolarRS800CXReader.sln ./GPSDeviceReaders/JJConnectRegistratorSEReader/JJConnectRegistratorSETrackSelector.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/JJConnectRegistratorSETrackSelector.Designer.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/app.config ./GPSDeviceReaders/JJConnectRegistratorSEReader/RegSE.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.it.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/JJConnectRegistratorSETrackSelector.da.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.fr.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.sv.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/JJConnectRegistratorSEReader.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.no.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.Designer.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.de.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/JJConnectRegistratorSETrackSelector.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/IRegSE.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/RegSESerialPortCommand.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/Properties/Settings.settings ./GPSDeviceReaders/JJConnectRegistratorSEReader/Properties/AssemblyInfo.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/Properties/Settings.Designer.cs ./GPSDeviceReaders/JJConnectRegistratorSEReader/JJConnectRegistratorSEReader.csproj ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.ru.resx ./GPSDeviceReaders/JJConnectRegistratorSEReader/ProgressIndicator.da.resx ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.de.resx ./GPSDeviceReaders/GarminUSBReader/Strings.fr.resx ./GPSDeviceReaders/GarminUSBReader/ReadType.cs ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.it.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.fi.resx ./GPSDeviceReaders/GarminUSBReader/Strings.sv.resx ./GPSDeviceReaders/GarminUSBReader/Strings.Designer.cs ./GPSDeviceReaders/GarminUSBReader/D_Virtual_partner.cs ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.no.resx ./GPSDeviceReaders/GarminUSBReader/D1002_Workout_Type.cs ./GPSDeviceReaders/GarminUSBReader/APIs.cs ./GPSDeviceReaders/GarminUSBReader/GarminUSBReader.sln ./GPSDeviceReaders/GarminUSBReader/Multisport.cs ./GPSDeviceReaders/GarminUSBReader/D1010_Run_Type.cs ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.it.resx ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.sv.resx ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.fr.resx ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.resx ./GPSDeviceReaders/GarminUSBReader/Strings.lt.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.resx ./GPSDeviceReaders/GarminUSBReader/GarminUSBPacket.cs ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.Designer.cs ./GPSDeviceReaders/GarminUSBReader/GarminUSBReader.cs ./GPSDeviceReaders/GarminUSBReader/GarminSession.cs ./GPSDeviceReaders/GarminUSBReader/Strings.de.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.cs ./GPSDeviceReaders/GarminUSBReader/ReadingNowException.cs ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.ru.resx ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.lt.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.lt.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.fr.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.sv.resx ./GPSDeviceReaders/GarminUSBReader/GarminUSBReader.csproj ./GPSDeviceReaders/GarminUSBReader/Program_Type.cs ./GPSDeviceReaders/GarminUSBReader/Strings.no.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.no.resx ./GPSDeviceReaders/GarminUSBReader/Strings.it.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.Designer.cs ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.fi.resx ./GPSDeviceReaders/GarminUSBReader/Sport_Type.cs ./GPSDeviceReaders/GarminUSBReader/D1001_Lap_Type.cs ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.de.resx ./GPSDeviceReaders/GarminUSBReader/GarminUtil.cs ./GPSDeviceReaders/GarminUSBReader/Strings.resx ./GPSDeviceReaders/GarminUSBReader/Strings.ru.resx ./GPSDeviceReaders/GarminUSBReader/D303_Trk_Point_Type.cs ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.da.resx ./GPSDeviceReaders/GarminUSBReader/Properties/Settings.settings ./GPSDeviceReaders/GarminUSBReader/Properties/Resources.resx ./GPSDeviceReaders/GarminUSBReader/Properties/AssemblyInfo.cs ./GPSDeviceReaders/GarminUSBReader/Properties/Resources.Designer.cs ./GPSDeviceReaders/GarminUSBReader/Properties/Settings.Designer.cs ./GPSDeviceReaders/GarminUSBReader/Strings.fi.resx ./GPSDeviceReaders/GarminUSBReader/D_Position_Type.cs ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.ru.resx ./GPSDeviceReaders/GarminUSBReader/ProgressIndicator.da.resx ./GPSDeviceReaders/GarminUSBReader/Strings.da.resx ./GPSDeviceReaders/GarminUSBReader/GarminSessionSelector.cs ./QuickRoute.Setup/QuickRoute.Setup.vdproj ./QuickRoute.Resources/Strings.fr.resx ./QuickRoute.Resources/Strings.sv.resx ./QuickRoute.Resources/Strings.Designer.cs ./QuickRoute.Resources/Images.Designer.cs ./QuickRoute.Resources/Strings.lt.resx ./QuickRoute.Resources/Images.resx ./QuickRoute.Resources/Strings.de.resx ./QuickRoute.Resources/QuickRoute.Resources.csproj ./QuickRoute.Resources/Strings.sv.Designer.cs ./QuickRoute.Resources/Strings.no.resx ./QuickRoute.Resources/Strings.it.resx ./QuickRoute.Resources/Strings.resx ./QuickRoute.Resources/Strings.ru.resx ./QuickRoute.Resources/Resources/HeaderLogo.png ./QuickRoute.Resources/Properties/AssemblyInfo.cs ./QuickRoute.Resources/Strings.fi.resx ./QuickRoute.Resources/Strings.da.resx ./QuickRoute.PropertyControls/GradientEditorControl.resx ./QuickRoute.PropertyControls/GradientViewer.cs ./QuickRoute.PropertyControls/GradientViewer.Designer.cs ./QuickRoute.PropertyControls/GradientEditorControl.Designer.cs ./QuickRoute.PropertyControls/QuickRoute.PropertyControls.csproj ./QuickRoute.PropertyControls/GradientEditorControl.cs ./QuickRoute.PropertyControls/Properties/AssemblyInfo.cs ./QuickRoute.UI/Graphics/QuickRoute icon.psd ./QuickRoute.UI/Graphics/Website header.psd ./QuickRoute.UI/Graphics/About form background 2.png ./QuickRoute.UI/Graphics/About form background.png ./QuickRoute.UI/app.config ./QuickRoute.UI/Web References/QuickRouteServer/index.wsdl ./QuickRoute.UI/Web References/QuickRouteServer/Reference.map ./QuickRoute.UI/Web References/QuickRouteServer/Reference.cs ./QuickRoute.UI/Web References/QuickRouteServer/GetCurrentVersionResponse.datasource ./QuickRoute.UI/Main.no.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.fi.resx ./QuickRoute.UI/Forms/CreateNewForm.fi.resx ./QuickRoute.UI/Forms/SelectUICultureForm.fr.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.Designer.cs ./QuickRoute.UI/Forms/TimeDialog.da.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.sv.resx ./QuickRoute.UI/Forms/ExceptionMessageBox.cs ./QuickRoute.UI/Forms/CreateNewForm.Designer.cs ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.no.resx ./QuickRoute.UI/Forms/AddSessionsForm.it.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.sv.resx ./QuickRoute.UI/Forms/AddSessionsForm.ru.resx ./QuickRoute.UI/Forms/ColorChooser.sv.resx ./QuickRoute.UI/Forms/ColorChooser.fi.resx ./QuickRoute.UI/Forms/ExceptionMessageBox.da.resx ./QuickRoute.UI/Forms/CreateNewForm.fr.resx ./QuickRoute.UI/Forms/NewVersionDialog.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.de.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.Designer.cs ./QuickRoute.UI/Forms/AboutBox.ru.resx ./QuickRoute.UI/Forms/AboutBox.lt.resx ./QuickRoute.UI/Forms/PublishMapForm.fi.resx ./QuickRoute.UI/Forms/PublishMapForm.sv.resx ./QuickRoute.UI/Forms/AboutBox.no.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.no.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.resx ./QuickRoute.UI/Forms/AboutBox.da.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.de.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.de.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.no.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.it.resx ./QuickRoute.UI/Forms/ExceptionMessageBox.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.sv.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.ru.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.resx ./QuickRoute.UI/Forms/CreateNewForm.da.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.Designer.cs ./QuickRoute.UI/Forms/ColorChooser.lt.resx ./QuickRoute.UI/Forms/PublishMapForm.Designer.cs ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.it.resx ./QuickRoute.UI/Forms/SelectUICultureForm.da.resx ./QuickRoute.UI/Forms/SelectUICultureForm.resx ./QuickRoute.UI/Forms/AddSessionsForm.no.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.cs ./QuickRoute.UI/Forms/ImageManipulator.sv.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.no.resx ./QuickRoute.UI/Forms/GradientEditor.lt.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.cs ./QuickRoute.UI/Forms/AddSessionsForm.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.lt.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.Designer.cs ./QuickRoute.UI/Forms/GradientEditor.fi.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.cs ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.fr.resx ./QuickRoute.UI/Forms/ColorChooser.cs ./QuickRoute.UI/Forms/SelectUICultureForm.sv.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.fr.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.sv.resx ./QuickRoute.UI/Forms/CreateNewForm.de.resx ./QuickRoute.UI/Forms/AboutBox.Designer.cs ./QuickRoute.UI/Forms/AddSessionsForm.sv.resx ./QuickRoute.UI/Forms/AboutBox.it.resx ./QuickRoute.UI/Forms/TimeDialog.no.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.da.resx ./QuickRoute.UI/Forms/PublishMapForm.de.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.sv.resx ./QuickRoute.UI/Forms/ExceptionMessageBox.sv.resx ./QuickRoute.UI/Forms/NewVersionDialog.lt.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.it.resx ./QuickRoute.UI/Forms/SelectUICultureForm.cs ./QuickRoute.UI/Forms/SelectUICultureForm.lt.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.fr.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.ru.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.da.resx ./QuickRoute.UI/Forms/AboutBox.sv.resx ./QuickRoute.UI/Forms/SelectUICultureForm.Designer.cs ./QuickRoute.UI/Forms/TimeDialog.ru.resx ./QuickRoute.UI/Forms/GradientEditor.de.resx ./QuickRoute.UI/Forms/AboutBox.de.resx ./QuickRoute.UI/Forms/CreateNewForm.resx ./QuickRoute.UI/Forms/SelectUICultureForm.fi.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.da.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.cs ./QuickRoute.UI/Forms/PublishMapForm.it.resx ./QuickRoute.UI/Forms/CreateNewForm.no.resx ./QuickRoute.UI/Forms/ColorChooser.fr.resx ./QuickRoute.UI/Forms/TimeDialog.sv.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.de.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.no.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.de.resx ./QuickRoute.UI/Forms/NewVersionDialog.da.resx ./QuickRoute.UI/Forms/CreateNewForm.it.resx ./QuickRoute.UI/Forms/PublishMapForm.lt.resx ./QuickRoute.UI/Forms/GradientEditor.Designer.cs ./QuickRoute.UI/Forms/SelectUICultureForm.it.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.sv.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.it.resx ./QuickRoute.UI/Forms/SelectUICultureForm.de.resx ./QuickRoute.UI/Forms/SelectUICultureForm.no.resx ./QuickRoute.UI/Forms/ImageManipulator.Designer.cs ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.de.resx ./QuickRoute.UI/Forms/GradientEditor.fr.resx ./QuickRoute.UI/Forms/PublishMapForm.no.resx ./QuickRoute.UI/Forms/ColorChooser.de.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.cs ./QuickRoute.UI/Forms/ApplicationSettingsEditor.Designer.cs ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.lt.resx ./QuickRoute.UI/Forms/AboutBox.fi.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.da.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.da.resx ./QuickRoute.UI/Forms/GradientEditor.ru.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.fi.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.no.resx ./QuickRoute.UI/Forms/ImageManipulator.resx ./QuickRoute.UI/Forms/ColorChooser.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.Designer.cs ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.de.resx ./QuickRoute.UI/Forms/AddSessionsForm.de.resx ./QuickRoute.UI/Forms/SplashScreen.Designer.cs ./QuickRoute.UI/Forms/SelectUICultureForm.ru.resx ./QuickRoute.UI/Forms/NewVersionDialog.it.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.Designer.cs ./QuickRoute.UI/Forms/ColorChooser.da.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.lt.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.fi.resx ./QuickRoute.UI/Forms/ApplicationSettingsEditor.resx ./QuickRoute.UI/Forms/PublishMapForm.da.resx ./QuickRoute.UI/Forms/AddSessionsForm.da.resx ./QuickRoute.UI/Forms/GradientEditor.it.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.fr.resx ./QuickRoute.UI/Forms/ImageManipulator.da.resx ./QuickRoute.UI/Forms/TimeDialog.Designer.cs ./QuickRoute.UI/Forms/ExceptionMessageBox.it.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.fr.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.it.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.lt.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.fr.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.cs ./QuickRoute.UI/Forms/TimeDialog.cs ./QuickRoute.UI/Forms/TimeDialog.fr.resx ./QuickRoute.UI/Forms/NewVersionDialog.fr.resx ./QuickRoute.UI/Forms/AboutBox.fr.resx ./QuickRoute.UI/Forms/PublishMapForm.fr.resx ./QuickRoute.UI/Forms/AddSessionsForm.fr.resx ./QuickRoute.UI/Forms/ColorChooser.ru.resx ./QuickRoute.UI/Forms/NewVersionDialog.de.resx ./QuickRoute.UI/Forms/ColorChooser.no.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.ru.resx ./QuickRoute.UI/Forms/GradientEditor.sv.resx ./QuickRoute.UI/Forms/TimeDialog.lt.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.cs ./QuickRoute.UI/Forms/ExportRouteDataDialog.da.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.lt.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.Designer.cs ./QuickRoute.UI/Forms/AddSessionsForm.fi.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.fi.resx ./QuickRoute.UI/Forms/NewVersionDialog.sv.resx ./QuickRoute.UI/Forms/GradientEditor.cs ./QuickRoute.UI/Forms/TimeDialog.fi.resx ./QuickRoute.UI/Forms/GradientEditor.da.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.resx ./QuickRoute.UI/Forms/TimeDialog.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.fr.resx ./QuickRoute.UI/Forms/NewVersionDialog.cs ./QuickRoute.UI/Forms/AddSessionsForm.cs ./QuickRoute.UI/Forms/SplashScreen.cs ./QuickRoute.UI/Forms/CreateNewForm.sv.resx ./QuickRoute.UI/Forms/AddSessionsForm.lt.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.ru.resx ./QuickRoute.UI/Forms/ColorChooser.it.resx ./QuickRoute.UI/Forms/PublishMapForm.ru.resx ./QuickRoute.UI/Forms/CreateNewForm.ru.resx ./QuickRoute.UI/Forms/PublishMapForm.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.ru.resx ./QuickRoute.UI/Forms/SplashScreen.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.sv.resx ./QuickRoute.UI/Forms/PublishMapForm.cs ./QuickRoute.UI/Forms/AboutBox.resx ./QuickRoute.UI/Forms/NewVersionDialog.ru.resx ./QuickRoute.UI/Forms/KmlPropertySelectorDialog.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.lt.resx ./QuickRoute.UI/Forms/CreateNewForm.cs ./QuickRoute.UI/Forms/GradientEditor.no.resx ./QuickRoute.UI/Forms/AboutBox.cs ./QuickRoute.UI/Forms/TimeDialog.it.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.no.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.ru.resx ./QuickRoute.UI/Forms/SelectRoutePropertyTypesForm.fi.resx ./QuickRoute.UI/Forms/ExceptionMessageBox.Designer.cs ./QuickRoute.UI/Forms/ExceptionMessageBox.fi.resx ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.it.resx ./QuickRoute.UI/Forms/ColorRangeIntervalEditor.resx ./QuickRoute.UI/Forms/ImageManipulator.cs ./QuickRoute.UI/Forms/NewVersionDialog.fi.resx ./QuickRoute.UI/Forms/NewVersionDialog.Designer.cs ./QuickRoute.UI/Forms/CreateNewForm.lt.resx ./QuickRoute.UI/Forms/GradientEditor.resx ./QuickRoute.UI/Forms/RefreshDevicesProgressIndicator.da.resx ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.it.resx ./QuickRoute.UI/Forms/TimeDialog.de.resx ./QuickRoute.UI/Forms/ExportRouteDataDialog.fi.resx ./QuickRoute.UI/Forms/ApplicationSettingsEditor.cs ./QuickRoute.UI/Forms/OpenMultipleFilesInGoogleEarthDialog.ru.resx ./QuickRoute.UI/Forms/NewVersionDialog.no.resx ./QuickRoute.UI/Forms/AddSessionsForm.Designer.cs ./QuickRoute.UI/Forms/AddLapsFromExternalDataSource.lt.resx ./QuickRoute.UI/Program.cs ./QuickRoute.UI/QuickRoute.UI.csproj ./QuickRoute.UI/Main.ru.resx ./QuickRoute.UI/todo.txt ./QuickRoute.UI/Main.fr.resx ./QuickRoute.UI/QuickRoute.ico ./QuickRoute.UI/Main.cs ./QuickRoute.UI/Main.da.resx ./QuickRoute.UI/Settings.cs ./QuickRoute.UI/Main.resx ./QuickRoute.UI/Main.lt.Designer.cs ./QuickRoute.UI/Main.fi.Designer.cs ./QuickRoute.UI/Classes/FullScreen.cs ./QuickRoute.UI/Classes/LapGridViewPrinter.cs ./QuickRoute.UI/Classes/WinApi.cs ./QuickRoute.UI/Classes/GoogleEarthUtil.cs ./QuickRoute.UI/Classes/Util.cs ./QuickRoute.UI/Classes/DataGridViewPrinter.cs ./QuickRoute.UI/Main.it.Designer.cs ./QuickRoute.UI/Main.fi.resx ./QuickRoute.UI/Main.lt.resx ./QuickRoute.UI/Main.sv.resx ./QuickRoute.UI/Main.de.resx ./QuickRoute.UI/Main.it.resx ./QuickRoute.UI/Properties/Settings.settings ./QuickRoute.UI/Properties/Resources.resx ./QuickRoute.UI/Properties/AssemblyInfo.cs ./QuickRoute.UI/Properties/Resources.Designer.cs ./QuickRoute.UI/Properties/Settings.Designer.cs ./QuickRoute.UI/Main.Designer.cs ./QuickRouteMacros/QuickRouteMacros.vsmacros ./QuickRoute.BusinessEntities/ParameterizedLocation.cs ./QuickRoute.BusinessEntities/app.config ./QuickRoute.BusinessEntities/ApplicationSettings.cs ./QuickRoute.BusinessEntities/MapReadingState.cs ./QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/webservice.wsdl ./QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/Reference.map ./QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/Reference.cs ./QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/GetEventsResponse.datasource ./QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/GetRunnersAndSplitsResponse.datasource ./QuickRoute.BusinessEntities/Web References/CzechSplitsWebService/GetCategoriesResponse.datasource ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/Runner.datasource ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/WebServices.disco ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/WebServices.wsdl ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/Event.datasource ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/Category.datasource ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/Reference.map ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/EventClubRunnerCount.datasource ./QuickRoute.BusinessEntities/Web References/WinSplitsWebService/Reference.cs ./QuickRoute.BusinessEntities/Gradient.cs ./QuickRoute.BusinessEntities/AdjustedRoute.cs ./QuickRoute.BusinessEntities/RouteProperties/Inclination.cs ./QuickRoute.BusinessEntities/RouteProperties/ElapsedTime.cs ./QuickRoute.BusinessEntities/RouteProperties/Direction.cs ./QuickRoute.BusinessEntities/RouteProperties/MapReadingState.cs ./QuickRoute.BusinessEntities/RouteProperties/NumberOfMapReadings.cs ./QuickRoute.BusinessEntities/RouteProperties/BlankRouteProperty.cs ./QuickRoute.BusinessEntities/RouteProperties/AltitudeDifference.cs ./QuickRoute.BusinessEntities/RouteProperties/ImageY.cs ./QuickRoute.BusinessEntities/RouteProperties/AveragePaceWhenNotReadingMap.cs ./QuickRoute.BusinessEntities/RouteProperties/CircleTimeInSpan.cs ./QuickRoute.BusinessEntities/RouteProperties/ImageX.cs ./QuickRoute.BusinessEntities/RouteProperties/RoutePropertyCacheManager.cs ./QuickRoute.BusinessEntities/RouteProperties/HeartRate.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageHeartRate.cs ./QuickRoute.BusinessEntities/RouteProperties/DirectionDeviationToNextLap.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteLocations.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageRoutePace.cs ./QuickRoute.BusinessEntities/RouteProperties/MapReadingDuration.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageInclination.cs ./QuickRoute.BusinessEntities/RouteProperties/AveragePaceWhenReadingMap.cs ./QuickRoute.BusinessEntities/RouteProperties/Speed.cs ./QuickRoute.BusinessEntities/RouteProperties/Time.cs ./QuickRoute.BusinessEntities/RouteProperties/MaxHeartRate.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteToStraightLine.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageRouteSpeed.cs ./QuickRoute.BusinessEntities/RouteProperties/Altitude.cs ./QuickRoute.BusinessEntities/RouteProperties/CircleTime.cs ./QuickRoute.BusinessEntities/RouteProperties/CircleTimeAtStartOfSpan.cs ./QuickRoute.BusinessEntities/RouteProperties/Pace.cs ./QuickRoute.BusinessEntities/RouteProperties/CircleTimeBackward.cs ./QuickRoute.BusinessEntities/RouteProperties/MapReadingPercentage.cs ./QuickRoute.BusinessEntities/RouteProperties/CircleTimeAtEndOfSpan.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageStraightLinePace.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteMomentaneousProperty.cs ./QuickRoute.BusinessEntities/RouteProperties/Latitude.cs ./QuickRoute.BusinessEntities/RouteProperties/Longitude.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageDirectionDeviationToNextLap.cs ./QuickRoute.BusinessEntities/RouteProperties/CircleTimeForward.cs ./QuickRoute.BusinessEntities/RouteProperties/Descent.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteDistance.cs ./QuickRoute.BusinessEntities/RouteProperties/SelectableRoutePropertyType.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageStraightLineSpeed.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteProperty.cs ./QuickRoute.BusinessEntities/RouteProperties/NextMapReadingStart.cs ./QuickRoute.BusinessEntities/RouteProperties/Location.cs ./QuickRoute.BusinessEntities/RouteProperties/Ascent.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageTimeBetweenMapReadings.cs ./QuickRoute.BusinessEntities/RouteProperties/LapNumber.cs ./QuickRoute.BusinessEntities/RouteProperties/StraightLineDistance.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteSpanProperty.cs ./QuickRoute.BusinessEntities/RouteProperties/MinHeartRate.cs ./QuickRoute.BusinessEntities/RouteProperties/AverageMapReadingTime.cs ./QuickRoute.BusinessEntities/RouteProperties/PreviousMapReadingEnd.cs ./QuickRoute.BusinessEntities/RouteProperties/RouteFromStartProperty.cs ./QuickRoute.BusinessEntities/RouteProperties/SelectableRoutePropertyTypeCollection.cs ./QuickRoute.BusinessEntities/Units.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/Runner.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/WinSplits/WinSplitsLapDataSource.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/CzechSplits/CzechSplitsLapDataSource.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/Event.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/ExternalLapDataSourceFactory.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/Category.cs ./QuickRoute.BusinessEntities/ExternalLapDataSources/IExternalLapDataSource.cs ./QuickRoute.BusinessEntities/ExternalRoutePropertyRetriever.cs ./QuickRoute.BusinessEntities/ColorfulHistogram.cs ./QuickRoute.BusinessEntities/SessionSettings.cs ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.fr.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.fi.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.ru.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.no.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.fi.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.sv.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.cs ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.de.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.da.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.it.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.fr.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.Designer.cs ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.ru.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.cs ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.Designer.cs ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.no.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.it.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.da.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.de.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.lt.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeAndQualitySelector.lt.resx ./QuickRoute.BusinessEntities/Forms/ExportImageSizeSelector.sv.resx ./QuickRoute.BusinessEntities/HandleCollection.cs ./QuickRoute.BusinessEntities/LineGraph.cs ./QuickRoute.BusinessEntities/LapCollection.cs ./QuickRoute.BusinessEntities/Numeric/Converters.cs ./QuickRoute.BusinessEntities/Numeric/ScaleCreators.cs ./QuickRoute.BusinessEntities/Exporters/RouteDataExporter.cs ./QuickRoute.BusinessEntities/Exporters/ImageExporter.cs ./QuickRoute.BusinessEntities/Exporters/GpxExporter.cs ./QuickRoute.BusinessEntities/Exporters/KmlMultipleFilesExporter.cs ./QuickRoute.BusinessEntities/Exporters/KmlExporter.cs ./QuickRoute.BusinessEntities/Actions/DeleteLapAction.cs ./QuickRoute.BusinessEntities/Actions/TrimRouteAndAddLapsAction.cs ./QuickRoute.BusinessEntities/Actions/CutRouteAction.cs ./QuickRoute.BusinessEntities/Actions/AddLapAction.cs ./QuickRoute.BusinessEntities/Actions/AddTimeOffsetToSessionAction.cs ./QuickRoute.BusinessEntities/Actions/IAction.cs ./QuickRoute.BusinessEntities/Actions/MoveHandleAction.cs ./QuickRoute.BusinessEntities/Actions/RotateMapAction.cs ./QuickRoute.BusinessEntities/Actions/AddHandleAction.cs ./QuickRoute.BusinessEntities/Actions/EditLapAction.cs ./QuickRoute.BusinessEntities/Actions/DeleteHandleAction.cs ./QuickRoute.BusinessEntities/Map.cs ./QuickRoute.BusinessEntities/KmzDocument.cs ./QuickRoute.BusinessEntities/RouteLineSettings.cs ./QuickRoute.BusinessEntities/ImageFilePropertySelectors.cs ./QuickRoute.BusinessEntities/RouteAdjustManager.cs ./QuickRoute.BusinessEntities/Graphics.cs ./QuickRoute.BusinessEntities/Session.cs ./QuickRoute.BusinessEntities/QuickRouteJpegExtensionData.cs ./QuickRoute.BusinessEntities/Importers/QuickRoute/QuickRouteImporter.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.ru.resx ./QuickRoute.BusinessEntities/Importers/GPX/GPX11/gpx1.1.cs ./QuickRoute.BusinessEntities/Importers/GPX/GPX11/gpx1.1.xsd ./QuickRoute.BusinessEntities/Importers/GPX/GPX11/gpx1.1.xsx ./QuickRoute.BusinessEntities/Importers/GPX/GPXUtil.cs ./QuickRoute.BusinessEntities/Importers/GPX/GPXImporter.cs ./QuickRoute.BusinessEntities/Importers/GPX/GPX10/gpx1.0.cs ./QuickRoute.BusinessEntities/Importers/GPX/GPX10/gpx1.0.xsd ./QuickRoute.BusinessEntities/Importers/FileFormat.cs ./QuickRoute.BusinessEntities/Importers/JJConnect/RegistratorSE/JJConnectRegistratorSEImporter.cs ./QuickRoute.BusinessEntities/Importers/RouteFileFormat.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.Designer.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.sv.resx ./QuickRoute.BusinessEntities/Importers/SessionSelector.de.resx ./QuickRoute.BusinessEntities/Importers/SessionSelector.resx ./QuickRoute.BusinessEntities/Importers/IRouteFileImporter.cs ./QuickRoute.BusinessEntities/Importers/TCX/TCXImporter.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.lt.resx ./QuickRoute.BusinessEntities/Importers/RouteImporterUtil.cs ./QuickRoute.BusinessEntities/Importers/GlobalSat/GH615M/toGPX.xsl ./QuickRoute.BusinessEntities/Importers/GlobalSat/GH615M/GlobalSatGH615MImporter.cs ./QuickRoute.BusinessEntities/Importers/GlobalSat/icon.ico ./QuickRoute.BusinessEntities/Importers/GlobalSat/icon.png ./QuickRoute.BusinessEntities/Importers/IGPSDeviceImporter.cs ./QuickRoute.BusinessEntities/Importers/WorkProgressEventArgs.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.it.resx ./QuickRoute.BusinessEntities/Importers/GPSDevice.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.no.resx ./QuickRoute.BusinessEntities/Importers/SessionSelector.fr.resx ./QuickRoute.BusinessEntities/Importers/SessionSelector.fi.resx ./QuickRoute.BusinessEntities/Importers/ImportResult.cs ./QuickRoute.BusinessEntities/Importers/IRouteImporter.cs ./QuickRoute.BusinessEntities/Importers/FIT/FITImporter.cs ./QuickRoute.BusinessEntities/Importers/FIT/FITUtil.cs ./QuickRoute.BusinessEntities/Importers/Polar/PolarHRMImporter.cs ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.it.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.lt.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.ru.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.de.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.fi.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.sv.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.cs ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.Designer.cs ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PolarProTrainerUtil.cs ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.da.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.no.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PersonSessionSelector.fr.resx ./QuickRoute.BusinessEntities/Importers/Polar/ProTrainer/PolarProTrainerImporter.cs ./QuickRoute.BusinessEntities/Importers/Navilock/NavilockImporter.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.da.resx ./QuickRoute.BusinessEntities/Importers/SupportedImportFormatManager.cs ./QuickRoute.BusinessEntities/Importers/SessionSelector.cs ./QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/HistoryItem.cs ./QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/GarminANTAgentImporter.cs ./QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/AntpmImporter.cs ./QuickRoute.BusinessEntities/Importers/Garmin/ANTAgent/ANTDevice.cs ./QuickRoute.BusinessEntities/Importers/Garmin/Forerunner/GarminForerunnerUSBImporter.cs ./QuickRoute.BusinessEntities/Importers/FRWD/FRWDImporter.cs ./QuickRoute.BusinessEntities/Importers/ImportError.cs ./QuickRoute.BusinessEntities/QuickRoute.BusinessEntities.csproj ./QuickRoute.BusinessEntities/Handle.cs ./QuickRoute.BusinessEntities/GlobalizedProperties/Attributes.cs ./QuickRoute.BusinessEntities/GlobalizedProperties/Descriptors.cs ./QuickRoute.BusinessEntities/Document.cs ./QuickRoute.BusinessEntities/Lap.cs ./QuickRoute.BusinessEntities/Properties/Settings.settings ./QuickRoute.BusinessEntities/Properties/AssemblyInfo.cs ./QuickRoute.BusinessEntities/Properties/Settings.Designer.cs ./QuickRoute.BusinessEntities/GeneralMatrix.cs ./QuickRoute.BusinessEntities/Route.cs ./QuickRoute.BusinessEntities/LapInfo.cs ./QuickRoute.BusinessEntities/MarkerDrawers.cs ./QuickRoute.BusinessEntities/General.cs ./QuickRoute.BusinessEntities/ColorRange.cs ./QuickRoute.BusinessEntities/SessionCollection.cs ./QuickRoute.BusinessEntities/DocumentSettings.cs ./scripts/origsrc-file-list ./scripts/get-from-svn ./scripts/quickroute-gps ./scripts/quickroute-gps.desktop ./scripts/make-tarball ./scripts/README ./QuickRoute.Common/QuickRoute.Common.csproj ./QuickRoute.Common/CommonUtil.cs ./QuickRoute.Common/IMapPublisher.cs ./QuickRoute.Common/Properties/AssemblyInfo.cs ./QuickRoute.Common/LogUtil.cs ./QuickRoute.Controls/Graphics/ZoomIn.cur ./QuickRoute.Controls/Graphics/AdjustRoute.cur ./QuickRoute.Controls/Graphics/Cut.cur ./QuickRoute.Controls/Graphics/ZoomOut.cur ./QuickRoute.Controls/Graphics/MoveMap.cur ./QuickRoute.Controls/Graphics/Lap.cur ./QuickRoute.Controls/ZoomWindow.Designer.cs ./QuickRoute.Controls/ColorRangeIntervalSlider.cs ./QuickRoute.Controls/Canvas.resx ./QuickRoute.Controls/GradientListBox.cs ./QuickRoute.Controls/FileSelectorControl.ru.resx ./QuickRoute.Controls/FileSelectorControl.it.resx ./QuickRoute.Controls/ScrollableLabel.Designer.cs ./QuickRoute.Controls/CustomUpDown.cs ./QuickRoute.Controls/Forms/LapTimeForm.cs ./QuickRoute.Controls/Forms/LapTimeForm.fr.resx ./QuickRoute.Controls/Forms/RouteCutForm.Designer.cs ./QuickRoute.Controls/Forms/UrlDialog.Designer.cs ./QuickRoute.Controls/Forms/ColorChooser.sv.resx ./QuickRoute.Controls/Forms/ColorChooser.fi.resx ./QuickRoute.Controls/Forms/UrlDialog.da.resx ./QuickRoute.Controls/Forms/RouteCutForm.da.resx ./QuickRoute.Controls/Forms/ColorChooser.lt.resx ./QuickRoute.Controls/Forms/RouteCutForm.sv.resx ./QuickRoute.Controls/Forms/LapTimeForm.sv.resx ./QuickRoute.Controls/Forms/LapTimeForm.resx ./QuickRoute.Controls/Forms/ColorChooser.cs ./QuickRoute.Controls/Forms/LapTimeForm.da.resx ./QuickRoute.Controls/Forms/UrlDialog.resx ./QuickRoute.Controls/Forms/LapTimeForm.Designer.cs ./QuickRoute.Controls/Forms/UrlDialog.fi.resx ./QuickRoute.Controls/Forms/LapTimeForm.ru.resx ./QuickRoute.Controls/Forms/ColorChooser.fr.resx ./QuickRoute.Controls/Forms/UrlDialog.de.resx ./QuickRoute.Controls/Forms/ColorChooser.de.resx ./QuickRoute.Controls/Forms/LapTimeForm.it.resx ./QuickRoute.Controls/Forms/RouteCutForm.resx ./QuickRoute.Controls/Forms/RouteCutForm.lt.resx ./QuickRoute.Controls/Forms/ColorChooser.resx ./QuickRoute.Controls/Forms/RouteCutForm.fr.resx ./QuickRoute.Controls/Forms/ColorChooser.da.resx ./QuickRoute.Controls/Forms/RouteCutForm.ru.resx ./QuickRoute.Controls/Forms/UrlDialog.sv.resx ./QuickRoute.Controls/Forms/ColorChooser.ru.resx ./QuickRoute.Controls/Forms/RouteCutForm.it.resx ./QuickRoute.Controls/Forms/RouteCutForm.cs ./QuickRoute.Controls/Forms/ColorChooser.no.resx ./QuickRoute.Controls/Forms/UrlDialog.cs ./QuickRoute.Controls/Forms/UrlDialog.fr.resx ./QuickRoute.Controls/Forms/RouteCutForm.de.resx ./QuickRoute.Controls/Forms/UrlDialog.lt.resx ./QuickRoute.Controls/Forms/LapTimeForm.de.resx ./QuickRoute.Controls/Forms/ColorChooser.it.resx ./QuickRoute.Controls/Forms/UrlDialog.it.resx ./QuickRoute.Controls/Forms/RouteCutForm.fi.resx ./QuickRoute.Controls/Forms/LapTimeForm.lt.resx ./QuickRoute.Controls/Forms/LapTimeForm.fi.resx ./QuickRoute.Controls/Forms/UrlDialog.ru.resx ./QuickRoute.Controls/Forms/RouteCutForm.no.resx ./QuickRoute.Controls/Forms/LapTimeForm.no.resx ./QuickRoute.Controls/Forms/UrlDialog.no.resx ./QuickRoute.Controls/ScrollableLabel.resx ./QuickRoute.Controls/FileSelectorControl.fi.resx ./QuickRoute.Controls/GradientComboBox.cs ./QuickRoute.Controls/LineGraphControl.Designer.cs ./QuickRoute.Controls/DragDropManager.cs ./QuickRoute.Controls/ZoomWindow.cs ./QuickRoute.Controls/ColorRangeIntervalSlider.resx ./QuickRoute.Controls/Canvas.cs ./QuickRoute.Controls/FileSelectorControl.de.resx ./QuickRoute.Controls/FileSelectorControl.fr.resx ./QuickRoute.Controls/FileSelectorControl.cs ./QuickRoute.Controls/ToolstripNumericUpDown.cs ./QuickRoute.Controls/ScrollableLabel.cs ./QuickRoute.Controls/ColorRangeIntervalSlider.Designer.cs ./QuickRoute.Controls/Canvas.Designer.cs ./QuickRoute.Controls/FileSelectorControl.da.resx ./QuickRoute.Controls/FileSelectorControl.no.resx ./QuickRoute.Controls/FileSelectorControl.resx ./QuickRoute.Controls/ToolstripTrackBar.cs ./QuickRoute.Controls/FileSelectorControl.Designer.cs ./QuickRoute.Controls/ToolstripColorRangeIntervalSlider.cs ./QuickRoute.Controls/Properties/AssemblyInfo.cs ./QuickRoute.Controls/QuickRoute.Controls.csproj ./QuickRoute.Controls/FileSelectorControl.lt.resx ./QuickRoute.Controls/ToolstripCustomUpDown.cs ./QuickRoute.Controls/FileSelectorControl.sv.resx ./QuickRoute.Controls/LineGraphControl.resx ./QuickRoute.Controls/LineGraphControl.cs ./Publishers/DOMAPublisher/app.config ./Publishers/DOMAPublisher/Web References/DOMA/GetAllCategoriesResponse.datasource ./Publishers/DOMAPublisher/Web References/DOMA/GetAllMapsResponse.datasource ./Publishers/DOMAPublisher/Web References/DOMA/ConnectResponse.datasource ./Publishers/DOMAPublisher/Web References/DOMA/UploadPartialFileResponse.datasource ./Publishers/DOMAPublisher/Web References/DOMA/webservice.wsdl ./Publishers/DOMAPublisher/Web References/DOMA/PublishPreUploadedMapResponse.datasource ./Publishers/DOMAPublisher/Web References/DOMA/Reference.map ./Publishers/DOMAPublisher/Web References/DOMA/Reference.cs ./Publishers/DOMAPublisher/Web References/DOMA/PublishMapResponse.datasource ./Publishers/DOMAPublisher/DOMAPublisher.csproj ./Publishers/DOMAPublisher/DOMAPublisher.cs ./Publishers/DOMAPublisher/Properties/Settings.settings ./Publishers/DOMAPublisher/Properties/AssemblyInfo.cs ./Publishers/DOMAPublisher/Properties/Settings.Designer.cs ./QuickRoute.Test/AuthoringTests.txt ./QuickRoute.Test/UnitTest1.cs ./QuickRoute.Test/QuickRoute.Test.csproj ./QuickRoute.Test/Properties/AssemblyInfo.cs ./QuickRoute.Test/Test References/QuickRoute.BusinessEntities.accessor ./3rdparty/ExifLibrary/app.config ./3rdparty/ExifLibrary/BitConverterEx.cs ./3rdparty/ExifLibrary/ExifBitConverter.cs ./3rdparty/ExifLibrary/ExifEnums.cs ./3rdparty/ExifLibrary/ExifExceptions.cs ./3rdparty/ExifLibrary/ExifExtendedProperty.cs ./3rdparty/ExifLibrary/ExifFileTypeDescriptor.cs ./3rdparty/ExifLibrary/ExifInterOperability.cs ./3rdparty/ExifLibrary/ExifLibrary.csproj ./3rdparty/ExifLibrary/ExifPropertyCollection.cs ./3rdparty/ExifLibrary/ExifProperty.cs ./3rdparty/ExifLibrary/ExifPropertyFactory.cs ./3rdparty/ExifLibrary/ExifTag.cs ./3rdparty/ExifLibrary/ExifTagFactory.cs ./3rdparty/ExifLibrary/IFD.cs ./3rdparty/ExifLibrary/ImageFile.cs ./3rdparty/ExifLibrary/ImageFileDirectory.cs ./3rdparty/ExifLibrary/ImageFileDirectoryEntry.cs ./3rdparty/ExifLibrary/ImageFileFormat.cs ./3rdparty/ExifLibrary/JFIFEnums.cs ./3rdparty/ExifLibrary/JFIFExtendedProperty.cs ./3rdparty/ExifLibrary/JFIFThumbnail.cs ./3rdparty/ExifLibrary/JPEGExceptions.cs ./3rdparty/ExifLibrary/JPEGFile.cs ./3rdparty/ExifLibrary/JPEGMarker.cs ./3rdparty/ExifLibrary/JPEGSection.cs ./3rdparty/ExifLibrary/MathEx.cs ./3rdparty/ExifLibrary/PNGChunk.cs ./3rdparty/ExifLibrary/PNGFile.cs ./3rdparty/ExifLibrary/PNGProperty.cs ./3rdparty/ExifLibrary/Properties/AssemblyInfo.cs ./3rdparty/ExifLibrary/TIFFFile.cs ./3rdparty/ExifLibrary/TIFFHeader.cs ./3rdparty/ExifLibrary/TIFFStrip.cs ./3rdparty/ExifLibrary/Utility.cs ./3rdparty/PowerCollections/Algorithms.cs ./3rdparty/PowerCollections/app.config ./3rdparty/PowerCollections/AssemblyInfo.cs ./3rdparty/PowerCollections/Bag.cs ./3rdparty/PowerCollections/CollectionBase.cs ./3rdparty/PowerCollections/Comparers.cs ./3rdparty/PowerCollections/Hash.cs ./3rdparty/PowerCollections/License.txt ./3rdparty/PowerCollections/ListBase.cs ./3rdparty/PowerCollections/OrderedBag.cs ./3rdparty/PowerCollections/Pair.cs ./3rdparty/PowerCollections/ReadOnlyCollectionBase.cs ./3rdparty/PowerCollections/ReadOnlyListBase.cs ./3rdparty/PowerCollections/RedBlack.cs ./3rdparty/PowerCollections/Strings.cs ./3rdparty/PowerCollections/Util.cs ./3rdparty/PowerCollections/Wintellect.PowerCollections.csproj ./3rdparty/SharpZipLib/AssemblyInfo.cs ./3rdparty/SharpZipLib/ICSharpCode.SharpZLib.csproj ./3rdparty/SharpZipLib/ICSharpCode.SharpZLib.prjx ./3rdparty/SharpZipLib/Main.cs ./3rdparty/SharpZipLib/SharpZipBaseException.cs ./3rdparty/SharpZipLib/Checksums/Adler32.cs ./3rdparty/SharpZipLib/Checksums/Crc32.cs ./3rdparty/SharpZipLib/Checksums/IChecksum.cs ./3rdparty/SharpZipLib/Checksums/StrangeCrc.cs ./3rdparty/SharpZipLib/Core/FileSystemScanner.cs ./3rdparty/SharpZipLib/Core/INameTransform.cs ./3rdparty/SharpZipLib/Core/IScanFilter.cs ./3rdparty/SharpZipLib/Core/NameFilter.cs ./3rdparty/SharpZipLib/Core/PathFilter.cs ./3rdparty/SharpZipLib/Core/StreamUtils.cs ./3rdparty/SharpZipLib/Core/WindowsPathUtils.cs ./3rdparty/SharpZipLib/Encryption/PkzipClassic.cs ./3rdparty/SharpZipLib/Encryption/ZipAESStream.cs ./3rdparty/SharpZipLib/Encryption/ZipAESTransform.cs ./3rdparty/SharpZipLib/Lzw/LzwConstants.cs ./3rdparty/SharpZipLib/Lzw/LzwException.cs ./3rdparty/SharpZipLib/Lzw/LzwInputStream.cs ./3rdparty/SharpZipLib/Zip/Compression ./3rdparty/SharpZipLib/Zip/FastZip.cs ./3rdparty/SharpZipLib/Zip/IEntryFactory.cs ./3rdparty/SharpZipLib/Zip/WindowsNameTransform.cs ./3rdparty/SharpZipLib/Zip/ZipConstants.cs ./3rdparty/SharpZipLib/Zip/ZipEntry.cs ./3rdparty/SharpZipLib/Zip/ZipEntryFactory.cs ./3rdparty/SharpZipLib/Zip/ZipException.cs ./3rdparty/SharpZipLib/Zip/ZipExtraData.cs ./3rdparty/SharpZipLib/Zip/ZipFile.cs ./3rdparty/SharpZipLib/Zip/ZipHelperStream.cs ./3rdparty/SharpZipLib/Zip/ZipInputStream.cs ./3rdparty/SharpZipLib/Zip/ZipNameTransform.cs ./3rdparty/SharpZipLib/Zip/ZipOutputStream.cs ./Makefilequickroute-linux-upstream-2.5/scripts/quickroute-gps000077500000000000000000000001101446222606700231460ustar00rootroot00000000000000#!/bin/sh exec /usr/bin/cli /usr/lib/quickroute-gps/QuickRoute.exe "$@" quickroute-linux-upstream-2.5/scripts/quickroute-gps.desktop000066400000000000000000000003771446222606700246320ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Name=QuickRoute Comment=Orienteering GPS track analisys tool. Exec=/usr/bin/quickroute-gps Icon=/usr/share/pixmaps/quickroute-gps.xpm Categories=Education;Science;Geoscience; StartupNotify=false Terminal=false Type=Application