diff --git a/src/lib/fpdf-easytable/LICENSE b/src/lib/fpdf-easytable/LICENSE
new file mode 100644
index 0000000..00d2e13
--- /dev/null
+++ b/src/lib/fpdf-easytable/LICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
\ No newline at end of file
diff --git a/src/lib/fpdf-easytable/Pics/a.png b/src/lib/fpdf-easytable/Pics/a.png
new file mode 100644
index 0000000..10c6f5b
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/a.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/b.png b/src/lib/fpdf-easytable/Pics/b.png
new file mode 100644
index 0000000..8a31a08
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/b.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/c.png b/src/lib/fpdf-easytable/Pics/c.png
new file mode 100644
index 0000000..a63817f
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/c.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/d.png b/src/lib/fpdf-easytable/Pics/d.png
new file mode 100644
index 0000000..bd146c8
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/d.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/fpdf.png b/src/lib/fpdf-easytable/Pics/fpdf.png
new file mode 100644
index 0000000..955fa7f
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/fpdf.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/fpdflogo.gif b/src/lib/fpdf-easytable/Pics/fpdflogo.gif
new file mode 100644
index 0000000..60b628a
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/fpdflogo.gif
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/fpdflogo.png b/src/lib/fpdf-easytable/Pics/fpdflogo.png
new file mode 100644
index 0000000..2d96301
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/fpdflogo.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/julytemperatures.png b/src/lib/fpdf-easytable/Pics/julytemperatures.png
new file mode 100644
index 0000000..3003f53
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/julytemperatures.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/monthtemperature.png b/src/lib/fpdf-easytable/Pics/monthtemperature.png
new file mode 100644
index 0000000..5538ef9
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/monthtemperature.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/snow.png b/src/lib/fpdf-easytable/Pics/snow.png
new file mode 100644
index 0000000..02a21c7
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/snow.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/temperature.png b/src/lib/fpdf-easytable/Pics/temperature.png
new file mode 100644
index 0000000..cf527ca
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/temperature.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/temperaturexaltitude.png b/src/lib/fpdf-easytable/Pics/temperaturexaltitude.png
new file mode 100644
index 0000000..93fffe3
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/temperaturexaltitude.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/tick.png b/src/lib/fpdf-easytable/Pics/tick.png
new file mode 100755
index 0000000..42ded6b
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/tick.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/Pics/wind.png b/src/lib/fpdf-easytable/Pics/wind.png
new file mode 100644
index 0000000..7b8db4a
--- /dev/null
+++ b/src/lib/fpdf-easytable/Pics/wind.png
Binary files differ
diff --git a/src/lib/fpdf-easytable/README.md b/src/lib/fpdf-easytable/README.md
new file mode 100644
index 0000000..6dc8785
--- /dev/null
+++ b/src/lib/fpdf-easytable/README.md
@@ -0,0 +1,963 @@
+# FPDF EasyTable
+
+It is a PHP class that provides an easy way to make tables for PDF documents that are generated with the 
+[FPDF library](http://www.fpdf.org).
+
+Making tables for PDF documents with this class is as easy and flexible as
+making HTML tables. And using CSS-style strings we can customize the look of 
+the tables in the same fashion HTML tables are styling with CSS. 
+
+No messy code with confusing arrays of attributes and texts.
+
+No complicated configuration files.
+
+Building and styling a table with easyTable is simple, clean and fast.
+
+```
+ $table=new easyTable($pdf, 3, 'width:100;');
+ 
+ $table->easyCell('Text 1', 'rowspan:2; valign:T'); 
+ $table->easyCell('Text 2', 'bgcolor:#b3ccff; rowspan:2');
+ $table->easyCell('Text 3');
+ $table->printRow();
+ 
+ $table->rowStyle('min-height:20');
+ $table->easyCell('Text 4', 'bgcolor:#3377ff; rowspan:2');
+ $table->printRow();
+
+ $table->easyCell('Text 5', 'bgcolor:#99bbff;colspan:2');
+ $table->printRow();
+ 
+ $table->endTable();
+```
+
+# Content
+ 
+- [Features](#features)
+- [Comparisons](#comparisons)
+- [Examples](#examples)
+- [Requirements](#requirements)
+- [Manual Install](#manual-install)
+- [Quick Start](#quick-start)
+- [Documentation](#documentation)
+- [Fonts And UTF8 Support](#fonts-and-utf8-support)
+- [Using with FPDI](#using-with-fpdi)
+- [Tag based font style](#tag-based-font-style)
+- [User units](#user-units) **_NEW FEATURE!!_**
+- [Common error](#common-error)
+- [Get In Touch](#get-in-touch)
+- [Donations](#donations)
+- [License](#license)
+
+# Features
+
+- Table and columns width can be defined in [user units](#user-units) or percentage
+
+- Every table cell is a fully customizable 
+  (font family, font size, font color, background color, position of the text, 
+  vertical padding, horizontal padding...)
+
+- Cells can span to multiple columns and rows
+
+- Tables split automatically on page-break
+
+- Set of header row, so the header can be added automatically on every new page
+
+- Attribute values can be defined globally, at the table level (affect all the cells in the table), 
+  at the row level (will affect just the cells in that row), or locally at the cell level
+
+- Rows can be set to split on page break if it does not fit in the current page or to be printed
+  on the next page
+
+- Images can be added to table cells
+
+- Text can be added on top or below an image in a cell
+
+- [UTF8 Support](#fonts-and-utf8-support)
+
+- [Tag based font style](#tag-based-font-style) which allows to mix different font families, font styles, font size and font color in the same cell! **_NEW FEATURE!!_** 
+
+- [Links](#tag-based-font-style) **_NEW FEATURE!!_** 
+
+
+
+
+# Comparisons
+
+**easyTable vs kind-of-HTML-to-PDF**
+
+To use HTML code to make tables for PDF documents is a kind of sloppy hack. To begin with
+to convert HTML code into a kind of FPDF you need a parcer meaning there is a penalty in performace;
+and second the results are very poor. 
+
+*HTML code*
+
+    <table align:"right" style="border-collapse:collapse">
+      <tr>
+        <td rowspan="2" style="width:30%; background:#ffb3ec;">Text 1</td>
+        <td colspan="2" style="background:#FF66AA;">Text 2</td>
+      </tr>
+      <tr>
+        <td style="width:35%; background:#33ffff;">Text 3 </td>
+        <td style="width:35%; background:#ffff33;">Text 4 </td>
+      </tr>
+    </table>
+
+*easyTable code*
+
+    $table=new easyTable($pdf, '%{30, 35, 35}', 'align:R; border:1');
+      $table->easyCell('Text 1', 'rowspan:2; bgcolor:#ffb3ec');
+      $table->easyCell('Text 2', 'colspan:2; bgcolor:#FF66AA');
+      $table->printRow();
+
+      $table->easyCell('Text 3', 'bgcolor:#33ffff');
+      $table->easyCell('Text 4', 'bgcolor:#ffff33');
+      $table->printRow();
+    $table->endTable(5);
+
+
+
+# Examples
+
+- [Evolution of a table](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-1.pdf)
+  * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example1.php)
+  
+- [Table with header](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-2.pdf)
+  * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example2.php)
+
+- [Simple invoice](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-3.pdf)
+  * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example3.php)
+
+- [More examples](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-4.pdf)
+  * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example4.php)
+ 
+
+# Requirements
+
+- PHP 5.6 or higher
+- [FPDF 1.81](http://www.fpdf.org).
+- exfpdf.php (included in this project)
+
+# Manual Install
+
+Download the EasyTable class and FPDF class and put the contents in a directory in your project structure.
+Be sure you are using [FPDF 1.81](http://www.fpdf.org).
+
+# Quick Start
+
+- create a fpdf object with exfpdf class (extension of fpdf class)
+- create a easyTable object
+```
+    $table=new easyTable($pdf, 3, 'border:1');
+```    
+- add some rows
+```
+    $table->easyCell('Text 1', 'valign:T'); 
+    $table->easyCell('Text 2', 'bgcolor:#b3ccff;');
+    $table->easyCell('Text 3');
+    $table->printRow();
+
+    $table->rowStyle('min-height:20; align:{C}');   // let's adjust the height of this row
+    $table->easyCell('Text 4', 'colspan:3');
+    $table->printRow();
+```
+- when it is done, do not forget to terminate the table
+```
+    $table->endTable(4);
+```
+  [Result](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.pdf)
+  * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.php)
+
+
+# Documentation
+
+**function __construct( FPDF-object $fpdf_obj, Mix $num_cols[, string $style = '' ])**
+
+*Description:*
+
+   Constructs an easyTable object
+
+*Parameters:*
+
+fpdf_obj
+
+    the current FPDF object (constructed with the FPDF library)  
+    that is being used to write the current PDF document
+
+num_cols
+
+    this parameter can be a positive integer (the number of columns)
+    or a string of the following form
+   
+    I) a positive integer, the number of columns for the table. The width of every 
+    column will be equal to the width of the table (given by the width property) divided by 
+    the number of columns ($num_cols)
+
+    II) a string of the form '{c1, c2, c3,... cN}'. In this case every element in the curly 
+    brackets is a positive numeric value that represent the width of a column. Thus, 
+    the n-th numeric value is the width of the n-th colum. If the sum of all the width of 
+    the columns is bigger than the width of the table but less than the width of the document, 
+    the table will stretch to the sum of the columns width. However, if the sum of the columns 
+    is bigger than the width of the document, the width of every column will be reduce proportionally 
+    to make the total sum equal to the width of the document. 
+
+    III) a string of the form '%{c1, c2, c3,... cN}'. Similar to the previous case, but this time 
+    every element represents a percentage of the width of the table. In this case it the sum of 
+    this percentages is bigger than 100, the execution will be terminated.
+
+style
+
+    the global style for the table (see documentation) a semicolon-separated string of attribute 
+    values that defines the default layout of the table and all the cells and their contents 
+    (see Documentation section in README.md)
+
+*Examples:*
+```
+    $table= new easyTable($fpdf, 3);
+    $table= new easyTable($fpdf, '{35, 45, 55}', 'width:135;');
+    $table= new easyTable($fpdf, '%{35, 45, 55}', 'width:190;');
+```   
+   
+*Return value:*
+
+   An easyTable object    
+
+
+**function rowStyle( string $style )**
+
+*Description:*
+
+   Set or overwrite the style for all the cells in the current row.
+
+*Parameters:*
+
+style
+   
+   a semicolon-separated string of attribute values that defines the 
+   layout of all the cells and its content in the current row 
+   (see Documentation section in README.md)
+
+*Return values*
+
+   Void
+   
+*Notes:*
+
+   This function should be called before the first cell of the current row
+
+
+**function easyCell( string $data [, string $style = '' ])**
+
+*Description:*
+
+    Makes a cell in the table
+
+*Parameters:*
+
+data   
+    the content of the respective cell
+
+style (optional)
+    a semicolon-separated string of attribute values that defines the 
+    layout of the cell and its content (see Documentation section in README.md)
+
+*Return value*
+
+    void
+   
+
+
+**function printRow ( [ bool $setAsHeader = false ] )**
+
+*Description:*
+
+   This function indicates the end of the current row. 
+
+*Parameters:*
+
+setAsHeader (optional)
+    When it is set as true, it sets the current row as the header
+    for the table; this means that the current row will be printed as the first
+    row of the table (table header) on every page that the table splits on.
+    Remark: 1. In order to work, the table attribute split-row should set as false. 
+            2. Just the first row where this parameter is set as true will be
+               used as header any other will printed as a normal row.
+            3. For row headers with cells that spans to multiple rows, 
+               the last the parameter should be set in the last row 
+               of the group. See [example 2](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/example-2.pdf)
+
+*Return values*
+
+   Void
+
+*Note:*
+
+   This function will print the current row as far as the following holds:
+```   
+      total_rowspan=0
+```
+   where total_rowspan is set as 
+```   
+      total_rowspan=max(total_rowspan, max(rowspan of cell in the current row))-1;
+```             
+
+**function endTable( [ int $bottomMargin = 2 ])**
+
+*Description:*
+
+   Unset all the data members of the easyTable object
+
+*Parameters:*
+
+bottomMargin (optional)
+
+   Optional. Specify the size in [user units](#user-units) of the bottom margin for the table. Default 2 in user units.
+   
+   If it is negative, the vertical position will be set before
+   the end of the table.   
+
+*Return values*
+
+   Void
+
+
+**Style String**
+
+In the same fashion as in-line CSS style, Easy Table uses 
+strings of semicolon-separated pairs of properties/values to
+define the styles to be applied to the different parts of 
+a table. A value set on a property at the table level will be inherited 
+by all the rows (therefore all the cells) in the table. A value set
+on a property at the row level, will be overwrite the value inherited from the table
+and, will be passed to all the cells in that row, unless a cell 
+defines its own value for that property.
+
+In what follows, we are going to use the following notation:
+
+    C=cell
+    R=row
+    T=table
+
+**PROPERTY** [C/R/T] means that the property PROPERTY can be set on cells, rows, table. 
+
+Full list of properties:
+
+**width** [T]
+
+The width property sets the width of a table.
+This property can be defined in [user units](#user-units) or in percentage of the width of the document.
+
+Syntax:
+
+    width:user-units|%;
+
+Examples:
+
+    width:145;// 145mm if the user units is mm
+    width:70%;
+
+Default: the width of the document minus the right and left margin.
+   
+**border** [C/R/T]
+
+The border property indicates if borders must be drawn around the cell or the cells. 
+The value can be either a number:
+
+    0: no border
+    1: frame
+
+or a string containing some or all of the following characters (in any order):
+
+    L: left border
+    T: top border
+    R: right border
+    B: bottom border
+
+Default value: 0. 
+
+
+**border-color** [C/R/T]
+
+The border-color property is used to set the colour of the border to be drawn 
+around the cells. The value can be: Hex color code or RGB color code.
+
+Syntax:
+
+    border-color: Hex |RGB;
+
+Example:
+
+    border-color:#ABCABC;
+    border-color:#ABC;
+    border-color:79,140, 200;
+
+Default value: the current drawn colour set in the document
+
+Note: beware that when set this attribute at the cell level, because the borders of the cells 
+      overlap each other, the results might not be as expected on adjacent cell with different
+      border color.
+
+
+**border-width** [T]
+
+The border-width property is used to set the width of the lines the border is made of.
+
+Syntax:
+
+    border-width:0.5;
+
+Default value: the current drawing line width of the document.
+
+Note: beware that if the border-width is set to thick, the border might overlap the content
+      of the cells. In that case you will have to set appropriate paddingX and paddingY on the cells.
+      (See paddingX and paddingY properties below).
+
+
+**split-row** [T]
+
+This property indicate if a row that is at the bottom of the page should be split or not
+when it reaches the bottom margin, except for rows that contains cell that span
+to different rows, in this case the row splits. By the fault, any row that does not fit in the page
+is printed in the next page. Setting the property to false, it will split any row
+between the pages. 
+
+Example: 
+
+    split-row:false;
+
+
+**l-margin** [T]
+
+This property indicate the distance from the left margin from where the table should start.
+
+Syntax:
+
+    l-maring:user-units;
+
+Example:
+
+    l-maring:45;
+
+Default value: 0.
+
+**min-height** [R] 
+
+The min-height property set the minimum height for all the cells (with rowspan:1) in that
+specific row.
+
+Syntax:
+
+    min-height:user-units;
+
+Example:
+
+    min-height:35;
+
+
+Default value: 0.
+
+**align** [C/R/T] 
+
+This property indicates the horizontal alignment of the element in which it is set.
+The values can be: 
+
+    L: to the left
+    C: at the centre
+    R: to the right
+    J: justified (applicable just on cells)
+
+Syntax for tables is:
+
+    align:A;
+    align:A{A-1A-2A-3A-4...};
+
+Explanation: the first character indicates the horizontal alignment of the table 
+(as far as l-margin is not set), while the optional string is a string of the form: 
+{A-1A-2A-3A-4...} (curly brackets included) where A-1, A-2, A-3, A-4, etc. can be L, C, R or J and
+the A-n letter indicates the horizontal alignment for the content of all the cells in the
+n-th row. If the number of rows is greater than the length of the optional string, 
+the overflowed rows will have default alignment to the left (L).
+
+Example: (table with 10 rows)
+
+    align:R{CCCLLJ};
+
+means that the table is aligned to the right of the document, the content of the 
+cells in the first three rows will be aligned at the centre, the content of the
+cells in the 4-th and 5-th rows will be aligned to the left and the the content of cells in 
+the 6-th row will be aligned to the right, while the rest of the cell contents in the remaining 
+rows will be aligned to the left.
+
+Syntax for rows is
+
+    align:{A-1A-2A-3A-4...};
+
+where A-1, A-2,... etc are as in the table case and with the same functionality: 
+the A-n character indicates the alignment of the cells in the n-th column that are
+in the respective row.
+
+Example:
+
+    align:{LRCCRRLJ}
+
+Syntax for cells is
+
+    align:A;
+
+where A can be L, C, R, J.
+
+Default value: L.
+
+**valign** [C/R/T] 
+
+The property valign defines the vertical alignment of the content of the cells.
+The values can be:
+
+    T: top
+    M: middle
+    B: bottom
+
+Example:
+
+    valign:M; 
+
+Default: T.
+
+Remark: *when using valign property on cell with image property set (see below),
+if the cell does not have text, the behaviour of valign is as expected, this is,
+the image is positioned accordingly to the value of valign. However, if the cell contains
+text, the image and the text are valign-ed in the middle of the cell but 
+top (T) or middle (M) valign set the text on top of the image, while valign:B set the text 
+under the image.*
+
+
+**bgcolor** [C/R/T]
+
+The bgcolor property defines the background colour of the cells
+The value can be: Hex color code or RGB color code.
+
+Syntax:
+
+    bgcolor:Hex | RGB;
+
+Example:
+
+    bgcolor:#ABCABC;
+    bgcolor:#ABC;    
+    bgcolor:79,140, 200;
+
+Default: the current fill color set in the document
+
+
+**font-family** [C/R/T],
+
+It can be either a name defined by the FPDF method AddFont() or 
+one of the standard families (case insensitive):
+
+    Courier (fixed-width)
+    Helvetica or Arial (synonymous; sans serif)
+    Times (serif)
+    Symbol (symbolic)
+    ZapfDingbats (symbolic)
+
+It is also possible to pass an empty string. In that case, the current family is kept. 
+
+Example:
+
+    font-family:times;
+
+Default: the font-family set in the document.
+
+**font-style** [C/R/T]
+
+Possible values are (case insensitive):
+
+    empty string: regular
+    B: bold
+    I: italic
+    U: underline
+
+or any combination. The default value is regular. Bold and italic styles do not 
+apply to Symbol and ZapfDingbats. 
+
+Example:
+
+    font-style:IBU
+
+Default: empty;
+
+**font-size** [C/R/T]
+
+Font size in points.
+
+Example:
+
+    font-size:16;
+
+Default: the current font size of the document.
+
+**font-color** [C/R/T]
+
+This property defines the color of the font for the cells
+The value can be: Hex color code or RGB color code.
+
+Syntax:
+
+    font-color:Hex |RGB;
+
+Example:
+
+    font-color:#ABCABC;
+    font-color:#ABC;    
+    font-color:79,140, 200;
+
+Default value: the current font color set in the document
+
+**line-height** [C/R/T]
+
+The line-height property specifies the line height.
+
+Syntax:
+
+    line-height:number;
+
+Example:
+
+    line-height:1.2;
+
+Default value: 1.
+
+**paddingX** [C/R/T] 
+
+The paddingX property sets the left and right padding (space) of the cells.
+
+Syntax:
+
+    paddingX:user-units;
+
+Example:
+
+    paddingX:4;
+
+Default: 0.5.
+
+**paddingY** [C/R/T] 
+
+The paddingY property sets the top and bottom padding (space) of the cells.
+
+Syntax
+
+    paddingY:user-units;
+
+Example:
+
+    paddingY:3;
+
+Default: 1.
+
+**colspan** [C]
+
+The colspan attribute defines the number of columns a cell should span.
+
+Syntax:
+
+    colspan:4;
+
+Default 1
+
+**rowspan** [C]
+The rowspan attribute defines the number of rows a cell should span.
+
+Syntax:
+
+    rowspan:2;
+
+Default 1
+
+**img** [C]
+The img attribute defines the image and its dimensions to be set in the cell.
+
+Syntax:
+
+    img:image.png,w80,h50;
+    img:image.png,h50;
+    img:image.png;
+
+If no dimensions are specified, the image dimensions are calculate proportionally 
+to fit the width of the cell.
+If one out of the two dimensions (width or height) is specified but not the other
+the one that is not specified is calculated proportionally.
+Default value: empty.
+
+# Fonts And UTF8 Support
+
+1. Get the ttf files for the font you want to use and save them in a directory
+   Fonts. 
+   
+   **NOTE:** If you want to use bold, italic or bold-italic font styles you need 
+   the respective font files too.
+
+   **NOTE:** the font must contain the characters you want to use
+   
+2. Using the script makefont.php part of FPDF library (in the makefont directory)
+
+       me@laptop:/path/to/FPDF/makefont$ php makefont.php /path/to/Fonts/My_font.ttf ENCODE
+
+	Note: use the right encode in order to use utf-8 symbols [FPDF: Tutorial 7](http://www.fpdf.org/en/tutorial/tuto7.htm).
+
+   **NOTE:** the font must contain the characters corresponding to the selected encoding.  
+   
+3. The last command will create the files My_font.php and My_font.z in 
+   the directory /path/to/FPDF/makefont move those file to the directory 
+   /path/to/FPDF/font
+   
+4. You are ready to use your fonts in your script:
+
+       $pdf = new PDF();
+       $pdf->AddFont('Cool-font','','My_font.php');  // Define the new font to use in the PDF object
+       
+       // more code
+       
+       $table=new easyTable($pdf, ...);
+       $table->easyCell(iconv("UTF-8", "ENCODE",'Hello World'), 'font-color:#66686b;font-family:Cool-font');
+       //etc...
+
+5. [Example](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.pdf): 
+   we get a ttf font file (my_font.ttf) that support the language and symbols we want to use.
+   For this example we are using Russian. The encode that we are using for Russian is KOI8-R
+
+       php makefont.php /path/to/font_ttf/my_font.ttf KOI8-R
+   
+   then we copy the resulting files to the font directory of FPDF library. 
+   
+   Then, in our script:
+
+       $pdf = new PDF();
+ 
+       $pdf->AddFont('FontUTF8','','my_font.php'); 
+  
+       $pdf->SetFont('FontUTF8','',8); // set default font for the document 
+
+       $table=new easyTable($pdf, ...);
+	
+       $Table->easyCell(iconv("UTF-8", "KOI8-R", "дебет дефинитионес цу")); // Notice the encode KOI8-R
+
+   or
+   
+       $pdf = new PDF();
+       $pdf->AddPage();
+       $pdf->SetFont('Arial','B',16);
+       
+       $pdf->AddFont('FontUTF8','','my_font.php'); 
+  
+       $table=new easyTable($pdf, 5, '...');	
+       $Table->easyCell(iconv("UTF-8", "KOI8-R", "дебет дефинитионес цу"), 'font-family:FontUTF8;'); 
+       
+
+   NOTE: For more about the right encode visit [FPDF: Tutorial 7](http://www.fpdf.org/en/tutorial/tuto7.htm)
+   and [php inconv](http://php.net/manual/en/function.iconv.php)
+   
+# Using with FPDI
+
+If your project requieres easyTable and [FPDI](https://www.setasign.com/products/fpdi/about/), this is
+how you should do it. Assuming that fpdf.php, easyTable.php, exfpdf.php, fpdi.php and any 
+other files from this libraries are in the same directory. 
+
+The class exfpdf should extends the class fpdi instead of the class fpdf. So in exfpdf.php:
+
+    <?php
+
+    class exFPDF extends FPDI
+    {
+    etc
+    etc
+
+And in your project:
+
+    <?php
+    include 'fpdf.php';
+    include 'fpdi.php';
+    include 'exfpdf.php';
+    include 'easyTable.php';
+
+    //$pdf = new FPDI(); remember exfpdf is extending the fpdi class
+    $pdf=new exFPDF(); // so we initiate exFPDF instead of FPDI
+
+    // add a page
+    $pdf->AddPage();
+    // set the source file
+    $pdf->setSourceFile("example-2.pdf");
+    // import page 1
+    $tplIdx = $pdf->importPage(1);
+    // use the imported page and place it at point 10,10 with a width of 100 mm
+    $pdf->useTemplate($tplIdx, 10, 10, 100);
+
+    //add another page
+    $pdf->AddPage();
+    $pdf->SetFont('helvetica','',10);
+
+    $table1=new easyTable($pdf, 2);
+    $table1->easyCell('Sales Invoice', 'font-size:30; font-style:B; font-color:#00bfff;');
+    $table1->easyCell('', 'img:fpdf.png, w80; align:R;');
+    $table1->printRow();
+    //etc
+    //etc
+    
+# Tag Based Font Style
+
+The new version of FPDF EasyTable can handle tag-based font styles at string level.
+
+    $table->easyCell('Project: EasyTable', 'font-family:lato; font-size:30; font-color:#00bfff;');
+
+now we can do:
+
+    $table->easyCell('<b>Project:</b> <s "font-size:20; font-family:times">EasyTable</s>', 'font-family:lato; font-size:30; font-color:#00bfff;');
+
+The font style set at the string level will over write any other font style set at the cell, row or table level.
+
+Please see the [example](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.pdf)
+  * [Code](https://github.com/fpdf-easytable/fpdf-easytable/blob/master/basic_example.php)
+
+Tags
+
+**<s "fontstyle"></s>**
+
+font-style is a semicolon separated string which can include: font-size, font-family, font-style, font-color, href;
+
+   Note: Remember to define every font your project needs.
+
+    $pdf->AddFont('MyFabFont','','my_font.php');   
+    $pdf->AddFont('MyFabFont','B','my_font_bold.php');   
+    $pdf->AddFont('MyFabFont','I','my_font_italic.php');   
+    $pdf->AddFont('MyFabFont','BI','my_font_bolditalic.php');   
+
+font-color can be Hex color code or RGB color code.
+
+**Shortcuts** 
+
+    <b></b> is equalt to: <s "font-style:B"></s>
+    <i></i> is equalt to: <s "font-style:I"></s>
+
+**Tags can be nested**
+
+When nested tags are used, the result is similar to the case in HTML documents.
+
+    <b>Helo <i>world</i></b>
+
+     <s "font-style:I; font-color#abc123; font-family:times">Hello  <s "font-style:B; font-family:lato; font-size:20">world</s></s>
+
+- Different font style can be applied to the letters of a word.
+
+````
+	<b>H<i>e</i><s "font-family:myfont">ll<s "font-size">o</s></s></b> 
+````
+
+**Links**
+
+Use the property 'href' to set links
+
+    <b>Helo <s "font-family:my_fab_font; font-color:#AABBCC; href:http://www.example.com">world</s></b>
+
+
+**Escape sequence**
+
+The sequence '\\<s' is parced as '<s'
+
+    <b>Helo <s "font-family:my_fab_font;">\<sammy@example.com></s></b>
+
+
+# User units
+
+EasyTable supports the same user units (pt/mm/cm/in) supported by [FPDF: construct](http://www.fpdf.org/en/doc/__construct.htm).
+Bare in mind that any unit related setting (width, border, etc.) needs to be in the respective unit set at the 
+top document. For example if the units for the document is set as inch, then, all the settings
+unit related will be considered in the same user units, for instance min-height:1.2; will mean 1.2in.
+
+# Common Error
+
+A very typical situation is: *"EasyTable works in my localhost but it does not
+work in remote server"*... Seriously, what on earth it has to do with EasyTable?... And the error
+reported is 
+    Fatal error: Uncaught exception 'Exception' with message 'FPDF error: Some data has 
+    already been output, can't send PDF file... etc etc...
+
+This happens because when the server runs the script to output a PDF document, it sets the headers 
+as PDF document, however something is trying to output text or html code (for instance an exception or an 
+echo statment) so the server can not change the header for the respective output. 
+is outputting html/txt data.
+
+Another very common error is to forget to add the fonts and its appropiated style (I, B, IB) used in the document. 
+Let's suppose that in your document you use "my_favourite_font". Then you need to add 
+
+    $pdf->AddFont('MyFabFont','','my_favourite_font.php'); 
+    
+if you are using the bold version of it, then you must add:      
+
+    $pdf->AddFont('MyFabFont','B','my_favourite_font_bold.php');   
+
+if you are using the italic version, then you need to add:
+
+    $pdf->AddFont('MyFabFont','I','my_favourite_font_italic.php');   
+
+if you are using the bold-italic, then
+
+    $pdf->AddFont('MyFabFont','BI','my_favourite_font_bolditalic.php');
+
+You need to generate each of the font files that needs to be added in your project
+('my_favourite_font_bold.php', 'my_favourite_font_italic.php', 'my_favourite_font_bolditalic.php'),
+refer to your font documentation and see [Fonts And UTF8 Support](https://github.com/fpdf-easytable/fpdf-easytable#fonts-and-utf8-support).
+
+# Get In Touch
+
+Your comments and questions are welcome: easytable@yandex.com (with the subject: EasyTable)
+
+# Other projects
+
+- [Simple Unit Test](https://github.com/fpdf-easytable/simple_unit_test) PHP unit test as it should be.
+- [SimpleCharts.js](https://github.com/fpdf-easytable/simpleCharts.js)
+- [Ajax Server Response Hander](https://github.com/fpdf-easytable/ajax_server_response_hander) Simplify server response from ajax calls
+- [Crypt](https://github.com/fpdf-easytable/Crypt)
+- [Duplicate Image Finder](https://github.com/volatilflerovium/Duplicate_Image_Finder)
+- [Classic 3D-Puzzles](https://github.com/volatilflerovium/3D-Puzzles)
+
+# Donations
+
+Any monetary contribution would be appreciated :-)
+
+If you are using this for the company you work for, they are getting the money, you are getting 
+the medals and I am getting nothing! Is that fair?
+
+It does cost NOTHING to push the freaky star button!!
+
+[![Donate](https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JALWQVBS2KGQC)
+
+
+# License
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
+
+
+
diff --git a/src/lib/fpdf-easytable/basic_example.pdf b/src/lib/fpdf-easytable/basic_example.pdf
new file mode 100644
index 0000000..0acbcc0
--- /dev/null
+++ b/src/lib/fpdf-easytable/basic_example.pdf
Binary files differ
diff --git a/src/lib/fpdf-easytable/basic_example.php b/src/lib/fpdf-easytable/basic_example.php
new file mode 100644
index 0000000..fd46cec
--- /dev/null
+++ b/src/lib/fpdf-easytable/basic_example.php
@@ -0,0 +1,49 @@
+<?php
+ include 'fpdf.php';
+ include 'exfpdf.php';
+ include 'easyTable.php';
+
+ $pdf=new exFPDF();
+ $pdf->AddPage(); 
+ $pdf->SetFont('helvetica','',10);
+
+ $pdf->AddFont('lato','','Lato-Regular.php');
+
+ $pdf->Write(6, 'Some writing...');
+
+ $pdf->Ln(5);
+
+ $pdf->Write(6, 'Integer eget risus non dui scelerisque consectetur. Integer eleifend in nibh in mattis. Aenean eu justo quis mauris tempus eleifend. Praesent malesuada turpis ut justo semper tempor. Integer varius, nisi non elementum molestie, leo arcu euismod velit, eu tempor ligula diam convallis sem. Sed ultrices hendrerit suscipit. Pellentesque volutpat a urna nec placerat. Etiam auctor dapibus leo nec ullamcorper. Nullam id placerat elit. Vivamus ut quam a metus tincidunt laoreet sit amet a ligula. Sed rutrum felis ipsum, sit amet finibus magna tincidunt id. Suspendisse vel urna interdum lacus luctus ornare. Curabitur ultricies nunc est, eget rhoncus orci vestibulum eleifend. In in consequat mi. Curabitur sodales magna at consequat molestie. Aliquam vulputate, neque varius maximus imperdiet, nisi orci accumsan risus, sit amet placerat augue ipsum eget elit. Quisque sodales orci non est tincidunt tincidunt. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In ut diam in dolor ultricies accumsan sit amet eu ex. Pellentesque aliquet scelerisque ullamcorper. Aenean porta enim eget nisl viverra euismod sed non eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at imperdiet sem, non volutpat metus. Phasellus sed velit sed orci iaculis venenatis ac id risus.');
+ 
+ $pdf->Ln(10);
+
+ $pdf->AddFont('FontUTF8','','Arimo-Regular.php'); 
+ $pdf->AddFont('FontUTF8','B','Arimo-Bold.php'); 
+ $pdf->AddFont('FontUTF8','BI','Arimo-BoldItalic.php'); 
+ $pdf->AddFont('FontUTF8','I','Arimo-Italic.php'); 
+ 
+ $table=new easyTable($pdf, 3, 'border:1;font-size:12;');
+ 
+    $table->easyCell('<b>This text is in bold</b> and <i>this is in italic</i> and this is normal', 'valign:T; bgcolor:#eee6ff;'); 
+    $table->easyCell("T<s 'font-color:#3399ff; font-style:B; font-size:19'>h</s><s 'font-color:#00cc00; font-style:I; font-size:21'>i</s>s <s 'font-color:#ff0000; font-style:BI; font-size:8'>is</s> a <s 'font-color:#0099ff; font-size:25'><b>c</b><i>r</i><bi>a</bi><b>z</b><i>y</i></s> text");
+    $table->easyCell("<s 'font-color:#4da6ff; font-style:B; font-size:18'><i>And can do it with Russian, just because <s 'font-size:25; font-color:#66ff99'>we can!</s></i></s>", 'font-style:I;');
+    $table->printRow();
+
+    $table->rowStyle('min-height:60; align:{C};font-size:18;');   // let's adjust the height of this row
+    $table->easyCell(iconv("UTF-8", 'KOI8-R', '<b>Вери</b> порро <i>номинати</i> вел ех, <b><i>еум</i></b> те лаореет импедит, <s "font-style:B;font-size:18; font-color:#3399ff">ест но ферри ириуре.</s> Ет вис реяуе хомеро. Перфецто сцрипсерит вис еу, нам ин ассум пробатус. Фиерент импердиет аппеллантур меи но, граеце яуодси пертинациа вел ад, не при лудус оратио тациматес. Хис дебет дефинитионес цу.
+    
+    <s "font-family:times;font-size:20;">Set different font-families <s "font-family:lato;font-size:25;">in the same cell</s></s>  
+    
+    <s "font-family:times;font-size:18;">This is a link <s "font-family:lato;font-size:20;font-color:#0099ff; href:http://www.fpdf.org/">FPDF</s></s>  
+    
+    '), 'colspan:4; font-family:FontUTF8; font-size:12;');
+
+    $table->printRow();
+
+ $table->endTable(4);
+ 
+//-----------------------------------------
+
+ $pdf->Output(); 
+
+?>
\ No newline at end of file
diff --git a/src/lib/fpdf-easytable/easyTable.php b/src/lib/fpdf-easytable/easyTable.php
new file mode 100755
index 0000000..7a3840a
--- /dev/null
+++ b/src/lib/fpdf-easytable/easyTable.php
@@ -0,0 +1,1017 @@
+<?php
+ /*********************************************************************
+ * FPDF easyTable                                                     *
+ *                                                                    *
+ * Version: 2.0                                                       *
+ * Date:    12-10-2017                                                *
+ * Author:  Dan Machado                                               *
+ * Require  exFPDF v2.0                                              *
+ **********************************************************************/
+  
+class easyTable{
+   const LP=0.4;
+   const XPadding=1;
+   const YPadding=1;
+   const IMGPadding=0.5;
+   const PBThreshold=30;
+   static private $table_counter=false;
+   static private $style=array('width'=>false, 'border'=>false, 'border-color'=>false,
+   'border-width'=>false, 'line-height'=>false,
+   'align'=>'', 'valign'=>'', 'bgcolor'=>false, 'split-row'=>false, 'l-margin'=>false,
+   'font-family'=>false, 'font-style'=>false,'font-size'=>false, 'font-color'=>false,
+   'paddingX'=>false, 'paddingY'=>false);
+   private $pdf_obj;
+   private $document_style;
+   private $table_style;
+   private $col_num;
+   private $col_width;
+   private $baseX;
+   private $row_style_def;
+   private $row_style;
+   private $row_heights;
+   private $row_data;
+   private $rows;
+   private $total_rowspan;
+   private $col_counter;
+   private $grid;
+   private $blocks;
+   private $overflow;
+   private $header_row;
+   private $new_table;
+
+   private function get_available($colspan, $rowspan){
+      static $k=0;
+      if(count($this->grid)==0){
+         $k=0;
+      }
+      while(isset($this->grid[$k])){
+         $k++;
+      }
+      for($i=0; $i<=$colspan; $i++){
+         for($j=0; $j<=$rowspan; $j++){
+            $this->grid[$k+$i+$j*$this->col_num]=true;
+         }
+      }
+      return $k;
+   }
+
+   private function get_style($str, $c){
+      $result=self::$style;
+      if($c=='C'){
+         $result['colspan']=0;
+         $result['rowspan']=0;
+         $result['img']=false;
+      }
+      if($c=='C' || $c=='R'){
+         unset($result['width']);
+         unset($result['border-width']);
+         unset($result['split-row']);
+         unset($result['l-margin']);
+      }
+      if($c=='R' || $c=='T'){
+         if($c=='R'){
+            $result['c-align']=array_pad(array(), $this->col_num, 'L');
+         }
+         else{
+            $result['c-align']=array();
+         }
+      }
+      if($c=='R'){
+         $result['min-height']=false;
+      }
+      $tmp=explode(';', $str);
+      foreach($tmp as $x){
+         if($x && strpos($x,':')>0){
+            $r=explode(':',$x);
+            $r[0]=trim($r[0]);
+            $r[1]=trim($r[1]);
+            if(isset($result[$r[0]])){
+               $result[$r[0]]=$r[1];
+            }
+         }
+      }
+      return $result;
+   }
+
+   private function inherating(&$sty, $setting, $c){
+      if($c=='C'){
+         $sty[$setting]=$this->row_style[$setting];
+      }
+      elseif($c=='R'){
+         $sty[$setting]=$this->table_style[$setting];
+      }
+      else{
+         $sty[$setting]=$this->document_style[$setting];
+      }
+   }
+   
+   private function conv_units($x)
+   {
+      if($this->pdf_obj->get_scale_factor()==72/25.4)
+      {
+         return $x;
+      }
+
+      if($this->pdf_obj->get_scale_factor()==72/2.54)
+      {
+         return $x/10;
+      }
+
+      if($this->pdf_obj->get_scale_factor()==72)
+      {
+         return $x/25.4;
+      }
+
+      return $x/0.3527777778;
+   }
+
+   private function set_style($str, $c, $pos=''){
+      $sty=$this->get_style($str, $c);
+      if($c=='T'){
+         if(is_numeric($sty['width'])){
+            $sty['width']=min(abs($sty['width']),$this->document_style['document_width']);
+            if($sty['width']==0){
+               $sty['width']=$this->document_style['document_width'];
+            }
+         }
+         else{
+            $x=strpos($sty['width'], '%');
+            if($x!=false){
+               $x=min(abs(substr($sty['width'], 0, $x)), 100);
+               if($x){
+                  $sty['width']=$x*$this->document_style['document_width']/100.0;
+               }
+               else{
+                  $sty['width']=$this->document_style['document_width'];
+               }
+            }
+            else{
+               $sty['width']=$this->document_style['document_width'];
+            }
+         }
+         if(!is_numeric($sty['l-margin'])){
+            $sty['l-margin']=0;
+         }
+         else{
+            $sty['l-margin']=abs($sty['l-margin']);
+         }
+         if(is_numeric($sty['border-width'])){
+            $sty['border-width']=abs($sty['border-width']);
+         }
+         else{
+            $sty['border-width']=false;
+         }
+         if($sty['split-row']=='false'){
+            $sty['split-row']=false;
+         }
+         elseif($sty['split-row']!==false){
+            $sty['split-row']=true;
+         }
+      }
+      if($c=='R'){
+         if(!is_numeric($sty['min-height']) || $sty['min-height']<0){
+            $sty['min-height']=0;
+         }
+      }
+      if(!is_numeric($sty['paddingX'])){
+         if($c=='C' || $c=='R'){
+            $this->inherating($sty, 'paddingX', $c);
+         }
+         else{
+            $sty['paddingX']=$this->conv_units(self::XPadding);
+         }
+      }
+      $sty['paddingX']=abs($sty['paddingX']);
+      if(!is_numeric($sty['paddingY'])){
+         if($c=='C' || $c=='R'){
+            $this->inherating($sty, 'paddingY', $c);
+         }
+         else{
+            $sty['paddingY']=$this->conv_units(self::YPadding);
+         }
+      }
+      $sty['paddingY']=abs($sty['paddingY']);
+      if($sty['border']===false && ($c=='C' || $c=='R')){
+         $this->inherating($sty, 'border', $c);
+      }
+      else{
+         $border=array('T'=>1, 'R'=>1, 'B'=>1, 'L'=>1);
+         if(!(is_numeric($sty['border']) && $sty['border']==1)){
+            foreach($border as $k=>$v){
+               $border[$k]=0;
+               if(strpos($sty['border'], $k)!==false){
+                  $border[$k]=1;
+               }
+            }
+         }
+         $sty['border']=$border;
+      }
+      $color_settings=array('bgcolor', 'font-color', 'border-color');
+      foreach($color_settings as $setting){
+         if($sty[$setting]===false || !($this->pdf_obj->is_hex($sty[$setting]) || $this->pdf_obj->is_rgb($sty[$setting]))){
+            if($c=='C' || $c=='R'){
+               $this->inherating($sty, $setting, $c);
+            }
+            elseif($setting=='font-color'){
+               $sty[$setting]=$this->document_style[$setting];
+            }
+         }
+         else{
+            $sty[$setting]=$sty[$setting];
+         }
+      }
+      $font_settings=array('font-family', 'font-style', 'font-size');
+      foreach($font_settings as $setting){
+         if($sty[$setting]===false){
+            $this->inherating($sty, $setting, $c);
+         }
+      }
+      if(is_numeric($sty['line-height'])){
+         $sty['line-height']=$this->conv_units(self::LP)*abs($sty['line-height']);
+      }
+      else{
+         if($c=='C' || $c=='R'){
+            $this->inherating($sty,'line-height', $c);
+         }
+         else{
+            $sty['line-height']=$this->conv_units(self::LP);
+         }
+      }
+      if($c=='C'){
+         if($sty['img']){
+            $tmp=explode(',', $sty['img']);
+            if(file_exists($tmp[0])){
+               $sty['img']=array('path'=>'', 'h'=>0, 'w'=>0);
+               $img=@ getimagesize($tmp[0]);
+               $sty['img']['path']=$tmp[0];
+               for($i=1; $i<3; $i++){
+                  if(isset($tmp[$i])){
+                     $tmp[$i]=trim(strtolower($tmp[$i]));
+                     if($tmp[$i][0]=='w' || $tmp[$i][0]=='h'){
+                        $t=substr($tmp[$i],1);
+                        if(is_numeric($t)){
+                           $sty['img'][$tmp[$i][0]]=abs($t);
+                        }
+                     }
+                  }
+               }
+               $ration=$img[0]/$img[1];
+               if($sty['img']['w']+$sty['img']['h']==0){
+                  $sty['img']['w']=$img[0];
+                  $sty['img']['h']=$img[1];
+               }
+               elseif($sty['img']['w']==0){
+                  $sty['img']['w']=$sty['img']['h']*$ration;
+               }
+               elseif($sty['img']['h']==0){
+                  $sty['img']['h']=$sty['img']['w']/$ration;
+               }
+            }
+            else{
+               $sty['img']='failed to open stream: file ' . $tmp[0] .' does not exist';
+            }
+         }
+         if(is_numeric($sty['colspan']) && $sty['colspan']>0){
+            $sty['colspan']--;
+         }
+         else{
+            $sty['colspan']=0;
+         }
+         if(is_numeric($sty['rowspan']) && $sty['rowspan']>0){
+            $sty['rowspan']--;
+         }
+         else{
+            $sty['rowspan']=0;
+         }
+         if($sty['valign']==false && ($sty['rowspan']>0 || $sty['img']!==false)){
+            $sty['valign']='M';
+         }
+         if($sty['align']==false && $sty['img']!==false){
+            $sty['align']='C';
+         }
+      }
+      if($c=='T' || $c=='R'){
+         $tmp=explode('{',$sty['align']);
+         if($c=='T'){
+            $sty['align']=trim($tmp[0]);
+         }
+         if(isset($tmp[1])){
+            $tmp[1]=trim($tmp[1], '}');
+            if(strlen($tmp[1])){
+               for($i=0; $i<strlen($tmp[1]); $i++){
+                  if(preg_match("/[LCRJ]/", $tmp[1][$i])!=0){
+                     $sty['c-align'][$i]=$tmp[1][$i];
+                  }
+                  else{
+                     $sty['c-align'][$i]='L';
+                  }
+               }
+            }
+            if($c=='R'){
+               $sty['align']='L';
+               $sty['c-align']=array_slice($sty['c-align'],0,$this->col_num);
+            }
+         }
+      }
+      if($sty['align']!='L' && $sty['align']!='C' && $sty['align']!='R' && $sty['align']!='J'){
+         if($c=='C'){
+            $sty['align']=$this->row_style['c-align'][$pos];
+         }
+         elseif($c=='R'){
+            $sty['align']='L';
+            $sty['c-align']=$this->table_style['c-align'];
+         }
+         else{
+            $sty['align']='C';
+         }
+      }
+      elseif($c=='T' && $sty['align']=='J'){
+         $sty['align']='C';
+      }
+      if($sty['valign']!='T' && $sty['valign']!='M' && $sty['valign']!='B'){
+         if($c=='C' || $c=='R'){
+            $this->inherating($sty, 'valign', $c);
+         }
+         else{
+            $sty['valign']='T';
+         }
+      }
+      return $sty;
+   }
+
+   private function row_content_loop($counter, $f){
+      $t=0;
+      if($counter>0){
+         $t=$this->rows[$counter-1];
+      }
+      for($index=$t; $index<$this->rows[$counter]; $index++){
+         $f($index);
+      }
+   }
+
+   private function mk_border($i, $y, $split){
+      $w=$this->row_data[$i][2];
+      $h=$this->row_data[$i][5];
+      if($split){
+         $h=$this->pdf_obj->PageBreak()-$y;
+      }
+      if($this->row_data[$i][1]['border-color']!=false){
+         $this->pdf_obj->resetColor($this->row_data[$i][1]['border-color'], 'D');
+      }
+      $a=array(1, 1, 1, 0);
+      $borders=array('L'=>3, 'T'=>0, 'R'=>1, 'B'=>2);
+      foreach($borders as $border=>$j){
+         if($this->row_data[$i][1]['border'][$border]){
+            if($border=='B'){
+               if($split==0){
+                  $this->pdf_obj->Line($this->row_data[$i][6]+(1+$a[($j+2)%4])%2*$w, $y+(1+$a[($j+1)%4])%2 * $h, $this->row_data[$i][6]+$a[$j%4]*$w, $y+($a[($j+3)%4])%2 *$h);
+               }
+            }
+            else{
+               $this->pdf_obj->Line($this->row_data[$i][6]+(1+$a[($j+2)%4])%2*$w, $y+(1+$a[($j+1)%4])%2 * $h, $this->row_data[$i][6]+$a[$j%4]*$w, $y+($a[($j+3)%4])%2 *$h);
+            }
+         }
+      }
+      
+      if($this->row_data[$i][1]['border-color']!=false){
+         $this->pdf_obj->resetColor($this->document_style['bgcolor'], 'D');
+      }
+      if($split){
+         $this->pdf_obj->row_data[$i][1]['border']['T']=0;
+      }
+   }
+
+   private function print_text($i, $y, $split){
+      $padding=$this->row_data[$i][1]['padding-y'];
+      $k=$padding;
+      if($this->row_data[$i][1]['img']!==false){
+         if($this->row_data[$i][1]['valign']=='B'){
+            $k+=$this->row_data[$i][1]['img']['h']+$this->conv_units(self::IMGPadding);
+         }
+      }
+      $l=0;
+      if(count($this->row_data[$i][0])){
+         $x=$this->row_data[$i][6]+$this->row_data[$i][1]['paddingX'];
+         $xpadding=2*$this->row_data[$i][1]['paddingX'];
+         $l=count($this->row_data[$i][0])* $this->row_data[$i][1]['line-height']*$this->row_data[$i][1]['font-size'];
+         $this->pdf_obj->SetXY($x, $y+$k);
+         $this->pdf_obj->CellBlock($this->row_data[$i][2]-$xpadding, $this->row_data[$i][1]['line-height'], $this->row_data[$i][0], $this->row_data[$i][1]['align']);
+         $this->pdf_obj->resetFont($this->document_style['font-family'], $this->document_style['font-style'], $this->document_style['font-size']);
+         $this->pdf_obj->resetColor($this->document_style['font-color'], 'T');
+      }
+      if($this->row_data[$i][1]['img']!==false ){
+         $x=$this->row_data[$i][6];
+         $k=$padding;
+         if($this->row_data[$i][1]['valign']!='B'){
+            $k+=$l+$this->conv_units(self::IMGPadding);
+         }
+         if($this->imgbreak($i, $y)==0 && $y+$k+$this->row_data[$i][1]['img']['h']<$this->pdf_obj->PageBreak()){
+            $x+=$this->row_data[$i][1]['paddingX'];
+            if($this->row_data[$i][2]>$this->row_data[$i][1]['img']['w']){
+               if($this->row_data[$i][1]['align']=='C'){
+                  $x-=$this->row_data[$i][1]['paddingX'];
+                  $x+=($this->row_data[$i][2]-$this->row_data[$i][1]['img']['w'])/2;
+               }
+               elseif($this->row_data[$i][1]['align']=='R'){
+                  $x+=$this->row_data[$i][2]-$this->row_data[$i][1]['img']['w'];
+                  $x-=2*$this->row_data[$i][1]['paddingX'];
+               }
+            }
+            $this->pdf_obj->Image($this->row_data[$i][1]['img']['path'], $x, $y+$k, $this->row_data[$i][1]['img']['w'], $this->row_data[$i][1]['img']['h']);
+         	$this->row_data[$i][1]['img']=false;
+         }
+      }
+   }
+   
+
+   private function mk_bg($i, $T, $split){
+      $h=$this->row_data[$i][5];
+      if($split){
+         $h=$this->pdf_obj->PageBreak()-$T;
+      }
+      if($this->row_data[$i][1]['bgcolor']!=false){
+         $this->pdf_obj->resetColor($this->row_data[$i][1]['bgcolor']);
+         $this->pdf_obj->Rect($this->row_data[$i][6], $T, $this->row_data[$i][2], $h, 'F');
+         $this->pdf_obj->resetColor($this->document_style['bgcolor']);
+      }
+   }
+
+   private function printing_loop($swap=false){
+      $this->swap_data($swap);
+      $y=$this->pdf_obj->GetY();
+      $tmp=array();
+      $rw=array();
+      $ztmp=array();
+      $total_cells=count($this->row_data);
+      while(count($tmp)!=$total_cells){
+         $a=count($this->rows);
+         $h=0;
+         $y=$this->pdf_obj->GetY();
+         for($j=0; $j<count($this->rows); $j++){
+            $T=$y+$h;
+            if($T<$this->pdf_obj->PageBreak()){
+
+                  $this->row_content_loop($j, function($index)use($T, $tmp){
+                  if(!isset($tmp[$index])){
+                     $split_cell=$this->scan_for_breaks($index,$T, false);
+                     $this->mk_bg($index, $T, $split_cell);
+                  }
+               });
+               if(!isset($rw[$j])){
+                  if($this->pdf_obj->PageBreak()-($T+$this->row_heights[$j])>=0){
+                     $h+=$this->row_heights[$j];
+                  }
+                  else{
+                     $a=$j+1;
+                     break;
+                  }
+               }
+            }
+            else{
+               $a=$j+1;
+               break;
+            }
+         }
+         $h=0;
+         for($j=0; $j<$a; $j++){
+            $T=$y+$h;
+            if($T<$this->pdf_obj->PageBreak()){
+
+                  $this->row_content_loop($j, function($index)use($T, &$tmp, &$ztmp){
+                  if(!isset($tmp[$index])){
+                     $split_cell=$this->scan_for_breaks($index,$T);
+                     $this->mk_border($index, $T, $split_cell);
+                     $this->print_text($index, $T, $split_cell);
+                     if($split_cell==0){
+                        $tmp[$index]=$index;
+                     }
+                     else{
+                        $ztmp[]=$index;
+                     }
+                  }
+               });
+               if(!isset($rw[$j])){
+                  $tw=$this->pdf_obj->PageBreak()-($T+$this->row_heights[$j]);
+                  if($tw>=0){
+                     $h+=$this->row_heights[$j];
+                     $rw[$j]=$j;
+                  }
+                  else{
+                     $this->row_heights[$j]=$this->overflow-$tw;
+                  }
+               }
+            }
+         }
+         if(count($tmp)!=$total_cells){
+            foreach($ztmp as $index){
+               $this->row_data[$index][5]=$this->row_data[$index][7]+$this->overflow;
+               if(isset($this->row_data[$index][8])){
+                  $this->row_data[$index][1]['padding-y']=$this->row_data[$index][8];
+                  unset($this->row_data[$index][8]);
+               }
+            }
+            $this->overflow=0;
+            $ztmp=array();
+            $this->pdf_obj->addPage($this->document_style['orientation'], $this->pdf_obj->get_page_size(), $this->pdf_obj->get_rotation());
+         }
+         else{
+            $y+=$h;
+         }
+      }
+      $this->pdf_obj->SetXY($this->baseX, $y);
+      $this->swap_data($swap);
+   }
+
+   private function imgbreak($i, $y){
+      $li=$y+$this->row_data[$i][1]['padding-y'];
+      $ls=$this->row_data[$i][1]['img']['h'];
+      if($this->row_data[$i][1]['valign']=='B'){
+         $ls+=$li;
+      }
+      else{
+         $li+=$this->row_data[$i][3]-$this->row_data[$i][1]['img']['h'];
+         $ls+=$li;
+      }
+      $result=0;
+      if($li<$this->pdf_obj->PageBreak() && $this->pdf_obj->PageBreak()<$ls){
+         $result=$this->pdf_obj->PageBreak()-$li;
+      }
+      return $result;
+   }
+
+   private function scan_for_breaks($index, $H, $l=true){
+      $print_cell=0;
+      $h=($H+$this->row_data[$index][5])-$this->pdf_obj->PageBreak();
+      if($h>0){
+         if($l){
+            $rr=$this->pdf_obj->PageBreak()-($H+$this->row_data[$index][1]['padding-y']);
+            if($rr>0){
+               $mx=0;
+               if(count($this->row_data[$index][0]) && $this->row_data[$index][1]['img']!==false){
+                  $mx=$this->imgbreak($index, $H);
+                  if($mx==0){
+                     if($this->row_data[$index][1]['valign']=='B'){
+                        $rr-=$this->row_data[$index][1]['img']['h'];
+                     }
+                  }
+               }
+               $nh=0;
+               $keys=array_keys($this->row_data[$index][0]);
+               foreach($keys as $i){
+                  $nh+=$this->row_data[$index][0][$i]['height'];
+               }
+               $nh*=$this->row_data[$index][1]['line-height'];
+               if($mx==0){
+               	if($rr<$nh && $rr>0){
+                     $nw=0;
+                     foreach($keys as $i){
+                        $nw+=$this->row_data[$index][0][$i]['height']*$this->row_data[$index][1]['line-height'];
+                        if($nw>$rr){
+                           $nw-=$this->row_data[$index][0][$i]['height']*$this->row_data[$index][1]['line-height'];
+                	         $mx=$rr-$nw;
+                           break;
+                        }
+                     }
+               	}
+                  else{
+                     if($rr< $this->row_data[$index][1]['img']['h']){
+                        $mx=$this->row_data[$index][1]['img']['h'];
+                     }
+                  }
+               }
+               $this->overflow=max($this->overflow, $mx);
+               $this->row_data[$index][8]=1;
+            }
+            else{
+               $this->row_data[$index][8]=-1*$rr;
+            }
+            $this->row_data[$index][7]=$h;
+         }
+         $print_cell=1;
+      }
+      return $print_cell;
+   }
+
+   private function swap_data($swap){
+      if($swap==false){
+         return;
+      }
+      static $data=array();
+      if(count($data)==0){
+         $data=array('header_data'=>$this->header_row['row_data'], 'row_heights'=>&$this->row_heights, 'row_data'=>&$this->row_data, 'rows'=>&$this->rows);
+         unset($this->row_heights, $this->row_data, $this->rows);
+         $this->row_heights=&$this->header_row['row_heights'];
+         $this->row_data=&$this->header_row['row_data'];
+         $this->rows=&$this->header_row['rows'];
+      }
+      else{
+         $this->header_row['row_data']=$data['header_data'];
+         unset($this->row_heights, $this->row_data, $this->rows);
+         $this->row_heights=$data['row_heights'];
+         $this->row_data=$data['row_data'];
+         $this->rows=$data['rows'];
+         $data=array();
+      }
+   }
+   /********************************************************************
+
+   function __construct( FPDF-object $fpdf_obj, Mix $num_cols[, string $style = '' ])
+   -----------------------------------------------------
+   Description:
+   Constructs an easyTable object
+   Parameters:
+   fpdf_obj
+   the current FPDF object (constructed with the FPDF library)
+   that is being used to write the current PDF document
+   num_cols
+   this parameter can be a positive integer (the number of columns)
+   or a string of the following form
+   I) a positive integer, the number of columns for the table. The width
+   of every column will be equal to the width of the table (given by the width property)
+   divided by the number of columns ($num_cols)
+   II) a string of the form '{c1, c2, c3,... cN}'. In this case every
+   element in the curly brackets is a positive numeric value that represent
+   the width of a column. Thus, the n-th numeric value is the width
+   of the n-th colum. If the sum of all the width of the columns is bigger than
+   the width of the table but less than the width of the document, the table
+   will stretch to the sum of the columns width. However, if the sum of the
+   columns is bigger than the width of the document, the width of every column
+   will be reduce proportionally to make the total sum equal to the width of the document.
+   III) a string of the form '%{c1, c2, c3,... cN}'. Similar to the previous case, but
+   this time every element represents a percentage of the width of the table.
+   In this case it the sum of this percentages is bigger than 100, the execution will
+   be terminated.
+   style
+   the global style for the table (see documentation)
+   a semicolon-separated string of attribute values that defines the
+   default layout of the table and all the cells and their contents
+   (see Documentation section in README.md)
+   Examples:
+   $table= new easyTable($fpdf, 3);
+   $table= new easyTable($fpdf, '{35, 45, 55}', 'width:135;');
+   $table= new easyTable($fpdf, '%{35, 45, 55}', 'width:190;');
+   Return value:
+   An easyTable object
+   ***********************************************************************/
+
+   public function __construct($fpdf_obj, $num_cols, $style=''){
+      if(self::$table_counter){
+         error_log('Please use the end_table method to terminate the last table');
+         exit();
+      }
+      self::$table_counter=true;
+      $this->pdf_obj=&$fpdf_obj;
+      $this->document_style['bgcolor']=$this->pdf_obj->get_color('fill');
+      $this->document_style['font-family']=$this->pdf_obj->current_font('family');
+      $this->document_style['font-style']=$this->pdf_obj->current_font('style');
+      $this->document_style['font-size']=$this->pdf_obj->current_font('size');
+      $this->document_style['font-color']=$this->pdf_obj->get_color('text');
+      $this->document_style['document_width']=$this->pdf_obj->GetPageWidth()-$this->pdf_obj->get_margin('l')-$this->pdf_obj->get_margin('r');
+      $this->document_style['orientation']=$this->pdf_obj->get_orientation();
+      $this->document_style['line-width']=$this->pdf_obj->get_linewidth();
+      $this->table_style=$this->set_style($style, 'T');
+      $this->col_num=false;
+      $this->col_width=array();
+      if(is_int($num_cols) && $num_cols!=0){
+         $this->col_num=abs($num_cols);
+         $this->col_width=array_pad(array(), abs($num_cols), $this->table_style['width']/abs($num_cols));
+      }
+      elseif(is_string($num_cols)){
+         $num_cols=trim($num_cols, '}, ');
+         if($num_cols[0]!='{' && $num_cols[0]!='%'){
+            error_log('Bad format for columns in Table constructor');
+            exit();
+         }
+         $tmp=explode('{', $num_cols);
+         $tp=trim($tmp[0]);
+         $num_cols=explode(',', $tmp[1]);
+         $w=0;
+         foreach($num_cols as $c){
+            if(!is_numeric($c)){
+               error_log('Bad parameter format for columns in Table constructor');
+               exit();
+            }
+            if(abs($c)){
+               $w+=abs($c);
+               $this->col_width[]=abs($c);
+            }
+            else{
+               error_log('Column width can not be zero');
+            }
+         }
+         $this->col_num=count($this->col_width);
+         if($tp=='%'){
+            if($w!=100){
+               error_log('The sum of the percentages of the columns is not 100');
+               exit();
+            }
+            foreach($this->col_width as $i=>$c){
+               $this->col_width[$i]=$c*$this->table_style['width']/100;
+            }
+         }
+         elseif($w!=$this->table_style['width'] && $w){
+            if($w<$this->document_style['document_width']){
+               $this->table_style['width']=$w;
+            }
+            else{
+               $this->table_style['width']=$this->document_style['document_width'];
+               $d=$this->table_style['width']/$w;
+               for($i=0; $i<count($num_cols); $i++){
+                  $this->col_width[$i]*=$d;
+               }
+            }
+         }
+      }
+      if($this->col_num==false){
+         error_log('Unspecified number of columns in Table constructor');
+         exit();
+      }
+      $this->table_style['c-align']=array_pad($this->table_style['c-align'], $this->col_num, 'L');
+      if($this->table_style['l-margin']){
+         $this->baseX=$this->pdf_obj->get_margin('l')+min($this->table_style['l-margin'],$this->document_style['document_width']-$this->table_style['width']);
+      }
+      else{
+         if($this->table_style['align']=='L'){
+            $this->baseX=$this->pdf_obj->get_margin('l');
+         }
+         elseif($this->table_style['align']=='R'){
+            $this->baseX=$this->pdf_obj->get_margin('l')+$this->document_style['document_width']-$this->table_style['width'];
+         }
+         else{
+            $this->baseX=$this->pdf_obj->get_margin('l')+($this->document_style['document_width']-$this->table_style['width'])/2;
+         }
+      }
+      $this->row_style_def=$this->set_style('', 'R');
+      $this->row_style=$this->row_style_def;
+      $this->row_heights=array();
+      $this->row_data=array();
+      $this->rows=array();
+      $this->total_rowspan=0;
+      $this->col_counter=0;
+      $this->grid=array();
+      $this->blocks=array();
+      $this->overflow=0;
+      if($this->table_style['border-width']!=false){
+         $this->pdf_obj->SetLineWidth($this->table_style['border-width']);
+      }
+      $this->header_row=array();
+      $this->new_table=true;
+   }
+   /***********************************************************************
+
+   function rowStyle( string $style )
+   -------------------------------------------------------------
+   Description:
+   Set or overwrite the style for all the cells in the current row.
+   Parameters:
+   style
+   a semicolon-separated string of attribute values that defines the
+   layout of all the cells and its content in the current row
+   (see Documentation section in README.md)
+   Return values
+   Void
+   Notes:
+
+   This function should be called before the first cell of the current row
+   ***********************************************************************/
+
+   public function rowStyle($style){
+      $this->row_style=$this->set_style($style, 'R');
+   }
+   /***********************************************************************
+
+   function easyCell( string $data [, string $style = '' ])
+   ------------------------------------------------------------------------
+   Description:
+   Makes a cell in the table
+   Parameters:
+   data
+   the content of the respective cell
+   style (optional)
+   a semicolon-separated string of attribute values that defines the
+   layout of the cell and its content (see Documentation section in README.md)
+   Return value
+   void
+   ***********************************************************************/
+
+   public function easyCell($data, $style=''){
+      if($this->col_counter<$this->col_num){
+         $sty=$this->set_style($style, 'C', $this->col_counter);
+         $this->col_counter++;
+         $row_number=count($this->rows);
+         $cell_index=count($this->row_data);
+         $cell_pos=$this->get_available($sty['colspan'], $sty['rowspan']);
+         $colm=$cell_pos %$this->col_num;
+         if($sty['img']!=false && $data!='' && $sty['valign']=='M'){
+            $sty['valign']=$this->row_style['valign'];
+         }
+         if($sty['rowspan']){
+            $this->total_rowspan=max($this->total_rowspan, $sty['rowspan']);
+            $this->blocks[$cell_index]=array($cell_index, $row_number, $sty['rowspan']);
+         }
+         $w=$this->col_width[$colm];
+         $r=0;
+         while($r<$sty['colspan'] && $this->col_counter<$this->col_num){
+            $this->col_counter++;
+            $colm++;
+            $w+=$this->col_width[$colm];
+            $r++;
+         }
+         $w-=2*$sty['paddingX'];
+         if($sty['img']!==false && is_string($sty['img'])){
+            $data=$sty['img'];
+            $sty['img']=false;
+         }
+         $data=& $this->pdf_obj->extMultiCell($sty['font-family'], $sty['font-style'], $sty['font-size'], $sty['font-color'], $w, $data);
+         $h=0;
+         $rn=count($data);
+         for($ri=0; $ri<$rn; $ri++){
+            $h+=$data[$ri]['height']*$sty['line-height'];
+         }
+         if($sty['img']){
+            if($sty['img']['w']>$w){
+               $sty['img']['h']=$w*$sty['img']['h']/$sty['img']['w'];
+               $sty['img']['w']=$w;
+            }
+            if($h){
+               $h+=$this->conv_units(self::IMGPadding);
+            }
+            $h+=$sty['img']['h'];
+         }
+         $w+=2*$sty['paddingX'];
+         
+         $posx=$this->baseX;
+         $d=$cell_pos %$this->col_num;
+         for($k=0; $k<$d; $k++){
+            $posx+=$this->col_width[$k];
+         }
+         $this->row_data[$cell_index]=array($data, $sty, $w, $h, $cell_pos, 0, $posx, 0);
+         
+      }
+   }
+   /***********************************************************************
+
+   function printRow ( [ bool $setAsHeader = false ] )
+   ------------------------------------------------------------------------
+   Description:
+
+   This function indicates the end of the current row.
+   Parameters:
+   setAsHeader (optional)
+   Optional. When it is set as true, it sets the current row as the header
+   for the table; this means that the current row will be printed as the first
+   row of the table (table header) on every page that the table splits on.
+   Remark: 1. In order to work, the table attribute split-row should set as true.
+   2. Just the first row where this parameter is set as true will be
+   used as header any other will printed as a normal row.
+   Return values
+   Void
+   Note:
+
+   This function will print the current row as far as the following holds:
+   total_rowspan=0
+   where total_rowspan is set as
+   total_rowspan=max(total_rowspan, max(rowspan of cell in the current row))-1;
+   ***********************************************************************/
+
+   public function printRow($setAsHeader=false){
+      $this->col_counter=0;
+      $row_number=count($this->rows);
+      $this->rows[$row_number]=count($this->row_data);
+      $mx=$this->row_style['min-height'];
+
+         $this->row_content_loop($row_number, function($index)use(&$mx){
+         if($this->row_data[$index][1]['rowspan']==0){
+            $mx=max($mx, $this->row_data[$index][3]+2*$this->row_data[$index][1]['paddingY']);
+         }
+      });
+      $this->row_heights[$row_number]=$mx;
+      
+      if($this->total_rowspan>0){
+         $this->total_rowspan--;
+      }
+      else{
+         $row_number=count($this->rows);
+         if(count($this->blocks)>0){
+            
+            foreach($this->blocks as $bk_id=>$block){
+               $h=0;
+               for($i=$block[1]; $i<=$block[1]+$block[2]; $i++){
+                  $h+=$this->row_heights[$i];
+               }
+               $t=$this->row_data[$block[0]][3]+2*$this->row_data[$block[0]][1]['paddingY'];
+               if($h>0 && $h<$t){
+                  for($i=$block[1]; $i<=$block[1]+$block[2]; $i++){
+                     $this->row_heights[$i]*=$t/$h;
+                  }
+               }
+            }
+            foreach($this->blocks as $j=>$block){
+               $h=0;
+               for($i=$block[1]; $i<=$block[1]+$block[2]; $i++){
+                  $h+=$this->row_heights[$i];
+               }
+               $this->row_data[$j][5]=$h;
+            }
+         }
+         $block_height=0;
+         for($j=0; $j<$row_number; $j++){
+
+               $this->row_content_loop($j, function($index)use($j, $block_height){
+               if($this->row_data[$index][1]['rowspan']==0){
+                  $this->row_data[$index][5]=$this->row_heights[$j];
+               }
+               $this->row_data[$index][1]['padding-y']=$this->row_data[$index][1]['paddingY'];
+               if($this->row_data[$index][1]['valign']=='M' || ($this->row_data[$index][1]['img'] && count($this->row_data[$index][0]))){
+                  $this->row_data[$index][1]['padding-y']=($this->row_data[$index][5]-$this->row_data[$index][3])/2;
+               }
+               elseif($this->row_data[$index][1]['valign']=='B'){
+                  $this->row_data[$index][1]['padding-y']=$this->row_data[$index][5]-($this->row_data[$index][3]+$this->row_data[$index][1]['paddingY']);
+               }
+            });
+            $block_height+=$this->row_heights[$j];
+         }
+
+			$rowIsHeader=1+(count($this->header_row)>0);
+         if($setAsHeader===true){
+            if(count($this->header_row)==0){
+               $this->header_row['row_heights']=$this->row_heights;
+               $this->header_row['row_data']=$this->row_data;
+               $this->header_row['rows']=$this->rows;
+            }
+         }
+         if($this->table_style['split-row']==false && $this->pdf_obj->PageBreak()<$this->pdf_obj->GetY()+max($block_height,$this->row_heights[0])){
+            $this->pdf_obj->addPage($this->document_style['orientation'], $this->pdf_obj->get_page_size(), $this->pdf_obj->get_rotation());
+            if(count($this->header_row)>0){
+               $this->printing_loop(true);
+               $rowIsHeader--;
+            }
+         }
+         
+         if($this->new_table){
+            if(count($this->header_row)>0){
+               $r=$this->pdf_obj->PageBreak()-($this->pdf_obj->GetY()+$block_height);
+               if($r<0 || $r<$this->conv_units(self::PBThreshold)){
+                  $this->pdf_obj->addPage($this->document_style['orientation'], $this->pdf_obj->get_page_size(), $this->pdf_obj->get_rotation());
+               }
+            }
+            $this->new_table=false;
+         }
+         if($rowIsHeader>0){
+				$this->printing_loop();
+			}
+         $this->grid=array();
+         $this->row_data=array();
+         $this->rows=array();
+         $this->row_heights=array();
+         $this->blocks=array();
+         $this->overflow=0;
+         $this->new_table=false;
+      }
+      $this->row_style=$this->row_style_def;
+   }
+   /***********************************************************************
+
+   function endTable( [int $bottomMargin=2])
+   ------------------------------------------
+   Description:
+   Unset all the data members of the easyTable object
+   Parameters:
+   bottomMargin (optional)
+   Optional. Specify the number of white lines left after
+   the last row of the table. Default 2.
+   If it is negative, the vertical position will be set before
+   the end of the table.
+   Return values
+   Void
+   ***********************************************************************/
+
+   public function endTable($bottomMargin=2){
+      self::$table_counter=false;
+      if($this->table_style['border-width']!=false){
+         $this->pdf_obj->SetLineWidth($this->document_style['line-width']);
+      }
+      $this->pdf_obj->SetX($this->pdf_obj->get_margin('l'));
+      $this->pdf_obj->Ln($bottomMargin);
+      $this->pdf_obj->resetStaticData();
+      unset($this->pdf_obj);
+      unset($this->document_style);
+      unset($this->table_style);
+      unset($this->col_num);
+      unset($this->col_width);
+      unset($this->baseX);
+      unset($this->row_style_def);
+      unset($this->row_style);
+      unset($this->row_heights);
+      unset($this->row_data);
+      unset($this->rows);
+      unset($this->total_rowspan);
+      unset($this->col_counter);
+      unset($this->grid);
+      unset($this->blocks);
+      unset($this->overflow);
+      unset($this->header_row);
+   }
+   
+}
+?>
diff --git a/src/lib/fpdf-easytable/exfpdf.php b/src/lib/fpdf-easytable/exfpdf.php
new file mode 100755
index 0000000..d61a247
--- /dev/null
+++ b/src/lib/fpdf-easytable/exfpdf.php
@@ -0,0 +1,401 @@
+<?php
+ /*********************************************************************
+ * exFPDF  extend FPDF v1.81                                                    *
+ *                                                                    *
+ * Version: 2.2                                                       *
+ * Date:    12-10-2017                                                *
+ * Author:  Dan Machado                                               *
+ * Require  FPDF v1.81, formatedstring v1.0                                                *
+ **********************************************************************/
+ include 'formatedstring.php';
+ class exFPDF extends FPDF{
+
+    public function PageBreak(){
+       return $this->PageBreakTrigger;
+   }
+
+   public function current_font($c){
+      if($c=='family'){
+         return $this->FontFamily;
+      }
+      elseif($c=='style'){
+         return $this->FontStyle;
+      }
+      elseif($c=='size'){
+         return $this->FontSizePt;
+      }
+   }
+
+   public function get_color($c){
+      if($c=='fill'){
+         return $this->FillColor;
+      }
+      elseif($c=='text'){
+         return $this->TextColor;
+      }
+   }
+
+   public function get_page_width(){
+      return $this->w;
+   }
+
+   public function get_margin($c){
+      if($c=='l'){
+         return $this->lMargin;
+      }
+      elseif($c=='r'){
+         return $this->rMargin;
+      }
+      elseif($c=='t'){
+         return $this->tMargin;
+      }
+   }
+
+   public function get_linewidth(){
+      return $this->LineWidth;
+   }
+
+   public function get_orientation(){
+      return $this->CurOrientation;
+   }
+
+   public function get_page_size()
+   {
+    	return $this->CurPageSize;
+   }
+
+   public function get_rotation()
+   {
+      return $this->CurRotation;
+   }
+
+   public function get_scale_factor()
+   {
+      return $this->k;
+   }
+
+   static private $hex=array('0'=>0,'1'=>1,'2'=>2,'3'=>3,'4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9,
+   'A'=>10,'B'=>11,'C'=>12,'D'=>13,'E'=>14,'F'=>15);
+
+   public function is_rgb($str){
+      $a=true;
+      $tmp=explode(',', trim($str, ','));
+      foreach($tmp as $color){
+         if(!is_numeric($color) || $color<0 || $color>255){
+            $a=false;
+            break;
+         }
+      }
+      return $a;
+   }
+
+   public function is_hex($str){
+      $a=true;
+      $str=strtoupper($str);
+      $n=strlen($str);
+      if(($n==7 || $n==4) && $str[0]=='#'){
+         for($i=1; $i<$n; $i++){
+            if(!isset(self::$hex[$str[$i]])){
+               $a=false;
+               break;
+            }
+         }
+      }
+      else{
+         $a=false;
+      }
+      return $a;
+   }
+
+   public function hextodec($str){
+      $result=array();
+      $str=strtoupper(substr($str,1));
+      $n=strlen($str);
+      for($i=0; $i<3; $i++){
+         if($n==6){
+            $result[$i]=self::$hex[$str[2*$i]]*16+self::$hex[$str[2*$i+1]];
+         }
+         else{
+            $result[$i]=self::$hex[$str[$i]]*16+self::$hex[$str[$i]];
+         }
+      }
+      return $result;
+   }
+   static private $options=array('F'=>'', 'T'=>'', 'D'=>'');
+
+   public function resetColor($str, $p='F'){
+      if(isset(self::$options[$p]) && self::$options[$p]!=$str){
+         self::$options[$p]=$str;
+         $array=array();
+         if($this->is_hex($str)){
+            $array=$this->hextodec($str);
+         }
+         elseif($this->is_rgb($str)){
+            $array=explode(',', trim($str, ','));
+            for($i=0; $i<3; $i++){
+               if(!isset($array[$i])){
+                  $array[$i]=0;
+               }
+            }
+         }
+         else{
+            $array=array(null, null, null);
+            $i=0;
+            $tmp=explode(' ', $str);
+            foreach($tmp as $c){
+               if(is_numeric($c)){
+                  $array[$i]=$c*256;
+                  $i++;
+               }
+            }
+         }
+         if($p=='T'){
+            $this->SetTextColor($array[0],$array[1],$array[2]);
+         }
+         elseif($p=='D'){
+            $this->SetDrawColor($array[0],$array[1], $array[2]);
+         }
+         elseif($p=='F'){
+            $this->SetFillColor($array[0],$array[1],$array[2]);
+         }
+      }
+   }
+   static private $font_def='';
+
+   public function resetFont($font_family, $font_style, $font_size){
+      if(self::$font_def!=$font_family .'-' . $font_style . '-' .$font_size){
+         self::$font_def=$font_family .'-' . $font_style . '-' .$font_size;
+         $this->SetFont($font_family, $font_style, $font_size);
+      }
+   }
+
+   public function resetStaticData(){
+      self::$font_def='';
+      self::$options=array('F'=>'', 'T'=>'', 'D'=>'');
+   }
+
+   /***********************************************************************
+   *
+   * Based on FPDF method SetFont
+   *
+   ************************************************************************/
+
+   private function &FontData($family, $style, $size){
+      if($family=='')
+      $family = $this->FontFamily;
+      else
+      $family = strtolower($family);
+      $style = strtoupper($style);
+      if(strpos($style,'U')!==false){
+         $this->underline = true;
+         $style = str_replace('U','',$style);
+      }
+      if($style=='IB')
+      $style = 'BI';
+      $fontkey = $family.$style;
+      if(!isset($this->fonts[$fontkey])){
+         if($family=='arial')
+         $family = 'helvetica';
+         if(in_array($family,$this->CoreFonts)){
+            if($family=='symbol' || $family=='zapfdingbats')
+            $style = '';
+            $fontkey = $family.$style;
+            if(!isset($this->fonts[$fontkey]))
+            $this->AddFont($family,$style);
+         }
+         else
+         $this->Error('Undefined font: '.$family.' '.$style);
+      }
+      $result['FontSize'] = $size/$this->k;
+      $result['CurrentFont']=&$this->fonts[$fontkey];
+      return $result;
+   }
+    
+
+   private function setLines(&$fstring, $p, $q){
+      $parced_str=& $fstring->parced_str;
+      $lines=& $fstring->lines;
+      $linesmap=& $fstring->linesmap;
+      $cfty=$fstring->get_current_style($p);
+      $ffs=$cfty['font-family'] . $cfty['style'];
+      if(!isset($fstring->used_fonts[$ffs])){
+         $fstring->used_fonts[$ffs]=& $this->FontData($cfty['font-family'], $cfty['style'], $cfty['font-size']);
+      }
+      $cw=& $fstring->used_fonts[$ffs]['CurrentFont']['cw'];
+      $wmax = $fstring->width*1000*$this->k;
+      $j=count($lines)-1;
+      $k=strlen($lines[$j]);
+         if(!isset($linesmap[$j][0])) {
+         $linesmap[$j]=array($p,$p, 0);
+      }
+      $sl=$cw[' ']*$cfty['font-size'];
+      $x=$a=$linesmap[$j][2];
+      if($k>0){
+         $x+=$sl;
+         $lines[$j].=' ';
+         $linesmap[$j][2]+=$sl;
+      }
+      $u=$p;
+      $t='';
+      $l=$p+$q;
+      $ftmp='';
+      for($i=$p; $i<$l; $i++){
+            if($ftmp!=$ffs){
+            $cfty=$fstring->get_current_style($i);
+            $ffs=$cfty['font-family'] . $cfty['style'];
+            if(!isset($fstring->used_fonts[$ffs])){
+               $fstring->used_fonts[$ffs]=& $this->FontData($cfty['font-family'], $cfty['style'], $cfty['font-size']);
+            }
+            $cw=& $fstring->used_fonts[$ffs]['CurrentFont']['cw'];
+            $ftmp=$ffs;
+         }
+         $x+=$cw[$parced_str[$i]]*$cfty['font-size'];
+         if($x>$wmax){
+            if($a>0){
+               $t=substr($parced_str,$p, $i-$p);
+               $lines[$j]=substr($lines[$j],0,$k);
+               $linesmap[$j][1]=$p-1;
+               $linesmap[$j][2]=$a;
+               $x-=($a+$sl);
+               $a=0;
+               $u=$p;
+            }
+            else{
+               $x=$cw[$parced_str[$i]]*$cfty['font-size'];
+               $t='';
+               $u=$i;
+            }
+            $j++;
+            $lines[$j]=$t;
+            $linesmap[$j]=array();
+            $linesmap[$j][0]=$u;
+            $linesmap[$j][2]=0;
+         }
+         $lines[$j].=$parced_str[$i];
+         $linesmap[$j][1]=$i;
+         $linesmap[$j][2]=$x;
+      }
+      return;
+   }
+
+   public function &extMultiCell($font_family, $font_style, $font_size, $font_color, $w, $txt){
+      $result=array();
+      if($w==0){
+         return $result;
+      }
+      $current_font=array('font-family'=>$font_family, 'style'=>$font_style, 'font-size'=>$font_size, 'font-color'=>$font_color);
+      $fstring=new formatedString($txt, $w, $current_font);
+      $word='';
+      $p=0;
+      $i=0;
+      $n=strlen($fstring->parced_str);
+      while($i<$n){
+         $word.=$fstring->parced_str[$i];
+         if($fstring->parced_str[$i]=="\n" || $fstring->parced_str[$i]==' ' || $i==$n-1){
+            $word=trim($word);
+            $this->setLines($fstring, $p, strlen($word));
+            $p=$i+1;
+            $word='';
+            if($fstring->parced_str[$i]=="\n" && $i<$n-1){
+               $z=0;
+               $j=count($fstring->lines);
+               $fstring->lines[$j]='';
+               $fstring->linesmap[$j]=array();
+            }
+         }
+         $i++;
+      }
+      if($n==0){
+         return $result;
+      }
+      $n=count($fstring->lines);
+         for($i=0; $i<$n; $i++){
+         $result[$i]=$fstring->break_by_style($i);
+      }
+      return $result;
+   }
+
+   private function GetMixStringWidth($line){
+      $w = 0;
+      foreach($line['chunks'] as $i=>$chunk){
+         $t=0;
+         $cf=& $this->FontData($line['style'][$i]['font-family'], $line['style'][$i]['style'], $line['style'][$i]['font-size']);
+         $cw=& $cf['CurrentFont']['cw'];
+         $s=implode('', explode(' ',$chunk));
+         $l = strlen($s);
+         for($j=0;$j<$l;$j++){
+            $t+=$cw[$s[$j]];
+         }
+         $w+=$t*$line['style'][$i]['font-size'];
+      }
+      return $w;
+   }
+
+   public function CellBlock($w, $lh, &$lines, $align='J'){
+      if($w==0){
+         return;
+      }
+      $ctmp='';
+      $ftmp='';
+      foreach($lines as $i=>$line){
+         $k = $this->k;
+         if($this->y+$lh*$line['height']>$this->PageBreakTrigger){
+            break;
+         }
+         $dx=0;
+         $dw=0;
+         if($line['width']!=0){
+            if($align=='R'){
+               $dx = $w-$line['width']/($this->k*1000);
+            }
+            elseif($align=='C'){
+               $dx = ($w-$line['width']/($this->k*1000))/2;
+            }
+            if($align=='J'){
+               $tmp=explode(' ', implode('',$line['chunks']));
+               $ns=count($tmp);
+               if($ns>1){
+                  $sx=implode('',$tmp);
+                  $delta=$this->GetMixStringWidth($line)/($this->k*1000);
+                  $dw=($w-$delta)*(1/($ns-1));
+               }
+            }
+         }
+         $xx=$this->x+$dx;
+         foreach($line['chunks'] as $tj=>$txt){
+            $this->resetFont($line['style'][$tj]['font-family'], $line['style'][$tj]['style'], $line['style'][$tj]['font-size']);
+            $this->resetColor($line['style'][$tj]['font-color'], 'T');
+            $y=$this->y+0.5*$lh*$line['height'] +0.3*$line['height']/$this->k;
+            if($dw){
+               $tmp=explode(' ', $txt);
+               foreach($tmp as $e=>$tt){
+                  if($e>0){
+                     $xx+=$dw;
+                     if($tt==''){
+                        continue;
+                     }
+                  }
+                  $this->Text($xx, $y, $tt);
+                     if($line['style'][$tj]['href']){
+                     $yr=$this->y+0.5*($lh*$line['height']-$line['height']/$this->k);
+                     $this->Link($xx, $yr, $this->GetStringWidth($txt),$line['height']/$this->k, $line['style'][$tj]['href']);
+                  }
+                  $xx+=$this->GetStringWidth($tt);
+               }
+            }
+            else{
+               $this->Text($xx, $y, $txt);
+                  if($line['style'][$tj]['href']){
+                  $yr=$this->y+0.5*($lh*$line['height']-$line['height']/$this->k);
+                  $this->Link($xx, $yr, $this->GetStringWidth($txt),$line['height']/$this->k, $line['style'][$tj]['href']);
+               }
+               $xx+=$this->GetStringWidth($txt);
+            }
+         }
+         unset($lines[$i]);
+         $this->y += $lh*$line['height'];
+      }
+   }
+   
+}
+?>
diff --git a/src/lib/fpdf-easytable/font/Apache License.txt b/src/lib/fpdf-easytable/font/Apache License.txt
new file mode 100644
index 0000000..989e2c5
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Apache License.txt
@@ -0,0 +1,201 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) 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. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file
diff --git a/src/lib/fpdf-easytable/font/Arimo-Bold.php b/src/lib/fpdf-easytable/font/Arimo-Bold.php
new file mode 100644
index 0000000..50ed855
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Bold.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo-Bold';
+$desc = array('Ascent'=>728,'Descent'=>-210,'CapHeight'=>688,'Flags'=>32,'FontBBox'=>'[-482 -376 1304 1033]','ItalicAngle'=>0,'StemV'=>120,'MissingWidth'=>750);
+$up = -106;
+$ut = 105;
+$cw = array(
+	chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+	chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+	chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+	chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+	chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>669,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>854,chr(193)=>556,chr(194)=>618,chr(195)=>615,chr(196)=>635,chr(197)=>556,
+	chr(198)=>875,chr(199)=>417,chr(200)=>556,chr(201)=>615,chr(202)=>615,chr(203)=>500,chr(204)=>635,chr(205)=>740,chr(206)=>604,chr(207)=>611,chr(208)=>604,chr(209)=>583,chr(210)=>611,chr(211)=>556,chr(212)=>490,chr(213)=>556,chr(214)=>709,chr(215)=>615,chr(216)=>615,chr(217)=>854,chr(218)=>497,chr(219)=>833,
+	chr(220)=>552,chr(221)=>844,chr(222)=>581,chr(223)=>729,chr(224)=>1031,chr(225)=>722,chr(226)=>719,chr(227)=>730,chr(228)=>712,chr(229)=>667,chr(230)=>854,chr(231)=>567,chr(232)=>667,chr(233)=>719,chr(234)=>719,chr(235)=>610,chr(236)=>702,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>719,chr(241)=>719,
+	chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>622,chr(246)=>904,chr(247)=>722,chr(248)=>719,chr(249)=>979,chr(250)=>626,chr(251)=>1005,chr(252)=>711,chr(253)=>1019,chr(254)=>703,chr(255)=>870);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-Bold.z';
+$originalsize = 49388;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-Bold.z b/src/lib/fpdf-easytable/font/Arimo-Bold.z
new file mode 100644
index 0000000..8f3e396
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Bold.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Arimo-BoldItalic.php b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.php
new file mode 100644
index 0000000..dcec8f2
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo-BoldItalic';
+$desc = array('Ascent'=>728,'Descent'=>-210,'CapHeight'=>688,'Flags'=>96,'FontBBox'=>'[-477 -376 1357 1030]','ItalicAngle'=>-12,'StemV'=>120,'MissingWidth'=>750);
+$up = -106;
+$ut = 105;
+$cw = array(
+	chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+	chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+	chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+	chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+	chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>667,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>865,chr(193)=>556,chr(194)=>619,chr(195)=>646,chr(196)=>618,chr(197)=>556,
+	chr(198)=>885,chr(199)=>534,chr(200)=>556,chr(201)=>611,chr(202)=>611,chr(203)=>507,chr(204)=>622,chr(205)=>740,chr(206)=>604,chr(207)=>611,chr(208)=>611,chr(209)=>589,chr(210)=>611,chr(211)=>556,chr(212)=>889,chr(213)=>556,chr(214)=>736,chr(215)=>604,chr(216)=>594,chr(217)=>854,chr(218)=>510,chr(219)=>889,
+	chr(220)=>552,chr(221)=>935,chr(222)=>583,chr(223)=>707,chr(224)=>1042,chr(225)=>722,chr(226)=>708,chr(227)=>729,chr(228)=>722,chr(229)=>667,chr(230)=>781,chr(231)=>614,chr(232)=>667,chr(233)=>719,chr(234)=>719,chr(235)=>615,chr(236)=>687,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>719,chr(241)=>729,
+	chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>677,chr(246)=>927,chr(247)=>722,chr(248)=>708,chr(249)=>1000,chr(250)=>643,chr(251)=>979,chr(252)=>719,chr(253)=>989,chr(254)=>708,chr(255)=>854);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-BoldItalic.z';
+$originalsize = 45912;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-BoldItalic.z b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.z
new file mode 100644
index 0000000..6f3682b
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-BoldItalic.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Arimo-Italic.php b/src/lib/fpdf-easytable/font/Arimo-Italic.php
new file mode 100644
index 0000000..e681820
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Italic.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo-Italic';
+$desc = array('Ascent'=>728,'Descent'=>-208,'CapHeight'=>688,'Flags'=>96,'FontBBox'=>'[-664 -303 1361 1014]','ItalicAngle'=>-12,'StemV'=>70,'MissingWidth'=>750);
+$up = -106;
+$ut = 73;
+$cw = array(
+	chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+	chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+	chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+	chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+	chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>667,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>752,chr(193)=>556,chr(194)=>563,chr(195)=>572,chr(196)=>553,chr(197)=>556,
+	chr(198)=>835,chr(199)=>493,chr(200)=>500,chr(201)=>556,chr(202)=>556,chr(203)=>472,chr(204)=>564,chr(205)=>686,chr(206)=>550,chr(207)=>556,chr(208)=>550,chr(209)=>534,chr(210)=>556,chr(211)=>500,chr(212)=>833,chr(213)=>500,chr(214)=>688,chr(215)=>522,chr(216)=>526,chr(217)=>736,chr(218)=>465,chr(219)=>830,
+	chr(220)=>492,chr(221)=>851,chr(222)=>518,chr(223)=>621,chr(224)=>1022,chr(225)=>667,chr(226)=>651,chr(227)=>727,chr(228)=>704,chr(229)=>667,chr(230)=>795,chr(231)=>544,chr(232)=>667,chr(233)=>715,chr(234)=>715,chr(235)=>589,chr(236)=>686,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>725,chr(241)=>682,
+	chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>639,chr(246)=>917,chr(247)=>667,chr(248)=>651,chr(249)=>886,chr(250)=>614,chr(251)=>920,chr(252)=>694,chr(253)=>923,chr(254)=>673,chr(255)=>805);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-Italic.z';
+$originalsize = 44228;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-Italic.z b/src/lib/fpdf-easytable/font/Arimo-Italic.z
new file mode 100644
index 0000000..28ea8cc
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Italic.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Arimo-Regular.php b/src/lib/fpdf-easytable/font/Arimo-Regular.php
new file mode 100644
index 0000000..d6db3d3
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Regular.php
@@ -0,0 +1,26 @@
+<?php
+$type = 'TrueType';
+$name = 'Arimo';
+$desc = array('Ascent'=>728,'Descent'=>-210,'CapHeight'=>688,'Flags'=>32,'FontBBox'=>'[-544 -303 1302 980]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>750);
+$up = -106;
+$ut = 73;
+$cw = array(
+	chr(0)=>750,chr(1)=>750,chr(2)=>750,chr(3)=>750,chr(4)=>750,chr(5)=>750,chr(6)=>750,chr(7)=>750,chr(8)=>750,chr(9)=>750,chr(10)=>750,chr(11)=>750,chr(12)=>750,chr(13)=>750,chr(14)=>750,chr(15)=>750,chr(16)=>750,chr(17)=>750,chr(18)=>750,chr(19)=>750,chr(20)=>750,chr(21)=>750,
+	chr(22)=>750,chr(23)=>750,chr(24)=>750,chr(25)=>750,chr(26)=>750,chr(27)=>750,chr(28)=>750,chr(29)=>750,chr(30)=>750,chr(31)=>750,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>750,chr(128)=>708,chr(129)=>625,chr(130)=>708,chr(131)=>708,
+	chr(132)=>708,chr(133)=>708,chr(134)=>708,chr(135)=>708,chr(136)=>708,chr(137)=>708,chr(138)=>708,chr(139)=>708,chr(140)=>708,chr(141)=>708,chr(142)=>708,chr(143)=>708,chr(144)=>708,chr(145)=>708,chr(146)=>729,chr(147)=>604,chr(148)=>604,chr(149)=>278,chr(150)=>549,chr(151)=>549,chr(152)=>549,chr(153)=>549,
+	chr(154)=>278,chr(155)=>604,chr(156)=>400,chr(157)=>333,chr(158)=>333,chr(159)=>549,chr(160)=>708,chr(161)=>708,chr(162)=>708,chr(163)=>556,chr(164)=>708,chr(165)=>708,chr(166)=>708,chr(167)=>708,chr(168)=>708,chr(169)=>708,chr(170)=>708,chr(171)=>708,chr(172)=>708,chr(173)=>708,chr(174)=>708,chr(175)=>708,
+	chr(176)=>708,chr(177)=>708,chr(178)=>708,chr(179)=>667,chr(180)=>708,chr(181)=>708,chr(182)=>708,chr(183)=>708,chr(184)=>708,chr(185)=>708,chr(186)=>708,chr(187)=>708,chr(188)=>708,chr(189)=>708,chr(190)=>708,chr(191)=>737,chr(192)=>750,chr(193)=>556,chr(194)=>573,chr(195)=>573,chr(196)=>583,chr(197)=>556,
+	chr(198)=>823,chr(199)=>365,chr(200)=>500,chr(201)=>559,chr(202)=>559,chr(203)=>438,chr(204)=>583,chr(205)=>688,chr(206)=>552,chr(207)=>556,chr(208)=>542,chr(209)=>542,chr(210)=>556,chr(211)=>500,chr(212)=>458,chr(213)=>500,chr(214)=>669,chr(215)=>531,chr(216)=>521,chr(217)=>719,chr(218)=>458,chr(219)=>802,
+	chr(220)=>510,chr(221)=>823,chr(222)=>521,chr(223)=>625,chr(224)=>1010,chr(225)=>667,chr(226)=>656,chr(227)=>740,chr(228)=>677,chr(229)=>667,chr(230)=>760,chr(231)=>542,chr(232)=>667,chr(233)=>719,chr(234)=>719,chr(235)=>583,chr(236)=>656,chr(237)=>833,chr(238)=>722,chr(239)=>778,chr(240)=>719,chr(241)=>722,
+	chr(242)=>667,chr(243)=>722,chr(244)=>611,chr(245)=>635,chr(246)=>923,chr(247)=>667,chr(248)=>656,chr(249)=>885,chr(250)=>604,chr(251)=>917,chr(252)=>719,chr(253)=>938,chr(254)=>667,chr(255)=>792);
+$enc = 'KOI8-R';
+$diff = '128 /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000 /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock /ltshade /shade /dkshade /integraltp /filledbox /periodcentered /radical /approxequal /lessequal /greaterequal /space /integralbt /degree /twosuperior /periodcentered /divide /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000 /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000 /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000 /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044';
+$uv = array(0=>array(0,128),128=>9472,129=>9474,130=>9484,131=>9488,132=>9492,133=>9496,134=>9500,135=>9508,136=>9516,137=>9524,138=>9532,139=>9600,140=>9604,141=>9608,142=>9612,143=>array(9616,4),147=>8992,148=>9632,149=>array(8729,2),151=>8776,152=>array(8804,2),154=>160,155=>8993,156=>176,157=>178,158=>183,159=>247,160=>array(9552,3),163=>1105,164=>array(9555,15),179=>1025,180=>array(9570,11),191=>169,192=>1102,193=>array(1072,2),195=>1094,196=>array(1076,2),198=>1092,199=>1075,200=>1093,201=>array(1080,8),209=>1103,210=>array(1088,4),214=>1078,215=>1074,216=>1100,217=>1099,218=>1079,219=>1096,220=>1101,221=>1097,222=>1095,223=>1098,224=>1070,225=>array(1040,2),227=>1062,228=>array(1044,2),230=>1060,231=>1043,232=>1061,233=>array(1048,8),241=>1071,242=>array(1056,4),246=>1046,247=>1042,248=>1068,249=>1067,250=>1047,251=>1064,252=>1069,253=>1065,254=>1063,255=>1066);
+$file = 'Arimo-Regular.z';
+$originalsize = 45516;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Arimo-Regular.z b/src/lib/fpdf-easytable/font/Arimo-Regular.z
new file mode 100644
index 0000000..937e26d
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Arimo-Regular.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/Lato-Regular.php b/src/lib/fpdf-easytable/font/Lato-Regular.php
new file mode 100644
index 0000000..dbbd929
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Lato-Regular.php
@@ -0,0 +1,25 @@
+<?php
+$type = 'TrueType';
+$name = 'Lato-Regular';
+$desc = array('Ascent'=>805,'Descent'=>-195,'CapHeight'=>717,'Flags'=>32,'FontBBox'=>'[-547 -269 1343 1079]','ItalicAngle'=>0,'StemV'=>70,'MissingWidth'=>532);
+$up = -233;
+$ut = 45;
+$cw = array(
+	chr(0)=>532,chr(1)=>532,chr(2)=>532,chr(3)=>532,chr(4)=>532,chr(5)=>532,chr(6)=>532,chr(7)=>532,chr(8)=>532,chr(9)=>532,chr(10)=>532,chr(11)=>532,chr(12)=>532,chr(13)=>532,chr(14)=>532,chr(15)=>532,chr(16)=>532,chr(17)=>532,chr(18)=>532,chr(19)=>532,chr(20)=>532,chr(21)=>532,
+	chr(22)=>532,chr(23)=>532,chr(24)=>532,chr(25)=>532,chr(26)=>532,chr(27)=>532,chr(28)=>532,chr(29)=>532,chr(30)=>532,chr(31)=>532,' '=>256,'!'=>269,'"'=>371,'#'=>580,'$'=>580,'%'=>802,'&'=>712,'\''=>204,'('=>267,')'=>267,'*'=>425,'+'=>580,
+	','=>227,'-'=>372,'.'=>236,'/'=>452,'0'=>580,'1'=>580,'2'=>580,'3'=>580,'4'=>580,'5'=>580,'6'=>580,'7'=>580,'8'=>580,'9'=>580,':'=>250,';'=>262,'<'=>580,'='=>580,'>'=>580,'?'=>448,'@'=>837,'A'=>677,
+	'B'=>647,'C'=>668,'D'=>761,'E'=>578,'F'=>566,'G'=>731,'H'=>764,'I'=>280,'J'=>423,'K'=>663,'L'=>514,'M'=>929,'N'=>764,'O'=>801,'P'=>601,'Q'=>801,'R'=>627,'S'=>543,'T'=>591,'U'=>736,'V'=>677,'W'=>1036,
+	'X'=>649,'Y'=>624,'Z'=>602,'['=>306,'\\'=>452,']'=>306,'^'=>580,'_'=>459,'`'=>400,'a'=>497,'b'=>560,'c'=>478,'d'=>560,'e'=>528,'f'=>351,'g'=>520,'h'=>558,'i'=>240,'j'=>240,'k'=>508,'l'=>236,'m'=>823,
+	'n'=>558,'o'=>567,'p'=>561,'q'=>560,'r'=>364,'s'=>433,'t'=>359,'u'=>558,'v'=>516,'w'=>786,'x'=>498,'y'=>516,'z'=>452,'{'=>301,'|'=>251,'}'=>301,'~'=>580,chr(127)=>532,chr(128)=>580,chr(129)=>532,chr(130)=>216,chr(131)=>338,
+	chr(132)=>368,chr(133)=>750,chr(134)=>580,chr(135)=>580,chr(136)=>400,chr(137)=>1164,chr(138)=>543,chr(139)=>281,chr(140)=>1091,chr(141)=>532,chr(142)=>602,chr(143)=>532,chr(144)=>532,chr(145)=>214,chr(146)=>214,chr(147)=>366,chr(148)=>366,chr(149)=>580,chr(150)=>580,chr(151)=>794,chr(152)=>400,chr(153)=>751,
+	chr(154)=>433,chr(155)=>282,chr(156)=>873,chr(157)=>532,chr(158)=>452,chr(159)=>624,chr(160)=>256,chr(161)=>252,chr(162)=>580,chr(163)=>580,chr(164)=>580,chr(165)=>580,chr(166)=>254,chr(167)=>495,chr(168)=>400,chr(169)=>832,chr(170)=>368,chr(171)=>429,chr(172)=>580,chr(173)=>372,chr(174)=>832,chr(175)=>400,
+	chr(176)=>415,chr(177)=>580,chr(178)=>334,chr(179)=>334,chr(180)=>400,chr(181)=>650,chr(182)=>701,chr(183)=>260,chr(184)=>400,chr(185)=>334,chr(186)=>402,chr(187)=>430,chr(188)=>734,chr(189)=>726,chr(190)=>742,chr(191)=>440,chr(192)=>677,chr(193)=>677,chr(194)=>677,chr(195)=>677,chr(196)=>677,chr(197)=>677,
+	chr(198)=>931,chr(199)=>668,chr(200)=>578,chr(201)=>578,chr(202)=>578,chr(203)=>578,chr(204)=>280,chr(205)=>280,chr(206)=>280,chr(207)=>280,chr(208)=>769,chr(209)=>764,chr(210)=>801,chr(211)=>801,chr(212)=>801,chr(213)=>801,chr(214)=>801,chr(215)=>580,chr(216)=>801,chr(217)=>736,chr(218)=>736,chr(219)=>736,
+	chr(220)=>736,chr(221)=>624,chr(222)=>599,chr(223)=>580,chr(224)=>497,chr(225)=>497,chr(226)=>497,chr(227)=>497,chr(228)=>497,chr(229)=>497,chr(230)=>805,chr(231)=>478,chr(232)=>528,chr(233)=>528,chr(234)=>528,chr(235)=>528,chr(236)=>240,chr(237)=>240,chr(238)=>240,chr(239)=>240,chr(240)=>566,chr(241)=>558,
+	chr(242)=>567,chr(243)=>567,chr(244)=>567,chr(245)=>567,chr(246)=>567,chr(247)=>580,chr(248)=>567,chr(249)=>558,chr(250)=>558,chr(251)=>558,chr(252)=>558,chr(253)=>516,chr(254)=>561,chr(255)=>516);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+$file = 'Lato-Regular.z';
+$originalsize = 43428;
+$subsetted = true;
+?>
diff --git a/src/lib/fpdf-easytable/font/Lato-Regular.z b/src/lib/fpdf-easytable/font/Lato-Regular.z
new file mode 100644
index 0000000..e6c7731
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/Lato-Regular.z
Binary files differ
diff --git a/src/lib/fpdf-easytable/font/courier.php b/src/lib/fpdf-easytable/font/courier.php
new file mode 100755
index 0000000..67dbeda
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courier.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/courierb.php b/src/lib/fpdf-easytable/font/courierb.php
new file mode 100755
index 0000000..62550a4
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courierb.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Bold';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/courierbi.php b/src/lib/fpdf-easytable/font/courierbi.php
new file mode 100755
index 0000000..6a3ecc6
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courierbi.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-BoldOblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/courieri.php b/src/lib/fpdf-easytable/font/courieri.php
new file mode 100755
index 0000000..b88e098
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/courieri.php
@@ -0,0 +1,10 @@
+<?php
+$type = 'Core';
+$name = 'Courier-Oblique';
+$up = -100;
+$ut = 50;
+for($i=0;$i<=255;$i++)
+	$cw[chr($i)] = 600;
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helvetica.php b/src/lib/fpdf-easytable/font/helvetica.php
new file mode 100755
index 0000000..2be3eca
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helvetica.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helveticab.php b/src/lib/fpdf-easytable/font/helveticab.php
new file mode 100755
index 0000000..c88394c
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helveticab.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helveticabi.php b/src/lib/fpdf-easytable/font/helveticabi.php
new file mode 100755
index 0000000..bcea807
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helveticabi.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-BoldOblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
+	'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
+	'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
+	chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/helveticai.php b/src/lib/fpdf-easytable/font/helveticai.php
new file mode 100755
index 0000000..a328b04
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/helveticai.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Helvetica-Oblique';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
+	chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
+	','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
+	'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
+	'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
+	chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
+	chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
+	chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/symbol.php b/src/lib/fpdf-easytable/font/symbol.php
new file mode 100755
index 0000000..5b9147b
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/symbol.php
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'Symbol';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
+	','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
+	'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
+	'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
+	chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
+	chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
+	chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
+	chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
+	chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
+$uv = array(32=>160,33=>33,34=>8704,35=>35,36=>8707,37=>array(37,2),39=>8715,40=>array(40,2),42=>8727,43=>array(43,2),45=>8722,46=>array(46,18),64=>8773,65=>array(913,2),67=>935,68=>array(916,2),70=>934,71=>915,72=>919,73=>921,74=>977,75=>array(922,4),79=>array(927,2),81=>920,82=>929,83=>array(931,3),86=>962,87=>937,88=>926,89=>936,90=>918,91=>91,92=>8756,93=>93,94=>8869,95=>95,96=>63717,97=>array(945,2),99=>967,100=>array(948,2),102=>966,103=>947,104=>951,105=>953,106=>981,107=>array(954,4),111=>array(959,2),113=>952,114=>961,115=>array(963,3),118=>982,119=>969,120=>958,121=>968,122=>950,123=>array(123,3),126=>8764,160=>8364,161=>978,162=>8242,163=>8804,164=>8725,165=>8734,166=>402,167=>9827,168=>9830,169=>9829,170=>9824,171=>8596,172=>array(8592,4),176=>array(176,2),178=>8243,179=>8805,180=>215,181=>8733,182=>8706,183=>8226,184=>247,185=>array(8800,2),187=>8776,188=>8230,189=>array(63718,2),191=>8629,192=>8501,193=>8465,194=>8476,195=>8472,196=>8855,197=>8853,198=>8709,199=>array(8745,2),201=>8835,202=>8839,203=>8836,204=>8834,205=>8838,206=>array(8712,2),208=>8736,209=>8711,210=>63194,211=>63193,212=>63195,213=>8719,214=>8730,215=>8901,216=>172,217=>array(8743,2),219=>8660,220=>array(8656,4),224=>9674,225=>9001,226=>array(63720,3),229=>8721,230=>array(63723,10),241=>9002,242=>8747,243=>8992,244=>63733,245=>8993,246=>array(63734,9));
+?>
diff --git a/src/lib/fpdf-easytable/font/times.php b/src/lib/fpdf-easytable/font/times.php
new file mode 100755
index 0000000..f78850f
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/times.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Roman';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
+	'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+	chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/timesb.php b/src/lib/fpdf-easytable/font/timesb.php
new file mode 100755
index 0000000..0516750
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/timesb.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Bold';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
+	'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
+	'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
+	'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
+	chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/timesbi.php b/src/lib/fpdf-easytable/font/timesbi.php
new file mode 100755
index 0000000..32fe25e
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/timesbi.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-BoldItalic';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
+	'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
+	'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
+	'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
+	chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
+	chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
+	chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/timesi.php b/src/lib/fpdf-easytable/font/timesi.php
new file mode 100755
index 0000000..b0e5a62
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/timesi.php
@@ -0,0 +1,21 @@
+<?php
+$type = 'Core';
+$name = 'Times-Italic';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
+	chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
+	','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
+	'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
+	'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
+	'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
+	chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
+	chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
+	chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
+	chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
+	chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
+	chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
+$enc = 'cp1252';
+$uv = array(0=>array(0,128),128=>8364,130=>8218,131=>402,132=>8222,133=>8230,134=>array(8224,2),136=>710,137=>8240,138=>352,139=>8249,140=>338,142=>381,145=>array(8216,2),147=>array(8220,2),149=>8226,150=>array(8211,2),152=>732,153=>8482,154=>353,155=>8250,156=>339,158=>382,159=>376,160=>array(160,96));
+?>
diff --git a/src/lib/fpdf-easytable/font/zapfdingbats.php b/src/lib/fpdf-easytable/font/zapfdingbats.php
new file mode 100755
index 0000000..b9d0309
--- /dev/null
+++ b/src/lib/fpdf-easytable/font/zapfdingbats.php
@@ -0,0 +1,20 @@
+<?php
+$type = 'Core';
+$name = 'ZapfDingbats';
+$up = -100;
+$ut = 50;
+$cw = array(
+	chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
+	chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
+	','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
+	'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
+	'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
+	'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
+	chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
+	chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
+	chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
+	chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
+	chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
+	chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
+$uv = array(32=>32,33=>array(9985,4),37=>9742,38=>array(9990,4),42=>9755,43=>9758,44=>array(9996,28),72=>9733,73=>array(10025,35),108=>9679,109=>10061,110=>9632,111=>array(10063,4),115=>9650,116=>9660,117=>9670,118=>10070,119=>9687,120=>array(10072,7),128=>array(10088,14),161=>array(10081,7),168=>9827,169=>9830,170=>9829,171=>9824,172=>array(9312,10),182=>array(10102,31),213=>8594,214=>array(8596,2),216=>array(10136,24),241=>array(10161,14));
+?>
diff --git a/src/lib/fpdf-easytable/formatedstring.php b/src/lib/fpdf-easytable/formatedstring.php
new file mode 100644
index 0000000..682842d
--- /dev/null
+++ b/src/lib/fpdf-easytable/formatedstring.php
@@ -0,0 +1,209 @@
+<?php
+ /**********************************************************************
+ * formateString                                                       *
+ *                                                                     *
+ * Version: 1.2                                                        *
+ * Date:    04-10-2017                                                 *
+ * Author:  Dan Machado                                                *
+ * Use within exfpdf class                                             *
+ **********************************************************************/
+ class formatedString{
+    public $parced_str;
+    public $style_map;
+    public $positions;
+    private $np;
+    public $iterator;
+    public $width;
+    public $lines;
+    public $linesmap;
+    public $used_fonts;
+
+    private function get_style($str){
+       $style=array('font-family'=>false, 'font-weight'=>false, 'font-style'=>false,
+       'font-size'=>false, 'font-color'=>false, 'href'=>'');
+       $tmp=explode(';', trim($str, '",\', '));
+       foreach($tmp as $x){
+          if($x && strpos($x,':')>0){
+             $r=explode(':',$x);
+             $r[0]=trim($r[0]);
+             $r[1]=trim($r[1]);
+             if(isset($style[$r[0]]) || $r[0]=='style'){
+                if($r[0]=='style' || $r[0]=='font-style'){
+                   $r[1]=strtoupper($r[1]);
+                   if(strpos($r[1], 'B')!==false){
+                      $style['font-weight']='B';
+                  }
+                  if(strpos($r[1], 'I')!==false){
+                     $style['font-style']='I';
+                  }
+                  if(strpos($r[1], 'U')!==false){
+                     $style['font-style'].='U';
+                  }
+               }
+               elseif($r[1]){
+                  if($r[0]=='href'){
+                     $style[$r[0]]=implode(':', array_slice($r,1));
+                  }
+                  else{
+                     $style[$r[0]]=$r[1];
+                  }
+               }
+            }
+         }
+      }
+      return $style;
+   }
+    
+
+   private function style_merge($style1, $style2){
+      $result=$style1;
+      foreach($style2 as $k=>$v){
+         if($v){
+            $result[$k]=$v;
+         }
+      }
+      return $result;
+   }
+
+   private function style_parcer($text, &$font_data){
+      $str=trim(strtr($text, array("\r"=>'', "\t"=>'')));
+      $rep=array('[bB]{1}'=>'B', '[iI]{1}'=>'I', '[iI]{1}[ ]*[bB]{1}'=>'BI', '[bB]{1}[ ]*[iI]{1}'=>'BI' );
+      foreach($rep as $a=>$v){
+         $str=preg_replace('/<[ ]*'.$a.'[ ]*>/', "<$v>", $str);
+         $str=preg_replace('/<[ ]*\/+[ ]*'.$a.'[ ]*>/', "</$v>", $str);
+      }
+      $str=preg_replace('/<BI>/', '<s "font-weight:B;font-style:I">', $str);
+      $str=preg_replace('/<\/BI>/', "</s>", $str);
+      $str=preg_replace('/<B>/', '<s "font-weight:B;">', $str);
+      $str=preg_replace('/<\/B>/', "</s>", $str);
+      $str=preg_replace('/<I>/', '<s "font-style:I;">', $str);
+      $str=preg_replace('/<\/I>/', "</s>", $str);
+      $open=array();
+      $total=array();
+      $lt="<s";
+      $rt="</s>";
+      $j=strpos($str, $lt, 0);
+      while($j!==false){
+            if($j>0 && ord($str[$j-1])==92){
+            $j=strpos($str, $lt, $j+1);
+            continue;
+         }
+         $k=strpos($str, '>',$j+1);
+         $open[$j]=substr($str, $j+2, $k-($j+2));
+         $total[]=$j;
+         $j=strpos($str, $lt, $j+1);
+      }
+      $j=strpos($str, $rt, 0);
+      while($j!==false){
+         $total[]=$j;
+         $j=strpos($str, $rt, $j+1);
+      }
+      sort($total);
+      
+      $cs='';
+      foreach($font_data as $k=>$v){
+         $cs.=$k . ':'. $v . '; ';
+      }
+      $cs=$this->get_style($cs);
+      $tmp=array($cs);
+      $blocks=array();
+      $blockstyle=array();
+      $n=count($total);
+      $k=0;
+      for($i=0; $i<$n; $i++){
+         $blocks[]=substr($str, $k, $total[$i]-$k);
+         $blockstyle[]=$cs;
+         if(isset($open[$total[$i]])){
+            $cs=$this->style_merge($cs, $this->get_style($open[$total[$i]]));
+            array_push($tmp, $cs);
+            $k=strpos($str, '>',$total[$i]+1)+1;
+         }
+         else{
+            $k=$total[$i]+4;
+            array_pop($tmp);
+            $l=count($tmp)-1;
+            $cs=$tmp[$l];
+         }
+      }
+      if($k<strlen($str)){
+         $blocks[]=substr($str, $k);
+         $blockstyle[]=$cs;
+      }
+      $n=count($blocks);
+      for($i=0; $i<$n; $i++){
+         $this->parced_str.=strtr($blocks[$i], array('\<s'=>'<s'));
+         if(strlen($blocks[$i])>0){
+            $blockstyle[$i]['style']=$blockstyle[$i]['font-weight'] . $blockstyle[$i]['font-style'];
+            unset($blockstyle[$i]['font-weight']);
+            unset($blockstyle[$i]['font-style']);
+            $this->style_map[strlen($this->parced_str)-1]=$blockstyle[$i];
+         }
+      }
+   }
+
+   public function __construct($text, $width, &$font_data){
+      $this->iterator=0;
+      $this->parced_str='';
+      $this->style_map=array();
+      $this->style_parcer($text, $font_data);
+      $this->positions=array_keys($this->style_map);
+      $this->np=(bool)count($this->positions);
+      $this->width=$width;
+      $this->lines=array('');
+      $this->linesmap[0]=array(0, 0, 0);
+      $this->used_fonts=array();
+   }
+
+   public function get_str(){
+      return $this->parced_str;
+   }
+
+   public function get_current_style($i){
+      if(!$this->np){
+         return '';
+      }
+      while($this->positions[$this->iterator]<$i){
+         $this->iterator++;
+      }
+      return $this->style_map[$this->positions[$this->iterator]];
+   }
+   
+
+      public function break_by_style($t){
+      $i=$this->linesmap[$t][0];
+      $j=$this->linesmap[$t][1];
+      $this->iterator=0;
+      $result=array('chunks'=>array(), 'style'=>array(), 'height'=>0, 'width'=>$this->linesmap[$t][2]);
+      if(strlen($this->parced_str)==0){
+         return $result;
+      }
+      $cs=$this->get_current_style($i);
+      $result['height']=$cs['font-size'];
+      $r=0;
+      $result['chunks'][$r]='';
+      $result['style'][$r]=$cs;
+      while($this->parced_str[$j]==' '){
+         $j--;
+      }
+      $tmp=$i;
+         for($k=$i; $k<=$j; $k++){
+         if($this->parced_str[$tmp]==' ' && $this->parced_str[$k]==' '){
+            $tmp=$k;
+            continue;
+         }
+            if($cs!=$this->get_current_style($k)) {
+            $r++;
+            $cs=$this->get_current_style($k);
+            $result['chunks'][$r]='';
+            $result['style'][$r]=$cs;
+            if($result['height']<$cs['font-size']){
+               $result['height']=$cs['font-size'];
+            }
+         }
+         $result['chunks'][$r].=$this->parced_str[$k];
+         $tmp=$k;
+      }
+      return $result;
+   }
+}
+?>
